function TrimLeft( strInput)
{
  var l = strInput.length, i = 0;
  if( strInput.indexOf( ' ', 0) == 0)
    while( ( i < l) && ( strInput.charAt( i) == ' '))
      i++;
  return strInput.substring( i, l);
}

function TrimRight( strInput)
{
  var l = strInput.length, i = l - 1;
  if( strInput.lastIndexOf( ' ') == i)
    while( ( i > 0) && ( strInput.charAt( i) == ' '))
      i--;
  return strInput.substring( 0, i + 1);
}

function Trim( strInput)
{
  return TrimRight( TrimLeft( strInput));
}

function IsFarsiNumber( sInput)
{
  var isNumber = true;
  var i = 0, l = sInput.length;
  while( isNumber && ( i < l))
  {
    if( sInput.charCodeAt( i) < 1776)
    {
      if( ( sInput.charCodeAt( i) < 48) || ( sInput.charCodeAt( i) > 57))
        isNumber = false;
    }    
    else
      if( sInput.charCodeAt( i) > 1785)
        isNumber = false;
    i++;
  }
  return isNumber;
}

function IsFarsi( sInput)
{
  var FarsiCodes = new Array( 
    1523, 1524, 1548, 1563, 1567, 1569, 1571, 1570, 1575, 1576, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585,
    1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609,
    1610, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1662, 1670, 1688, 1705,
    1711, 1728, 1740, 1749, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785,
    64342, 64343, 64344, 64345, 64378, 64379, 64380, 64381, 64394, 64395, 64398, 64399, 64400, 64401, 64402, 64403,
    64404, 64405, 64420, 64421, 64508, 64509, 64510, 64830, 64831, 65152, 65153, 65154, 65155, 65156, 65157, 65158,
    65159, 65160, 65163, 65164, 65165, 65166, 65167, 65168, 65169, 65170, 65171, 65172, 65173, 65174, 65175, 65176,
    65177, 65178, 65179, 65180, 65181, 65182, 65183, 65184, 65185, 65186, 65187, 65188, 65189, 65190, 65191, 65192,
    65193, 65194, 65195, 65196, 65197, 65198, 65199, 65200, 65201, 65202, 65203, 65204, 65205, 65206, 65207, 65208,
    65209, 65210, 65211, 65212, 65213, 65214, 65215, 65217, 65218, 65219, 65220, 65221, 65222, 65223, 65224, 65225,
    65226, 65227, 65228, 65229, 65230, 65231, 65232, 65233, 65234, 65235, 65236, 65237, 65238, 65239, 65240, 65241,
    65242, 65243, 65244, 65245, 65246, 65247, 65248, 65249, 65250, 65251, 65252, 65253, 65254, 65255, 65256, 65257,
    65258, 65259, 65260, 65261, 65262, 65263, 65264, 65265, 65266, 65267, 65268, 65269, 65271, 65272, 65270, 65273,
    65274, 65275, 65276
  );
  NumCodes = new Array( 48, 49, 50, 51, 52, 53, 54, 55, 56, 57);

  var s = FarsiCodes.toString() + NumCodes.toString();
  
  var bIsFarsi = true;
  for( i = 0; ( i < sInput.length) && bIsFarsi; i++)
    bIsFarsi = ( s.indexOf( sInput.charCodeAt( i), 0) > -1)
  return bIsFarsi;
}

function IsLatin( sInput)
{
  var bIsLatin = true;
  for( i = 0; ( i < sInput.length) && bIsLatin; i++)
    bIsLatin = ( sInput.charCodeAt( i) < 256)
  return bIsLatin;
}

