﻿//VALIDAÇÃO DE PREENCHIMENTO FORMULÁRIO COMUM

function validaPreenchimento(campos, msgAviso, msgDefault, tipos){   
    jaAvisou = false;
    if(typeof(getElem(campos))=="object"){//se conseguir pegar o elemento é porque só foi passado 1 campo.
        if(getElem(campos).value==msgDefault){//e a msg é default
            avisaUsuario(msgAviso,true);
            return false;
        }
    }
 
    var retorno = true;
    var arrCampos = campos.split('|');
    var object;
    campos="";

    for (var i=0; i<=arrCampos.length -1; i++)  {
	    object = getElem(arrCampos[i]); 
	    
        if(object)
	        if(!nullOrEmpty(object.type)){   
		        switch(object.type){
			        case "text":
				        if(nullOrEmpty(object.value)){  
					        if(!nullOrEmpty(campos)) campos+="|";
						        campos+=arrCampos[i];
						        retorno = false;
				        }break;
    				
			        case "password":
				        if(nullOrEmpty(object.value)){  
					        if(!nullOrEmpty(campos)) campos+="|";
						        campos+=arrCampos[i];
						        retorno = false;
    					  
				        }break;
    				
			        case "select-one":
				        if ((nullOrEmpty(object.value))||(object.value=="*")) {  
					        if(!nullOrEmpty(campos)) campos+="|";
						        campos+=arrCampos[i];
						        retorno = false; 
				        }break;
    					
			        case "textarea":
				        if(nullOrEmpty(object.value)){
					        if(!nullOrEmpty(campos)) campos+="|";
						        campos+=arrCampos[i];
						        retorno = false;   
				        }break;
    				
		        }
	        }
	        else {
		        object = getElem(arrCampos[i] + '_0');

		        if(object.type=='radio'){
			        var a = 0;
			        var validouRadio=false;
			        while(typeof(object)=="object"){
				        object = getElem(arrCampos[i]+ '_' + a);
					        if(object.checked){
						        validouRadio = true;
						        break;
					        }
    						
				        a=a+1;
			        }
    				
			        if(!validouRadio){
				        if(!nullOrEmpty(campos)) campos+="|";
					        campos+=arrCampos[i];
					        retorno = false;
			        }

		        }
     
	        }
		
    }
    if(!retorno) {
		avisaPreenchimentoObrigatorio(campos,msgAviso);
		if(tipos){
		    validaPreenchimentoCorreto(arrCampos,"",tipos);
		    return false;
		}
		return false;
    }
    else{
        if(tipos)
            return validaPreenchimentoCorreto(arrCampos,msgAviso,tipos);
        else 
            return true;
    }
    //else mudacor(object,'#F7F7F7');
}

