/*==================================
Title: checkformlib.ls
Content: Проверка правильности значений полей
Created: ВЕТЕР
Date: 11.09.2000

Modified: BETEP
Date: 12.10.2000
Changed: Сделана отдельная функция проверки значения. Проверка правильности названия полей в форме вынесена в отдельную библиотеку: checkformfields.js, чтобы эта проверка выполнялась тоько один раз.
Modified: SA
Date: 29.10.2000
Changed: Сделана функция проверки времени. Наложено ограничение на дату она не может быть больше 2010 года
Modified: IVA
Date: 02.04.2001
Changed: Добавила функцию CheckField
Modified: IVA
Date: 10.04.2001
Changed: Добавила функцию FN_GetDate
==================================*/
var Obj;
var b_Comm = true;
var lsObjTitle;

function Replace(Str, FindFor, ReplaceWith)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Замещает все вхождения FindFor в сторке Str на значение ReplaceWith
IN:
  Str           - Строка, в которой должны быть сделаны замены
  FindFor       - Задает что надо найти в строке
  ReplaceWith   - Задает на что надо заменить
OUT:
  Replace - строка Str, вкоторой замененны все вхождения FindFor на значение ReplaceWith
==================================*/
{
  Str = "" + Str;
  res=""+Str.replace(FindFor, ReplaceWith);
  while(Str!=res)
  {
   Str=res;
   res=Str.replace(FindFor, ReplaceWith);
  };
  return ""+Str;
};

function CheckDate(liDay,liMonth,liYear)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Проверка правильности даты.
IN:
 liDay      - номер дня;
 liMonth    - номер месяца;
 liYear     - год в 4 цифры, например, 1999.
OUT:
 CheckDate - true, если дата верна; false, если дата задана не правильно.
==================================*/
{
  ldDate = new Date(1*liYear, 1*liMonth-1, 1*liDay);

  return ((ldDate.getFullYear()==1*liYear)&&(1*liYear<2070)&&
            (ldDate.getMonth()==1*liMonth-1)&&
            (ldDate.getDate()==1*liDay));
};
function CheckDateTime(liDay,liMonth,liYear,liHour,liMinute)
/*==================================
Created: SA
Date: 29.10.2000
Content: Проверка правильности даты-времени.
IN:
 liDay      - номер дня;
 liMonth    - номер месяца;
 liYear     - год в 4 цифры, например, 1999.
 liHour     - часы в 24 часовом интервале
 liMinute   - минуты
OUT:
 CheckDateTime - true, если дата-время верно; false, если нет.
==================================*/
{
  ldDate = new Date(1*liYear, 1*liMonth-1, 1*liDay, 1*liHour, 1*liMinute);

  return ((ldDate.getFullYear()==1*liYear)&&(1*liYear<2070)&&
            (ldDate.getMonth()==1*liMonth-1)&&
            (ldDate.getDate()==1*liDay)&&
            (ldDate.getHours()==1*liHour)&&
            (ldDate.getMinutes()==1*liMinute));
};
function CheckTime(liHour,liMinute)
/*==================================
Created: VIGOR
Date: 29.10.2000
Content: Проверка правильности времени.
IN:
 liHour     - часы в 24 часовом интервале
 liMinute   - минуты
OUT:
 CheckTime - true, если время верно; false, если нет.
==================================*/
{
  ldDate = new Date(1, 1, 1, 1*liHour, 1*liMinute);

  return ((ldDate.getHours()==1*liHour)&&
            (ldDate.getMinutes()==1*liMinute)
		 );
};

function RTrim(lsStr)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Возвращает строку без завершающих пробелов.
IN:
 lsStr - строка
OUT:
 RTrim - строка без завершающих пробелов.
==================================*/
{
  for(lsRes=lsStr;lsRes.charAt(lsRes.length-1)==' ';lsRes=lsRes.substr(0,lsRes.length-1));
  
  return lsRes;
};

function LTrim(lsStr)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Возвращает строку без предшествующих пробелов.
IN:
 lsStr - строка
