// 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 valEmpty_eng (_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, "Error: this field is empty.<br />Enter/select a value !");
				return false;
			}
		}
	}
	return true;
}

function valEmpty_ger (_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, "Fehler: Das Feld ist nicht gefüllt.<br />Eingabe / auswahl Sie einen Wert!");
				return false;
			}
		}
	}
	return true;
}

function valDup (array, field) {
	field = getObject(field);
	if (field) {
		valMessageClear(field);
		var value = field.value.safeSpace();
		for (var i = 0; i < array.length; i++) {
			if (value == array[i].safeSpace()) {
				valMessageSend(field, "Ошибка: поле не может совпадать с '" + array[i] + "'.<br />Введите/выберите значение !");
				return false;
			}
		}
	}
	return true;
}

function valEqual (field1, field2) {
	valMessageClear(getObject(arguments[1]));
	var value1 = new String, value2 = new String;
	field1 = getObject(field1);
	field2 = getObject(field2);
	value1 = field1.value;
	value2 = field2.value;
	if (value1 != value2) {
		valMessageSend(field2, "Ошибка: значения не совпадают.<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 valNumPos0 (_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 />Введите/выберите положительное число или 0 !");
					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 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-+._]*@[\w-.]+)/, "") != "") {
					valMessageSend(field, "Ошибка: неверный e-mail.<br />Введите/выберите e-mail в формате aaa@bbb.ccc !");
					return false;
				}
			}
		}
	}
	return true;
}

function valEMailMulti (_fields) {
	valMessageClear(getObject(arguments[0]));
	var field, value = new String, valuearray = new Array;
	for (var i = 0; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace();
			if (value) {
				valuearray = value.split(/[\,\;]\s*/g);
				for (var j = 0; j < valuearray.length; j++) {
					if (valuearray[j].replace(/(\w+[\w-+._]*@[\w-.]+)/, "") != "") {
						valMessageSend(field, "Ошибка: неверный e-mail.<br />Введите/выберите e-mail (или несколько e-mail через запятую) в формате aaa@bbb.ccc !");
						return false;
					}
				}
			}
		}
	}
	return true;
}

function valEMail_eng (_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, "Error: wrong e-mail.<br />Enter/select e-mail (aaa@bbb.ccc format) !");
					return false;
				}
			}
		}
	}
	return true;
}

function valEMail_ger (_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, "Fehler: Falsche E-Mail.<br />Eingabe / Auswahl E-Mail (aaa@bbb.ccc-Format) !");
					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 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;
			}
		}
	}
}

function valReJoin (splitter, joiner, _fields) {
	var field, value = new String;
	for (var i = 2; i < arguments.length; i++) {
		field = getObject(arguments[i]);
		if (field) {
			value = field.value.safeSpace().split(splitter).join(joiner);
			field.value = value;
		}
	}
}