function validaPreenchimentoCorreto(campos,msgAviso,tipos){
    tipos = tipos.split("|");
    var elem;
    var strCampos='';
    for (var i=0;i<=tipos.length-1;i++){
        elem = getElem(campos[i]);
        if(typeof(elem)=="object"){
            switch(tipos[i]){
                case "nome":
		            if(elem.value.indexOf(" ")==-1)
		                strCampos+=campos[i]+"|";
		            else
			            if(elem.value.indexOf(" ")+1>=elem.value.length)
			                strCampos+=campos[i]+"|";
                    break;
                case "email":
                    if(elem.value.indexOf("@")==-1)
                        strCampos+=campos[i]+"|";
			        else
			            if(elem.value.lastIndexOf("@") != elem.value.indexOf("@"))
			                strCampos+=campos[i]+"|";
			            else
			                if(elem.value.indexOf(",")>-1 || elem.value.indexOf(")")>-1 || elem.value.indexOf("(")>-1 || 
		                    elem.value.indexOf("*")>-1 || elem.value.indexOf("&")>-1 || elem.value.indexOf("¨")>-1 || elem.value.indexOf("%")>-1 || 
		                    elem.value.indexOf("$")>-1 || elem.value.indexOf("#")>-1 || elem.value.indexOf("!")>-1 || elem.value.indexOf("'")>-1 ||
		                    /*elem.value.indexOf("-")>-1 ||*/ elem.value.indexOf("+")>-1 || elem.value.indexOf("+")>-1 || elem.value.indexOf("/")>-1 || 
		                    elem.value.indexOf("\\")>-1 || elem.value.indexOf("?")>-1 || elem.value.indexOf(";")>-1 || elem.value.indexOf("º")>-1 ||
		                    elem.value.indexOf(":")>-1)
		                        strCampos+=campos[i]+"|";
			                else
				                if(elem.value.indexOf(".")==-1)
				                    strCampos+=campos[i]+"|";
				                else
					                if(!elem.value.indexOf(".") > elem.value.indexOf("@"))
					                    strCampos+=campos[i]+"|";
					                else
						                if(elem.value.indexOf(".")+1>=elem.value.length)
						                    strCampos+=campos[i]+"|";
                    break;
                case "cpf":
                    if(!Verifica_CPF(elem))
                        strCampos+=campos[i]+"|";
                    break;
                case "numerocartao":
                    var elemAux = getElem("UcFormaPagamento1_rblCartoes");
                    var cartaoValido=true;
                    if (!validaNumeroCartao(elem.value, parseInt(getSelectedValue(elemAux)))){//cartão selecionado
                        if(!validaNumeroCartao(elem.value, 1)){ //visa
                            if (!validaNumeroCartao(elem.value, 2)){ //mastercard
                                if (!validaNumeroCartao(elem.value, 12)){ //diners
                                    cartaoValido = false;
                                }
                                else
                                    selecionaCartao(12,elemAux,elem);
                            }
                            else
                                selecionaCartao(2,elemAux,elem);
                        }
                        else 
                            selecionaCartao(1,elemAux,elem);
                    }
			        
    				
			        if(!cartaoValido)
			            strCampos+=campos[i]+"|";
			        break;
			    case "senha":
			        if(elem.value.length<8||elem.value.length>10){
			            strCampos+=campos[i]+"|";
			            getElem("spSenhaIncompleta").style.display="block";
			        }
			        break;
            }
        }
    }
    if(strCampos!=""){
        avisaPreenchimentoObrigatorio(strCampos, msgAviso);
        return false;
    }
    return true;
}

function validaPreenchimento_blur(campo,tipo,elemAux){
    campo = getElem(campo);
    elemAux = getElem(elemAux);
    var retorno;
	switch(tipo){
	    case "nome":{
			if(campo.value != "")
			    if(campo.value.indexOf(" ")==-1)
				    retorno = false;
			    else
				    if(campo.value.indexOf(" ")+1>=campo.value.length)
					    retorno = false;
				    else
					    retorno = true;
			else
			    retorno = true;
			break;
		}   
		case "email":{
			if(campo.value != ""){
			    if(campo.value.indexOf("@")==-1)
				    retorno = false;
			    else
			        if(campo.value.lastIndexOf("@") != campo.value.indexOf("@"))
			            retorno = false;
			        else
			            if(campo.value.indexOf(",")>-1 || campo.value.indexOf(")")>-1 || campo.value.indexOf("(")>-1 || 
		                campo.value.indexOf("*")>-1 || campo.value.indexOf("&")>-1 || campo.value.indexOf("¨")>-1 || campo.value.indexOf("%")>-1 || 
		                campo.value.indexOf("$")>-1 || campo.value.indexOf("#")>-1 || campo.value.indexOf("!")>-1 || campo.value.indexOf("'")>-1 ||
		                /*campo.value.indexOf("-")>-1 ||*/ campo.value.indexOf("+")>-1 || campo.value.indexOf("+")>-1 || campo.value.indexOf("/")>-1 || 
		                campo.value.indexOf("\\")>-1 || campo.value.indexOf("?")>-1 || campo.value.indexOf(";")>-1 || campo.value.indexOf("º")>-1 ||
		                campo.value.indexOf(":")>-1)
			                retorno = false;
			            else
				            if(campo.value.indexOf(".")==-1)
					            retorno = false;
				            else
					            if(!campo.value.indexOf(".") > campo.value.indexOf("@"))
						             retorno = false;
					            else
						            if(campo.value.indexOf(".")+1>=campo.value.length)
							             retorno = false;
						            else
							             retorno = true;
			}
			else
				 retorno = true;
			break;
		}
		case "cpf":{
			if(campo.value != "" &&  !Verifica_CPF(campo))
				retorno = false;
			else
				retorno = true;
			break;
		}
		case "numerocartao":{
		    var cartaoValido=validaNumeroCartao(campo.value, parseInt(getSelectedValue(elemAux)));
            
			/*if(!cartaoValido){
				cartaoValido = validaNumeroCartao(campo.value, 0); //mastercard
				
				if(!cartaoValido){
					cartaoValido = validaNumeroCartao(campo.value, 1); //visa
					
					if(!cartaoValido){
						cartaoValido = validaNumeroCartao(campo.value, 2); //amex
						
						if(cartaoValido){
							selecionaCartao(2,elemAux,campo);
							//mudaImagemCartao('amex');
						}
					}
					else{
						selecionaCartao(1,elemAux,campo);
						//mudaImagemCartao('visa');
					}
				}
				else{
					selecionaCartao(0,elemAux,campo);				
					//mudaImagemCartao('mastercard');
				}
			}*/
			
			if(campo.value!="")
			    if(!cartaoValido)
				    retorno = false;
			    else
				    retorno = true;
			else
			    retorno = true;
			break;
		}
	}
  
	if (!retorno){
	    var campoSpan=getElem("sp" + campo.id.substr(campo.id.lastIndexOf("_") + 4));
        if(!typeof(campoSpan)=="object"){
            campoSpan=campo.id.split("_");
            campoSpan=getElem("sp"+campoSpan[campoSpan.length-2].substr(3));
        }
	    destacaCampo(campoSpan);
	}
}

