var URegistrationBorderArr = [];
var URegistrationServerSideErrorArr = [];
var URegistration_MandatoryFieldValidationError, URegistration_EmailValidationError, URegistration_InvalidFileFormatError, URegistration_PasswordValidationError, URegistration_PasswordLengthError, 
URegistration_PasswordAlphaNumericError, URegistration_DefaultValidationError, URegistration_PrivacyAgreementError, URegistration_BorderColor, URegistration_CheckBoxId; 

function zen_DOMValidatorUpdateDisplay(val) {
	var border, icon, validator;
	if(val.id.indexOf('FieldValidator2') > 0) {
		validator = 'FieldValidator2';
		border = document.getElementById(val.id.replace(validator, 'Border2'));	
	}	
	else
	if(val.id.indexOf('FieldValidator') > 0)
		validator = 'FieldValidator';
	else
	if(val.id.indexOf('reValidator') > 0)
		validator = 'reValidator';
	else
	if(val.id.indexOf('cValidator') > 0)
		validator = 'cValidator';		
	else
	if(val.id.indexOf('cmValidator') > 0) {
		validator = 'cmValidator';		
		border = document.getElementById(val.id.replace(validator, 'Border2'));	
	}	
	
	if(!border)
		border = document.getElementById(val.id.replace(validator, 'Border'));	
	
	//if(!border)
	//	alert("no border " + val.id.replace(validator, 'Border'));
		
	if(border && val.enabled != false) {
		if(!val.isvalid)
			AddURegistrationValidationError(border.id, val);
		else
			RemoveURegistrationValidationError(border.id, val);
	}
	else 
		zen_DOMValidatorUpdateDisplayBase(val);
}

function zen_DOMValidatorUpdateDisplayBase(val) {
	var prop = dom_getAttribute(val,"display");
	
	var style_str = "", style_prefix = "display: ";
		
    if (typeof(prop) == "string") {    
        if (prop == "None") {
            return;
        }
        if (prop == "Dynamic") {
			style_str = val.isvalid ? "none" : "inline";
            //val.setAttribute("style",style_prefix+style_str+"; ");
            val.style.display = style_str;
            return;
        }
    }
    val.style.visibility = val.isvalid ? "hidden" : "visible";
	/*
	if (typeof(val.display) == "string") {    
        if (val.display == "None") {
            return;
        }
        if (val.display == "Dynamic") {
            val.style.display = val.isvalid ? "none" : "inline";
            return;
        }
    }
    val.style.visibility = val.isvalid ? "hidden" : "visible";
    */
}

function AddURegistrationValidationError(borderId, validator) {
	for(var i = 0 ; i < URegistrationBorderArr.length; i++) 
		if(URegistrationBorderArr[i].BorderId == borderId) {
			URegistrationBorderArr[i].AddError(validator);
			return;
		}	
}

function RemoveURegistrationValidationError(borderId, validator) {
	for(var i = 0 ; i < URegistrationBorderArr.length; i++) 
		if(URegistrationBorderArr[i].BorderId == borderId) {
			URegistrationBorderArr[i].RemoveError(validator);
			return;
		}	
}

function ShowURegistrationErrors() {
	//if(typeof(Page_ValidationActive) != "undefined")
	var errorCount = 0;
	for(var i = 0 ; i < URegistrationBorderArr.length; i++) 
		if(!URegistrationBorderArr[i].IsAcceptValidator())
			errorCount += DisplayURegistrationError(URegistrationBorderArr[i]);
	
	for(var i = 0 ; i < URegistrationBorderArr.length; i++) 
		if(URegistrationBorderArr[i].IsAcceptValidator())
			DisplayURegistrationError(URegistrationBorderArr[i], true, errorCount == 0);
				
	FormatURegistrationErrors();
	setTimeout("ShowURegistrationErrors()",	100);
}

