function has_id(id)
{
 try
 {
  var tmp=document.getElementById(id).value;
 }
 catch(e)
 {
  return false;
 }
 return true;
}

function has_name(nm)
{
 try
 {
  var tmp=cfrm.nm.type;
 }
 catch(e)
 {
  return false;
 }
 return true;
}

function $$(id)
{
  if(!has_id(id)&&!has_name(id))
  {
    alert("Field "+id+" does not exist!\n Form validation configuration error.");
    return false;
  }
  if(has_id(id))
  {
     return document.getElementById(id).value;
  }
  else
  {
     return;
  }
}

function $val(id)
{
   return document.getElementById(id);
}

function trim(id)
{
   $val(id).value=$val(id).value.replace(/^\s+/,'').replace(/\s+$/,'');
}

var required={field:[],add:function(name,type,mess){this.field[this.field.length]=[name,type,mess];},out:function(){return this.field;},clear:function(){this.field=[];}};

var validate=
{
    check:function(cform)
    {
        var error_message='Please fix the following errors:\n\n';var mess_part='';var to_focus='';var tmp=true;for(var i=0;i<required.field.length;i++)
        {
            if(this.checkit(required.field[i][0],required.field[i][1],cform))
            {
            }
            else
            {
               error_message=error_message+required.field[i][2]+'  is invalid\n';
               if(has_id(required.field[i][0])&&to_focus.length===0)
               {
                  to_focus=required.field[i][0];
               }
               tmp=false;
            }
        }
        if(!tmp)
        {
            alert(error_message);
        }
        if(to_focus.length>0)
        {
           document.getElementById(to_focus).focus();
        }
        return tmp;
    }
    ,
    checkit:function(cvalue,ctype,cform)
    {
       if(ctype=="NOT_EMPTY")
       {
          if(this.trim($$(cvalue)).length<1)
          {
             return false;
          }
          else
          {
             return true;
          }
       }
       else if(ctype=="EMAIL")
       {
          exp=/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
          if($$(cvalue).match(exp)==null)
          {
             return false;
          }
          else
          {
             return true;
          }
       }
       else if(ctype=="NUM")
       {
          var check = true;
          var value = $$(cvalue);

          if(this.trim($$(cvalue)).length>1)
          {
              for(var i=0;i < this.trim($$(cvalue)).length; ++i)
              {
                   var new_key = value.charAt(i); //cycle through characters
                   if(((new_key < "0") || (new_key > "9")) &&
                        !(new_key == ""))
                   {
                        check = false;
                        break;
                   }
              }
          }
          else
          {
              check = false;
          }
          
          if(!check)
          {
             return false;
          }
          else
          {
             return true;
          }
       }
    }
    ,
    trim:function(s)
    {
       if(s.length>0)
       {
          return s.replace(/^\s+/,'').replace(/\s+$/,'');
       }
       else
       {
          return s;
       }
    }
};