var jaAvisou;
function avisaPreenchimentoObrigatorio(controles, msgAviso){
    var elem = controles.split('|');
    var total = elem.length;
    var indice;
    var objectSpan;
        
    for(var j=0;j<total;j++)    {          
        var object=getElem(elem[j]);
        if(typeof(object)=="object"){
            campoSpan=getElem("sp" + object.id.substr(object.id.lastIndexOf("_") + 4));
            if(typeof(campoSpan)=="object")
                destacaCampo(campoSpan);
            else{
                campoSpan=object.id.split("_");
                campoSpan=getElem("sp"+campoSpan[campoSpan.length-2].substr(3));
                destacaCampo(campoSpan);
            }
        }
    }

    if(!jaAvisou&&msgAviso)
        avisaUsuario(msgAviso, true); //object.focus();
    else
        if (!jaAvisou){
            avisaUsuario("Preencha corretamente os campos para continuar.", true);
        }
    jaAvisou = true;
}

function destacaCampo(elem){
    getElem(elem).className="spCampoInvalido";
}

function mudacorCampo(campos)
{  
    var arrCampos = campos.split('|'); 
    var object;
    var retorno = true;

    for (var i=0; i<=arrCampos.length -1; i++)
    {
        object = getElem(arrCampos[i]);
        if((object.value=="")||(object.value==null)||(object.value=='*')||(object.value==0))
        { 
            object.style.backgroundColor="#ffffe7";
			object.style.lineHeight="5px";
            retorno = false;
        }else
        {   
            object.style.backgroundColor="#ffffff";
			object.style.lineHeight="5px";
            retorno = true;
        }
    }
  
       return retorno;                   
}

///FUNÇÃO OVERRIDE QUE PEGA O ELEMENTO PELO ID
function getElem(elem){
    
    vElem = document.getElementById(elem); //pega o elemento pelo ID.
    
    if(vElem==null)
        vElem = elem; //se o vElem continuar nulo, talvez o usuário tenha passado já o elemento por parametro.
    
    
    return vElem;
}

function nullOrEmpty(value){ 
    return !((value!=null)&&(trim(value)!=""));
}

function limpaValidacao(campo){   
    var telem;
    var elem = getElem(campo);
    telem = getElem("sp" + elem.id.substr(elem.id.lastIndexOf("_") + 4));
    if(typeof(telem)!="object"){
        telem=elem.id.split("_");
        telem=getElem("sp"+telem[telem.length-2].substr(3));
    }
    telem.className = null;
}

