﻿/********************************************************************************************************
Projeto                     =   SiteV10
Arquivo                     =   formValidate.js
Data de criacao             =   08/08/2009
********************************************************************************************************/
	
	var dotNetId = new String("ctl00_content_");
	var msgRequired = "Campo Obrigatório";
	var msgMinLength = "Este campo deve ter no minimo ";
	var msgEmail = "Email Inválido";
	var msgEqual = "A confirmacao de senha deve ser igual a senha";
	var msgCPF = "CPF Inválido";
	var msgTerms = "Favor aceitar o termos antes de enviar os dados"
	var errorClassMsg = new String();
	
	function initialize()
	{
		$(document).ready(function(){
			
			//ON BLUR
			$(".STValidate").blur(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				
				//Campo Obrigatorio
				if($(this).hasClass("required"))
					ValidateRequired(this, $("." + errorClassId));
					
				// Minimo de caracter no campo
				if($(this).attr("minlength"))
					ValidateMinLength(this, $(this).attr("minlength"), $("." + errorClassId));
				
				//Email Invalido
				if($(this).hasClass("email"))
					 ValidateEmail(this, $("." + errorClassId));
				
				//Confirma password
				if($(this).hasClass("passwordConf"))
					 ValidateEqual($(".password"), this, $("." + errorClassId));
					 
				//Verifica CPF Valido
				if($(this).hasClass("cpf"))
					 ValidateCPF(this, $("." + errorClassId));
			});
			
			//ON KEY UP
			$(".STValidate").keyup(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				
				//Forca password
				if($(this).hasClass("password"))
					 ValidatePasswordStrength(this, $(".username"), $(".strongPass img"));
				
			});
			
			//CLICK
			$(".STValidate").click(function (e) { 
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				
				//Aceitar Terms
				if($(this).hasClass("terms"))
					ValidateTerms($(this).children("input:checked"));
				
				//Enviar dados Confirmando termos (passa valor: true ou false)
				if($(this).hasClass("btnSend"))
				{
					if($(".terms").hasClass("STValidate"))
						ValidateAll($(".terms").children("input:checked").length);
					else
						ValidateAll(1);
				}
			});
			
			//Each
			$(".terms").each(function(){
				
				//Verifica se Termos esta clicado
				if($(this).hasClass("terms"))
					ValidateTerms($(this).children("input:checked"));
			});			
			

		});	
	}
	
	//Campo Obrigatorio
	function ValidateRequired(element, elementMsg)
	{
		if($(element).val() == "")
		{
			$(elementMsg).show("fast").text(msgRequired);
			return false;
		}
		else
		{
			$(elementMsg).hide("fast");
		}
	}
	
	// Minimo de caracter no campo
	function ValidateMinLength(element, minlength, elementMsg)
	{
		
		if($(element).val().length < minlength)
		{
			if($(element).val() != "")
			{
				$(elementMsg).show("fast").text(msgMinLength + minlength + " caracteres");
				return false;
			}
		}
		else
		{
			$(elementMsg).hide("fast");
		}
	}
	
	//Email Invalido
	function ValidateEmail(element, elementMsg)
	{
		if(!TestEmail($(element).val()))
		{
			if($(element).val() != "")
			{
				$(elementMsg).show("fast").text(msgEmail);
				return false;
			}
		}
		else
		{
			$(elementMsg).hide("fast");
		}
	}
	
	//Campos diferentes
	function ValidateEqual(elementA, elementB, elementMsg)
	{
		if(!TestEqual([$(elementA).val(), $(elementB).val()]))
		{
			$(elementMsg).show("fast").text(msgEqual);
			return false;
		}
		else
		{
			if(!$(elementA).val() == "")
				$(elementMsg).hide("fast");
		}
	}
	
	//Verifica CPF Valido
	function ValidateCPF(element, elementMsg)
	{
		if(!TestCPF($(element).val()))
		{
			if(!$(element).val() == "")
			{
				$(elementMsg).show("fast").text(msgCPF);
				return false;
			}
		}
		else
		{
			$(elementMsg).hide("fast");
		}
	}
	
	//Forca Password
	function ValidatePasswordStrength(elementPass, elementUser, containerImg)
	{
		var strongPass = TestPasswordStrength($(elementPass).val(), $(elementUser).val());
		var pathSrc = $(containerImg).attr("src").substring(0, $(containerImg).attr("src").lastIndexOf("/"));
		
		$(containerImg).each(function (i) {
			$(this).attr("src", pathSrc + "/forca-senha.gif");
			if(i < strongPass)
				$(this).attr("src", pathSrc + "/forca-senha-ok.gif");
        });
	}		
	
	//Valida Termos
	function ValidateTerms(element)
	{
		if(!$(element).length)
			$(".btnSend").css("opacity", "0.5").css("cursor", "default");
		else
			$(".btnSend").css("opacity", "1").css("cursor", "pointer");
	}
	
	//Testa Email
	function TestEmail(value)
	{
		var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
		return pattern.test(value);
	}
	
	//Testa Valores iguais
	function TestEqual(value)
	{
		return value[0] == value[1];
	}
	
	//Testa Forca do Password
	function TestPasswordStrength(password, username)
	{
        score = 0
        emptypass = '0'
        trashPass = '1'
        shortPass = '2'
        badPass = '3'
        goodPass = '4'
        strongPass = '5'

        if (password.length == 0) { return emptypass }
        //password < 4
        if (password.length < 4) { return trashPass }
        //password == username
        if (password.toLowerCase() == username.toLowerCase()) return shortPass
        //password length
        score += password.length * 4
        score += (CheckPasswordRepetition(1, password).length - password.length) * 1
        score += (CheckPasswordRepetition(2, password).length - password.length) * 1
        score += (CheckPasswordRepetition(3, password).length - password.length) * 1
        score += (CheckPasswordRepetition(4, password).length - password.length) * 1
        //password has 3 numbers
        if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) score += 5
        //password has 2 sybols
        if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5
        //password has Upper and Lower chars
        if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) score += 10
        //password has number and chars
        if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) score += 15
        //password has number and symbol
        if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) score += 15
        //password has char and symbol
        if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) score += 15
        //password is just a nubers or chars
        if (password.match(/^w+$/) || password.match(/^d+$/)) score -= 10
        //verifing 0 < score < 100
        if (score < 0) score = 0
        if (score > 100) score = 100
        if (score < 34) return badPass
        if (score < 68) return goodPass
        return strongPass
    }
    
    //Checa Repeticao
	function CheckPasswordRepetition(pLen, str)
	{
        res = ""
        for (i = 0; i < str.length; i++) {
            repeated = true
            for (j = 0; j < pLen && (j + i + pLen) < str.length; j++)
                repeated = repeated && (str.charAt(j + i) == str.charAt(j + i + pLen))
            if (j < pLen) repeated = false
            if (repeated) {
                i += pLen - 1
                repeated = false
            }
            else {
                res += str.charAt(i)
            }
        }
        return res
    }
    
    //Testa CPF
	function TestCPF(value)
	{
		var mx = new Number(value.length);
		var c = new String(value);
	    
		var s = c;
		var i; 
		c = s.substr(0,9); 
		var dv = s.substr(9,2); 
		var d1 = 0; 
		var v = true;
		
		for (i = 0; i < 9; i++) d1 += c.charAt(i)*(10-i); 
		if (d1 == 0) v = false; 
		d1 = 11 - (d1 % 11); 
		if (d1 > 9) d1 = 0; 
		if (dv.charAt(0) != d1) v = 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) v = false;

		return v;
	}

	function ValidateAll(termsCheck)
	{
		if(termsCheck)
		{
			var returnValue = true;
			var r;
			$(".required").each(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				r = ValidateRequired(this, $("." + errorClassId));
				if(!r && r != undefined) returnValue = r;
			});
			
			$(".email").each(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				r = ValidateEmail(this, $("." + errorClassId));
				if(!r && r != undefined) returnValue = r;
			});
			$(".passwordConf").each(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				r = ValidateEqual($(".password"), this, $("." + errorClassId));
				if(!r && r != undefined) returnValue = r;
			});
			$(".cpf").each(function(){
				errorClassId = this.id.substring(dotNetId.length, this.id.length);
				r = ValidateCPF(this, $("." + errorClassId));		
				if(!r && r != undefined) returnValue = r;
			});
			if(returnValue)__doPostBack("" + $('.btnSend').attr('name') + "",'');
		}
		else
			return false;
		
		
	}