﻿function change_field(Obj) {
//	Obj.style.color = "red";
	Obj.style.borderColor = "red";
}

// Проверка на минимальную длину строки
function min_len(Obj, Param) {
	if (Param.indexOf("minlen", 0) == -1) return true;

var I, J, V;
var ErrStr = "Значение поля ### не должно быть короче === символов !" + msg_Param;

	I = Param.indexOf("minlen", 0)														// Проверка на минимальную длину строки

	if (I > -1) {
		I += 7;
		J = Param.indexOf(")", I);
		V = Param.substr(I, J - I);

		if (Obj.value.length < V) {
			ErrStr = ErrStr.replace(/===/g, V);
			if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrStr);					// Вывод сообщения
			return false;
		}
	}
	
	return true;
}

// Проверка на больше - меньше
function chk_min_max(Obj, Param) {
	if ((Param.indexOf("min", 0) == -1) && (Param.indexOf("max", 0) == -1))	return true;

var I, J, V;
var ErrStr = "Значение поля ### не должно быть === !" + msg_Param;

	I = Param.indexOf("min", 0)															// Проверка на меньше
	if (I > -1) {
		I += 4;
		J = Param.indexOf(")", I);
		V = Param.substr(I, J - I);

		if (parseFloat("1,1") > 1) { V = V.replace(/./g, ","); t = ","; }
		else { V = V.replace(/,/g, "."); t = "."; }

		if (parseFloat(Obj.value) < parseFloat(V)) {
			ErrStr = ErrStr.replace(/===/g, "меньше " + V);
			if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrStr);					// Вывод сообщения
			return false;
		}
	}
	
	I = Param.indexOf("max", 0)															// Проверка на больше
	if (I > -1) {
		I += 4;
		J = Param.indexOf(")", I);
		V = Param.substr(I, J - I);

		if (parseFloat("1,1") > 1) { V = V.replace(/./g, ","); t = ","; }
		else { V = V.replace(/,/g, "."); t = "."; }

		if (parseFloat(Obj.value) > parseFloat(V)) {
			ErrStr = ErrStr.replace(/===/g, "больше " + V);
			if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrStr);					// Вывод сообщения
			return false;
		}
	}

	return true;
}


// Вычлинение дополнительного сообщения
var msg_Param = "";
function set_msg_Param (Param) {
var I = Param.indexOf("msg###", 0);
	if (I == -1) return;

	I += 6;

var J = Param.indexOf("###", I);
	if (J == -1) return;
	
	msg_Param = Param.substr(I, J - I);
	if (msg_Param > "") msg_Param = "\n" + msg_Param;
}