function Verifica_CPF(campo) {

var CPF = getElem(campo).value;  

CPF = CPF.replace(".", "");
CPF = CPF.replace("-", "");
CPF = CPF.replace(".", "");

if(CPF.length<11 && CPF.length != 0){
    avisaUsuario("CPF inválido", true);
    return false;
}

// Aqui começa a checagem do CPF
var POSICAO, I, SOMA, DV, DV_INFORMADO;
var DIGITO = new Array(10);
DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado

// Desemembra o número do CPF na array DIGITO
for (I=0; I<=8; I++) {
  DIGITO[I] = CPF.substr(I, 1);
}

// Calcula o valor do 10º dígito da verificação
POSICAO = 10;
SOMA = 0;
   for (I=0; I<=8; I++) {
      SOMA = SOMA + DIGITO[I] * POSICAO;
      POSICAO = POSICAO - 1;
   }
DIGITO[9] = SOMA % 11;
   if (DIGITO[9] < 2) {
        DIGITO[9] = 0;
}
   else{
       DIGITO[9] = 11 - DIGITO[9];
}

// Calcula o valor do 11º dígito da verificação
POSICAO = 11;
SOMA = 0;
   for (I=0; I<=9; I++) {
      SOMA = SOMA + DIGITO[I] * POSICAO;
      POSICAO = POSICAO - 1;
   }
DIGITO[10] = SOMA % 11;
   if (DIGITO[10] < 2) {
        DIGITO[10] = 0;
   }
   else {
        DIGITO[10] = 11 - DIGITO[10];
   }
// Verifica se os valores dos dígitos verificadores conferem
DV = DIGITO[9] * 10 + DIGITO[10];

   if (DV != DV_INFORMADO || CPF == '11111111111' || CPF == '22222222222' || CPF == '33333333333' || CPF == '44444444444' || CPF == '55555555555' || CPF == '66666666666' || CPF == '77777777777' || CPF == '88888888888' || CPF == '99999999999' || CPF == '00000000000') {
      avisaUsuario("CPF inválido",true);
      getElem(campo).value = '';
      getElem(campo).focus();
      return false;
   } 
   
   return true;
}

 function validaEmail(email)
 { 
    var  retorno = true;
    var indice;
    var campoSpan;
    
    email = getElem(email);
    indice = email.id.lastIndexOf("_");
    campoSpan = getElem("sp" + email.id.substr(indice + 4, email.id.length));
    
    retorno = !(nullOrEmpty(email.value) || email.value.indexOf('@')==-1 || email.value.indexOf(".")==-1 || email.value.indexOf(".")+1>=email.value.length);
    
    if(retorno){
        destacaCampo(email);
    }
    else{
        destacaCampo(email);
    }
    
    return retorno;
    
}

function validaNumeroCartao(numCartao, tipoCartao){
    var ehValido = false;
    var ccCheckRegExp = /[^\d ]/;
    ehValido = !ccCheckRegExp.test(numCartao);
    if (ehValido){
        var cardNumbersOnly = numCartao.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;
		switch(tipoCartao){
		    case 0: //amex
				lengthIsValid = (cardNumberLength == 15);
				prefixRegExp = /^3(4|7)/;
			break;
			case 1: //visa
				lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
				prefixRegExp = /^4/;
			break;
			case 2: //mastercard
				lengthIsValid = (cardNumberLength == 16);
				prefixRegExp = /^5[1-5]/;
			break;
			case 12: //diners
			    lengthIsValid = (cardNumberLength == 14);
			    prefixRegExp = /^$/;
			break;
			case 13: //aura
			    return true;
			    //lengthIsValid = (cardNumberLength == 16);
			    //prefixRegExp = /^$/;
			break;
			case 14: //hipercard
			    return true;
			    //lengthIsValid = (cardNumberLength == 14);
			    //prefixRegExp = /^$/;
			break;
			default:
				prefixRegExp = /^$/;
				//alert("Card type not found");
		}
    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    ehValido = prefixIsValid && lengthIsValid;
    }
    if (ehValido){
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;
        for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--){
            checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
            digitCounter--;
            numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
            for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++){
                checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
            }
        }
        ehValido = (checkSumTotal % 10 == 0);
    }
	if(tipoCartao==12/*diners*/) return lengthIsValid;
	return ehValido;
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function validaDataPeloDia(ddlMes, ddlDia){
    ddlDia = getElem(ddlDia);
    ddlMes = getElem(ddlMes);
    if(ddlDia.value!="*"&&ddlMes.value!="*"){
        switch(parseInt(ddlMes.value)){
            case 2:
                if(parseInt(ddlDia.value) > 28)
                    ddlDia.value = "28";
                break;
            case 4:
                if(parseInt(ddlDia.value) > 30)
                    ddlDia.value = "30";
                break;
            case 6:
                if(parseInt(ddlDia.value) > 30)
                    ddlDia.value = "30";
                break;
            case 9:
                if(parseInt(ddlDia.value) > 30)
                    ddlDia.value = "30";
                break;
            case 11:
                if(parseInt(ddlDia.value) > 30)
                    ddlDia.value = "30";
                break;
        }
    }
    
}
