//Valida Formularios
function validateForm($name_form, $array_validator){

	$array_validate_response = execValidateForm($name_form, $array_validator);
	
	if($array_validate_response['validForm']==true){
		
		return true;
		
	} else {
		
		if($array_validate_response['alertContent']==''){ 
			alert('Favor preecher corretamente o formulário');
		} else {
			if($array_validate_response['alertCount']==1){
				alert($array_validate_response['alertContent']);
			} else {
				alert('Favor preecher corretamente o formulário');
			}
		}
	
		return false;
		
	}
	
}


//Valida Campos
function validateField($form, $field, $array_validator){
	
	//global vars
	var $notNumber = /\D/;
	var $validForm = true;
	var $alert_content = '';
	var $cnt_alert = 0;

	$array_validator_field = new Array();
	
	for ($cnt = 0; $cnt < $array_validator.length; $cnt++) {
		
		// set vars
		$component = $array_validator[$cnt].split(',');
		$name = $component[0];
		$min_length = $component[1];
		$type = $component[2];
		$element =	$($form+' [name='+$name+']');
		
		if($field==$name){
			$array_validator_field[0] = $array_validator[$cnt];
			break;
		}
		
	}

	$array_validate_response = execValidateForm($form, $array_validator_field);
	
}

//Seta Validacao de Campos no FormulÃ¡rio
function setValidatorFields($form, $array_validator){

	//valida campos no mouseout
	$($form+' input[type=text], '+$form+' input[type=password], '+$form+' textarea, '+$form+' select').bind('blur', function(){
		validateField($form, this.name, $array_validator);
	});
	//valida select no onchange
	$($form+' select, '+$form+' checkbox ').bind('change', function(){
		validateField($form, this.name, $array_validator);
	});
	
	//remove fail ao entrar no elemento
	$($form+' input[type=text], '+$form+' input[type=password], '+$form+' textarea, '+$form+' select, '+$form+' textarea').bind('focus', function(){
		$(this).removeAttr('class');
	});
	
	$($form).submit(function() {
		return validateForm($form, $array_validator);
	});	
}