OUT:
 LTrim - строка без предшествующих пробелов.
==================================*/
{
  for(lsRes=lsStr;lsRes.charAt(0)==' ';lsRes=lsRes.substr(1,lsRes.length-1));
  
  return lsRes;
};

function Trim(lsStr)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Возвращает строку без предшествующих и завершающих пробелов.
IN:
 lsStr - строка
OUT:
 Trim - строка без предшествующих и завершающих пробелов.
==================================*/
{
  return RTrim(LTrim(lsStr));
};

function CheckStringDate(lsDate, lsDateTitle)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Проверяет корректность даты заданной в строке. 
IN:
 lsDate         - Строка с датой. Например: "01.08.2000" или "1/8/2000"
 lsDateTitle    - Название поля для отображения ошибки. Например: "Дата создания документа"
OUT:
 CheckStringDate - Строка с датой, если дата задана правильно.; false, если дата задана не правильно.
==================================*/
{
  lsDate = Replace(lsDate,"/",".");
  liDay = lsDate.substr(0,lsDate.indexOf("."));
  lsDatetmp = lsDate.substr(lsDate.indexOf(".")+1);
  liMonth = lsDatetmp.substr(0,lsDatetmp.indexOf("."));
  lsDatetmp = lsDatetmp.substr(lsDatetmp.indexOf(".")+1);
  liYear = lsDatetmp.substr(0);
  if(!CheckDate(liDay, liMonth, liYear))
  {
    if (b_Comm) alert("В поле "+lsDateTitle+" некорректно введено значение.\nВозможные ошибки:\n - значение поля должно иметь формат ДД.ММ.ГГГГ;\n - введена не существующая дата.");
    return false;
  };
  /*if (1*liYear < 2001) {
           alert("В поле "+lsDateTitle+" введена дата меньше 2001 года.");
           return false; 
  }*/
  return liDay + "." + liMonth + "." + liYear;
};

function CheckStringDateTime(lsDateTime, lsDateTitle)
/*==================================
Created: SA
Date: 29.10.2000
Content: Проверяет корректность даты-времени заданного в строке. 
IN:
 lsDateTime         - Строка с датой-веременем. Например: "01.08.2000 12:00" или "1/8/2000 12:00"
 lsDateTitle    - Название поля для отображения ошибки. Например: "Дата создания документа"
OUT:
 CheckStringDateTime - Строка с датой-веременем, если дата задана правильно.; false, если дата задана не правильно.
==================================*/
{
  lsDate = unescape(lsDateTime)
  lsDate = Replace(lsDate,"/",".");
  lsDate = Replace(lsDate," ",".");
  lsDate = Replace(lsDate,":",".");
  liDay = lsDate.substr(0,lsDate.indexOf("."));
  lsDatetmp = lsDate.substr(lsDate.indexOf(".")+1);
  liMonth = lsDatetmp.substr(0,lsDatetmp.indexOf("."));
  lsDatetmp = lsDatetmp.substr(lsDatetmp.indexOf(".")+1);
  liYear = lsDatetmp.substr(0,lsDatetmp.indexOf("."));
  lsDatetmp = lsDatetmp.substr(lsDatetmp.indexOf(".")+1);
  liHour = lsDatetmp.substr(0,lsDatetmp.indexOf("."));
  lsDatetmp = lsDatetmp.substr(lsDatetmp.indexOf(".")+1);
  liMinute = lsDatetmp.substr(0);

  if(!CheckDateTime(liDay, liMonth, liYear, liHour, liMinute))
  {
    if (b_Comm) alert("В поле "+lsDateTitle+" некорректно введено значение.\nВозможные ошибки:\n - значение поля должно иметь формат ДД.ММ.ГГГГ ЧЧ:МИ;\n - введено не существующее время.");
    return false;
  };

return (liDay + "." + liMonth + "." + liYear+" "+liHour+":"+liMinute);
};