function DisplayURegistrationError(uRegistrationBorder, acceptValidator, noErrors) {
	var border = element = document.getElementById(uRegistrationBorder.BorderId);			
	if(!border)
		return 0;	
	var result = uRegistrationBorder.ErrorCount();	
	if(acceptValidator)
		border.style.border = result > 0 && noErrors ? 'solid 2px ' + URegistration_BorderColor : '';
	else
		border.style.border = result > 0 ? 'solid 2px ' + URegistration_BorderColor : '';
	
	var icon = document.getElementById(uRegistrationBorder.BorderId.replace('Border', 'URegistration_ErrorIcon'));			
	if(!icon)
		return result;
	
	if(result <= 0 || acceptValidator && !noErrors)	{
		icon.style.display = 'none';				
		return result;
	}
	var x = 0, y = 0;
	while(element != null)
	{
		x += element.offsetLeft;
		y += element.offsetTop;
		element = element.offsetParent;
	}
	icon.style.left = (x +  border.offsetWidth + 2) + "px";
	icon.style.top = (y + 2) + "px";
	icon.style.display = '';				
	return result;
}

function FormatURegistrationErrors() {
	var errors = [];
	for(var i = 0 ; i < URegistrationBorderArr.length; i++) 
		URegistrationBorderArr[i].CollectErrors(errors);
	if(errors.length == 0)
		errors = URegistrationServerSideErrorArr;
	var errorOutput = '';
	for(var i = 0 ; i < errors.length; i++) {
		if(errorOutput != '') 
			errorOutput += '<br />';
		errorOutput += errors[i];
	}
	
	if(typeof(Zen_RegistrationError) == "function")
		Zen_RegistrationError(errorOutput != '');

	if(!document.getElementById('URegistrationErrorPanel')	)
		return;
	document.getElementById('URegistrationErrorPanel').innerHTML = errorOutput;	
	if(typeof(Zen_RegistrationError) != "function")
	{
		document.getElementById('URegistrationErrorPanel').style.borderTop = "2px solid " + URegistration_BorderColor;				
		document.getElementById('URegistrationErrorPanel').style.borderBottom = "2px solid " + URegistration_BorderColor;
	}
	document.getElementById('URegistrationErrorPanel').style.color = URegistration_BorderColor;
	document.getElementById('URegistrationErrorPanel').style.display = errorOutput == '' ? 'none' : '';
}

function AddURegistrationBorder(borderId) {
	URegistrationBorderArr[URegistrationBorderArr.length] = new URegistrationBorder(borderId);
}

function AddURegistrationServerSideError(error) {
	for(var i = 0; i < URegistrationServerSideErrorArr.length; i++) 
		if(URegistrationServerSideErrorArr[i] == error)
			return;
	URegistrationServerSideErrorArr[URegistrationServerSideErrorArr.length] = error;
}

function RemoveURegistrationServerSideError(error) {
    var arr = [];
	for(var i = 0; i < URegistrationServerSideErrorArr.length; i++) 
		if(URegistrationServerSideErrorArr[i] != error)
			arr[arr.length] = URegistrationServerSideErrorArr[i];
	URegistrationServerSideErrorArr = arr;
}

function OnCaptchaChange(captchaId, error) {
    RemoveURegistrationServerSideError(error);
    RemoveCaptchaBorder(captchaId);
}                

function OnCustomCaptchaChange(captchaId, error) {
    RemoveURegistrationServerSideError(error);
    RemoveCaptchaBorder(captchaId);
}

function RemoveCaptchaBorder(captchaId) {
    var captchaBorder = document.getElementById(captchaId + "_Border");
    if(captchaBorder)
        captchaBorder.style.border = "";
}

function OnURegistrationAcceptValidate(source, args) {
	if(document.getElementById(URegistration_CheckBoxId))
		return document.getElementById(URegistration_CheckBoxId).checked;
	return true;
}

