﻿/*
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 && inputCompareControl != null) {
				WebForm_AppendToClassName(inputControl, cssCampoError);
				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";
		try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "none"); } catch (e) { }

		var hasValidators = false;

		if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
			var i;
			//pega primeiro summary com erro


			if (summary.showsummary != "False") {
				summary.style.display = "";
				try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "block"); } catch (e) { }

				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";
					try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "none"); } catch (e) { }
				}
				else
					try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "block"); } catch (e) { }
			}

			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";
		try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "none"); } catch (e) { }

		if (!Page_IsValid &&
			(validationGroup == null || validationGroup == '' || summary.validationGroup == validationGroup)) {
			var i;
			var hasValidators = false;
			if (summary.showsummary != "False") {
				summary.style.display = "";
				try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "block"); } catch (e) { }

				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";
				try { jQuery("#" + jQuery(summary).attr("conteiner")).css("display", "none"); } catch (e) { }
			}

			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");
	}
}