function CheckStringTime(lsDateTime, lsDateTitle)
/*==================================
Created: SA
Date: 29.10.2000
Content: Проверяет корректность времени заданного в строке. 
IN:
 lsTime         - Строка с датой-веременем. Например: "12:00" или "12:00"
 lsDateTitle    - Название поля для отображения ошибки. Например: "Дата создания документа"
OUT:
 CheckStringTime - Строка с веременем, если дата задана правильно.; false, если дата задана не правильно.
==================================*/
{
  lsDate = unescape(lsDateTime)
  lsDate = Replace(lsDate,"/",".");
  lsDate = Replace(lsDate," ",".");
  lsDate = Replace(lsDate,":",".");
  liHour = lsDate.substr(0,lsDate.indexOf("."));
  lsDatetmp = lsDate.substr(lsDate.indexOf(".")+1);
  liMinute = lsDatetmp.substr(0);

  if(!CheckTime(liHour, liMinute))
  {
    if (b_Comm) alert("В поле "+lsDateTitle+" некорректно введено значение.\nВозможные ошибки:\n - значение поля должно иметь формат ЧЧ:МИ;\n - введено не существующее время.");
    return false;
  };

	return (liHour+":"+liMinute);
};


function CheckNumber(lsNumber, lsNumberTitle)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: проверяет корректность числа lsNumber и в случае если это не число выдает ошибку используя lsNumberTitle
IN:
 lsNumber       - Предполагаемое число в строковом формате. Например: "023,34"
 lsNumberTitle  - Название поля на тот случай, если придется выводить ошибку. Например: "Неправильное число: Возраст"
OUT:
 CheckNumber - действительное число, если входная строка содержит действительное число; false, если lsNumber - не действительное чилсло.
==================================*/
{
  lsNumber = Replace(unescape(lsNumber), ",", ".");
  if(lsNumber*1!=lsNumber)
  {
    if (b_Comm) alert("В поле "+lsNumberTitle+" некорректно введено значение.\nЗначение поля должно быть числом.");
    return false;
  };
  return escape(lsNumber*1);
};

function CheckInteger(lsInteger, lsIntegerTitle)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: проверяет корректность целого числа lsInteger и в случае если это не число выдает ошибку используя lsIntegerTitle
IN:
 lsInteger      - Предполагаемо целое число в строковом формате. Например: "023"
 lsIntegerTitle - Название поля на тот случай, если придется выводить ошибку. Например: "Неправильное число: Возраст"
OUT:
 CheckInteger - целое число, если входная строка содержит целое число; false если lsInteger - не целое чилсло.
==================================*/
{
  lsInteger = Replace(unescape(lsInteger), ",", ".");
  if(lsInteger != Math.floor(lsInteger)|lsInteger.indexOf(".")>=0)
  {
    if (b_Comm) alert("В поле "+lsIntegerTitle+" некорректно введено значение.\nЗначение поля должно быть целым числом.");
    return false;
  };
  return escape(Math.floor(lsInteger));
};

function CheckString(lsString, lsStringTitle)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Заглушка возврящающая всегда входную строку. нуждна для уменьшения количества операций.
IN:
 lsString      - Строка.
 lsStringTitle - Название поля.
OUT:
 CheckString - строка из lsString
==================================*/
{
  return lsString;
};

function CheckDateInterval(lsDateBeg, lsDateEnd)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Функция проверяет правильность интервала заданного двумя строками (см CheckStringDate)
IN:
 lsDateBeg:     - Строка с датой начала интервала. Например: "01.08.2000" или "1/8/2000"
 lsDateEnd:     - Строка с датой конца интервала.
OUT:
 CheckDateInterval - true, если интервал дат правилен(дата начала меньше даты конца); false, если интервал задан не правильно.
