function PrepareRegexp (npRegexp)
{
  ResArray = new Array();
  var li = npRegexp.lastIndexOf('/');
  var cleanRegexp = npRegexp.substring(1,li);
  var extOptions  = npRegexp.substring(li+1,npRegexp.length);
  return new RegExp(cleanRegexp,extOptions);
}

function Check_INT (Value, Diapazon)
{
  if (Value == '') return false;
  splitIndex = Diapazon.indexOf('.');
  if (splitIndex >= 0)
   {
    minValue = parseInt(Diapazon.substring(0,splitIndex));
    maxValue = parseInt(Diapazon.substring(splitIndex+2,Diapazon.length));
    if (minValue <= Value && Value <= maxValue)
      return true;
   }
  else
   {
    if (Value == Diapazon) return true;
   }
  return false;
}

function Check_REGEXP (Value, vRegexp)
{
  return Value.match(PrepareRegexp(vRegexp));
}

function Highlight (Arr)
{
  AllErrs = "";
  Br = "";

  for (aField in Arr)
  {
   elem = document.getElementsByName(aField).item(0);
   if (!elem) continue;

    elem.style.background = '#FFE0E0';
    if (document.getElementById("div"+aField) && document.getElementById("div"+aField).innerHTML.match(/\s*/))
    {
      document.getElementById("div"+aField).innerHTML = Arr[aField];
    }
    if (document.getElementById("div"+aField)) document.getElementById("div"+aField).style.display = 'block';

    AllErrs = Br + AllErrs + Arr[aField];
  }

  if (document.getElementById("divValidatorAllErrs"))
   {
    document.getElementById("divValidatorAllErrs").innerHTML = AllErrs;
    document.getElementById("divValidatorAllErrs").style.display = 'block';
   }

  return true;
}

function Validate(CheckData,lang)
{
  var isValid = true;
  var Errors = new Array();
  var FormName = document.getElementById('_form').value;
  for (fieldName in CheckData[FormName])
   {
    elem = Form.getElements($('MainForm')).find(function (element) { return element == $(fieldName); });
    if (!elem) continue;

    elem.style.background = '#FFFFFF';
    fieldValue = elem.value;
    if (elem.type == 'checkbox' && elem.checked == false)
     {
      fieldValue = 0;
     }

    if (document.getElementById("div"+fieldName))
     {
      document.getElementById("div"+fieldName).style.display = 'none';
     }

    if (CheckData[FormName][fieldName][1] || fieldValue != '')
     {
      fieldType = CheckData[FormName][fieldName][0];

      if (CheckData[FormName][fieldName][2])
       {
        if (Message[lang] && Message[lang][CheckData[FormName][fieldName][2]]) { MessageStr = Message[lang][CheckData[FormName][fieldName][2]]; }
        else                                                                   { MessageStr = CheckData[FormName][fieldName][2]; }
       }
      else
       {
        MessageStr = Rule[fieldType][2];
       }

      switch (Rule[fieldType][0])
       {
        case 'Int' :
          if (!Check_INT(fieldValue,Rule[fieldType][1]))
           {
            isValid = false;
            Errors[fieldName] = MessageStr;
           }
          break;
        case 'Regexp' :
          if (!Check_REGEXP(fieldValue,Rule[fieldType][1]))
           {
            isValid = false;
            Errors[fieldName] = MessageStr;
           }
          break;
        default:
          isValid = false;
          Errors[fieldName] = 'Undefined Type';
          break;
       }
     }
   }
  if (!isValid)
    Highlight(Errors);
  return isValid;
}

