/*
'@COMPONENTE_NOME 		"funcoes_validacao.js"
'@COMPONENTE_DESCRICAO 	"Arquivo que contém funções em JavaScript para validar campos de formularios ou elementos html."
'@COMPONENTE_TIPO 		"JavaScript"
'@COMPONENTE_AUTOR 		"Thiago Toledo"
'@COMPONENTE_CRIACAO	31/08/2005
'@COMPONENTE_EMPRESA 	"HTP"
*/

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isDigit"
@METODO_DESCRICAO 		"Valida se o valor do parametro tem só digito(s)"
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		07/09/2005	
@PARAMETRO_NOME 		"theDigit"
@PARAMETRO_DESCRICAO	"String qualquer."
------------------------------------------------------------------------------------------*/  

function isDigit(theDigit){ 
	return ( theDigit.search(/\D/g) == -1 ) ? true: false;
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"enviarForm"
@METODO_DESCRICAO 		"Verifica se o form está com todos os campos validos, 
						se está envia-o"
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"obj"
@PARAMETRO_DESCRICAO	"Form que será validado e enviado."
------------------------------------------------------------------------------------------*/  

function enviarForm(obj)
{
	if(VerifyFields(obj))
	{
		obj.submit();
	}
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isEmail"
@METODO_DESCRICAO 		"Função que valida e-mail."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"emailStr"
@PARAMETRO_DESCRICAO	"E-mail que será validado."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se o e-mail passado é válido ou não."
------------------------------------------------------------------------------------------*/
	
function isEmail(emailStr) {
	var emailfocus = emailStr;
	var emailStr = emailStr.value;
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)

	if (matchArray==null) 
	{
		alert("O e-mail informado é inválido. Verifique a presença de  @ (arroba) e . (ponto).");
		
		emailfocus.focus();
		DadosOK = false;
		return false;
	}

		var user=matchArray[1]
		var domain=matchArray[2]

	if (user.match(userPat)==null) {
		alert("O username do e-mail informado é inválido.");

		emailfocus.focus();
		DadosOK = false;
		return false;
	}

	var IPArray=domain.match(ipDomainPat)

	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("O IP de destino do e-mail informado é inválido.");
			
			emailfocus.focus();
			DadosOK = false;
			return false;
			}
		}
		return true
	}

		var domainArray=domain.match(domainPat)

	if (domainArray==null) {
		alert("O domínio do e-mail informado é inválido.");

		emailfocus.focus();
		DadosOK = false;
		return false;
	}

		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length

	if (domArr[domArr.length-1].length<2 || 
		domArr[domArr.length-1].length>3) {

	alert("O e-mail informado deve terminar em um domínio de 3 letras ou país de 2 letras (com, com.br, net, co.nz...).");

	emailfocus.focus();
	DadosOK = false;
	return false;
	}

	if (len<2) {
	var errStr="O e-mail informado não possui um domínio."
	alert(errStr);

	emailfocus.focus();
	DadosOK = false;
	return false;
	}
	return true;
};	

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"VInt"
@METODO_DESCRICAO 		"Função que válida se a string é número."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"vlr"
@PARAMETRO_DESCRICAO	"String a ser validada."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se o número passado é válido ou não."
------------------------------------------------------------------------------------------*/