function OnURegistrationDeleteFile(field, inputFile, controlFile, validatorId) {
	if(document.getElementById(field))
		document.getElementById(field).value = '1';
	else
		alert('No found ' + field);
	if(document.getElementById(inputFile))
		document.getElementById(inputFile).style.display = '';	
	if(document.getElementById(controlFile))
		document.getElementById(controlFile).style.display = 'none';
	if(document.getElementById(validatorId))
		document.getElementById(validatorId).enabled = true;
}

function URegistrationBorder(borderId) {
	this.BorderId = borderId;
	this._validators = [];
}

URegistrationBorder.prototype = {
	AddError : function(validator) {
		if(validator == null) {
			this._serverValidator = true;
			return;
		}
		this.GetValidator(validator.id).Count = 1;
		this.GetValidator(validator.id).Validator = validator;
	},
	RemoveError : function(validator) {
		this.GetValidator(validator.id).Count = 0;
		this.GetValidator(validator.id).Validator = null;
	},
	ErrorCount : function () {
		var result = 0;
		for(var i = 0; i < this._validators.length; i++)
			result += this._validators[i].Count;
		return result + (this._serverValidator ? 1 : 0);	
	},
	GetValidator : function(validatorId) {
		for(var i = 0; i < this._validators.length; i++)
			if(this._validators[i].ValidatorId == validatorId)
				return this._validators[i];
		this._validators[this._validators.length]	 = {ValidatorId : validatorId, Count : 0};
		return this._validators[this._validators.length - 1];
	}, 
	CollectErrors : function(errors) {
		for(var i = 0; i < this._validators.length; i++)
			if(this._validators[i].Count > 0 && !this.ContainsError(errors, this.GetError(this._validators[i].Validator)))
				errors[errors.length] = this.GetError(this._validators[i].Validator);
				
		if(errors.length > 1) {
			var index = this.GetErrorIndex(errors, URegistration_PrivacyAgreementError);
			if(index > 0)
				errors.splice(index, 1);
		}		
	}, 
	ContainsError : function(errors, error) {
		if(error == '')
			return true;
		for(var i = 0; i < errors.length; i++)	
			if(errors[i] == error)
				return true;
		return false;		
	},
	GetError : function(validator) {
		if(validator == null)
			return "";
		if(validator.id.indexOf('FieldValidator') > 0)
			return URegistration_MandatoryFieldValidationError;
		if(validator.id.indexOf('reValidator') > 0) {
			if(validator.errormessage == 'Email') // Number
				return URegistration_EmailValidationError;	
			if(validator.errormessage == 'File') 
				return URegistration_InvalidFileFormatError;		
			if(validator.errormessage == 'PasswordLength') 
				return URegistration_PasswordLengthError;			
		}			
		if(validator.id.indexOf('cmValidator') > 0) {
			return URegistration_PasswordValidationError;	
		}
		if(validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'PasswordLength') {
			return URegistration_PasswordLengthError;
        }
        if (validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'PasswordAlphaNumeric') {
            return URegistration_PasswordAlphaNumericError;
        }
		if(validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'DateUndefined') {
			return URegistration_DateValidationError;	
		}
		if(validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'Date') {
			return URegistration_MandatoryFieldValidationError;	
		}
		if(validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'DateRange') {
			return URegistration_DefaultValidationError;	
		}
		if(validator.id.indexOf('cValidator') > 0 && validator.errormessage == 'A') {
			return URegistration_PrivacyAgreementError;	
		}
		return URegistration_DefaultValidationError;	
	},
	GetErrorIndex : function(errors, error) {
		for(var i = 0; i < errors.length; i++)	
			if(errors[i] == error)
				return i;
		return -1;		
	},
	IsAcceptValidator : function() {
		for(var i = 0; i < this._validators.length; i++)		
			if(this._validators[i].Validator && this._validators[i].Validator.id.indexOf('cValidator') > 0 && this._validators[i].Validator.errormessage == 'Accept')
				return true;
		return false;		
	}
}

ShowURegistrationErrors();