==================================*/
{
  liDayBeg = lsDateBeg.substr(0,lsDateBeg.indexOf("."));
  lsDateBegtmp = lsDateBeg.substr(lsDateBeg.indexOf(".")+1);
  liMonthBeg = lsDateBegtmp.substr(0,lsDateBegtmp.indexOf("."));
  lsDateBegtmp = lsDateBegtmp.substr(lsDateBegtmp.indexOf(".")+1);
  liYearBeg = lsDateBegtmp.substr(0);
  ldDateBeg = new Date(1*liYearBeg, 1*liMonthBeg-1, 1*liDayBeg);
  
  liDayEnd = lsDateEnd.substr(0,lsDateEnd.indexOf("."));
  lsDateEndtmp = lsDateEnd.substr(lsDateEnd.indexOf(".")+1);
  liMonthEnd = lsDateEndtmp.substr(0,lsDateEndtmp.indexOf("."));
  lsDateEndtmp = lsDateEndtmp.substr(lsDateEndtmp.indexOf(".")+1);
  liYearEnd = lsDateEndtmp.substr(0);
  ldDateEnd = new Date(1*liYearEnd, 1*liMonthEnd-1, 1*liDayEnd);
  
  return ((ldDateEnd - ldDateBeg) >= 0);
};

function CheckDateTimeInterval(lsDateTimeBeg, lsDateTimeEnd)
/*==================================
Created: BETEP
Date: 31.10.2000
Content: Функция проверяет правильность интервала даты-времени заданного двумя строками (см CheckStringDate)
IN:
 lsDateTimeBeg:     - Строка с датой-временем начала интервала. Например: "01.08.2000 12:34" или "1/8/2000 02:00"
 lsDateTimeEnd:     - Строка с датой-временем конца интервала.
OUT:
 CheckDateTimeInterval - true, если интервал дат правилен(дата начала меньше даты конца); false, если интервал задан не правильно.
==================================*/
{
  liDayBeg = lsDateTimeBeg.substr(0,lsDateTimeBeg.indexOf("."));
  lsDateTimeBegtmp = lsDateTimeBeg.substr(lsDateTimeBeg.indexOf(".")+1);
  liMonthBeg = lsDateTimeBegtmp.substr(0,lsDateTimeBegtmp.indexOf("."));
  lsDateTimeBegtmp = lsDateTimeBegtmp.substr(lsDateTimeBegtmp.indexOf(".")+1);
  liYearBeg = lsDateTimeBegtmp.substr(0,lsDateTimeBegtmp.indexOf(" "));
  lsDateTimeBegtmp = lsDateTimeBegtmp.substr(lsDateTimeBegtmp.indexOf(" ")+1);
  liHourBeg = lsDateTimeBegtmp.substr(0,lsDateTimeBegtmp.indexOf(":"));
  lsDateTimeBegtmp = lsDateTimeBegtmp.substr(lsDateTimeBegtmp.indexOf(":")+1);
  liMinuteBeg = lsDateTimeBegtmp.substr(0);
  ldDateTimeBeg = new Date(1*liYearBeg, 1*liMonthBeg-1, 1*liDayBeg, 1*liHourBeg, 1*liMinuteBeg);
    
  liDayEnd = lsDateTimeEnd.substr(0,lsDateTimeEnd.indexOf("."));
  lsDateTimeEndtmp = lsDateTimeEnd.substr(lsDateTimeEnd.indexOf(".")+1);
  liMonthEnd = lsDateTimeEndtmp.substr(0,lsDateTimeEndtmp.indexOf("."));
  lsDateTimeEndtmp = lsDateTimeEndtmp.substr(lsDateTimeEndtmp.indexOf(".")+1);
  liYearEnd = lsDateTimeEndtmp.substr(0,lsDateTimeEndtmp.indexOf(" "));
  lsDateTimeEndtmp = lsDateTimeEndtmp.substr(lsDateTimeEndtmp.indexOf(" ")+1);
  liHourEnd = lsDateTimeEndtmp.substr(0,lsDateTimeEndtmp.indexOf(":"));
  lsDateTimeEndtmp = lsDateTimeEndtmp.substr(lsDateTimeEndtmp.indexOf(":")+1);
  liMinuteEnd = lsDateTimeEndtmp.substr(0);
  ldDateTimeEnd = new Date(1*liYearEnd, 1*liMonthEnd-1, 1*liDayEnd, 1*liHourEnd, 1*liMinuteEnd);
  
  return ((ldDateTimeEnd - ldDateTimeBeg) >= 0);
};

