﻿/***********************************************************
 *                     AXiS CMS Version 3
 *
 * Автор:   Александр Кузнецов
 * Файл:    client-scripts.js
 ***********************************************************/

/*
  Client Scripts v2 Unicode
*/

function isNetscape()
{
  return (navigator.appName.indexOf("Netscape") != -1);
}

function isNav2()
{
  return (navigator.appName.indexOf("Netscape") != -1) &&
         (navigator.appVersion.indexOf("2.")    != -1);
}

function isNav3()
{
    return (navigator.appName.indexOf("Netscape") != -1) &&
           (navigator.appVersion.indexOf("3.")    != -1);
}

function isExplorer()
{
  return (navigator.appName.indexOf("Microsoft") != -1);
}

// Устанавливает значение полей  для последующий передачи методом POST
function SetValuePostData(name, value)
{
  var hiddenInput   = document.getElementsByName(name);
  hiddenInput       = hiddenInput[0];  // Берем только первый элемент
  hiddenInput.value = value;
}

// Изменение цвета в таблице
function hiliteTr(tr, classname)
{
    tr.className = classname;
}

// Чек боксы
function  checkByName(name, check)
{
    var boxes = document.getElementsByName(name);
    var i = 0;
    while(i < boxes.length)
    {
      boxes[i].checked = check;
      i++;
    }
}

//================================
// Валидаторы обязательных полей
//================================

var AObligatory  = new Array();
var ACheck       = new Array();
var AParser      = new Array();
var AChkLength   = new Array();
var APassworder  = new Array();


function Obligatory()
{
   this.fname        = null;
   this.name         = null;
}

// Массив условий
function Check()
{
   this.fname         = null;  // Имя формы
   this.value         = null;  // Значение
   this.runObligatory = null;  // Выполнять ли дальнейшую проверку обязательных полей
}

// Получение значения из обьекта формы
function GetValue(obj)
{
  var ret = '';
  
  if(obj.nodeName.toLowerCase() == 'select')
  {
    ret = obj.options(obj.selectedIndex).value;
  }
  else
  {
    ret = obj.value;
  }
  
  return ret;
}

// Проверка соответствия
function CheckValueObligatory(fname, value)
{
  var returnVale = false;
  
  var ex = document.getElementsByName(fname);
      ex = ex[0];      
      
  if(GetValue(ex) == value) returnVale = GetValue(ex);
  else                      returnVale = false;
  
  return returnVale;
}

// Добавление условия
function AddCheck(fname, value, run)
{
  var o = new Check();
      o.fname = fname;
      o.value = value;
      o.runObligatory = run;
  ACheck.push(o);
}

// Добавление нового элемента в проверку на клиенте
function AddObligatory(fname, name)
{
  var o = new Obligatory();
      o.fname = fname;
      o.name  = name;
  AObligatory.push(o);
}

//================================
// Валидаторы полей данных
//================================
// Массив полей
function Parser()
{
   this.fname         = null;  // Имя формы
   this.type          = null;  // Тип парсера
   this.name          = null;  // Тип парсера
}

function AddParser(fname, type, name)
{
  var p = new Parser();
      p.fname = fname;
      p.type  = type;
      p.name  = name;
  AParser.push(p);
}

function CheckAllParsers()
{
  var retval = true;
  
  
  for(var i = 0; i < AParser.length; i++)
  {
    var exlist = document.getElementsByName(AParser[i].fname);
    var ex = exlist[0];
        
    var exval = GetValue(ex);
        
    switch(AParser[i].type.toLowerCase())
    {
      case 'int':      // Числовое значение
      {
        if(parseInt(exval).toString() == 'NaN')
        {
          alert('Введено не числовое значение в поле ' + AParser[i].name)
          retval = false;
        }
        break;
      }
      case 'date':   // Дата
      {
        var str = exval.replace(/\./g, "/");
        if(is_date(str) == false)
        {
          alert('Проверьте формат даты в поле ' + AParser[i].name)
          retval = false;
        }
        break;
      }
      case 'eng':    // Строка латинскими буквами и цифрами
      {
        var str = exval.replace(/[-=+_1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM]/g, '');
        if(str != '')
        {
          alert('Проверьте формат строки в поле ' + AParser[i].name + ', допустимы только цифры и латинские буквы')
          retval = false;
        }
        break;
      }
      case 'mail':
      {
        var nd  = exval.split("@");
        if(nd.length == 2)
        {          
          var str1 = nd[0].replace(/[-=+_.1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM]/g, '');
          var str2 = nd[1].replace(/[-=+_.1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM]/g, '');
          if((str1 != '')&&(str2 != ''))
          {
            alert('Проверьте формат строки email в поле ' + AParser[i].name + ', допустимо xxx@xxx.xxx')
            retval = false;
          }
        }
        else
        {
          alert('Проверьте формат строки email в поле ' + AParser[i].name + ', допустимо xxx@xxx.xxx')
          retval = false;
        }
        break;
      }
    }
  }  
  return retval;
}

