/////////////////////////////////////////////////////////////////////////
function CheckTypes(){
	this.NONE = -1;
	this.EMPTY = 0;
	this.INTEGER = 1;
	this.EMAIL = 2;
	this.PASSWORD = 3;
	this.SELECT = 4;
	this.POSITIVE_NUMBER = 5;
	this.NON_NEGATIVE_NUMBER = 6;
	this.NUMBER = 7;
	this.PHONE = 8;
	this.EGN = 9;
	this.DUAL_LISTBOX = 10;
	this.ALL_CAPS = 11;
	this.CALLBACK = 12;
	this.POSITIVE_INTEGER = 13;
	this.PERCENT = 14;
	this.CHOOSE_SELECT = 15;
	this.POSITIVE_NUMBER_TWO_DIGITS = 16;
	this.POSITIVE_NUMBER_FOUR_DIGITS = 17;
	this.FILENAME = 18;
	this.CUSTOM_REGEXP = 19;
	this.CODE = 20;
	this.CHECKED = 21;
}
var CHK_TYPES = new CheckTypes();

/////////////////////////////////////////////////////////////////////////
function DvlValidateControls(sOnSubmit){
	var i, j, k;
	var nCurrLanguage;
	var bUsedALanguage;
	var sPrefix = "document."+ this.name + ".";
	var sCntrlPrefix;		
	

	//if(typeof(bDoSubmit) == 'undefined' || bDoSubmit == '') bDoSubmit = true;	
	if(typeof(this.arSwitchBaseNames) != "undefined"){		
		// if it's an array or this is a second pass
		this.sSwitchBaseName = "";
		if(typeof(this.bIsArray) == "undefined"){
			this.bIsArray = true;
		}
	}else{		
		// if it's not an array (only first pass)		
		this.arSwitchBaseNames = Array();
		this.arSwitchBaseNames.push(this.sSwitchBaseName);
		this.bIsArray = false;
	}
	

	//alert(this.bIsArray);  //towa ne e masiv
	//alert(this.arSwitchBaseNames[0]); //undefined	
	if(typeof(this.arControls) != 'undefined'){		
		for(i = 0; i < this.arControls.length; i++){			
			//alert(sPrefix + this.arControls[i] +"->"+ eval(sPrefix + this.arControls[i]));
			if(!CheckValue(eval(sPrefix + this.arControls[i]))){
				return false;
			}
		}
	}
	if(typeof(this.arLngControls) != 'undefined'){
		bUsedALanguage = false;
		for(k = 0; k < this.arSwitchBaseNames.length; k++){
			this.sSwitchBaseName = this.arSwitchBaseNames[k];
			//alert(sPrefix + this.sSwitchBaseName);
			for(i = 0; i < this.arLanguages.length; i++){
				if(eval(sPrefix + this.sSwitchBaseName + i).checked){
					bUsedALanguage = true;
					nCurrLanguage = eval(sPrefix + this.sSwitchBaseName + i).value;
					for(j = 0; j < this.arLngControls.length; j++){
						if(this.bIsArray){
							sCntrlPrefix = k +"_";
						}else{
							sCntrlPrefix = "";
						}
						//alert(sPrefix + this.arLngControls[j] + sCntrlPrefix + nCurrLanguage);
						if(!CheckValue(eval(sPrefix + this.arLngControls[j] + sCntrlPrefix + nCurrLanguage))){
							return false;
						}
					}
				}
			}
		}
	}else{
		bUsedALanguage = true;
	}
	if(!bUsedALanguage){
		alert(this.sNoLanguageSelectedErr);
		return false;
	}
	
	if(typeof(sOnSubmit) == 'undefined' || sOnSubmit == ""){		
		if(this.OnValidationComplete == "-1"){			
			this.submit(); //// TRUE
		}else{
			//alert(this.OnValidationComplete);
			eval(this.OnValidationComplete);
		}		
	}else{
		if(eval(sOnSubmit) == true){			
			if(this.OnValidationComplete == "-1"){
				this.submit(); //// TRUE
			}else{
				eval(this.OnValidationComplete);
			}
		}else{
			return false;
		}
	}	
	return true;
}