function VInt(Inteiro) {
	var checkOK = "-+0123456789";
	var checkCh = 0;
	for(var i=0;i<Inteiro.length;i++) {   
		checkCh = 0;
		for(var j=0;j<checkOK.length;j++) {  
			if(Inteiro.charAt(i)==checkOK.charAt(j) && checkCh==0){
				checkCh = 1;
			}
		}
		if(checkCh == 0){
			return false
		}
	}
	return true
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"valida_DSC_CPF"
@METODO_DESCRICAO 		"Função que válida CPF."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"s"
@PARAMETRO_DESCRICAO	"String que vai ser validada."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' informando se o CPF é válido ou não."
------------------------------------------------------------------------------------------*/

function valida_DSC_CPF(s)    {
    var i;
    s = limpa_string(s);
    var c = s.substr(0,9);
    var dv = s.substr(9,2);
    var d1 = 0;
    for (i = 0; i < 9; i++)
    {
        d1 += c.charAt(i)*(10-i);
    }
	if (d1 == 0) return false;
    
    d1 = 11 - (d1 % 11);
    
    if (d1 > 9) d1 = 0;
    
    if (dv.charAt(0) != d1)
    {
        return false;
    }

    d1 *= 2;
    for (i = 0; i < 9; i++)
    {
        d1 += c.charAt(i)*(11-i);
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(1) != d1)
    {
        return false;
    }
	return true;
}

/*
'@METODO_NOME 			"validaTexto"
'@METODO_DESCRICAO 		"Valida um campo do tipo input text verificando se o mesmo foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		31/03/2005
'@PARAMETRO_NOME 		"text"
'@PARAMETRO_DESCRICAO 	"Objeto input text"
*/
function validaTexto(texto){
	
	if (texto.getAttribute("validate") == true || texto.getAttribute("validate") == "true") {

		if( texto.getAttribute("mandatory") == true || texto.getAttribute("mandatory") == "true" ){
			if(texto.value == '' || texto.value == ' ' || texto.value == '  ' || texto.value.trim() == ''){
				if (texto.codigoMsg){ alerta( texto.getAttribute("codigoMsg") );}
				else{ alertaLabel( objVLDFNC01.replace("%FIELD%", "'" + texto.getAttribute("label") + "'") ); }
				texto.focus();
				return false;
			}
		}
		if(texto.getAttribute("vType") == "int"){
			if( ! VInt( texto.value ) && texto.value != ''){
				if (texto.codigoMsg){ alerta( texto.codigoMsg );}
				else{ "O campo " +texto.getAttribute("label")+" não está preenchido corretamente!" }
				texto.focus();
				return false;
			}			
		}
		if(texto.vType == "email"){
			if( ! IsEmail(texto.value) && texto.value!='' ){
				if (texto.codigoMsg){ alerta( texto.codigoMsg );}
				else{ alertaLabel( objVLDFNC03.replace("%FIELD%", "'" + texto.label + "'") ); }
				texto.focus();
				return false;
			}			
		}
		
		if (texto.getAttribute("vType") == "CPF"){
		    if (! IsCPF(texto.value) && texto.value != '') {
		       	alert("O campo "+texto.getAttribute("label")+" não está preenchido corretamente!");	       
		        texto.focus();
		        return false;
		    }   
		}
		
		if (texto.getAttribute("vType") == "CNPJ"){
		    if (! IsCNPJ(texto.value) && texto.value != '') {
		       	alert("O campo "+texto.getAttribute("label")+" não está preenchido corretamente!");	       
		        texto.focus();
		        return false;
		    }   
		}
	}
	return true;
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"validaNumero"
@METODO_DESCRICAO 		"Função que válida se o caracter digitado é número. Usar no evento onKeyPress."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
------------------------------------------------------------------------------------------*/

function validaNumero(){
	if (event.keyCode > 47 && event.keyCode < 58)
	{
		return(true);
		//return;
	}
	//return event.keyCode = 0;
	return(false);
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isNumero"
@METODO_DESCRICAO 		"Função que válida se o caracter digitado é número. Usar no evento onKeyPress."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"vlr"
@PARAMETRO_DESCRICAO	"Caracter digitado a ser validado."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se o caracter passado é válido ou não."
------------------------------------------------------------------------------------------*/

function isNumero(vlr){
	if ((vlr >= 48 && vlr <= 57) || (vlr >= 96 && vlr <= 105))
		return true;
	else
		return false;
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isSetas"
@METODO_DESCRICAO 		"Função que válida se o caracter digitado é número. Usar no evento onKeyPress."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"vlr"
@PARAMETRO_DESCRICAO	"Caracter digitado a ser validado."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se é 'seta do teclado' ou não."
------------------------------------------------------------------------------------------*/

function isSetas(vlr){
	if ((vlr >= 37 && vlr <= 40))
		return true;
	else
		return false;

}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isComandos"
@METODO_DESCRICAO 		"Função que válida se o caracter digitado é número. Usar no evento onKeyPress."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		10/09/2005	
@PARAMETRO_NOME 		"vlr"
@PARAMETRO_DESCRICAO	"Caracter digitado a ser validado."
@PARAMETRO_NOME 		"vlr"
@PARAMETRO_DESCRICAO	"Caracter a ser validado se é 'teclado de comando' ou não"
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se é 'teclado de comando' ou não."
------------------------------------------------------------------------------------------*/

function isComandos(vlr){
	if (tecla == 8 || tecla == 9 || tecla == 16 || tecla == 35 || tecla == 36 || tecla == 46 || tecla == 27)
		return true;
	else
		return false;
}

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isPositiveInteger"
@METODO_DESCRICAO 		"Função para testar se um determinada string é um número inteiro."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		09/09/2005	
@PARAMETRO_NOME 		"theString"
@PARAMETRO_DESCRICAO	"String que será validada."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se a string passada é um inteiro positovo ou não."
------------------------------------------------------------------------------------------*/

function isPositiveInteger(theString) { 
	var theData = new String(theString) 

	if (!isDigit(theData.charAt(0))) 
		if (!(theData.charAt(0)== '+')) 
			return false 

	for (var i = 1; i < theData.length; i++) 
		if (!isDigit(theData.charAt(i))) 
			return false 
	return true 
} 

/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"isDate"
@METODO_DESCRICAO 		"Função para testar se um determinada string é uma data válida."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		09/09/2005	
@PARAMETRO_NOME 		"s"
@PARAMETRO_DESCRICAO	"Data que será validada."
@PARAMETRO_NOME 		"f"
@PARAMETRO_DESCRICAO	"Em qual formato a data que será validada."
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se a Data passada é válida ou não."
------------------------------------------------------------------------------------------*/

function isDate(s,f) {
	var a1=s.split("/"); 
	var a2=s.split("-"); 
	var e=true; 
	if ((a1.length!=3) && (a2.length!=3)) { 
		e=false; 
	} 
	else{
		if (a1.length==3) 
		var na=a1; 
		if (a2.length==3) 
			var na=a2; 
		if (isPositiveInteger(na[0]) && isPositiveInteger(na[1]) && isPositiveInteger(na[2])) {
			if (f==1){
				var d=na[1],m=na[0]; 
			}
			else{
				var d=na[0],m=na[1]; 
			} 
			var y=na[2]; 
			if (((e) && (y<1000)||y.length>4)) 
				e=false 
			if (e){ 
				v=new Date(m+"/"+d+"/"+y); 
				if (v.getMonth()!=m-1) 
					e=false; 
			} 
		} 
		else{ 
			e = false; 
		} 
	} 
	return e 
} 


/*-----------------------------------------------------------------------------------------
@METODO_NOME 			"checkDate"
@METODO_DESCRICAO 		"Função para testar se um determinada string é uma data válida. 
						Faz parte dessa função a 'isDate' e a 'isInteger'."
@METODO_AUTOR 			"Thiago Toledo"
@METODO_CRIACAO 		09/09/2005	
@PARAMETRO_NOME 		"obj"-
@PARAMETRO_DESCRICAO	"Text da Data que será validada."
@PARAMETRO_NOME 		"allowNull"
@PARAMETRO_DESCRICAO	"Em qual formato a data que será validada. 0 (dd/mm/yyyy), 1 (mm/dd/yyyy)"
@RETORNO_DESCRICAO		"Retorna um 'Boolean' se a Data passada é válida ou não."
------------------------------------------------------------------------------------------*/

function checkDate(obj, allowNull){ 
	var blnReturn = true;
	var s=obj.value;
	
	try
	{
		if (allowNull == 1 && s == ''){
		}else{
			if (isDate(s,0)){ //dd/mm/yyyy format 
			}
			else {
				alerta("10000"); 
				obj.value = '';
				blnReturn = false; 
				obj.focus();
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
} 


/*
'@METODO_NOME 			"VerifyFields"
'@METODO_DESCRICAO 		"Valida os objetos internos a um determinado elemento que é passado como parametro"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"vContainer"
'@PARAMETRO_DESCRICAO 	"Objeto pai dos objetos a serem validados"
*/

function VerifyFields( vContainer ){
	
	var allFields  = new Array([,]);
	var indexArray = 0;

	campos = vContainer.getElementsByTagName('INPUT');
	AddItem(campos, allFields, indexArray );

	indexArray = (campos.length > 0 ? allFields.length : 0);
	selects = vContainer.getElementsByTagName('SELECT');
	AddItem(selects, allFields, indexArray);

	indexArray = (campos.length > 0 || selects.length > 0 ? allFields.length : 0);
	radios = vContainer.getElementsByTagName('RADIO');
	AddItem(radios, allFields, indexArray);

	indexArray = (campos.length > 0 || selects.length > 0 || radios.length ? allFields.length : 0);
	texts = vContainer.getElementsByTagName('TEXTAREA');
	AddItem(texts, allFields, indexArray) ;

	//Ordena o array pelo tabIndex de cada campo
	OrderBidimensionalArray(allFields);

	return ValidateArrayFields(allFields);
}

function CheckLanguage( vContainer ){
	
	var allFields  = new Array([,]);
	var indexArray = 0;

	campos = vContainer.getElementsByTagName('INPUT');
	AddItem(campos, allFields, indexArray )
	
	indexArray = allFields.length;
	selects = vContainer.getElementsByTagName('SELECT');
	AddItem(selects, allFields, indexArray);
	
	indexArray = allFields.length;
	radios = vContainer.getElementsByTagName('RADIO');
	AddItem(radios, allFields, indexArray);

	indexArray = allFields.length;
	texts = vContainer.getElementsByTagName('TEXTAREA');
	AddItem(texts, allFields, indexArray) ;

	//Ordena o array pelo tabIndex de cada campo
	OrderBidimensionalArray(allFields);
		
	CheckLanguageArray(allFields);
}

function CheckLanguageArray(arrayCampos){
	
	for(var indArray = 0; indArray < arrayCampos.length; indArray ++){
		var flag = true;
		var TipoCampo = arrayCampos[indArray][1].tagName;
		if(TipoCampo == 'INPUT'){
			//flag = VerifyInputBox( arrayCampos[indArray][1] );
			
			if(arrayCampos[indArray][1].getAttribute('MultiLingual')=='True')
				arrayCampos[indArray][1].setAttribute('value','BLA');
		}
		/*
		if(TipoCampo == 'SELECT'){
			flag = ValidateSelectBox( arrayCampos[indArray][1] );
		}
		if(TipoCampo == 'RADIO'){
			flag = ValidateRadioButtonList( arrayCampos[indArray][1] );
		}
		if(TipoCampo == 'TEXTAREA'){
			flag = ValidateTextarea( arrayCampos[indArray][1] );
		}
		*/
		
	}
	
}



/*
'@METODO_NOME 			"ValidateArrayFields"
'@METODO_DESCRICAO 		"Valida os campos contidos no array passado pelo parametro, retorna verdadeiro se todos as funcoes de validacao chamadas retornarem verdadeiro, caso contrario, retorna falso."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"arrayCampos"
'@PARAMETRO_DESCRICAO 	"Array contendo os campos a serem validados"
*/
function ValidateArrayFields(arrayCampos){

	for(var indArray = 0; indArray < arrayCampos.length; indArray ++){
		var flag = true;
		var TipoCampo = arrayCampos[indArray][1].tagName;

		if(TipoCampo == 'INPUT'){
			flag = VerifyInputBox( arrayCampos[indArray][1] );
		}
		if(TipoCampo == 'SELECT'){
			flag = ValidateSelectBox( arrayCampos[indArray][1] );
		}
		if(TipoCampo == 'RADIO'){
			flag = ValidateRadioButtonList( arrayCampos[indArray][1] );
		}
		if(TipoCampo == 'TEXTAREA'){
			flag = ValidateTextarea( arrayCampos[indArray][1] );
		}
		if(! flag )
			return false;
	}
	return true;
}

/*
'@METODO_NOME 			"AddItem"
'@METODO_DESCRICAO 		"Adiciona os objetos filhos de um elemento em um array unico"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"objItem"
'@PARAMETRO_DESCRICAO 	"Objeto pai, contendo os objetos filhos"
'@PARAMETRO_NOME 		"aItens"
'@PARAMETRO_DESCRICAO 	"Array ao qual os objetos serão adicionados"
'@PARAMETRO_NOME 		"indiceArray"
'@PARAMETRO_DESCRICAO 	"Posicao inicial do array"
*/
function AddItem(objItem, aItems, indiceArray){
	countFields = objItem.length;
	try{
		for(i = 0; i < countFields; i++){
			var Field = new Array();
			try{
				Field[1] = objItem[i];
				try{
					if( objItem[i].getAttribute("tabIndex") == 'undefined' || objItem[i].getAttribute("tabIndex") == '0')
						objItem[i].getAttribute("tabIndex") = 9999;
					Field[0] = objItem[i].getAttribute("tabIndex");
				}catch(e){
					Field[0] = 9999;
				}
			}
			catch(e){
				alert(e);
			}
			aItems[indiceArray] = Field;
			indiceArray ++;
		}
	}
	catch(e){
		alert(e.message);
		return false;
	}
}

/*
'@METODO_NOME 			"ValidateTextarea"
'@METODO_DESCRICAO 		"Valida um campo do tipo textarea verificando se o mesmo foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"vTextArea"
'@PARAMETRO_DESCRICAO 	"Objeto textarea"
*/
function ValidateTextarea(vTextArea){
	var blnReturn = true;
	try
	{
		if( vTextArea.validate == true || vTextArea.validate == "true" ){
			if( vTextArea.innerText == '' ){
				if (vTextArea.codigoMsg){ alerta( vTextArea.codigoMsg );}
				else{ alertaLabel("O campo '" + vTextArea.label + "' é obrigatório!"); }
				blnReturn = false;
				vTextArea.focus();
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
}

/*
'@METODO_NOME 			"ValidateTextBox"
'@METODO_DESCRICAO 		"Valida um campo do tipo input text verificando se o mesmo foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"text"
'@PARAMETRO_DESCRICAO 	"Objeto input text"
*/
function ValidateTextBox(texto){
	var blnReturn = true;
	try
	{
		if (texto.getAttribute("validate") == true || texto.getAttribute("validate") == "true") {

			if( texto.getAttribute("mandatory") == true || texto.getAttribute("mandatory") == "true" ){
				if(texto.value == '' || texto.value == ' ' || texto.value == '  ' || texto.value.trim() == ''){
					if (texto.codigoMsg){ alerta( texto.getAttribute("codigoMsg") );}
					else{ alertaLabel("O campo '" + texto.getAttribute("label") + "' é obrigatório." ); }
					blnReturn = false;
					texto.focus();
				}
			}
			if(texto.getAttribute("vType") == "int"){
				if( ! VInt( texto.value ) && texto.value != ''){
					if (texto.codigoMsg){ alerta( texto.codigoMsg );}
					else{ alertaLabel("O campo '" + texto.label + "' deve ser um número inteiro."); }
					blnReturn = false;
					texto.focus();
				}			
			}
			if(texto.vType == "email"){
				if( ! IsEmail(texto.value) && texto.value!='' ){
					if (texto.codigoMsg){ alerta( texto.codigoMsg );}
					else{ alertaLabel("O formato do campo '" + texto.label + "' foi informado incorretamente." ); }
					blnReturn = false;
					texto.focus();
				}			
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
}

/*
'@METODO_NOME 			"ValidateFileBox"
'@METODO_DESCRICAO 		"Valida um campo do tipo input file verificando se o mesmo foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"arquivo"
'@PARAMETRO_DESCRICAO 	"Objeto input file"
*/
function ValidateFileBox(arquivo){
	try
	{
		if(arquivo.validate == true || arquivo.validate == "true"){
			if(! arquivo.tipo){
				if(arquivo.value == ''){
					if (arquivo.codigoMsg){ alerta( arquivo.codigoMsg );}
					else{ alertaLabel( arquivo.label ); }
					arquivo.select();
					return false;
				}
			}
		}
	}
	catch(e)
	{
	}
	return true;
}

/*
'@METODO_NOME 			"ValidateRadioButton"
'@METODO_DESCRICAO 		"Valida um campo do tipo input radio verificando se o mesmo foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"radio"
'@PARAMETRO_DESCRICAO 	"Objeto input radio"
*/

function ValidateRadioButton(radio){
	var blnReturn = true;
	try
	{
		if(radio.validate == true || radio.validate == "true"){
			var colRadios = document.getElementsByName( radio.name );
			var flagRadio = true;
			for(var indValidaRadio = 0; indValidaRadio < colRadios.length; indValidaRadio ++){
				if( colRadios[indValidaRadio].checked ){
					flagRadio = false;
				}
			}
			if( flagRadio ){
				if (radio.codigoMsg){ alerta( radio.codigoMsg );}
				else{ alertaLabel( radio.label ); }
				blnReturn = false;
				radio.focus();
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
}

/*
'@METODO_NOME 			"ValidateRadioButtonList"
'@METODO_DESCRICAO 		"Valida campos do tipo input radio verificando se ao menos um item foi preenchido."
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"radio"
'@PARAMETRO_DESCRICAO 	"Coleçao de objetos input radio"
*/
function ValidateRadioButtonList(radio){
	var blnReturn = true;
	try
	{
		if (radio.validate == true || radio.validate == "true"){
			for(i=0;i<radio.length;i++){
				if (! isChecked(radio.name)){
					if (radio.codigoMsg){ alerta( radio.codigoMsg );}
					else{ alertaLabel( radio.label ); }
					blnReturn = false;
				}
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
}

/*
'@METODO_NOME 			"ValidateCheckBox"
'@METODO_DESCRICAO 		"Valida campos do tipo input checkbox verificando se o checkbox foi selecionado"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"check"
'@PARAMETRO_DESCRICAO 	"Objeto input checkbox"
*/
function ValidateCheckBox(check){
	try
	{
		if(check.validate == true || check.validate == "true"){
			if(! check.checked){
				if (check.codigoMsg){ alerta( check.codigoMsg );}
				else{ alertaLabel( check.label ); }
				return false
			}
		}
	}
	catch(e)
	{
	}
	return true;	
}

/*
'@METODO_NOME 			"VerifyInputBox"
'@METODO_DESCRICAO 		"Valida campos do tipo input"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"vInput"
'@PARAMETRO_DESCRICAO 	"Objeto input"
*/

function VerifyInputBox( vInput ){
	
	switch(vInput.getAttribute("type") ){
		case "text":
			return ValidateTextBox( vInput );
		case "file":
			return ValidateFileBox( vInput );
		case "radio":
			return ValidateRadioButton( vInput );
		case "checkbox":
			return ValidateCheckBox( vInput );
		case "password":
			return ValidateTextBox( vInput );
		default:
			return true;
	}
}

/*
'@METODO_NOME 			"ValidateSelectBox"
'@METODO_DESCRICAO 		"Valida campos do tipo select"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"vCombo"
'@PARAMETRO_DESCRICAO 	"Objeto select"
*/

function ValidateSelectBox(vCombo){
	var blnReturn = true;
	try
	{
		if(vCombo.getAttribute("validate") == true || vCombo.getAttribute("validate") == "true"){
			if(! vCombo.getAttribute("vType") ){
				if ( vCombo.selectedIndex<=0 ){ 
					if (vCombo.getAttribute("codigoMsg")){ alerta( vCombo.getAttribute("codigoMsg") );}
					else{ alertaLabel("A seleção de um(a) '" + vCombo.getAttribute("label") + "' é obrigatório(a)." ); }
					blnReturn =  false;
					vCombo.focus();
				}
			}else{
				if( vCombo.getAttribute("vType") == 'list' && vCombo.length <= 0){
					if (vCombo.getAttribute("codigoMsg")){ alerta( vCombo.getAttribute("codigoMsg") );}
					else{ alertaLabel( vCombo.getAttribute("label") ); }
					blnReturn =  false;
					vCombo.focus();
				}
			}
		}
	}
	catch(e)
	{
	}
	return blnReturn;
}

/*
'@METODO_NOME 			"OrderBidimensionalArray"
'@METODO_DESCRICAO 		"Ordena um array passado por parametro"
'@METODO_AUTOR 			"Thiago Toledo"
'@METODO_CRIACAO 		30/09/2005
'@PARAMETRO_NOME 		"allFields"
'@PARAMETRO_DESCRICAO 	"array a ser ordenado"
*/

function OrderBidimensionalArray(allFields){
	tamArray = allFields.length
	for(i = 0; i < tamArray - 1; i++){
		for(j = i + 1; j < tamArray; j++){
			if(allFields[j][0] < allFields[i][0]){
				aux = allFields[j];
				allFields[j] = allFields[i];
				allFields[i] = aux;
			}
		}
	}
	return allFields;
}

function dateDiff(intervalo, sdata2, sdata1) {
	var d2 = getDia(sdata2);
	var m2 = getMes(sdata2);
	var y2 = getAno(sdata2);
	var d1 = getDia(sdata1);
	var m1 = getMes(sdata1);
	var y1 = getAno(sdata1);

	var dataAno2 = new Date(y2,0,1);
	var dataAno1 = new Date(y1,0,1);
	var dataMes2 = new Date(y2,m2-1,1);
	var dataMes1 = new Date(y1,m1-1,1);

	var nDiasMes = (dataMes2 - dataMes1)/(1000 * 60 * 60 * 24)
	var nDiasAno = (dataAno2 - dataAno1)/(1000 * 60 * 60 * 24)

	var data2 = new Date(y2,m2-1,d2);
	var data1 = new Date(y1,m1-1,d1);
	
	if (intervalo == 'd'){
		return ((data2 - data1)/(1000 * 60 * 60 * 24));
	}
	else if (intervalo == 'm'){
		return ((data2 - data1)/(1000 * 60 * 60 * 24 * nDiasMes));
	}
	else if (intervalo == 'y'){
		return ((data2 - data1)/(1000 * 60 * 60 * 24 * nDiasAno ));
	}
	else{
		alert('Erro: Função DateDiff aceita como intervalo somente --> \"d\", \"m\" ou \"y\"');
		return;
	}
	return strData;
}

function getDia(strData) {
	var dia = 0;
	arr = strData.split('/');
	dia = parseInt(arr[0],10);
	return dia;
}

function getMes(strData) {
	var mes = 0;
	arr = strData.split('/');
	mes = parseInt(arr[1],10);
	return mes;
}

function getAno(strData) {
	var ano = 0;
	arr = strData.split('/');
	ano = parseInt(arr[2],10);
	return ano;
}

/*####################################################################################################
##############																						########################
##############			INICIO FUNCIONALIDADE QUE APLICA MÁSCARA NO CAMPO			########################
##############																						########################
####################################################################################################*/
// Javascript Numeric EditMask
// Written By John McGlothlin - Patoooey@optonline.net
// April 7th, 2004
//
// simple RegEx patterns to make life easy.

var reOneOrMoreDigits = /[\d+]/;
var reNoDigits = /[^\d]/gi;

function doMask(textBox) {
	var keyCode = event.which ? event.which : event.keyCode;
	// enter, backspace, delete and tab keys are allowed thru
	if(keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46)
		return true;
	// get character from keyCode....dealing with the "Numeric KeyPad" 
	// keyCodes so that it can be used
	var keyCharacter = cleanKeyCode(keyCode);
	// grab the textBox value and the mask
	var val = textBox.value;
	var mask = textBox.mask;
	// simple Regex to check if key is a digit
	if(reOneOrMoreDigits.test(keyCharacter) == false)
		return false;
	// get value minus any masking by removing all non-numerics
	val = val.replace(reNoDigits,'');			
	// add current keystroke
	val += keyCharacter;
	// mask it...val holds the existing TextBox.value + the current keystroke
	textBox.value = val.maskValue(mask);
	setCaretAtEnd(textBox);
	return false;
}

// puts starting chars in field

function onFocusMask(textBox) {
	var val = textBox.value;
	var mask = textBox.mask;
	if(val.length == 0 || val == null) {
		var i = mask.indexOf('#');
		textBox.value = mask.substring(0,i);
	}
	setCaretAtEnd(textBox);
	// set just in case.
	textBox.maxlength = mask.length;
}

// blank field if no digits entered
function onBlurMask(textBox) {
	var val = textBox.value;
	// if no digits....nada entered.....blank it.
	if(reOneOrMoreDigits.test(val) == false) {
		textBox.value = '';
	}
}

String.prototype.maskValue = function(mask) {
	var retVal = mask;
	var val = this;
	//loop thru mask and replace #'s with current value one at a time
	// better way of doing this ???
	for(var i=0;i<val.length;i++) {
		retVal = retVal.replace(/#/i, val.charAt(i));
	}

	// get rid of rest of #'s
	retVal = retVal.replace(/#/gi, "");
	return retVal;
}

// The Numeric KeyPad returns keyCodes that ain't all that workable.
//
// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'.
//
// This cheesy way allows the Numeric KeyPad to be used
function cleanKeyCode(key)
{
	switch(key)
	{
		case 96: return "0"; break;
		case 97: return "1"; break;
		case 98: return "2"; break;
		case 99: return "3"; break;
		case 100: return "4"; break;
		case 101: return "5"; break;
		case 102: return "6"; break;
		case 103: return "7"; break;
		case 104: return "8"; break;
		case 105: return "9"; break;
		default: return String.fromCharCode(key); break;
	}
}

// From:
// http://www.faqts.com/knowledge_base/view.phtml/aid/1159/fid/130
function setCaretAtEnd (field) {
	if (field.createTextRange) {
		var r = field.createTextRange();
		r.moveStart('character', field.value.length);
		r.collapse();
		r.select();
	}
}		
/*####################################################################################################
##############																						########################
##############			FIM FUNCIONALIDADE QUE APLICA MÁSCARA NO CAMPO				########################
##############																						########################
####################################################################################################*/