function CheckTimeInterval(lsTimeBeg, lsTimeEnd)
/*==================================
Created: VIGOR
Date: 31.10.2000
Content: Функция проверяет правильность интервала даты заданного двумя строками (см CheckStringDate)
IN:
 lsTimeBeg:     - Строка с временем начала интервала. Например: "12:34" или "02:00"
 lsTimeEnd:     - Строка с временем конца интервала.
OUT:
 CheckTimeInterval - true, если интервал дат правилен(временем начала меньше временем конца); false, если интервал задан не правильно.
==================================*/
{

  liHourBeg = lsTimeBeg.substr(0,lsTimeBeg.indexOf(":"));
  lsDateTimeBegtmp = lsTimeBeg.substr(lsTimeBeg.indexOf(":")+1);
  liMinuteBeg = lsDateTimeBegtmp.substr(0);
  ldDateTimeBeg = new Date(1, 1, 1, 1*liHourBeg, 1*liMinuteBeg);
    
  liHourEnd = lsTimeEnd.substr(0,lsTimeEnd.indexOf(":"));
  lsDateTimeEndtmp = lsTimeEnd.substr(lsTimeEnd.indexOf(":")+1);
  liMinuteEnd = lsDateTimeEndtmp.substr(0);

  ldDateTimeEnd = new Date(1, 1, 1, 1*liHourEnd, 1*liMinuteEnd);
 // alert((ldDateTimeEnd - ldDateTimeBeg)>=0);
  return !((ldDateTimeEnd - ldDateTimeBeg) >= 0);
};


function CheckValue
(
  sCheckStr,
  oBegObj,
  oEndObj,
  sCheckInterval,
  bBegExpect,
  bEndExpect
)
/*==================================
Created: BETEP
Date: 11.11.2000
Content: Функция проверяет корректность значения из поля.
IN:
  sCheckStr - строка с функцией, которая проверяет правильность значения. Например: "CheckNumber"
  oBegObj - проверяемый объект. Нужен для внесения откорректированных значений обратно.
  oEndObj - конечный проверяемый объект. Нужен для получения значения и сравнения интервала.
  sCheckInterval - Выражение для проверки интервала. Например "(1*lsObjValue > 1*lsObjValueEnd)" или "CheckDateInterval(lsObjValue, lsObjValueEnd)"
  bBegExpect - Обязательность значниея в проверяемом поле 
  bEndExpect - Обязательность значниея в поле конца.
OUT:
  CheckValue - true, если значение поля и значения поля конца интервала и инревальность - корректны; false - если хоть что-то не так.
  
Мимоходом стандартизируются значения корректных полей:
У строк удаляются пробелы с начала и с конца.
У чисел удаляются пробелы с начала и с конца и запятые меняются на точки
У дат удаляются пробелы с начала и с конца.
==================================*/
{   
    BegValue = RTrim(oBegObj.value);
    if(BegValue=="")
    {
      if(bBegExpect)
      {
        if (b_Comm) alert("Некорректно заполнена форма. Поле "+oBegObj.title+" не должно быть пустым.");
        return false;
      };
    }
    else
    {
      BegValue =  eval(sCheckStr+"('"+ escape(BegValue) +"','"+oBegObj.title+"')");
      if(BegValue===false)return false;
      BegValue = unescape(BegValue);
    };
    if(typeof(BegValue)!="boolean")oBegObj.value = BegValue;
    
    if(typeof(oEndObj)=="object")//Если есть конец интервала надо попытаться проверить интервальность.
    {
      EndValue = RTrim(oEndObj.value);
      //alert(bEndExpect +"!"+ EndValue);
      if(EndValue=="")
      {
        if(bEndExpect)
        {
          if (b_Comm) alert("Некорректно заполнена форма. Поле "+oEndObj.title+" не должно быть пустым.");
          return false;
        };
      }
      else
      {
        EndValue = eval(sCheckStr+"('"+ escape(EndValue) +"','"+lsObjTitle+"')");
        if(EndValue===false)return false;
        EndValue = unescape(EndValue);
      };
      if(typeof(EndValue)!="boolean")oEndObj.value = EndValue;
      //alert(BegValue +"!"+ EndValue +"!"+ (BegValue==="")+"!"+(EndValue===""));
      if((BegValue==="") || (EndValue===""))return true;//Если нет одного из значений, то интервальность проверять уже не надо.
      bInterval = eval(sCheckInterval);
      //alert(bInterval);
      if(bInterval)
      {
        alert("Некорректно введен интервал.\nЗначение поля '"+oBegObj.title+"' должно быть меньше значения поля '"+oEndObj.title+"'.");
        return false;
      };
    };
  return true;
};