// Основная функция =====================================================================================================
function chk_field(Obj, Param) { // Param = "alert, trim, notspace, notempty, not0, not<0, int, float, min(123), max(123), minlen(123), money, money000, email, change, msg###Сообщение###"

try { if (submitObj != null) submitObj.style.display = ""; }
catch(e) {;}

if (Param == "") return true;

set_msg_Param(Param);

if (!min_len(Obj, Param)) return false;

/*
if (document.all.change != null) {
	if (document.all.change.length != null) {


	
	} else {
		if (document.all.change.type == "hidden") document.all.change.value = "1";
	}
}
*/

var ReturnFlag = false;
var tmpStr = "";
var checkStr = "";
var t = "";
var I = 0;
var J = 0;
var ErrEmpty = "Поле ### должно быть заполнено !" + msg_Param;
var Err0 = "Значение поля ### не должно быть нулевым !" + msg_Param;
var ErrLess0 = "Значение поля ### не должно быть меньше нуля !" + msg_Param;
var ErrInt = "Значение поля ### должно быть целым числом !" + msg_Param;
var ErrFloat = "Значение поля ### должно быть числом !" + msg_Param;
var ErrEmail = "Неверно заполнено поле ### !" + msg_Param;

	if (Param.indexOf("change", 0) > -1) change_field(Obj);								// Помечено, как измененное

	if (Param.indexOf("trim", 0) > -1) Obj.value = Trim (Obj.value);					// Удаление концевых пробелов
	
	if ((Param.indexOf("notspace", 0) > -1) || (Param.indexOf("email", 0) > -1))		// Глобальное удаление пробелов
		Obj.value = Obj.value.replace(/ /g, "");

	if ((Param.indexOf("notempty", 0) > -1) && (Obj.value == "")) {						// Проверка на пустую строку
		if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrEmpty);					// Вывод сообщения
		return false;
	}

	if (Param.indexOf("email", 0) > -1)	{												// Проверка адреса email
		Obj.value = Obj.value.replace(/ /g, "");
		if ((Obj.value.indexOf ("@") < 1) || (Obj.value.lastIndexOf (".") < 3) || (Obj.value.indexOf (".") == Obj.value.length - 1)) {
			if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrEmail);				// Вывод сообщения
			return false;
		}
	}
	
	if (Param.indexOf("int", 0) > -1) {													// Проверка на целое
		ReturnFlag = true;
		Obj.value = Obj.value.replace(/ /g, "");
		check_str = "1"+ Obj.value;
		if (Obj.value != "") {
			if (isNaN(Obj.value)) { ReturnFlag = false; }
			else {
				tmpStr = parseInt(check_str) + "";
				if (check_str.length != tmpStr.length) ReturnFlag = false;
			}

			if (!ReturnFlag && (Param.indexOf("alert", 0) > -1)) alert_fun(Obj, ErrInt);	// Вывод сообщения
			if (!ReturnFlag) return false;
		}
		
		if (!chk_min_max(Obj, Param)) return false;
	}

	if ((Param.indexOf("float", 0) > -1) || (Param.indexOf("money", 0) > -1)) {				// Проверка на дробное
		ReturnFlag = true;
		Obj.value = Obj.value.replace(/ /g, "");
		if (Obj.value != "") {
			if (parseFloat("1,1") > 1) { Obj.value = Obj.value.replace(/./g, ","); t = ","; }
			else { Obj.value = Obj.value.replace(/,/g, "."); t = "."; }
			
			if(!isNaN(parseFloat(Obj.value)))
				Obj.value = parseFloat(Obj.value);
			
			if (isNaN(Obj.value)) { ReturnFlag = false; }
			else {
				tmpStr = parseFloat(Obj.value) + "";
				if (Obj.value.length != tmpStr.length) ReturnFlag = false;
			}

			if (!ReturnFlag && (Param.indexOf("alert", 0) > -1)) alert_fun(Obj, ErrFloat);	// Вывод сообщения
			if (!ReturnFlag) return false;
		}
		
		if (!chk_min_max(Obj, Param)) return false;
	}

	if ((Param.indexOf("not0", 0) > -1) && (Obj.value == "0")) {						// Проверка на нулевое значение
		if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, Err0);						// Вывод сообщения
		return false;
	}
	
	if ((Param.indexOf("not<0", 0) > -1) && (parseInt(Obj.value) < 0)) {				// Проверка на значение меньше нуля
		if (Param.indexOf("alert", 0) > -1) alert_fun(Obj, ErrLess0);					// Вывод сообщения
		return false;
	}

	if ((Param.indexOf("money0", 0) > -1) && (Obj.value.indexOf(t, 0) > 0)) {			//Форматирование денежных
		I = Param.indexOf("money0", 0) + 5;
		for (J = 1; Param.length > I + J + 1; J++) if (Param.substr(I + J, 1) != "0") break;

		I = Obj.value.indexOf(t, 0);
		if (Obj.value.length >  I + J + 1) Obj.value = Obj.value.substr(0, I + J + 1);
	}

	return true;
}

function alert_fun(Obj, ErrStr) {
var MyErrStr = "";

	if (ErrStr != "") MyErrStr = ErrStr;
	else MyErrStr = "Недопустимое значение поля ### !" + msg_Param;

	if ( (Obj.title != null) && (Obj.title != "")) MyErrStr = MyErrStr.replace(/###/g, Obj.title.toUpperCase());
	else MyErrStr = MyErrStr.replace(/###/g, "");
	
	alert(MyErrStr);
	
	if (Obj.readOnly || Obj.disabled) return;
	Obj.focus();
}
