namespace("Rtx.Controls");

Rtx.Controls.ValidationManager = {
	onlyServerSideGroups: {},

	initialize: function() {
		// debugger;
		this.clientValidationIsOn = false;
		this.validatorUpdateDisplayOld = window.ValidatorUpdateDisplay;
		this.validationSummaryOnSubmitOld = window.ValidationSummaryOnSubmit;


		this.ValidationGroups = [];
		this.FluxValidators = {};
		window.ValidatorUpdateDisplay = this.validatorUpdateDisplay.bind(this);
		window.ValidationSummaryOnSubmit = this.validationSummaryOnSubmit.bind(this);

		this.validatorUpdateIsValidOld = window.ValidatorUpdateIsValid;
		window.ValidatorUpdateIsValid = this.validatorUpdateIsValid.bind(this);

		this.clientValidationIsOn = false;
	},

	attachGroup: function(validationGroup) {
		this.ValidationGroups.push(validationGroup);
	},

	validatorUpdateDisplay: function(val) {
		var controlId = val.controltovalidate;
		if (controlId && $(controlId) && this.hasGroup(val.validationGroup)) {
			var validators = (this.FluxValidators[controlId] = this.FluxValidators[controlId] || []);
			if (val.isvalid) {
				this.FluxValidators[controlId] = validators.without(val.id);
				if (this.FluxValidators[controlId].length == 0)
					this.validationPassed(controlId, val);
			} else {
				validators.push(val.id);
				this.FluxValidators[controlId] = validators.uniq();
				this.validationRejected(controlId, val);
			}
		}
		return (this.validatorUpdateDisplayOld || Prototype.K)(val);
	},

	validationPassed: function(controlId, val) {
		var relatedControl = $(val.getAttribute("relativeControl"));
		if (relatedControl != null)
			relatedControl.removeClassName("errorField");

		$(controlId).removeClassName("errorText");
	},
	validationRejected: function(controlId, val) {
		var relatedControl = $(val.getAttribute("relativeControl"));
		if (relatedControl != null)
			relatedControl.addClassName("errorField");

		$(controlId).addClassName("errorText");
	},

	hasGroup: function(validationGroup) {
		return this.ValidationGroups.indexOf(validationGroup) != -1;
	},

	//is Used only for SignupForWidget and LoginForWidget control
	hideWelcome: function(controlToHideId, validationGroup) {
		if (typeof (Page_ClientValidate) == 'function') {
			var isValid = Page_ClientValidate(validationGroup);
			if (!isValid && $(controlToHideId) != null) {
				$(controlToHideId).hide();
			}
		}
	},
	//is used only for LoginForWidget control
	validateLogin: function(validationGroup) {
		Element.hide($('pnlValidationFooter'));
		if (typeof (Page_ClientValidate) == 'function') {
			var isValid = Page_ClientValidate(validationGroup);
			if (!isValid)
				Element.show($('pnlValidationFooter'));
		}
	},
	//is used only for SignupForWidget control
	validateFirstStep: function(validationSummaryId, text) {
		if (typeof (Page_ClientValidate) == 'function') {
			var isValid = Page_ClientValidate();
			if (!isValid) {
				var validationSummary = $(validationSummaryId);
				validationSummary.innerHTML = validationSummary.innerHTML.replace("<BR>", " ");
				validationSummary.innerHTML = validationSummary.innerHTML.replace("<br>", " ");
				validationSummary.update(validationSummary.innerHTML + text);
				return false;
			}
		}
	},

	//is used only for SignupForWidgetControl
	// params are : controlToHide,validationSummaryId, validationGroup, validationFooterText ,clientValidationIsOn
	setClientValidateParams: function(controlToHide, validationSummaryId, validationGroup, validationFooterText, clientValidationIsOn, vlFirstStepServerValidatorId) {
		this.controlToHide = controlToHide;
		this.validationSummaryId = validationSummaryId;
		this.validationFooterText = validationFooterText;
		this.clientValidationIsOn = clientValidationIsOn;
		this.validationGroup = validationGroup;
		this.vlFirstStepServerValidatorId = vlFirstStepServerValidatorId;
	},

	//is used only for SignupForWidget Control
	validatorUpdateIsValid: function() {
		if ($(this.vlFirstStepServerValidatorId) != null)
			$(this.vlFirstStepServerValidatorId).isvalid = true;

		(this.validatorUpdateIsValidOld || Prototype.K)();

		if (this.clientValidationIsOn == false)
			return;


		ValidationSummaryOnSubmit(this.validationGroup);
		var isValid = Page_IsValid;

		if (!isValid && $(this.controlToHide) != null) {
			$(this.controlToHide).hide();
		}
		else if (isValid && $(this.controlToHide) != null)
			$(this.controlToHide).show();

		var validationSummary = $(this.validationSummaryId);
		if (!isValid && validationSummary != null) {
			validationSummary.innerHTML = validationSummary.innerHTML.replace("<BR>", " ");
			validationSummary.innerHTML = validationSummary.innerHTML.replace("<br>", " ");
			validationSummary.update(validationSummary.innerHTML + this.validationFooterText);
			return false;
		}
	},

	//is used only for LoginForWidget control
	disableClientValidatorUpdate: function() {
		this.clientValidationIsOn = false;
	},

	validationSummaryOnSubmit: function(group) {
		// console.log('mytest: ' + group);
		if (this.onlyServerSideGroups[group]) {
			window.scrollTo(0, 0);
			return;
		}
		return (this.validationSummaryOnSubmitOld || Prototype.K)(group);
	},

	// this method make ValidateEmptyText = true for password CompareValidator. Used only in SignupForWidget step one.
	validateEmptyText: function(val, args, controlToCompareId) {
		var controlToCompare = $(controlToCompareId);
		if (controlToCompare != undefined && this.clientValidationIsOn == true) {

			if (args.Value.length == 0 && controlToCompare.value.length != 0) {
				args.IsValid = false;
				return;
			}
		}
		else {
			args.IsValid = true;
		}
	}
}
Rtx.Controls.ValidationManager.initialize();

// [AtlasScript]

if(typeof(Sys)!="undefined")
	Sys.Application.notifyScriptLoaded();

// [/AtlasScript]