function CheckForm(lsFormName)
/*==================================
Created: BETEP
Date: 11.10.2000
Content: Функция проверяет форму с именем из lsFormName
IN:
  lsFormName - Имя формы.
OUT:
  CheckForm - true, если ВСЕ поля в форме корректны; false - если ХОТЯ БЫ ОДНО поле некорректною
  
Мимоходом стандартизируются значения корректных полей:
У строк удаляются пробелы с начала и с конца.
У чисел удаляются пробелы с начала и с конца, запятые меняются на точки и убираются нули с начала и с конца.
У дат удаляются пробелы с начала и с конца, слеши заменяются на точки.
==================================*/
{ 
  loForm = eval("document."+lsFormName); //Получаем объект форму
  for(liCurObj=0; liCurObj<loForm.length; liCurObj++) //Сканируем все объекты в форме.
  {
    loObj = loForm.elements[liCurObj]; //Получаем объект для дальнейшего анализа.
    lsObjName = ""+loObj.name; //Получаем имя объекта для дальнейшего анализа.
    lsObjValue = loObj.value; //Получаем значение объекта для дальнейшего анализа.
    lsObjTitle = loObj.title; //Получаем описание объекта на всякий случай.
    lsObjType = ""+loObj.type; //Получаем тип объекта. Анализируем только TEXT.
    
    if(lsObjType.toUpperCase()!="TEXT" && lsObjType.toUpperCase()!="TEXTAREA")continue;
    
    lbExp = lsObjName.substr(1,1)=="e"//Обязательно ли наличие значения в поле?
    if(lsObjName.substr(2,1)=="b")//проверяем интервал.
    {
      loObjEnd = eval("document."+lsFormName+"."+lsObjName.substr(0,1)+"ee"+lsObjName.substr(3));
      if(typeof(loObjEnd)!="object")loObjEnd = eval("document."+lsFormName+"."+lsObjName.substr(0,1)+"se"+lsObjName.substr(3));
      lsObjNameEnd = loObjEnd.name;
      lbExpEnd = lsObjNameEnd.substr(1,1)=="e";
    }
    else 
    {
      loObjEnd="";
      lbExpEnd = false;
    };
    
    if(lsObjName.substr(2,1)!="e")
    {
	  switch(lsObjName.substr(0,1))
      {
        case "d": if(!CheckValue("CheckStringDate", loObj, loObjEnd, "!CheckDateInterval(BegValue, EndValue)", lbExp, lbExpEnd))return false;
                  break;
        case "t": if(!CheckValue("CheckStringDateTime", loObj, loObjEnd, "!CheckDateTimeInterval(BegValue, EndValue)", lbExp, lbExpEnd))return false;
                  break;
        case "s": if(!CheckValue("CheckString", loObj, loObjEnd, "false", lbExp, lbExpEnd))return false;
                  break;
        case "n": if(!CheckValue("CheckNumber", loObj, loObjEnd, "BegValue-EndValue>=0", lbExp, lbExpEnd))return false;
                  break;
        case "i": if(!CheckValue("CheckInteger", loObj, loObjEnd, "BegValue-EndValue>=0", lbExp, lbExpEnd))return false;
                  break;
        case "m": if(!CheckValue("CheckStringTime", loObj, loObjEnd, "CheckTimeInterval(BegValue, EndValue)", lbExp, lbExpEnd))return false;
                  break;
      };
    };
  };
    return true;
};

