// JavaScript Document

var mensagem   = "";
var validacao  = true;
var campo_foco = "";
var msgVetor;


/**  
 * @method isEmpty(obj) 
 * @param  obj data
 * @return bool
 * @desc 
 */
function isEmpty(obj)
{
	if(obj.value.length  == 0 || obj.value == null || obj.value == '')
		return true;	
	
	return false;
}


/**  
 * @method isInt(obj)
 * @param  int x
 * @return bool
 * @desc 
 */
function isInt(obj) 
{
	var x = obj.value;
	var y = parseInt(x);
   	
	if(isNaN(y)) 
		return false;
   	
	return x == y && x.toString() == y.toString();
} 



function isEqual(valor1, valor2)
{
	return (valor1 == valor2);
}
 

/**  
 * @method verificaData(data) 
 * @param  obj data
 * @return bool
 * @desc: regra
 * 		  1- "As datas so iguais"
 * 		  2- "Data 1 maior que data 2"
 * 		  3- "Data 2 maior que data 1"
 */
function verificaData(dt1, dt2, regra)
{
	// dt1 e dt2: Devem ser tipo String, para evitar confusao de tipos
    if(typeof dt1 != "string" || typeof dt2 != "string"){
    	mensagem += "As datas devem ser passadas como strings";
        return false;
    }
 	
    // Instanciamos as datas, para poder usar getTime();
    data1 = new Date(dt1);
    data2 = new Date(dt2);
    
	if(!data1 || !data2){
    	mensagem += "Erro ao criar objetos";
        return false;
    }
 	
    // milliSegundos1: ir conter a quantidade de segundos corridos desde 1/1/1970 0h ate dt1
    milliSegundos1 = data1.getTime();
    // milliSegundos2: ir conter a quantidade de segundos corridos desde 1/1/1970 0h ate dt2
    milliSegundos2 = data2.getTime();
 	
    // Comparando millisegundos para retornar a concluso de quem  maior que quem...
    if(regra == 1 && milliSegundos1 == milliSegundos2){
    	mensagem += "As datas so iguais";
        return true;
    } 
	
	if(regra == 2 && milliSegundos1 > milliSegundos2){
     	mensagem += "Data 1 maior que data 2";
    	return true;
    } 
	
	if(regra == 3 && milliSegundos1 < milliSegundos2){
      	mensagem += "Data 2 maior que data 1";
    	return true;
    } 
	 
	return false;
}


/**  
 * @method verificaData(data) 
 * @param  obj data
 * @return bool
 * @desc:   
 */
function verificaData(data) 
{ 
	dia = data.value.substring(0,2); 
    mes = data.value.substring(3,5); 
    ano = data.value.substring(6,10) ; 

    situacao = true;
	
    // verifica o dia valido para cada mes 
     if((dia < '01')||(dia < '01' || dia > '30') && (  mes == '04' || mes == '06' || mes == '09' || mes == '11' ) || dia > '31')  
     	situacao = false; 

     // verifica se o mes e valido 
     if(mes < '01' || mes > '12' ) 
         situacao = false; 
    
     // verifica se e ano bissexto 
     if(mes == '2' && ( dia < '01' || dia > '29' || ( dia > '28' && (parseInt(ano / '4') != ano / '4')))) 
     	situacao = false; 
    
     if(data.value == "") 
     	situacao = false; 
        
     return situacao;
} 


/**  
 * @method validaCNPJ(CNPJ) 
 * @param  CNPJ
 * @return bool
 * @desc:   
 */
function validaCNPJ(CNPJ) 
{
	console.log(CNPJ);
	if (CNPJ.length < 18) {
		return false;
	}
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
		return false;
	}
	//substituir os caracteres que nao sao numeros
	if(document.layers && parseInt(navigator.appVersion) == 4){
	x = CNPJ.substring(0,2);
	x += CNPJ.substring(3,6);
	x += CNPJ.substring(7,10);
	x += CNPJ.substring(11,15);
	x += CNPJ.substring(16,18);
	CNPJ = x;
	} else {
	CNPJ = CNPJ.replace(".","");
	CNPJ = CNPJ.replace(".","");
	CNPJ = CNPJ.replace("-","");
	CNPJ = CNPJ.replace("/","");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)){
		return false;
	}
	var a = [];
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++){
	a[i] = CNPJ.charAt(i);
	b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
	b = 0;
	for (y=0; y<13; y++) {
	b += (a[y] * c[y]);
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
		return false;
	
	}
	
	
	return true;
}