//Excuta Validacao de Campos do Formulario
function execValidateForm($form, $array_validator){
	
	//global vars
	var $notNumber = /\D/;
	var $validForm = true;
	var $alert_content = '';
	var $cnt_alert=0;

	
	for ($cnt=0; $cnt<$array_validator.length; $cnt++){ 

		//set vars
		$component=$array_validator[$cnt].split(',');
		$name=$component[0];
		$min_length=$component[1];
		$type=$component[2];
		$element =	$($form+' [name="'+$name+'"]');
		
		
		if($element[0]==undefined){
			$value = 'undefined';
			if($type!='defined'){
				alert('Campo "'+$name+'" não Encontrado');
				return false;
			} 
		} else {
			$value = $element[0].value;
		}
		
		//set defaul borders for inputs
		if($value!='undefined'){
			$element[0].className = '';
		}
		
		if($type=='password') {
			$element_conf = $($form+' [name='+$name+'_conf]');
			$element_conf[0].className = '';
		}
		
		if($type=='equals') {
			$element_conf = $($form+' [name='+$name+'_conf]');
			$element_conf[0].className = '';
		}
		
		if($type=='checkbox' || $type=='checkbox_multiple' || $type=='radio' || $type=='defined' || $type=='ckeditor') {
			$element_resp = $($form+' #'+$name.replace("[]", "")+'_resp');
			$element_resp[0].className = '';
		}

		
		switch($type){
		
		case 'text':

			if( $value.length < $min_length){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;
				$cnt_alert++;

			} 			
		
		break;
		
		
		
		case 'numeric':

			if( $value.length < $min_length){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;	
				$cnt_alert++;

			}

			if($notNumber.test( $value )==true){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;
		
		case 'combo':

			if($value==$min_length){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;
		
		case 'select':

			if($value==$min_length){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;
		
		case 'cpf':
			
			if(validateCPF($value)==false){
				
				$element[0].className = '';
				$element[0].className = 'input_fail';
				$alert_content = 'Favor preencher corretamente seu CPF';
				$validForm=false;
				$cnt_alert++;

			}
			
		break;
		
		case 'cnpj':		

			if(validateCNPJ($value)==false){
				
				$element[0].className = '';
				$element[0].className = 'input_fail';
				$alert_content = 'Favor preencher corretamente seu CNPJ';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;
		
		
		case 'date':

			$date=$value.split('/');

			if( ($date[0]<1 || $date[0]>31) || ($date[1]<1 || $date[1]>12) || ($date[2]<1900 || $date[2]>2050) ){

				$element[0].className = '';
				$element[0].className = 'input_fail';
				$validForm=false;	
				$cnt_alert++;

			}
		
		break;
		
		case 'email':			

			if(validateEmail($value)==false){
				$element[0].className = '';
				$element[0].className = 'input_fail';
				$alert_content = 'Favor preencher corretamente seu email';
				$validForm=false;
				$cnt_alert++;
			}
		
		break;
		
		
		case 'password':			

			if($element[0].value!=$element_conf[0].value ){
				
				$element[0].className = '';
				$element[0] = 'input_fail';
				$element_conf[0].className = '';
				$element_conf[0].className = 'input_fail';			
				$alert_content = 'As senhas não coincidem. Favor digitar novamente.';
				$validForm=false;
				$cnt_alert++;

			} else if($element[0].value.length < $min_length){
			
				$element[0].className = '';
				$element[0].className = 'input_fail';
				$element_conf[0].className = '';
				$element_conf[0].className = 'input_fail';			
				$alert_content = 'A Senha devem conter ao menos '+$min_length +' caracteres';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;
		
		case 'equals':			

			if($element[0].value!=$element_conf[0].value ){
				
				$element[0].className = '';
				$element[0] = 'input_fail';
				$element_conf[0].className = '';
				$element_conf[0].className = 'input_fail';			
				$alert_content = 'Os Campos não coincidem. Favor digitar novamente.';
				$validForm=false;
				$cnt_alert++;

			} else if($element[0].value.length < $min_length){
			
				$element[0].className = '';
				$element[0].className = 'input_fail';
				$element_conf[0].className = '';
				$element_conf[0].className = 'input_fail';
				$alert_content = '';
				$validForm=false;
				$cnt_alert++;

			}
		
		break;		
		
		case 'checkbox':			
			if($element[0].checked!=true){
				
				$element_resp[0].className = '';
				$element_resp[0].className = 'input_fail';
				$alert_content = '';
				$validForm=false;
				$cnt_alert++;
			}
		
		break;
		
		case 'checkbox_multiple':
			
			checkbox = $element;

			$validate_checkbox=false;
			
			for(i=0; i<checkbox.length; i++){
				if(checkbox[i].checked){
					$validate_checkbox=true;
				}
			}
			
			if($validate_checkbox==false){
				$element_resp[0].className = '';
				$element_resp[0].className = 'input_fail';
				$alert_content = '';
				$validForm=false;
				$cnt_alert++;
			}
			
		break;
		
		case 'radio':
			
			radio = $($form+' [name='+$name+']');
			$validate_radio=false;
			for(i=0; i<radio.length; i++){
				if(radio[i].checked){
					$validate_radio=true;
				}
			}
			
			if($validate_radio==false){
				$element_resp[0].className = '';
				$element_resp[0].className = 'input_fail';
				$alert_content = '';
				$validForm=false;
				$cnt_alert++;
			}
			
		break;
		
		case 'defined':
			if($value=='undefined'){
				$element_resp[0].className = '';
				$element_resp[0].className = 'input_fail';
				$alert_content = '';
				$validForm=false;
				$cnt_alert++;
			}
		break;
	
		case 'ckeditor':
			
			if( $value.length < $min_length){

				$element_resp[0].className = '';
				$element_resp[0].className = 'input_fail';
				$validForm=false;
				$cnt_alert++;

			} 
			
		break;

		default:
			alert('Tipo de Validação Não Definido');
		}
	
	}


	
	$array_validate_response = new Array();
	$array_validate_response['validForm'] = $validForm;
	$array_validate_response['alertCount'] = $cnt_alert;
	$array_validate_response['alertContent'] = $alert_content;
	
	return $array_validate_response; 
	
}

//Valida CNPJ
function validateCNPJ(CNPJ){

	var retorno = true;

	erro = new String;
	
	if (CNPJ.length < 18) erro += "É necessario preencher corretamente o número do CNPJ! "; 
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
		if (erro.length == 0) erro += "É necessário preencher corretamente o número do CNPJ! ";
	}

	//substituir os caracteres que nÃ£o sÃ£o nÃºmeros
	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)) erro += "A verificação de CNPJ suporta apenas números! "; 

	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])){
		erro +="DÃ­gito verificador com problema!";
	}

	if (erro.length > 0){
		retorno = false;
	}
    return retorno;				
}

//Valida CPF
function validateCPF(cpf){
	   
	//Limpa pontos e TraÃ¯Â¿Â½os da string
	cpf = cpf.replace(/\./g, ""); 
	cpf = cpf.replace(/\-/g, "");
	cpf = cpf.replace(/\_/g, ""); 
	
	if(cpf.length!=11){ var result = false; };
	   
	pri = eval(cpf.substring(0,3));
	seg = eval(cpf.substring(4,7));
	ter = eval(cpf.substring(8,11));
	qua = eval(cpf.substring(12,14));
	
	var i;
	var numero;
	
	numero = (pri+seg+ter+qua);
	
	c = cpf.substr(0,9);
	
	var dv = cpf.substr(9,2);
	
	var d1 = 0;

	for (i = 0; i < 9; i++){
		d1 += c.charAt(i)*(10-i);
	}

	if (d1 == 0){
		var result = false;
	}
	
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	
	if (dv.charAt(0) != d1){
		var result = 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){
		var result = false;
	}
	
	return result;
}


//Valida Email
function validateEmail(email) {

	var retorno = true;
	
    if (!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))) { 
		retorno = false;
	} 
	return retorno;

}

