// -------------------------------------------------------------------------- \\
// Mask
MaskInput = function ( f, m ) {
	function mask ( e ) {
		var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
			rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
		function accept(c, rule){
			for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
				if(r & i && patterns[i].test(c))
					break;
				return i <= r || c == rule;
		}
		var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
		(!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
			r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
			: (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
			r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
	}
	for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
		addEvent(f, i, mask);
};
// -------------------------------------------------------------------------- \\
// Manipulação de eventos
addEvent = function(o, e, f, s){
	var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
	r[r.length] = [f, s || o], o[e] = function(e){
		try{
			(e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
			e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
			e.target || (e.target = e.srcElement || null);
			e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
		}catch(f){}
		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
		return e = null, !!d;
    }
};
removeEvent = function(o, e, f, s){
	for(var i = (e = o["_on" + e] || []).length; i;)
		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
			return delete e[i];
	return false;
};
// -------------------------------------------------------------------------- \\
// Retira espaços nas extremidades de uma String
function Trim ( strTexto ) {
	if ( strTexto.length < 1 ) {
		return ( "" );
	}
	strTexto = RTrim( strTexto );
	strTexto = LTrim( strTexto );
	return ( strTexto );
}
//
function RTrim ( strTexto ) {
	var w_space = String.fromCharCode( 32 );
	var v_length = strTexto.length;
	var strTemp = "";
	if ( v_length < 0 ) {
		return ("");
	}
	var iTemp = v_length -1;
	while ( iTemp > -1 ) {
		if ( strTexto.charAt( iTemp ) != w_space ) {
			strTemp = strTexto.substring( 0, iTemp + 1 );
			break;
		}
		iTemp = iTemp-1;
	}
	return ( strTemp );
}
//
function LTrim ( strTexto ) {
	var w_space = String.fromCharCode( 32 );
	if ( v_length < 1 ) {
		return ( "" );
	}
	var v_length = strTexto.length;
	var strTemp = "";
	var iTemp = 0;
	while ( iTemp < v_length ) {
		if ( strTexto.charAt( iTemp ) != w_space ) {
			strTemp = strTexto.substring( iTemp, v_length );
			break;
		}
		iTemp = iTemp + 1;
	}
	return ( strTemp );
}
// -------------------------------------------------------------------------- \\
// Formata strings de nomes
function formataNome ( iCampo ) {
	var strNome	= Trim ( iCampo.value );
	if ( strNome != "" ) {
		var arrPartes = new Array();
		arrPartes = strNome.split( " " );
		for ( var i = 0; i < arrPartes.length; i++ ) {
			if ( arrPartes[ i ].length > 2 ) {
				arrPartes[ i ] = arrPartes[ i ].substr( 0, 1 ).toUpperCase() + arrPartes[ i ].substr( 1, arrPartes[ i ].length - 1 ).toLowerCase();
			} else {
				if ( arrPartes[ i ].length == 2 && arrPartes[ i ].substr( 1, 1 ) == "." ) {
					arrPartes[ i ] = arrPartes[ i ].toUpperCase();
				} else {
					arrPartes[ i ] = arrPartes[ i ].toLowerCase();
				}
			}
		}
		arrPartes[ arrPartes.length - 1 ] = ( arrPartes[ arrPartes.length - 1 ].length == 1 ? arrPartes[ arrPartes.length - 1 ].toUpperCase() + "." : arrPartes[ arrPartes.length - 1 ] );
		iCampo.value = arrPartes.join( " " );
	}
}
// -------------------------------------------------------------------------- \\
// Formata strings de nomes
function formataEmail ( iCampo ) {
	iCampo.value = iCampo.value.toLowerCase();
}
// -------------------------------------------------------------------------- \\
// Valida E-Mail
function isEmail ( iCampo, iNomeCampo ) {
	var str = iCampo.value;
	var r1  = new RegExp( "(@.*@)|(\\.\\.)|(@\\.)|(^\\.)" );
	var r2  = new RegExp( "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$" );
	if ( ( !r1.test( str ) && r2.test( str ) ) ) {
		return ( true );
	} else {
		iCampo.focus();
		alert( iNomeCampo + " inválido(a)!" );
		return ( false );
	}
}
// -------------------------------------------------------------------------- \\
// Testa se existe algum dado no campo
function isVasio ( iCampo, iNomeCampo ) {
	iCampo.value = Trim( iCampo.value );
	if ( iCampo.value == '' ) {
		iCampo.focus();
		alert( iNomeCampo + " inválido!" );
		return ( true );
	} else {
		return ( false );
	}
}
// -------------------------------------------------------------------------- \\
// Campara os falores de dois campos
function isIgual ( iCampo1, iCampo2, iNomeCampo1, iNomeCampo2 ) {
	iCampo1.value = Trim( iCampo1.value );
	iCampo2.value = Trim( iCampo2.value );
	//
	if ( iCampo1.value != iCampo2.value ) {
		iCampo1.focus();
		alert( 'O campo ' + iNomeCampo1 + ' não é igual ao campo ' + iNomeCampo2 );
		return ( false );
	}
	return ( true );
}
// -------------------------------------------------------------------------- \\
//
function isInteiro ( iCampo ) {
	iCampo = Trim( iCampo );
    for ( var i = 0; i < iCampo.length; i++ ) {   
        var c = iCampo.charAt( i );
        if ( ( ( c < "0" ) || ( c > "9" ) ) ) {
			return ( false );
		}
    }
    return ( true );
}
// -------------------------------------------------------------------------- \\
// Verifica se existe só numeros no campo
function isNumerico ( iCampo, iNomeCampo ) {
	iCampo.value = Trim( iCampo.value )
	var CaractereInvalido = false;
	if ( !( isInteiro( iCampo.value ) ) ) {
		CaractereInvalido = true;
	}
	for (var i = 0; i < iCampo.value.length; i++ ) {
		var Caractere = iCampo.value.charAt( i );
		if ( Caractere != "." && Caractere != "," && Caractere != "-" ) {
         	if ( isNaN( parseInt( Caractere ) ) ) CaractereInvalido = true;
		}
	}
	if ( !CaractereInvalido == true ) {
		return ( true );
   	} else {
		iCampo.focus();
		alert( iNomeCampo + ' deve conter apenas números.' );
		return ( false );
	}
}
// -------------------------------------------------------------------------- \\
// Verifica se um checkbox está checked
function isChecado ( iCampo, iNomeCampo ) {
	if ( iCampo.checked == true ) {
		return ( false );
	} else {
		alert( 'Marque o campo ' + iNomeCampo + '.' );
		return ( true );
	}
}
// -------------------------------------------------------------------------- \\
// Verifica se um radio está checked
function isChecado_radio ( objCampo, strNome ) {
	var booChecado = false;
	var intCount   = 0;
	while ( intCount < objCampo.length && !( booChecado = objCampo[ intCount++ ].checked ) );
	if ( !booChecado ) {
		 alert( "Marque o campo " + strNome );
	}
	return ( booChecado );
}
// -------------------------------------------------------------------------- \\
// Todos os caracteres devem ser diferêntes
function EhIgual ( campo ) { 
	var i = 0
	var j = 1
	var igual = true;
	// Todos os caracteres devem ser diferentes
	while ( i < campo.length-1 && igual == true ) {
		while ( j < campo.length && igual == true ) {
			if ( campo.charAt( i ) != campo.charAt( j ) ) {
				igual = false;
			} else {
				j++;
			}
		}
		i++;
	}
	return ( igual );
}
// -------------------------------------------------------------------------- \\
// Verifica se o valor digitado é um CPF
function isCpf ( iCampo, iNomeCampo ) {
	iCampo.value = Trim( iCampo.value )
	var iCpf;
	iCpf = iCampo.value;
	invalidChars = " /:,;-..";
	for ( var i = 0 ; i < invalidChars.length; i++ ) {
		badChar = invalidChars.charAt( i );
		iCpf = iCpf.replace( badChar, "" );
	}
	if ( EhIgual( iCpf ) == true ) {
		iCampo.focus();
		alert( iNomeCampo + ' é inválido.' );
		return (  false );
	}
	x=0;
	soma=0;
	dig1=0;
	dig2=0;
	texto="";
	iCampo1="";
	len = iCpf.length;
	x = len -1;
	for (var i=0; i <= len - 3; i++ ) {
		y = iCpf.substring(i,i+1); 
		soma = soma + ( y * x);
		x = x - 1; 
		texto = texto + y;
	}
	dig1 = 11 - (soma % 11);
	if (dig1 == 10) dig1=0 ; 
	if (dig1 == 11) dig1=0 ;
	iCampo1 = iCpf.substring(0,len - 2) + dig1 ;
	x = 11;
	soma=0;
	for (var i=0; i <= len - 2; i++) {
		soma = soma + (iCampo1.substring(i,i+1) * x); 
		x = x - 1;
	}
	dig2= 11 - (soma % 11);
	if (dig2 == 10) dig2=0; 
	if (dig2 == 11) dig2=0;
	if ((dig1 + "" + dig2) == iCpf.substring(len,len-2)) {
		iCampo.value = iCpf;
		return true;
	}
	iCampo.focus();
	alert(iNomeCampo + ' é inválido.');
	return false; 
}
// -------------------------------------------------------------------------- \\