function IsCorrect( Obj, e)
{
  var emailPat = /^(\".*\"|[A-Za-z]\w*)@(\[\d{1,3}(\.\d{1,3}){3}]|[A-Za-z]\w*(\.[A-Za-z]\w*)+)$/;
  var bIsCorrect = true;
  var elemValue;
  if( ( e.type == 'text') || ( e.type == 'password') || ( e.type == 'textarea') || ( e.type == 'hidden'))
    elemValue = e.value;
  else if( e.type == 'span')
    elemValue = e.innerText;
  if( ( e.type == 'text') || ( e.type == 'password') || ( e.type == 'textarea') || ( e.type == 'hidden') || ( e.type == 'span'))
    if( e.doCheck != null)
      if( e.doCheck == 'IsFilled')
        bIsCorrect = ( Trim( elemValue) != '');
      else if( e.doCheck == 'IsNumeric')
        bIsCorrect = ( ( Trim( elemValue) != '') && !isNaN( elemValue));
      else if( e.doCheck == 'IsNumericEx')
        bIsCorrect = !isNaN( elemValue);
      else if( e.doCheck == 'IsFarsiNumber')
        bIsCorrect = ( ( Trim( elemValue) != '') && IsFarsiNumber( elemValue));
      else if( e.doCheck == 'IsFarsiNumberEx')
        bIsCorrect = IsFarsiNumber( elemValue);
      else if( e.doCheck == 'CheckLen')
        bIsCorrect = ( elemValue.length >= e.minLen);
      else if( e.doCheck == 'reEnter')
        bIsCorrect = ( elemValue == eval( 'Obj.' + e.MasterInput + '.value'));
      else if( e.doCheck == 'IsEmail')
        bIsCorrect = ( elemValue.match( emailPat) != null);
      else if( e.doCheck == 'IsEmailEx')
        bIsCorrect = ( ( Trim( elemValue) != '') || ( elemValue.match( emailPat) != null));
      else if( e.doCheck == 'IsFarsi')
        bIsCorrect = ( ( Trim( elemValue) != '') && IsFarsi( elemValue));
      else if( e.doCheck == 'IsFarsiEx')
        bIsCorrect = IsFarsi( elemValue);
      else if( e.doCheck == 'IsLatin')
        bIsCorrect = ( ( Trim( elemValue) != '') && IsLatin( elemValue));
      else if( e.doCheck == 'IsLatinEx')
        bIsCorrect = IsLatin( elemValue);
      else
        bIsCorrect = eval( e.doCheck + '( \'' + elemValue + '\');');
  return bIsCorrect;
}

function ShowError( e, ErrorType)
{
  if( ErrorType.toLowerCase() == 'alert')
  {
    alert( e.ErrorMsg);
    if( ( e.type == 'text') || ( e.type == 'password') || ( e.type == 'textarea'))
    {
      e.focus();
      e.select();
    }
  }
  else
  {
    var ErrorSpan = document.all[ e.id + '_Error'];
    if( ErrorSpan != null)
    {
      ErrorSpan.style.display = '';
      ErrorSpan.innerText = e.ErrorMsg;
    }
    else
      alert( e.ErrorMsg);
  }
  return;
}

function ShowDefault( e, ErrorType)
{
  var ErrorSpan = document.all[ e.id + '_Error'];
  if( ErrorSpan != null)
  {
    ErrorSpan.style.display = '';
    ErrorSpan.innerText = e.DefaultMsg;
  }
}

function Check( Obj)
{
  var FirstInvalidInput = null;
  var bIsCorrect = true, bDoSubmit = true;
  var i = 0;
  var doFormCheck = eval( 'Obj.' + Obj.bDoCheck + '.value');
  var ErrorType   = new String();
  if( ( Obj.ErrorType == null) || ( Obj.ErrorType == ''))
    ErrorType = 'alert';
  else
    ErrorType = Obj.ErrorType.toLowerCase();
  if( doFormCheck == 1)
    while( ( i < Obj.elements.length) && ( bIsCorrect || ( ErrorType.toLowerCase() != 'alert')))
    {
      var e = Obj.elements[ i++];
      if( !IsCorrect( Obj, e))
      {
        if( FirstInvalidInput == null)
          FirstInvalidInput = e;
        bIsCorrect = false;
        bDoSubmit  = false;
        ShowError( e, ErrorType);
      }
      else
        if( ErrorType.toLowerCase() != 'alert')
          ShowDefault( e, ErrorType);
    }/* while( ...) */
  if( ( ErrorType.toLowerCase() != 'alert') && !bDoSubmit && ( FirstInvalidInput != null))
  {
    if( ( FirstInvalidInput.type == 'text') || ( FirstInvalidInput.type == 'password') || ( FirstInvalidInput.type == 'textarea'))
    {
      FirstInvalidInput.focus();
      FirstInvalidInput.select();
    }
  }
  return bDoSubmit;
}/* function */
