/*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 preSets = [
	['email', "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$","Ошибка. Поле 'FIELD_NAME' содержит недопустимые символы."],
	['login', "^([a-zA-Z0-9_]{3,})$", "Ошибка. Поле 'FIELD_NAME' содержит недопустимые символы. Вы можите использовать только цифры и латинские буквы."],
	['number',"^([0-9]+)$", "Ошибка. Поле 'FIELD_NAME' должно быть числовым."],
	['empty', "", "Ошибка. Поле 'FIELD_NAME' пустое. Заполните его."]
];

var errorMessages = [
	["No errors found"],
	["Ошибка. Поле 'FIELD_NAME' пустое. Заполните его."],
	["Ошибка. Поле 'FIELD_NAME' должно быть не менее PARAM символов."],
	["Ошибка. Поле 'FIELD_NAME' должно быть не более PARAM символов."],
	["Ошибка. Поле 'FIELD_NAME' введено неверно."],
	["Ошибка. Проверьте 'FIELD_NAME'."],
];

/*
			// ['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 __CheckBadPropValues(element, badValues) {
	var badValuesArr = badValues.substr(4).split(',');
	var checked = 0;
	if (badValuesArr.length) {
		for (var i=0;i<badValuesArr.length;i++) {
			for (var j=1; j<100; j++) {
				var el = document.getElementById(element.name+'_'+j);
				if (el) {
					if (el.checked) {
						checked++;
						if (el.value==badValuesArr[i]) {
							return errCode=5;
						}
					}
				}
			}
		}
	}

	if (checked==0) {
		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 __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) {
	if(regExp.substr(0,4)=='not:') {
		var errCode = __CheckBadPropValues(element, regExp);

	} else {
		var errCode = __CheckTextField(element,regExp,min,max,empty);
	}
	return errCode;
}

function __CheckRadio(element,regExp,min,max,wrongValues,empty) {
	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);');

				//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 (required[i][1]!='Prop') {
						param1.focus();
					}


					return false;
				}

				// confirmation
				for (var k=0; k<form.elements.length; k++)
					if (form.elements[k].name == form.elements[j].name + '_confirmation')
						if (form.elements[k].value != form.elements[j].value) {
							alert('Error. Field ' + required[i][2] + ' confirmation failed.');
							form.elements[k].focus();
							return false;
						}

			}

		}
	}
	return true;
}
