function validateemail(email)
{
  var splitted = email.match("^(.+)@(.+)$");
  if (splitted == null)
  {
    return false;
  }
  if (splitted[1] != null )
  {
    var regexp_user=/^\"?[\w-_\.]*\"?$/;
    if (splitted[1].match(regexp_user) == null)
    {
      return false;
    }
  }
  if (splitted[2] != null)
  {
    var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
    if (splitted[2].match(regexp_domain) == null) 
    {
      var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
      if (splitted[2].match(regexp_ip) == null)
      {
        return false;
      }
    }
    return true;
  }
  return false;
}

function validate(objValue,strValidateStr) 
{ 
  var epos = strValidateStr.search("="); 
  var command = ""; 
  var cmdvalue = "";
  if (epos >= 0) 
  { 
    command  = strValidateStr.substring(0,epos); 
    cmdvalue = strValidateStr.substr(epos+1); 
  } 
  else 
  { 
    command = strValidateStr; 
  } 
  switch(command) 
  { 
    case "req": 
    { 
      if (eval(objValue.length) == 0) 
      { 
        return true;
      }
      return false;
      break;             
    }
    case "maxlen": 
    { 
      if (eval(objValue.length) >  eval(cmdvalue)) 
      { 
        return true;
      }
      break; 
    }
    case "minlen": 
    { 
      if (eval(objValue.length) <  eval(cmdvalue)) 
      { 
        return true;              
      }
      break; 
    }
    case "alnum": 
    { 
      var charpos = objValue.search("[^A-Za-z0-9]"); 
      if (objValue.length > 0 &&  charpos >= 0) 
      { 
        return true;
      }
      break; 
    }
    case "num": 
    { 
      var charpos = objValue.search("[^0-9]"); 
      if (objValue.length > 0 &&  charpos >= 0) 
      { 
        return true;
      }
      break;               
    }
    case "alpha": 
    { 
      var charpos = objValue.search("[^A-Za-z]"); 
      if (objValue.length > 0 &&  charpos >= 0) 
      { 
        return true;
      }
      break; 
    }
    case "alnumhyphen":
    {
      var charpos = objValue.search("[^A-Za-z0-9\-_]"); 
      if (objValue.length > 0 &&  charpos >= 0) 
      { 
        return true; 
      }	
	  break;
    }
    case "email": 
    { 
      if (!validateemail(objValue)) 
      { 
        return true;
      }
      break; 
    }
    case "lt": 
    { 
      if (eval(objValue) >=  eval(cmdvalue)) 
      { 
        return true;             
      }
      break; 
    }
    case "gt": 
    { 
      if (eval(objValue) <=  eval(cmdvalue)) 
      { 
        return true;
      }
      break; 
    }
    case "regexp": 
    { 
      if (!objValue.match(cmdvalue)) 
      { 
        return true;
      }
      break; 
    }
    case "dontselect": 
    { 
      if (objValue.selectedIndex == eval(cmdvalue)) 
      { 
        return true;
      } 
      break; 
    }
    case "date": 
    {
      var elems = objValue.split("/");
      if (elems.length==3)
      {
        var month = elems[0];
        var day = elems[1];
        var year = elems[2];
        if ((validate(month,"num")) || (validate(day,"num")) || (validate(year,"num")))
        {
          return true;
        }
        if (!((month > 0) && (month < 13) && (day > 0) && (day < 32) && (year > 1880) && (year < 2003))) 
        { 
          return true;
        }
        if (!((month.length==2) && (day.length==2) && (year.length==4))) 
        { 
          return true;
        }
      }
      else
      {
        return true;
      } 
      break; 
    }
    case "ssn": 
    {
      var elems = objValue.split("-");
      if (elems.length==3)
      {
        var first = elems[0];
        var middle = elems[1];
        var last = elems[2];
        if ((validate(first,"num")) || (validate(middle,"num")) || (validate(last,"num")))
        {
          return true;
        }
        if (!((first.length==3) && (middle.length==2) && (last.length==4))) 
        { 
          return true;
        }
      }
      else
      {
        return true;
      }  
      break; 
    }
    case "phone": 
    {
      var elems = objValue.split("-");
      if (elems.length==3)
      {
        var first = elems[0];
        var middle = elems[1];
        var last = elems[2];
        if ((validate(first,"num")) || (validate(middle,"num")) || (validate(last,"num")))
        {
          return true;
        }
        if (!((first.length==3) && (middle.length==3) && (last.length==4))) 
        { 
          return true;
        }
      }
      else
      {
        return true;
      }  
      break; 
    }
    case "zip": 
    {
      var elems = objValue.split("-");
      var zip = elems[0];
      var zip4 = elems[1];
      if (validate(zip,"num"))
      {
        return true;
      }
      if (zip4 > "")
      {
        if (validate(zip4,"num"))
        {
          return true;
        }
        if (!(zip4.length==4)) 
        { 
          return true;
        } 
      }
      if (!(zip.length==5)) 
      { 
        return true;
      }
      break; 
    }
    case "route": 
    {
      var n = 0;
      var t = "";
      for (i = 0; i < objValue.length; i++)
      {
        c = parseInt(objValue.charAt(i), 10);
        if (c >= 0 && c <= 9)
        {
          t = t + c;
        }
      }
      if (t.length != 9)
      {
        return true;
      }
      for (i = 0; i < t.length; i += 3)
      {
        n += parseInt(t.charAt(i),     10) * 3
          +  parseInt(t.charAt(i + 1), 10) * 7
          +  parseInt(t.charAt(i + 2), 10);
      }
      if (!(n != 0 && n % 10 == 0))
      {
        return true;
      }
    }
  }
  return false;
}