function CheckField(Obj, Flag)
/*==================================
Title: CheckField
Created: IVA
Date: 30.03.2001
Content: Функция проверяет корректность значения в поле ввода формы с именем из lsFormName
In:
  Obj		- Имя поля ввода
  b_Comm	- Разрешить, запретить вывод ошибок: (true, false)
Out:
  true, если значение корректно; false - если нет
==================================*/
{
if (!(Obj)) return true;
else
{
	b_Comm = Flag;
    loObj = Obj;							//Получаем объект для дальнейшего анализа.
    lsObjName = ""+loObj.name;				//Получаем имя объекта для дальнейшего анализа.
    lsObjValue = loObj.value;				//Получаем значение объекта для дальнейшего анализа.
    lsObjTitle = "";						//Получаем описание объекта на всякий случай.
    lsObjType = "'"+loObj.type+"'";				//Получаем тип объекта. Анализируем только TEXT.
    
    lbExp = lsObjName.substr(1,1)=="e";		//Обязательно ли наличие значения в поле?
    if(lsObjName.substr(2,1)=="b")			//проверяем интервал.
    {
      loObjEnd = eval("document."+lsFormName+"."+lsObjName.substr(0,1)+"ee"+lsObjName.substr(3));
      if(typeof(loObjEnd)!="object")loObjEnd = eval("document."+lsFormName+"."+lsObjName.substr(0,1)+"se"+lsObjName.substr(3));
      lsObjNameEnd = loObjEnd.name;
      lbExpEnd = lsObjNameEnd.substr(1,1)=="e";
    }
    else 
    {
      loObjEnd="";
      lbExpEnd = false;
    };
    b_Flag =  true;
    
    if(lsObjName.substr(2,1)!="e")
    {
      switch(lsObjName.substr(0,1))
      {
        case "d": if(!CheckValue("CheckStringDate", loObj, loObjEnd, "!CheckDateInterval(BegValue, EndValue)", lbExp, lbExpEnd)) b_Flag = false;
                  break;
        case "t": if(!CheckValue("CheckStringDateTime", loObj, loObjEnd, "!CheckDateTimeInterval(BegValue, EndValue)", lbExp, lbExpEnd)) b_Flag = false;
                  break;
        case "s": if(!CheckValue("CheckString", loObj, loObjEnd, "false", lbExp, lbExpEnd)) b_Flag = false;
                  break;
        case "n": if(!CheckValue("CheckNumber", loObj, loObjEnd, "BegValue-EndValue>=0", lbExp, lbExpEnd)) b_Flag = false;
                  break;
        case "i": if(!CheckValue("CheckInteger", loObj, loObjEnd, "BegValue-EndValue>=0", lbExp, lbExpEnd)) b_Flag = false;
                  break;
      }
    }
	if (!b_Flag) Obj.focus();
	return b_Flag;
}
}
function FN_GetDate(s_format)
/*==================================
Title: FN_GetDate
Created: IVA
Date: 10.04.2001
Content: Функция возвращает системную дату в виде строки
In:
  s_format	= y, дата возвращается в формате: YYYY
  			= t, дата возвращается в формате: DD.MM.YYYY HH24:MI 
			= d, дата возвращается в формате: DD.MM.YYYY
Out:
  системная дата в виде строки
==================================*/
{
	d = new Date();
	s = d.getYear();
	if (s_format == "d" || s_format == "t") s = d.getDate() + "." + (d.getMonth() + 1) + "." + s;
	if (s_format == "t") s += " " + d.getHours() + ":" + d.getMinutes();
	return(s);
} 

/*=================================== for ipoteka ====================*/


function CheckNum111(lsNumber)
{
  res = 1;
  
  if(lsNumber*1!=lsNumber)
  {
	res = 0;
  };
  return res;
};