/**  
 * @method validaCNPJ(objNode) 
 * @param  objNode
 * @return bool
 * @desc:   
 */
function validaCPF(objNode)	
{
	cpf = objNode.value;	
	cpf = cpf.replace(".","");
	cpf = cpf.replace(".","");
	cpf = cpf.replace("-","");
	cpf = cpf.replace("/","");
	
	var i;
	var c = cpf.substr(0,9);
	var dv = cpf.substr(9,2);
	var d1 = 0;
	
	if (cpf == '11111111111')
		return false;
	if (cpf == '22222222222')
		return false;
	if (cpf == '33333333333')
		return false;
	if (cpf == '44444444444')
		return false;
	if (cpf == '55555555555')
		return false;
	if (cpf == '66666666666')
		return false;
	if (cpf == '77777777777')
		return false;
	if (cpf == '88888888888')
		return false;
	if (cpf == '99999999999')
		return false;
	if (cpf == '00000000000')
		return false;
	if (cpf == '01234567890')
		return false;
		
	
	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;
}

/**  
 * @method checkMail(mail) 
 * @param  obj mail
 * @return bool
 * @desc:   
 */
function checkMail(obj)
{
	var er = new RegExp(/^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/);
    
	if(typeof(obj) == "string"){
        if(er.test(obj)){ 
			return true; 
		}
    }
	
	else if(typeof(obj) == "object"){
        if(er.test(obj.value)){
        	return true;
        }
    }
	
	else{
    	return false;
    }
}

	
	

/**  
 * @method checkTextArea(textarea) 
 * @param  obj textarea
 * @return bool
 * @desc:   
 */
function checkTextArea(textarea) 
{
	var max_=80;
	if (textarea.value.length > max_) {
		alert(textarea.title);
		return false;
	}
	else {
		return true;
	}	
}




function setMensagemCampo(msg, campoId, msgVetor)
{
	if(!msgVetor)
		mensagem += msg + '\n';
	else 
		mensagem.push(campoId + ":" + msg);
						
	if(campo_foco == '')
		campo_foco = campoId;
					
	validacao = false;
}


// Prototipo para validao


function marcarCampoOK(campoId)
{
	//alert('Campo OK : ' + campoId);
}


/*
	Atributo lang
1 - required string 
2 - required numbers
3 - required e-mail
4 - valida data 
*/
function validateCampo(campo, msgVetor)
{
	/**
	 * Regra para formar vetor de mensagens
	 */
	if(msgVetor == '') {
		msgVetor = false;
	}
	else {
		msgVetor = true;	
		mensagem =  new Array();
	}
	
	
	var caseValidate = campo.lang;
		
	if(caseValidate != '')
	{	
		switch(caseValidate)
		{
			// 1 - required string
			case "1" :		
				if(isEmpty(campo)) {
					setMensagemCampo(campo.title, campo.id, msgVetor);
					printMsg(mensagem);
				}
				else  {
					marcarCampoOK(campo.id);
				}
			break;
			
			// 2 - required numbers
			case "2" :		
				if(isEmpty(campo) || isInt(campo) ) {
					setMensagemCampo(campo.title, campo.id, msgVetor);
					printMsg(mensagem);
				}
				else {
					marcarCampoOK(campo.id);	
				}
			break;
				
			// 3 - required e-mail
			case "3": 
				if(isEmpty(campo) || !checkMail(campo) ) {
					setMensagemCampo(campo.title, campo.id, msgVetor);	
					printMsg(mensagem);
				}
				else {
					marcarCampoOK(campo.id);
				}
			break;
			
			
			// 5 - validate CPF
			case "5": 
				if(isEmpty(campo) || campo.value == '___.___.___-__' || !validaCPF(campo) ) {
					setMensagemCampo(campo.title, campo.id, msgVetor);	
					printMsg(mensagem);
				}
				else {
					marcarCampoOK(campo.id);
				}
			break;
		
			// 6 - validate Date
			case "6": 
				if(isEmpty(campo) || !verificaData(campo) ) {
					setMensagemCampo(campo.title, campo.id, msgVetor);	
					printMsg(mensagem);
				}
				else {
					marcarCampoOK(campo.id);
				}
			break;
			
			
			// 7 - validate CNPJ
			case "7": 
				if(isEmpty(campo) || campo.value == '__.___.___/____-__' || !validaCNPJ(campo) ) {
					setMensagemCampo(campo.title, campo.id, msgVetor);	
					printMsg(mensagem);
				}
				else {
					marcarCampoOK(campo.id);
				}
			break;
			
			
			default: 
				marcarCampoOK(campo.id);
			break;
		}
	} 
	
	
	
}




