var preSets = [
	['email', "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$","Error. Field FIELD_NAME contains illegal characters."],
	['login', "^([a-zA-Z0-9_]{3,})$", "Error. Field FIELD_NAME contains illegal characters. You can use letters, numbers and '_' only."],
	['number',"^([0-9]+)$", "Error. The field FIELD_NAME must be a number."],
	['empty', "^.+", "Error. The field FIELD_NAME is empty. Please fill it in."]
];

var errorMessages = [
	["No errors found"],
	["Error. The field FIELD_NAME is empty. Please fill it in."],
	["Error. The field FIELD_NAME has to contain at least PARAM characters."],
	["Error. The field FIELD_NAME may contain maximum PARAM characters."],
	["Error. The field FIELD_NAME is entered incorrectly or contains illegal characters."],
	["Error. Please check field FIELD_NAME."],
];

/*function debug(_obj) { 
	var str = ""; 
	for (prop in _obj) { 
	   str += prop + " = "+ _obj[prop] + ";<br>"; 
	} 
	var win = window.open (); 
	win.document.write (str);
}*/

/*
			// ['first_name','LISK TYPE','First Name','REGEXP','3','6','wrong values','custom error']
			// 0 first_name
			// 1 LISK TYPE
			// 2 label 
			// 3 REGEXP
			// 4 min 5 max
			// 6 wrong values 
			// 7 custom error
			// 8 is empty

*/


function __IsPreSet(name) {
	for (var i=0; i<preSets.length; i++) {
		if (preSets[i][0] == name) return true;
	}
	return false;
}

function __GetPreSetErrorMessage(name) {
	for (var i=0; i<preSets.length; i++) {
		if (preSets[i][0] == name) return preSets[i][2];
	}	
}

function __CheckEmpty(element) {
	if (element.value=='') return 1;
	return 0;
}

function __CheckPreset(name,element) {
	var regExp;
	for (var i=0; i<preSets.length; i++) {
		if (preSets[i][0] == name) regExp = preSets[i][1];
	}
	if (__CheckRegExp(regExp,element)==false) return 4;

	return 0;
}

function __CheckRegExp(regExp,element) {
	if (window.RegExp) {
		var r = new RegExp(regExp);
		if (!r.test(element.value)) return false;
	}
	return true;
}

function __CheckMinMax(element,min,max) {
	var s = new String(element.value);
	if (min!='' && min>0 && s.length<min) {
		return 2;
	}
	if (max!='' && max>0 && s.length>max) {
		return 3;
	}	
	return 0;
}

function __CheckTextField(element,regExp,min,max,empty) {
	var result = 0;
	if (empty) {
		var isEmpty = __CheckEmpty(element);
		if (isEmpty==1) return 1;
	}
	
	//Min Max check
	result = __CheckMinMax(element,min,max);
	if (result!=0) {
		return result;
	}
	
	if (__IsPreSet(regExp)) {
		result = __CheckPreset(regExp,element);
	} else {
		if (__CheckRegExp(regExp,element,min,max)==false) {
			return 5;
		}
	}
	
	return result;
}

function __CheckBadValues(element, badValues) {
	var badValuesArr = badValues.substr(4).split(',');
	if (badValuesArr.length) {
		for (var i=0;i<badValuesArr.length;i++) {
			if (element.value==badValuesArr[i]) {
				return errCode=5;
			}
		}
	}
}

function __CheckFlag(element,regExp,min,max,wrongValues,empty) {
	var errCode = 0;
	if (!element.checked) {
		errCode = 5;
	}
	return errCode;
}

function __CheckInput(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckPassword(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckList(element,regExp,min,max,wrongValues,empty) {
	if(regExp.substr(0,4)=='not:') {
		var errCode = __CheckBadValues(element, regExp);
		
	} else {
		var errCode = __CheckTextField(element,regExp,min,max,empty);
	}
	return errCode;
}

function __CheckCategory(element,regExp,min,max,wrongValues,empty) {
	return __CheckList(element,regExp,min,max,wrongValues,empty);
}

function __CheckDate(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckDatetime(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckProp(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckRadio(element,regExp,min,max,wrongValues,empty,form) {
	var result = 0;
	if (empty) {
		var btnName=element.name;
		var isChecked=false;
		for (var i=0; i<form.elements.length; i++) {
			if (form.elements[i].name==btnName) {
				if (form.elements[i].checked) {
					isChecked = true;
					break;
				} 
			}
		}	
		if (!isChecked) return 1;
	}	
	
	
/*	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;*/
}

function __CheckHtml(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckText(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function __CheckListbox(element,regExp,min,max,wrongValues,empty) {
	var errCode = __CheckTextField(element,regExp,min,max,empty);
	return errCode;
}

function RenderError(fieldName,errCode,customErrorMessage,param) {
	/*
	1 - empty
	2 - less a min value
	3 - max
	4 - preset Error
	5 - custom regexp error
	*/
	var errMsg = errorMessages[errCode];
	
	if (errCode==4) errMsg = __GetPreSetErrorMessage(param);
	if (errCode==5) { 
		errMsg = customErrorMessage;
		if (errMsg=="") {
			errMsg = errorMessages[errCode];
		}
	}
	s = new String(errMsg);
	s = s.replace(/FIELD_NAME/g,fieldName);
	s = s.replace(/PARAM/g,param);
	alert(s);
}

function CheckForm(form, required) {
	for (var i=0; i<required.length; i++) {
		for (var j=0; j<form.elements.length; j++) {
			if (form.elements[j].name == required[i][0]) {
				
				var param1;
				param1 = form.elements[j];
				if(required[i][1]=='Flag') {
					param1 = form.elements[j];
					for(var k=0;k<form.elements.length;k++) {
						if (form.elements[k].name == param1.name+'_checked') {
							param1 = form.elements[k];
						}
					}
				}
				
				var empty = (required[i][8]==1)?true:false;
				var errCode = eval('__Check'+required[i][1]+'(param1,required[i][3],required[i][4],required[i][5],required[i][6],empty,form);');
				
				//checkValue(form.elements[j].value, required[i][1], required[i][2], required[i][3], required[i][4], required[i][5], required[i][6]);
				if (errCode>0) {
					var param = '';
					// min error
					if (errCode==2) param = required[i][4];
					// max error
					if (errCode==3) param = required[i][5];
					// pre set error
					if (errCode==4) param = required[i][3];
						
					RenderError(required[i][2],errCode,required[i][7],param);
					
					param1.focus();
					
					return false;
				}
				
				// confirmation
				for (var k=0; k<form.elements.length; k++) {
					for (var j=0; j<form.elements.length; j++) {
						if (form.elements[k].name == form.elements[j].name + '_confirmation') {
							if (form.elements[k].value != form.elements[j].value) {
								alert('Error. Field ' + required[j][2] + ' confirmation failed.');
								form.elements[k].focus();
								return false;
							}
						}
					}
				}
			}
	
		}
	}
	return true;
}