Util = {

    /**
	 * Constante que indica que o pad é papra esquerda
	 * @var string
	 */
	PAD_LEFT: 'left',

	/**
	 * Constante que indica que o pad é para a direita
	 * @var string
	 */
	PAD_RIGHT: 'right',

	/**
	 * Insere valores a esquerda ou a direta da string passada
	 *
	 * @param string str String que receberá o pad
	 * @param integer size Tamanho total da string com o pad
	 * @param string pad String que irá preencher
	 * @param string side Lado do pad
	 */
	pad: function( str, size, pad, side ){

		var append = "";
		var size = ( size - str.length );
		var pad = pad || " ";
		var side = side || this.PAD_RIGHT;

		while( ( size -= pad.length ) > 0 ){
			append += pad;
		}

		append += pad.substr( 0, ( size + pad.length ) );

		return( ( side == this.PAD_LEFT ) ? append.concat( str ) : str.concat( append ) );

	},

    /**
     * Formata um numero no formato monetário brasileiro
     *
     * @param string|interger vl Valor a ser formatado
     * @param integer dl Tamanho da casa decimal
     * @param string ds Separador decimal
     * @param string ts Separador milhar
     */
    format: function( vl, dl, ds, ts ){

        vl = new Number( vl );

        var n = new String( vl ).split( /\./ );

        var dl = dl || 2;
        var ds = ds || ',';
        var ts = ts || '.';

        var integer = '';
        var decimal = '';

        if ( dl > 0 ) {
            n[1] = ( typeof n[1] != "undefined" ? n[1].substr( 0, dl ) : '' );
            decimal = ds.concat( this.pad( n[1], dl, '0', this.PAD_RIGHT ) );
        }

        n[0] = n[0].replace( /\./gi, '' );

        var i_len = n[0].length;
        var i = 0;

        while( i_len > 0 ){

            if ( ( ++i % 3 == 1 ) && ( i_len != n[0].length ) ){
                integer = ts.concat( integer );
            }

            integer = n[0].substr( --i_len, 1 ).concat( integer );

        }

        return integer + decimal;

    },

    mascara: function( objForm, strField, sMask, evtKeyPress ){

        var i, nCount, sValue, fldLen, mskLen, bolMask, sCod, nTecla;

        nTecla = (evtKeyPress.which) ? evtKeyPress.which : evtKeyPress.keyCode;

        sValue = objForm[strField].value;

        if( nTecla != 8 ){

            // Limpa todos os caracteres de formatacao que já estiverem no campo.
            expressao = /[\.\/\-\(\)\,\;\: ]/gi;
            sValue = sValue.toString().replace( expressao, '' );
            
            fldLen = sValue.length;
            
            mskLen = sMask.length;

            i = 0;
            nCount = 0;
            sCod = "";
            mskLen = fldLen;

            while( i <= mskLen ){

                bolMask = ( ( sMask.charAt( i ) == "-" ) || ( sMask.charAt( i ) == "." ) || ( sMask.charAt( i ) == "/" ) || ( sMask.charAt( i ) == "," ) || ( sMask.charAt( i ) == ";" ) || ( sMask.charAt( i ) == ":" ) );
                bolMask = bolMask || ( ( sMask.charAt( i ) == "(" ) || ( sMask.charAt( i ) == ")" ) || ( sMask.charAt( i ) == " " ) )

                if( bolMask ){
                    sCod += sMask.charAt( i );
                    mskLen++;
                }
                else{
                    sCod += sValue.charAt( nCount );
                    nCount++;
                }

                i++;
                
            }

            objForm[strField].value = sCod;

            // backspace | enter | tab
            if( nTecla != 8 && nTecla != 13 && nTecla != 9 ){

                // Apenas números
                if( sMask.charAt( i - 1 ) == "9" ){
                    return ( ( nTecla > 47 ) && ( nTecla < 58 ) );
                }
                else{ // numeros de 0 a 9
                    if( sMask.charAt( i - 1 ) == "x" ){ // apenas letras... Sem espaco
                        return ( ( nTecla > 64 ) && ( nTecla < 123 ) );
                    } // maiusculas e minusculas de A a z sem acentos
                    else
                    { // qualquer caracter...
                        return true;
                    }
                }
            }
            else{
                return true;
            }
        }
    }
}