/*
	Atributo lang
1 - required string 
2 - required numbers
3 - required e-mail
4 - valida data 
*/
function validateForm(form, msgVetor)
{
	campos  = form.length;
	
	/**
	 * Regra para formar vetor de mensagens
	 */
	if(msgVetor == '') {
		msgVetor = false;
	}
	else {
		mensagem =  new Array();
	}
	
	
	
	for(i = 0; i < campos; i++)
	{
		var caseValidate = form[i].lang;
		
		if(caseValidate != '')
		{
			campo = form[i];
			
			switch(caseValidate)
			{
				// 1 - required string
				case "1" :		
					if(isEmpty(campo)) {
						setMensagemCampo(campo.title, campo.id, msgVetor);
					}
					else  {
						marcarCampoOK(campo.id);
					}
				break;
				
				// 2 - required numbers
				case "2" :		
					if(isEmpty(campo) || isInt(campo) ) {
						setMensagemCampo(campo.title, campo.id, msgVetor);	
					}
					else {
						marcarCampoOK(campo.id);	
					}
				break;
					
				// 3 - required e-mail
				case "3": 
					if(isEmpty(campo) || !checkMail(campo) ) {
						setMensagemCampo(campo.title, campo.id, msgVetor);		
					}
					else {
						marcarCampoOK(campo.id);
					}
				break;
				
				// 4 - equal string (generic)
				case "4":
					if( isEmpty(campo) || isEqual(campo, form[i-1]) )
						setMensagemCampo(campo.title, campo.id, msgVetor);	
				break;
				
				
				// 5 - validate CPF
				case "5": 
					if(isEmpty(campo) || campo.value == '___.___.___-__' || !validaCPF(campo) ) {
						setMensagemCampo(campo.title, campo.id, msgVetor);		
					}
					else {
						marcarCampoOK(campo.id);
					}
				break;
				
				
				// 6 - validate Date
				case "6": 
					if(isEmpty(campo) || !verificaData(campo) ) {
						setMensagemCampo(campo.title, campo.id, msgVetor);	
					}
					else {
						marcarCampoOK(campo.id);
					}
				break;
				
				// 7 - validate CNPJ
				case "7": 
					if(isEmpty(campo) || campo.value == '__.___.___/____-__' || !validaCNPJ(campo) ) {
						setMensagemCampo(campo.title, campo.id, msgVetor);	
						printMsg(mensagem);
					}
					else {
						marcarCampoOK(campo.id);
					}
				break;
			
				
				default: 
					marcarCampoOK(campo.id);
				break;
			}
		}
	} 
	
}
	

/**  
 * @method printMsg(msg)
 * @param  string msg
 * @return void
 * @desc:   
 */
function printMsg(msg)
{
	alert('Erros : \n' + msg);
}



/**  
 * @method retornoValidacao()
 * @param  void
 * @return void
 * @desc:   
 */
function retornoValidacao()
{
	if(!validacao)
	{
		printMsg(mensagem);
		mensagem = ''; // apagar var mensagem
		$E(campo_foco).focus();
		
		return false;
	}
	
	return true;
}



/**  
 * @method validate(form)
 * @param  void
 * @return void
 * @desc   funo customizada, reescreva-la se necessrio   
 */
function validate(form)
{
	
	validateForm(form);
	
	/********** Funes customizadas para validacao **********/
	//checkNum();
	/********** Funes customizadas para validacao **********/
	
	retornoValidacao();
	
	return validacao;
}