// JavaScript Document

var magic_STRING = "~voodoo!character@sequence#";

var siteREw = /[А-Яа-яA-Za-z0-9_]/g;
var siteREW = /[^А-Яа-яA-Za-z0-9_]/g;
String.prototype.safeREW = function () {
	var value = this.valueOf();
	var re = new RegExp(siteREW);
	return value.replace(re, " ");
}

function valEmpty (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String, fckfield;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			if (typeof FCKeditorAPI != "undefined") {
				fckfield = FCKeditorAPI.GetInstance(field.id);
			}
			if (fckfield) {
				value = fckfield.GetXHTML(false).safeSpace();
			} else {
				value = field.value.safeSpace();
			}
			if (value == "") {
				valMessageSend(field, "Ошибка: поле не заполнено.<br />Введите/выберите значение !");
				return false;
			}
		}
	}
	return true;
}

function valSearch (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String, flag = new Boolean, array = new Array;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			array = field.value.toSearchString().split(/\s/);
			if (array.length && array[0] != "") {
				flag = false;
				for (var j = 0; j < array.length; j++) {
					if (array[j].length >= 3) {
						flag = true;
						break;
					}
				}
				if (!flag) {
					valMessageSend(field, "Ошибка: хотя бы одно из слов должно быть длинее трех букв.<br />Введите/выберите значение !");
					return false;
				}
			} else {
				valMessageSend(field, "Ошибка: используйте только алфавитно-цифровые символы<br />(знаки препинания при поиске не учитываются).<br />Введите/выберите значение !");
				return false;
			}
		}
	}
	return true;
}

function valFCKEmpty (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = FCKeditorAPI.GetInstance(arguments[i]);
		if (field) {
			
			if (value == "") {
				valMessageSend(field, "Ошибка: поле не заполнено.<br />Введите/выберите значение !");
				return false;
			}
		}
	}
	return true;
}

function valDate (_fields) { 
	valMessageClear(getObject(arguments[0]));
	var field, value = new String, built = new String;
	var d = new Number, m = new Number, y = new Number;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				value.match(/(\d{1,2})\.(\d{1,2})\.(\d{4})/);
				d = Number(RegExp.$1); m = Number(RegExp.$2) - 1; y = Number(RegExp.$3);
				value = value.replace(/0(\d)\.(\d{1,2})\.(\d{4})/, "$1.$2.$3").replace(/(\d{1,2})\.0(\d)\.(\d{4})/, "$1.$2.$3");
				var date = new Date(y, m, d);
				built = date.getDate() + "." + (date.getMonth() + 1) + "." + date.getFullYear();
				if (value != built) {
					valMessageSend(field, "Ошибка: неверная дата.<br />Введите дату в формате дд.мм.гггг !");
					return false;
				}
			}
		}
	}
	return true;
}

function valNum (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				value = value.replace(/\,/g, ".");
				if (isNaN(value)) {
					valMessageSend(field, "Ошибка: неверное число.<br />Введите/выберите число !");
					return false;
				}
			}
		}
	}
	return true;
}

function valNumPos (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				value = value.replace(/\,/g, ".");
				if (isNaN(value) || value <= 0) {
					valMessageSend(field, "Ошибка: неверное число.<br />Введите/выберите положительное число !");
					return false;
				}
			}
		}
	}
	return true;
}

function valNumIntPos (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				value = value.replace(/\,/g, ".");
				if (isNaN(value) || value <= 0 || Math.floor(value) != value) {
					valMessageSend(field, "Ошибка: неверное число.<br />Введите/выберите целое положительное число !");
					return false;
				}
			}
		}
	}
	return true;
}

function valNumIntPos0 (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				value = value.replace(/\,/g, ".");
				if (isNaN(value) || value < 0 || Math.floor(value) != value) {
					valMessageSend(field, "Ошибка: неверное число.<br />Введите/выберите целое положительное число или 0 !");
					return false;
				}
			}
		}
	}
	return true;
}

function valNumIntPos0Name (_fields) {
	valMessageClear(getObjectN(arguments[0])[0]);
	var fields, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		fields = getObjectN(arguments[i]);
		if (fields.length) {
			for (var j = 0; j < fields.length; j++) {
				value = fields[j].value.safeSpace();
				if (value) {
					value = value.replace(/\,/g, ".");
					if (isNaN(value) || value < 0 || Math.floor(value) != value) {
						valMessageSend(fields[j], "Ошибка: неверное число.<br />Введите/выберите целое положительное число или 0 !");
						return false;
					}
				}
			}
			
		}
	}
	return true;
}

function valEMail (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				if (value.replace(/([\w-._]+@[\w-.]+)/, "") != "") {
					valMessageSend(field, "Ошибка: неверный e-mail.<br />Введите/выберите e-mail в формате aaa@bbb.ccc !");
					return false;
				}
			}
		}
	}
	return true;
}

function valChecked (_fields) { // names, NOT ids here!
	valMessageClear(getObjectN(arguments[0])[0]);
	var fields, value = new String, flag = new Boolean;
	for (var i = 0; i < arguments.length; i++) {
		fields = getObjectN(arguments[i]);
		for (var j = 0, flag = false; j < fields.length; j++) {
			if (fields[j].checked) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			valMessageSend(fields[0], "Ошибка: ничего не отмечено.<br />Выберите хотя бы один элемент !");
			return false;
		}
	}
	return true;
}

function valCheckedSimple (_fields) { // names, NOT ids here!
	valMessageClearSimple("valmessage");
	var fields, value = new String, flag = new Boolean;
	for (var i = 0; i < arguments.length; i++) {
		fields = getObjectN(arguments[i]);
		for (var j = 0, flag = false; j < fields.length; j++) {
			if (fields[j].checked) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			valMessageSendSimple("valmessage", "Ошибка: ничего не отмечено.<br />Выберите хотя бы один элемент !");
			return false;
		}
	}
	return true;
}

function valAddBefore (add, _fields) {
	var field, value = new String;
	for (var i = 1; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value && value.indexOf(add) != 0) {
				field.value = add + value;
			}
		}
	}
}