/////////////////////////////////////////////////////////////////////////
function CheckValue(oControl, bHideError){
	//var nchecktype = eval(oControl.nchecktype);	
	if(oControl.getAttribute("disablevalidation")){
		return true;
	}
	
	for(nIndex = 0; nIndex < 100; nIndex++){
		var sCheckNum = nIndex;
		if(nIndex == 0)
			sCheckNum = "";
		
		eval("var nchecktype = eval(oControl.getAttribute(\"nchecktype"+ sCheckNum +"\"));");
		
		//var nchecktype = eval(oControl.getAttribute('nchecktype'+ sCheckNum));
		
		if(typeof(nchecktype) == 'undefined' || nchecktype == null){
			if(nIndex == 0)
				continue;
			else
				break;
		}
		//eval("var sErrorMessage = oControl.sErr"+sCheckNum+";");
		var sErrorMessage = oControl.getAttribute('serr'+ sCheckNum);
		var oTwinControl;
		if(nchecktype == CHK_TYPES.EMPTY){		
			if(oControl.value.replace(/\s+/, "") == ""){
				if(!bHideError){
					
					alert(sErrorMessage);
					HighlightField(oControl);
				}																	
				return false;				
			}			
		}else if(nchecktype == CHK_TYPES.SELECT){
			if(oControl.selectedIndex == -1){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.CHOOSE_SELECT){
			if(oControl.selectedIndex < 1){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.EMAIL){
			var regExp = new RegExp(/^[0-9a-z-_]+(\.[0-9-a-z_]+)*@[0-9a-z-_]+(\.[0-9a-z_]+)+$/gi);
			sEMail = oControl.value;
			//alert(sEMail);
			if(!sEMail.match(regExp)){
			//if((sEMail == "" || (sEMail.indexOf('@') < 1 || sEMail.indexOf('@') == (sEMail.length - 1)))){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.POSITIVE_NUMBER){
			var reCheck = new RegExp("^[0-9]+\\.?[0-9]*$");
			if(oControl.value.toString().match(reCheck) == null || oControl.value <= 0){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.INTEGER){
			var reCheck = new RegExp("^[+-]?([0-9]+)$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.POSITIVE_INTEGER){
			var reCheck = new RegExp("^[0-9]+$");
			
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.NON_NEGATIVE_NUMBER){
			var reCheck = new RegExp("^[0-9]+\\.?[0-9]*$");
			if(oControl.value.toString().match(reCheck) == null || oControl.value < 0){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.NUMBER){
			var reCheck = new RegExp("^[+-]?([0-9]+\\.?[0-9]*)?$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.PASSWORD){
			sPwd = oControl.value.replace(/\s+/, "");
			oTwinControl = eval("document.all."+ oControl.name + "2");
			sPwd2 = oTwinControl.value.replace(/\s+/, "");
			if(sPwd == ""){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}else{
				if(sPwd != sPwd2){
					if(!bHideError){
						alert(oControl.sErr2);
						HighlightField(oTwinControl);
					}
					return false;
				}
			}
		}else if(nchecktype == CHK_TYPES.PHONE){
			var reCheck = new RegExp("^\\+?([0-9 ])+$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.EGN){
			var reCheck = new RegExp("^[0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9][0-9]$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.ALL_CAPS){
			var reCheck = new RegExp("^[A-Z_]+$");
			
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.CODE){
			var reCheck = new RegExp("^[A-Za-z0-9_/\-]+$");
			
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.DUAL_LISTBOX){
			if(oControl.options.length == 0){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.CALLBACK){			
			if(eval(oControl.sCallbackValidator +"("+ "document.all."+ oControl.name +")") == true){
				//return true;
			}else{
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.PERCENT){
			var reCheck = new RegExp("^[0-9]?[0-9]?\\.?[0-9]*$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.FILENAME){
			var reCheck = new RegExp("^[0-9A-Za-z_]+$");
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.CUSTOM_REGEXP){		
			var reCheck = new RegExp(oControl.sCustomRexExp);			
			//alert(oControl.value.match(reCheck))
			if(oControl.value.toString().match(reCheck) == null){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.CHECKED){		
			if(!oControl.checked){
				if(!bHideError){
					alert(sErrorMessage);
					HighlightField(oControl);
				}
				return false;
			}
		}else if(nchecktype == CHK_TYPES.NONE){
			
		}else{
			alert('Invalid Check Type!');
			return false;
		}
	}
		
	return true;
}

/////////////////////////////////////////////////////////////////////////
function ValidateInput(){
	// ESC, SPACEBAR OR ENTER			
	if(event.keyCode == 27 || event.keyCode == 13) return true;
	if(event.srcElement.disabled || event.srcElement.readOnly) return false;
	if(!event.srcElement.nchecktype) return true;
	
	var arCheckTypes = new Array();
	var nchecktype = null;
	var Field = event.srcElement;
	var nTemp;
	// find the check type
	arCheckTypes.push(eval(event.srcElement.nchecktype));
	var i = 1;
	while(Field.getAttribute('nchecktype'+ i) != null){
		arCheckTypes.push(eval(Field.getAttribute('nchecktype'+ i++)));
	}

	for(i = 0; i < arCheckTypes.length; i++){
		if(arCheckTypes[i] == CHK_TYPES.POSITIVE_NUMBER || arCheckTypes[i] == CHK_TYPES.NON_NEGATIVE_NUMBER || arCheckTypes[i] == CHK_TYPES.NUMBER){
			nchecktype = CHK_TYPES.NUMBER;
			break;
		}
		if(arCheckTypes[i] == CHK_TYPES.POSITIVE_INTEGER || arCheckTypes[i] == CHK_TYPES.PERCENT || arCheckTypes[i] == CHK_TYPES.INTEGER){
			nchecktype = arCheckTypes[i];
			break;
		}
	}
	
	if(nchecktype == null) return true;
	
	/*
	if(nchecktype != CHK_TYPES.NUMBER && nchecktype != CHK_TYPES.NON_NEGATIVE_NUMBER && nchecktype != CHK_TYPES.POSITIVE_NUMBER && nchecktype != CHK_TYPES.POSITIVE_INTEGER && nchecktype != CHK_TYPES.PERCENT && nchecktype != CHK_TYPES.INTEGER) 
		return true;	
	*/
			
	var oRange = document.selection.createRange();
	var sOrigValue = event.srcElement.value;			
	//var sSelection = oRange.text;			
	oRange.text = String.fromCharCode(event.keyCode);
	oRange.select();
	sValue = event.srcElement.value;
	
	oControl = new AbstractControl(event.srcElement.name, sValue, nchecktype, event.srcElement.sCallbackValidator);//event.srcElement.nchecktype
	var nPointPosition = sValue.indexOf(".");
	var nNumDigits = 0;

	if(nPointPosition >= 0){
		if(typeof(event.srcElement.nNumDigitsAfterDecimal) == 'undefined' || event.srcElement.nNumDigitsAfterDecimal == ''){
			nNumDigits = 4;
		}else{
			nNumDigits = new Number(eval(event.srcElement.nNumDigitsAfterDecimal));
		}
		if(nchecktype == CHK_TYPES.NUMBER || nchecktype == CHK_TYPES.NON_NEGATIVE_NUMBER || nchecktype == CHK_TYPES.POSITIVE_NUMBER){
			//alert(event.srcElement.outerHTML);
			
		}else if(nchecktype == CHK_TYPES.PERCENT){
			if(nPointPosition > 2){
				event.srcElement.value = sOrigValue;
				return false;
			}
		}else if(nchecktype == CHK_TYPES.POSITIVE_INTEGER){
			nNumDigits = 0;
		}
		
		if((sValue.length - nPointPosition - 1) > nNumDigits){
			event.srcElement.value = sOrigValue;
			return false;
		}
	}
	//alert(oControl.innerHTML);
	if(!CheckValue(oControl, true)){
		event.srcElement.value = sOrigValue;
	}
	return false;
}

/////////////////////////////////////////////////////////////////////////
function AbstractControl(sName, vValue, nchecktype, sCallbackValidator){
	this.nchecktype = nchecktype;
	this.value = vValue;
	this.sCallbackValidator = sCallbackValidator;
	this.name = sName;
}
/////////////////////////////////////////////////////////////////////////
function CheckSubmit(frmForm, sOnSubmit){  ///, bDoSubmit	   
	if(frmForm.ValidateControls(sOnSubmit)){		
		frmForm.submit();		
	}		
}
////////////////////////////////////////////////////////////////////////////////////////
function FindParentForm(oObject){
	while(oObject.parentNode.tagName != "FORM"){
		oObject = oObject.parentNode;
	}
	return oObject.parentNode;
}
////////////////////////////////////////////////////////////////////////////////////////
function ChangeState(chkSwitch, nLanguageId){
	var bState = chkSwitch.checked;
	var i;
	var frmForm = FindParentForm(chkSwitch);
	var sPrefix = "document."+ frmForm.name + ".";
	for(i = 0; i < frmForm.arLngControls.length; i++){
		eval(sPrefix + frmForm.arLngControls[i] + nLanguageId).disabled = !bState;
	}
}
////////////////////////////////////////////////////////////////////////////////////////
function DisableForm(oForm){
	var i;
	for(i = 0; i < oForm.elements.length; i++){
		oForm.elements[i].disabled = true;
	}
}
////////////////////////////////////////////////////////////////////////////////////////
function DisplayMessageAndGoBack(sMessage, sUrl){
	alert(sMessage);
	window.location = sUrl;
}
//////////////////////////////////////////////////////////////////////////////////////////
function HighlightField(oControl){
	if(typeof(oControl) != "undefined"){
		oControl.value = "";
		oControl.focus();
	}	
	//
}
