
$.validator.addMethod("cpf", function(value) {
		v1 = value.replace(/[^0-9]/g, '');
		if (v1!='') {
			return checkcpf(v1);
		} else {
			return true;
		}
	}, 'cpf inválido');
	
$.validator.addMethod("datecheck", function(value) {
		return isDate(value);
	}, 'data inválida');



/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2500;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false
	}
return true
}





//===========================================================================
// mascara os campos
// forma de usar:
// onKeyPress="Mascara(this,'000.000.000-00',true);"
//===========================================================================
function Mascara(campo,mascara,somenteInteiros){
	if (somenteInteiros){
		if(mascaraInteiro(campo)==false){
			event.returnValue = false;
		}	
	}
	return formataCampo(campo,mascara,event);
}	


////////////////////////////////////////////////
// Validações
// ---------------------------------------------
// VObrigatorio(campo,mensagem)
// VEmail(campo,mensagem)
// VTelefone(campo,mensagem)
// VCep(campo,mensagem)
// VCPF(campo,mensagem)
// VCNPJ(campo,mensagem)
// VData(campo,mensagem)
////////////////////////////////////////////////





// verifica se um campo o campo foi preenchido 
// forma de utilizar: evento onblur do campo
// onblur="obrigatorio(this,'O campo nome é obrigatório');"
function VObrigatorio(campo,mensagem){
	if (Trim(campo.value)=='') {
		if (mensagem !=''){alert(mensagem);}
		return false;
	}
	return true;
}

// verifica se um email é valido
// forma de utilizar: evento onblur do campo
// onblur="ValidarEmail(this,'E-mail inválido');"
function VEmail(campo,mensagem){
	if (campo.value!=''){
		if (!checkMail(campo.value)) {
			if (mensagem !=''){alert(mensagem);}
			campo.value ='';
			return false;
		}
	}
	return true;
}


// verifica se um Telefone é valido
// forma de utilizar: evento onblur do campo
// onblur="VTelefone(this,'Nº de telefone inválido');"
function VTelefone(campo,mensagem){
    exp = /\d{4}\-\d{4}/
    if(!exp.test(campo.value)){
        if (mensagem !=''){alert(mensagem);}
        campo.value='';
        return false;
    }
    return true;
}

// verifica se um cep é valido
// forma de utilizar: evento onblur do campo
// onblur="VCep(this,'Cep Inválido');"
function VCep(campo,mensagem){
    exp = /\d{2}\.\d{3}\-\d{3}/
    if(!exp.test(campo.value)){
        if (mensagem !=''){alert(mensagem);}   
        campo.value=''; 
		return false;
    }
    return true;
}
// verifica se um CPF é valido
// forma de utilizar: evento onblur do campo
// onblur="VCPF(this,'CPF inválido');"
function VCPF(campo,mensagem) {
	if (checkcpf(campo.value)) {
		return true;
	}
	else {
	    if (mensagem !=''){alert(mensagem);}
	    campo.value='';
		return false;
	}
}

// verifica se um CNPJ é valido
// forma de utilizar: evento onblur do campo
// onblur="VCNPJ(this,'CNPJ inválido');"
function VCNPJ(campo,mensagem) {
	if (checkcnpj(campo.value)) {
		return true;
	}
	else {
	    if (mensagem !=''){alert(mensagem);}
	    campo.value='';
		return false;
	}
}

function VData(campo,mensagem) {
	if (chkdate(campo) == false) {
		if (mensagem !=''){alert(mensagem);}
		campo.value='';
		return false;
	}
	else {
		return true;
   }
}

//===========================================================================
// Diversos
//===========================================================================
function Trim(str){return str.replace(/^\s+|\s+$/g,"");}
function checkMail(mail){
	var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
	if(typeof(mail) == "string"){
		if(er.test(mail)){ return true; }
	}else if(typeof(mail) == "object"){
		if(er.test(mail.value)){ return true; }
	}else{ return false;}
}

function checkcpf(input) {

  input = extractnumbers(input);

  return (
           (
             modulo11cpf(input.substr(0,input.length-2)) == input.charAt(input.length-2)
           )
           &&
           (
             modulo11cpf(input.substr(0,input.length-1)) == input.charAt(input.length-1)
           )
           &&
           (
             !(tudoigual(input))
           )
         );
}

