
/*
Contains functions that override default asp.net validator functions for enhanced UI experience.
*/

ValidatorUpdateIsValid = function()
{
	Page_IsValid = AllValidatorsValid(Page_Validators); 
	ClearValidatorCallouts(); 
	SetValidatorCallouts(); 
}

ValidatorValidate = function(val, validationGroup, event) {
	val.isvalid = true;
	if ((typeof (val.enabled) == 'undefined' || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
		if (typeof (val.evaluationfunction) == 'function') {
			val.isvalid = val.evaluationfunction(val);
			if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
                typeof (val.focusOnError) == 'string' && val.focusOnError == 't') {
				ValidatorSetFocus(val, event);
			}
		}
	}

	ClearValidatorCallouts();
	SetValidatorCallouts();

	ValidatorUpdateDisplay(val);
}

SetValidatorCallouts = function() {

	var i;
	var pageValid = true;
	var validationGroup = '';

	for (i = 0; i < Page_Validators.length; i++) {

		var inputControl = document.getElementById(Page_Validators[i].controltovalidate);
		var inputCompareControl = document.getElementById(Page_Validators[i].controltocompare);
		var cssCampoError = document.getElementById(Page_Validators[i].id).getAttribute('CssCampoErro');

		if (!Page_Validators[i].isvalid) {
			if (pageValid) {
				try {
					if (document.getElementById(Page_Validators[i].id).getAttribute('NaoDefinirFocoErro') == null)
						inputControl.focus();

					if (Page_Validators[i].validationGroup != null && Page_Validators[i].validationGroup != '')
						validationGroup = Page_Validators[i].validationGroup;
				}
				catch (e) {
				}
			}

			if (cssCampoError != null) {
				WebForm_AppendToClassName(inputControl, cssCampoError);
				if (inputCompareControl != null)
					WebForm_AppendToClassName(inputCompareControl, cssCampoError);
			}

			var labelID = document.getElementById(Page_Validators[i].id).getAttribute('LabelID');
			var labelID1 = document.getElementById(Page_Validators[i].id).getAttribute('LabelID1');

			// para varios campos no custom
			var varios = document.getElementById(Page_Validators[i].id).getAttribute('VariosCampos');
			if (varios != null) {
				var campos = varios.split(',');
				for (x = 0; x < campos.length - 1; x++) {
					campoErro(campos[x], '');
				}
				campoErro('', campos[campos.length - 1]);
			}
			//fim

			if (labelID != null) {
				var labelControl = document.getElementById(labelID);

				if (labelControl != null) {
					var labelCssError = document.getElementById(Page_Validators[i].id).getAttribute('CssLabelErro');
					$(labelID).addClass(labelCssError);
					WebForm_AppendToClassName(labelControl, labelCssError);
				}
			}

			if (labelID1 != null) {
				var labelControl = document.getElementById(labelID1);

				if (labelControl != null) {
					var labelCssError = document.getElementById(Page_Validators[i].id).getAttribute('CssLabelErro');
					$(labelID1).addClass(labelCssError);
					WebForm_AppendToClassName(labelControl, labelCssError);
				}
			}

			pageValid = false;
		}
	}

	if (!pageValid) {
		for (i = 0; i < Page_ValidationSummaries.length; i++) {
			if (validationGroup == '' ||
					(Page_ValidationSummaries[i].validationGroup != null &&
					 Page_ValidationSummaries[i].validationGroup == validationGroup)) {

				if (IsValidationGroupMatch(Page_ValidationSummaries[i], validationGroup))
					ValidationSummaryOnSubmitNoReposition(validationGroup);
			}
		}
	}

	return pageValid;
}

ClearValidatorCallouts = function() {
    var i;
    var grupoValidacao = '';
    var invalidConrols = [];

    for (i = 0; i < Page_Validators.length; i++) {

        var inputControl = document.getElementById(Page_Validators[i].controltovalidate);
        var cssCampoError = document.getElementById(Page_Validators[i].id).getAttribute('CssCampoErro');

        if (cssCampoError != null && inputControl != null)
            WebForm_RemoveClassName(inputControl, cssCampoError);

        var labelID = document.getElementById(Page_Validators[i].id).getAttribute('LabelID');
        var labelID1 = document.getElementById(Page_Validators[i].id).getAttribute('LabelID1');

        if (Page_Validators[i].validationGroup != null && Page_Validators[i].validationGroup != '')
            grupoValidacao = Page_Validators[i].validationGroup;

        
        if (labelID != null) {
            var labelControl = document.getElementById(labelID);

            if (labelControl != null) {
                var labelCssError = document.getElementById(Page_Validators[i].id).getAttribute('CssLabelErro');
                $(labelID).removeClass(labelCssError);
                WebForm_RemoveClassName(labelControl, labelCssError);
            }
        }

        // para varios campos no custom
        var varios = document.getElementById(Page_Validators[i].id).getAttribute('VariosCampos');
        if (varios != null) {
            var campos = varios.split(',');
            for (x = 0; x < campos.length - 1; x++) {
                campoErroRemove(campos[x], '');
            }
            campoErroRemove('', campos[campos.length - 1]);
        }
        //fim

        if (labelID1 != null) {
            var labelControl = document.getElementById(labelID1);

            if (labelControl != null) {
                var labelCssError = document.getElementById(Page_Validators[i].id).getAttribute('CssLabelErro');
                $(labelID1).removeClass(labelCssError);
                WebForm_RemoveClassName(labelControl, labelCssError);
            }
        }

        ValidationSummaryOnSubmitNoReposition(grupoValidacao);
    }
}

