/*

	ver 1.02 _date and datetime empty check

		1.01 _confirmation fix



*/



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."],

	['password', "^([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 __CheckDateField(element,regExp,min,max,empty) {

	var result = 0;

	if (empty) {

		var isEmpty = false;

		var subs = new Array('_year', '_month', '_day');

		for (var i=0;i<subs.length ;i++ ) {

			var objs = document.getElementsByName(element.name+subs[i]);

			if (objs) {

				//alert(objs[0]);

				isEmpty = __CheckEmpty(objs[0]); 

			}



			if (isEmpty==1) return 1;

		}

		

	}



	return result;

}





function __CheckDatetimeField(element,regExp,min,max,empty) {

	var result = 0;

	if (empty) {

		var isEmpty = false;

		var subs = new Array('_year', '_month', '_day', '_hour', '_minute');

		for (var i=0;i<subs.length ;i++ ) {

			var objs = document.getElementsByName(element.name+subs[i]);

			if (objs) {

				//alert(objs[0]);

				isEmpty = __CheckEmpty(objs[0]); 

			}



			if (isEmpty==1) return 1;

		}

		

	}



	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 = __CheckDateField(element,regExp,min,max,empty);

	return errCode;

}



function __CheckDatetime(element,regExp,min,max,wrongValues,empty) {

	var errCode = __CheckDatetimeField(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);

					

					if (param1.focus && required[i][1]!='Date' && required[i][1]!='Datetime') {

						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') {

							//alert(form.elements[k].name+' '+form.elements[j].name);

							if (form.elements[k].value != form.elements[j].value) {

								//search for field label index

								var idx = -1;

								for (var x=0;x<required.length;x++) {

									if (required[x][0]+'_confirmation'==form.elements[k].name) {

										idx = x;

										break;

									}

								}

								if (idx>-1) {

									alert('Error. Field ' + required[idx][2] + ' confirmation failed.');

									form.elements[k].focus();

								}

								return false;

							}

						}

					}

				}

			}

	

		}

	}

	return true;

}