// Парсер даты
function is_date(string)
{
  var flag = false;
  
  if(string == '') return false;
  
  var c1 = string.replace(/[0-9]/g, '').charAt(0);
  
  if(c1 == 't' || c1 == null) return false;
  
  var arr = string.split(c1);
  
  var y, m, d;
  if(arr[0] * 1 > 31)
  {
    y = arr[0] * 1;
    m = arr[1] * 1;
    d = arr[2] * 1;
  }
  else
  {
    y = arr[2]*1;
    m = arr[1]*1;
    d = arr[0]*1;
  }
  if (y <= 2200 && ! (y >= 100 && y < 1000))
  {
    if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
    {
      if(d <= 31 && d >= 1) flag = true;
    }
    else
    {
      if(m == 4 || m == 6 || m == 9 || m == 11)
      {
        if(d <= 30 && d >= 1) flag = true;
      }
      else
      {
        if( (m == 2) && ( ( (y % 4 == 0) && (d <= 29 || d >= 1)) || (d <= 28 && d >= 1) ) ) flag = true;
      }
    }
  }
  else
  {
    return false
  }
  
  if(flag)
  {
    if(d < 10) d = '0' + d;
    if(m < 10) m = '0' + m;
    if(y < 100)
    {
      if(y<10)
      {
        y = '200' + y;
      }
      else
      {
        y = '20' + y;
      }
    }
    
    return true;
  }
  return false;
}
  

//================================
// Валидаторы длинны полей
//================================
// Массив полей
function ChkLength()
{
   this.fname         = null;  // Имя формы ввода
   this.length        = null;  // Длинна
   this.name          = null;  // Имя поля
}

function AddChkLength(fname, length, name)
{
  var l = new ChkLength();
      l.fname   = fname;
      l.length  = length;
      l.name    = name;
  AChkLength.push(l);
}

function CheckAllLength()
{
  var retval = true;
  
  for(var i = 0; i < AChkLength.length; i++)
  {
    var exlist = document.getElementsByName(AChkLength[i].fname);
    var ex = exlist[0];

    var exval = GetValue(ex);
    
    if(exval.length > AChkLength[i].length)
    {
        alert("Длинна поля " + AChkLength[i].name + " не должна быть больше " + AChkLength[i].length +" символов");
        retval = false;
    }

  }
  
  return retval;
}

// Проверка совпадения паролей

function AddPassworder(fnamepass1, fnamepass2)
{
  APassworder.push(fnamepass1);
  APassworder.push(fnamepass2);
}

// Обработчик сабмита формы
function CheckObligatory()
{
  var returnFlag    = true;
  var checkValue    = true;
  var RunObligatory = true;
  
  for(var i = 0; i < ACheck.length; i++)
  {
    if(CheckValueObligatory(ACheck[i].fname, ACheck[i].value) == false)
    {
      checkValue    = false;
      RunObligatory = true;
    }
    else
    {
      RunObligatory = ACheck[i].runObligatory;
    }     
  }
  
  // Проверка введенных паролей
  if(APassworder.length >= 2)
  {
      var checkElement1 = document.getElementsByName(APassworder[0]);
      var checkElement2 = document.getElementsByName(APassworder[1]);
      
      if((checkElement1 != null)&&(checkElement2 != null))
      {
        var pass1 = GetValue(checkElement1[0]);
        var pass2 = GetValue(checkElement2[0]);
        if(pass1 != pass2)
        {
          if(returnFlag != false)
          {
            alert("Введенные пароли не совпадают");
            returnFlag = false;
          }
        }
      }
  }

  // Если проверка удалась и параметр запуска
  if(RunObligatory == true)
  {  
    for(var i = 0; i < AObligatory.length; i++)
    { 
      var checkElement = document.getElementsByName(AObligatory[i].fname);
      
      if((GetValue(checkElement[0]) == null)||(GetValue(checkElement[0]).toString() == ''))
      {
        if(returnFlag != false)
        {
          alert("Незаполнено обязательное поле: " + AObligatory[i].name);
          returnFlag = false;
        }
      }
    }
  }
  
  // Если запуска проверки обязательных полей нет и условие не выполненно
  if((checkValue == false)&&(RunObligatory == false))
  {
    alert("Незаполнено обязательное поле");
    returnFlag = false;
  }
  
  if(CheckAllParsers() == false)
  {
    returnFlag = false;
  }  
  
  if(CheckAllLength() == false)
  {
    returnFlag = false;
  }
  
  return returnFlag;
}


// Отображение обьекта
function obj_show(id)
{
  var ex = document.getElementById(id);
  ex.style.display = 'block';
}

// Скрытие обьекта
function obj_hide(id)
{
  var ex = document.getElementById(id);
  ex.style.display = 'none';
}


// Отображение или скрытие обьектов
function showOrHide(id)
{
  var ex = document.getElementById(id);
  if (ex.style.display == 'none')
  {
    ex.style.display = 'block';
  }
  else
  {
    ex.style.display = 'none';
  }
}

function pageRedirect(newUrl)
{
  document.location = newUrl;
}