ValidatorOnChange = function(event)
{
	if (!event)
	{
        event = window.event;
    }
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
	if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null))
	{
        targetedControl = event.srcElement;
    }
	else
	{
        targetedControl = event.target;
    }
    var vals;

	if (typeof (targetedControl.Validators) != "undefined")
	{
        vals = targetedControl.Validators;
        // alert('here - 1');
    }
	else
	{
		if (targetedControl.tagName.toLowerCase() == "label")
		{
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
    }
    var i;

    //if date picker caused it in IE...which can't find the textbox to get the list of validators for the control, so revalidate whole page
    if (vals == null)
        vals = Page_Validators;

	for (i = 0; i < vals.length; i++)
	{
        ValidatorValidate(vals[i], null, event);
    }

    ValidatorUpdateIsValid();
}  

ValidatorUpdateDisplay = function (val) 
{
	if (typeof(val.display) == "string") 
	{
		if (val.display == "None") 
		{
			return;
		}
		if (val.display == "Dynamic") 
		{
			//changed this block to not set display to inline, but to remove style attribute entirely
			//undo comments if not using jQuery
			if(val.isvalid)
				$(val).hide("fast");//val.style.display = "none"; 
			else
				$(val).show("fast");//val.removeAttribute("style");
			return;
		}
	}
	if ((navigator.userAgent.indexOf("Mac") > -1) && (navigator.userAgent.indexOf("MSIE") > -1)) 
	{
		val.style.display = "inline";
	}
	val.style.visibility = val.isvalid ? "hidden" : "visible";
}

function ValidationSummaryOnSubmit(validationGroup)
{
    if (typeof(Page_ValidationSummaries) == "undefined")
        return;
    var summary, sums, s;
    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {

        var summaryLocation;
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";

		var hasValidators = false;
		
		if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup))
		{
		    var i;
		    //pega primeiro summary com erro
		 
		        
			if (summary.showsummary != "False")
			{
                summary.style.display = "";
				if (typeof (summary.displaymode) != "string")
				{
                    summary.displaymode = "BulletList";
                }
				switch (summary.displaymode)
				{
                    case "List":
                        headerSep = "<br>";
                        first = "";
                        pre = "";
                        post = "<br>";
                        end = "";
                        break;
                    case "BulletList":
                    default:
                        headerSep = "";
                        first = "<ul>";
                        pre = "<li>";
                        post = "</li>";
                        end = "</ul>";
                        break;
                    case "SingleParagraph":
                        headerSep = " ";
                        first = "";
                        pre = "";
                        post = " ";
                        end = "<br>";
                        break;
                }
                s = "";
				if (typeof (summary.headertext) == "string")
				{
                    s += summary.headertext + headerSep;
                }
                s += first;
				for (i = 0; i < Page_Validators.length; i++)
				{
					if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string"
						 && Page_Validators[i].validationGroup == summary.validationGroup)
					{
                        s += pre + Page_Validators[i].errormessage + post;
                        hasValidators = true;

                        
                        if (summaryLocation == null)
                            summaryLocation = Page_ValidationSummaries[sums];
                    }
                }
                s += end;
                summary.innerHTML = s;
                //var position = Sys.UI.DomElement.getLocation(summary);
                // mudado para sempre colocar no primeiro summary
                var position;
                if (summaryLocation != null)
                    position = Sys.UI.DomElement.getLocation(summaryLocation);
                else
                    position = Sys.UI.DomElement.getLocation(summary);
                
				
				window.scrollTo(0, position.y);

				if (!hasValidators)
					summary.style.display = "none";
            }
			
			if (summary.showmessagebox == "True")
			{
                s = "";
				if (typeof (summary.headertext) == "string")
				{
                    s += summary.headertext + "\r\n";
                }
                var lastValIndex = Page_Validators.length - 1;
				for (i = 0; i <= lastValIndex; i++)
				{
					if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string")
					{
						switch (summary.displaymode)
						{
                            case "List":
                                s += Page_Validators[i].errormessage;
								if (i < lastValIndex)
								{
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + Page_Validators[i].errormessage;
								if (i < lastValIndex)
								{
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += Page_Validators[i].errormessage + " ";
                                break;
                        }
                    }
                }
                alert(s);
            }
        }
    }
}