function checkcnpj(input) {

  input = extractnumbers(input);

  return (
           (
             modulo11cnpj(input.substr(0,input.length-2)) == input.charAt(input.length-2)
           )
           &&
           (
             modulo11cnpj(input.substr(0,input.length-1)) == input.charAt(input.length-1)
           )
           &&
           (
             !(tudoigual(input))
           )
         );

}

function chkdate(input){
	var validformat=/^\d{2}\/\d{2}\/\d{4}$/
	if (!validformat.test(input.value)){
		return false;
	}else {
		var monthfield=input.value.split("/")[1]
		var dayfield=input.value.split("/")[0]
		var yearfield=input.value.split("/")[2]
		var dayobj = new Date(yearfield, monthfield-1, dayfield)
		if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)){
			return false;
		} else {
			return true;
		}
	}
}

//formata de forma generica os campos
function formataCampo(campo, Mascara, evento) { 
    var boleanoMascara; 
	
    var Digitato = evento.keyCode;
    exp = /\-|\.|\,|\/|\(|\)| /g
    campoSoNumeros = campo.value.toString().replace( exp, "" ); 
   
    var posicaoCampo = 0;     
    var NovoValorCampo="";
    var TamanhoMascara = campoSoNumeros.length;; 
    
    if (Digitato != 8) { // backspace 
        for(i=0; i<= TamanhoMascara; i++) { 
            boleanoMascara  = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".") || (Mascara.charAt(i) == ",")

                                || (Mascara.charAt(i) == "/")) 
            boleanoMascara  = boleanoMascara || ((Mascara.charAt(i) == "(") 
                                || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " ")) 
            if (boleanoMascara) { 
                NovoValorCampo += Mascara.charAt(i); 
                  TamanhoMascara++;
            }else { 
                NovoValorCampo += campoSoNumeros.charAt(posicaoCampo); 
                posicaoCampo++; 
              }            
          }     
        campo.value = NovoValorCampo;
          return true; 
    }else { 
        return true; 
    }
}

function tudoigual(input) {

  var output = true;

  for (i = 0; i < (input.length-1); i++)
    output = output && (input.charAt(i) == input.charAt(i+1));

  return output;

}
function modulo11cnpj(input) {

  var output=0;
  var fator=2;

  for(f=input.length-1;f>=0;f--) {
    output+=parseInt(input.charAt(f))*fator;
    fator++;
    if(fator>=10)
      fator=2;
  }

  output%=11;

  if(output<2)
    output=0;
  else
    output=11-output;

  return output;

}
function modulo11cpf(input) {

  var output=0;
  var fator=2;

  for(f=input.length-1;f>=0;f--) {
    output+=parseInt(input.charAt(f))*fator;
    fator++;
  }

  output%=11;

  if(output<2)
    output=0;
  else
    output=11-output;

  return output;

}
//valida numero inteiro com mascara
function mascaraInteiro(){
    if (event.keyCode < 48 || event.keyCode > 57){
        event.returnValue = false;
        return false;
        
    }
    return true;
}


function extractnumbers(input) {

  var output='',i;

  for (i=0;i<input.length;i++)
    if ((!(isNaN(input.charAt(i))))&&(input.charAt(i)!=' '))
      output += input.charAt(i);

  return output;

}



function num2bra(valor) {

  var str,str1,str2;

  str = String(Math.round(valor*100)/100);

  str = str.replace(/\./,",");

  str1 = String(str.match(/\d+/));

  if (str1 == "null")
    str1 = "0";

  str2 = "";

  for(count=str1.length-3; count >= -2; count -= 3)
    str2 = str1.substring(count,count+3) + "." + str2;

  str2 = str2.substring(0,str2.length-1);

  str1 = String(str.match(/\,\d+/));

  if (str1.length == 4)
    str2 = str2 + ",00"
  else if (str1.length == 2)
    str2 = str2 + str1 + "0"
  else if (str1.length == 3)
    str2 = str2 + str1

  if (valor<0)
    str2 = '-' + str2;

  return str2;

}

//===========================================================================

function num2braint(valor) {

  var output;

  output = num2bra(valor);
  
  output = output.substring(0,output.length-3);

  return output;

}

//===========================================================================

function bra2num(texto) {

  var strA;

  strA = String(texto);

  strA = String(strA.replace(/\./g,""));

  strA = String(strA.replace(/\,/g,"."));

  if (isNaN(parseFloat(strA))) {
    return 0;
  } else {
    return parseFloat(strA);
  }

}

//===========================================================================

//===========================================================================
// fim diversos
//===========================================================================