function ValidationSummaryOnSubmitNoReposition(validationGroup)
{
    if (typeof(Page_ValidationSummaries) == "undefined")
        return;

    var summary, sums, s;
	for (sums = 0; sums < Page_ValidationSummaries.length; sums++)
	{
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";

		if (!Page_IsValid &&
			(validationGroup == null || validationGroup == '' || summary.validationGroup == validationGroup))
		{
            var i;
			var hasValidators = false;
			if (summary.showsummary != "False")
			{
                summary.style.display = "";
				if (typeof (summary.displaymode) != "string")
				{
                    summary.displaymode = "BulletList";
                }
				switch (summary.displaymode)
				{
                    case "List":
                        headerSep = "<br>";
                        first = "";
                        pre = "";
                        post = "<br>";
                        end = "";
                        break;
                    case "BulletList":
                    default:
                        headerSep = "";
                        first = "<ul>";
                        pre = "<li>";
                        post = "</li>";
                        end = "</ul>";
                        break;
                    case "SingleParagraph":
                        headerSep = " ";
                        first = "";
                        pre = "";
                        post = " ";
                        end = "<br>";
                        break;
                }
                s = "";
				if (typeof (summary.headertext) == "string")
				{
                    s += summary.headertext + headerSep;
                }
                s += first;

				for (i = 0; i < Page_Validators.length; i++)
				{
					if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string"
						 && Page_Validators[i].validationGroup == summary.validationGroup)
					{
						hasValidators = true;
                        s += pre + Page_Validators[i].errormessage + post;
                    }
                }
                s += end;
                summary.innerHTML = s;
            }

			if (!hasValidators)
				summary.style.display = "none";

			if (summary.showmessagebox == "True")
			{
                s = "";
				if (typeof (summary.headertext) == "string")
				{
                    s += summary.headertext + "\r\n";
                }

                var lastValIndex = Page_Validators.length - 1;

				for (i = 0; i <= lastValIndex; i++)
				{
					if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string"
							&& Page_Validators[i].validationGroup == summary.validationGroup)
					{					
						switch (summary.displaymode)
						{
                            case "List":
                                s += Page_Validators[i].errormessage;
								if (i < lastValIndex)
								{
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + Page_Validators[i].errormessage;
								if (i < lastValIndex)
								{
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += Page_Validators[i].errormessage + " ";
                                break;
                        }
                    }
                }
                alert(s);
            }
        }
    }
}

function campoErro(campo, labelID)
{
	if (labelID != null)
	{
        var labelControl = document.getElementById(labelID);

		if (labelControl != null)
		{
            var labelCssError = "labelErro";
            $(labelID).removeClass(labelCssError);
            WebForm_AppendToClassName(labelControl, labelCssError);
        }
    }    
	if (campo != null)
	{
        var campoControl = document.getElementById(campo);
        
		if (campoControl != null)
		{
            var campoCssError = "campoErro";
            $(campoControl).removeClass(campoCssError);
            WebForm_AppendToClassName(campoControl, campoCssError);    
        }
    }
}

function campoErroRemove(campo, labelID)
{
	if (labelID != null)
	{
        var labelControl = document.getElementById(labelID);

		if (labelControl != null)
		{
            var labelCssError = "labelErro";
            $(labelID).removeClass(labelCssError);
            WebForm_RemoveClassName(labelControl, labelCssError);
        }
    }
	if (campo != null)
	{
        var campoControl = document.getElementById(campo);

		if (campoControl != null)
		{
            var campoCssError = "campoErro";
            $(campoControl).removeClass(campoCssError);
            WebForm_RemoveClassName(campoControl, campoCssError);
        }
    }
}


function validatorCnpjCentral(source, arguments) {
    pCnpj = arguments.Value;
    if (pCnpj == '') {
        arguments.IsValid = true;
    }
    else {
        var numero = formatCpfCnpj(pCnpj, false, true);
        var base = numero.substring(0, 8);
        var ordem = numero.substring(8, 12);
        var digitos = dvCpfCnpj(base + ordem, true);
        var algUnico;
        if (numero != base + ordem + digitos) {
            arguments.IsValid = false;
        }
        algUnico = numero.charAt(0) != '0';
        for (i = 1; i < 8; i++) {
            algUnico = algUnico && (numero.charAt(i - 1) == numero.charAt(i));
        }
        if (algUnico) {
            arguments.IsValid = false;
        }
        if (ordem == "0000") {
            arguments.IsValid = false;
        }
        if (!(base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000"))
            arguments.IsValid = (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
    }
}

function cnpjCentralValido(pCnpj) {
    pCnpj = arguments.Value;
    if (!pCnpj == '') {
        var numero = formatCpfCnpj(pCnpj, false, true);
        var base = numero.substring(0, 8);
        var ordem = numero.substring(8, 12);
        var digitos = dvCpfCnpj(base + ordem, true);
        var algUnico;
        if (numero != base + ordem + digitos) {
            arguments.IsValid = false;
        }
        algUnico = numero.charAt(0) != '0';
        for (i = 1; i < 8; i++) {
            algUnico = algUnico && (numero.charAt(i - 1) == numero.charAt(i));
        }
        if (algUnico) {
            arguments.IsValid = false;
        }
        if (ordem == "0000") {
            arguments.IsValid = false;
        }
        if (!(base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000"))
            arguments.IsValid = (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
    }
}
