/*
  ------------------------------------------------------------------------------------------
                        JavaScript Form Validator Version 2.0.2
    
    ******************************************************************************************                    
                      Extended By : Rey Joaquino
                             Date : August 09, 2005
                             
        Extentions Made:
        ================
        
        1.    Date    -    addValidation will now accept "date" as one of its Validation Descriptor                                      
                                Courtesy of SmartWebby.com and Rey Joaquino.
        2.    Color    -    Table row can have alternating colors.
                                Courtesy of OpenSource Community and Rey Joaquino.                                        
        3.    Money    -    Monetary Fields are dynamically validated to accept only numbers. 
                                Courtesy of V.V.Perumal Babu Date:Feb 18 2005 and Rey Joaquino.
        
    ******************************************************************************************                            
                                                                       
    Copyright 2003 JavaScript-coder.com. All rights reserved.
    You use this script in your Web pages, provided these opening credit
  lines are kept intact.
    The Form validation script is distributed free from JavaScript-Coder.com

    You may please add a link to JavaScript-Coder.com, 
    making it easy for others to find this script.
    Checkout the Give a link and Get a link page:
    http://www.javascript-coder.com/links/how-to-link.php

    You may not reprint or redistribute this code without permission from 
    JavaScript-Coder.com.
    
    JavaScript Coder
    It precisely codes what you imagine!
    Grab your copy here:
        http://www.javascript-coder.com/
    -------------------------------------------------------------------------  
        Each field in the form can have 0, 1, or more validations. 
        For example, the input should not be empty, should be less than 25 chars, 
        should be alpha-numeric, etc 

        You can associate a set of validation descriptors for each input field in the form. 
        Using The Script

        1.Include gen_validatorv2.js in your html file just before closing the HEAD tag
        
        <script language="JavaScript" src="gen_validatorv2.js" type="text/javascript"></script>
        </head>
        
        2. Just after defining your form, Create a form validator object passing the name of the form
        
         <FORM name='myform' action="">
         <!----Your input fields go here -->
         </FORM>
         <SCRIPT language="JavaScript">
         var frmvalidator  = new Validator("myform");
        .... 
        
        3. Now add the validations required
        
        frmvalidator.addValidation("FirstName","alpha"); 
        
        the first argument is the name of the field and the second argument is the validation descriptor,
        which specifies the type of validation to be performed. You can add any number of validations.
        The list of validation descriptors are provided at the end of the documentation.
        The optional third argument is the error string to be displayed if the validation fails.
    

        <script language="JavaScript" type="text/javascript">
             var frmvalidator = new Validator("myform");
             frmvalidator.addValidation("FirstName","req","Please enter your First Name");
             frmvalidator.addValidation("FirstName","maxlen=20","Max length for FirstName is 20");
             frmvalidator.addValidation("FirstName","alpha");
         </script>    
 
    
    frmvalidator.addValidation("FieldName","Validation Descriptors","Error Message");    
    
    Validation Descriptors             Description 
    ===========================     ====================================================================================================================================================
    required or req              -  The field should not be empty  
    maxlen=??? or maxlength=???  -  Checks the length entered data to the maximum. For example, if the maximum 
                                                                    size permitted is 25, give the validation descriptor as "maxlen=25"  
    minlen=??? or minlength=???  -  Checks the length of the entered string to the required minimum. example "minlen=5"  
    alphanumeric or alnum        -  Check the data if it contains any other characters other than alphabetic 
                                                                    or numeric characters  
    num or numeric               -  Check numeric data  
    alpha or alphabetic          -  Check alphabetic data.  
    email                        -  The field is an email field and verify the validity of the data.  
    lt=??? or lessthan=???       -  Verify the data to be less than the value passed. Valid only for numeric fields. 
                                                                    example: if the value should be less than 1000 give validation description as "lt=1000"  
    gt=??? or greaterthan=???    -  Verify the data to be greater than the value passed. Valid only for numeric fields. 
                                                                    example: if the value should be greater than 10 give validation description as "gt=10"  
    regexp=???                                 -  Check with a regular expression the value should match the regular expression.
                                                                    example: "regexp=^[A-Za-z]{1,20}$" allow up to 20 alphabetic characters.  
    dontselect=??                -  This validation descriptor is valid only for select input items (lists) Normally,
                                                                    the select list boxes will have one item saying 'Select One' or some thing like that.
                                                                    The user should select an option other than this option. 
                                                                    If the index of this option is 0, the validation description should be "dontselect=0"  
    date                         -  Validates the date in a given format. Added by Rey Joaquino August 9, 2005
    
    
    Adding Custom Validation
    ========================
        If you want to add a custom validation, which is not provided by the validation descriptors,
        you can do so. Here are the steps: 
        
        Create a javascript function which returns true or false depending on the validation.
            function DoCustomValidation()
            {
              var frm = document.forms["myform"];
              if(frm.pwd1.value != frm.pwd2.value)
              {
                alert('The Password and verified password don not match!');
                return false;
              }
              else
              {
                return true;
              }
            }


        Associate the validation function with the validator object.
        
            frmvalidator.setAddnlValidationFunction("DoCustomValidation"); 

        The custom validation function will be called automatically after other validations. 

        If you want to do more than one custom validations, you can do all those validations in the same function. 

        function DoCustomValidation()
        {
          var frm = document.forms["myform"];
          if(false == DoMyValidationOne())
          {
            alert('Validation One Failed!');
            return false;
          }
          else
          if(false == DoMyValidationTwo())
          {
            alert('Validation Two Failed!');
            return false;
          }
          else
          {
            return true;
          }
        }
        
        where DoMyValidationOne() and DoMyValidationTwo() are custom functions for validation. 
        
    Clear All Validations
    =====================
        In some dynamically programmed pages, it may be required to change the validations
        in the form at run time. For such cases, a function is included which clears all
        validations in the validator object.
        
        frmvalidator.clearAllValidations(); 
        
        this function call clears all validations you set.
        You will not need this method in most cases. 
    
*/


function Validator(frmname)
{
  this.formobj=document.forms[frmname];
    if(!this.formobj)
    {
      alertconsole("BUG: Could not get Form object "+frmname);
        return;
    }
    if(this.formobj.onsubmit)
    {
     this.formobj.old_onsubmit = this.formobj.onsubmit;
     this.formobj.onsubmit=null;
    }
    else
    {
     this.formobj.old_onsubmit = null;
    }
    this.formobj.onsubmit=form_submit_handler;
    this.addValidation = add_validation;
    this.setAddnlValidationFunction=set_addnl_vfunction;
    this.clearAllValidations = clear_all_validations;
    this.clearOneValidations = clear_one_validations;  
}

function set_addnl_vfunction(functionname)
{
  this.formobj.addnlvalidation = functionname;
}
function clear_all_validations()
{
    for(var itr=0;itr < this.formobj.elements.length;itr++)
    {
        this.formobj.elements[itr].validationset = null;
    }
}

function clear_one_validations(itr)
{
        this.formobj.elements[itr].validationset = null;
}

function form_submit_handler()
{
    for(var itr=0;itr < this.elements.length;itr++)
    {
        if(this.elements[itr].validationset &&
       !this.elements[itr].validationset.validate())
        {
          return false;
        }
    }
    if(this.addnlvalidation)
    {
      str =" var ret = "+this.addnlvalidation+"()";
      eval(str);
    if(!ret) return ret;
    }
    return true;
}
function add_validation(itemname,descriptor,errstr)
{
  if(!this.formobj)
    {
      alertconsole("BUG: the form object is not set properly");
        return;
    }//if
    var itemobj = this.formobj[itemname];
  if(!itemobj)
    {
      alertconsole("BUG: Couldnot get the input object named: "+itemname);
        return;
    }
    if(!itemobj.validationset)
    {
      itemobj.validationset = new ValidationSet(itemobj);
    }
  itemobj.validationset.add(descriptor,errstr);
}
function ValidationDesc(inputitem,desc,error)
{
  this.desc=desc;
    this.error=error;
    this.itemobj = inputitem;
    this.validate=vdesc_validate;
}
function vdesc_validate()
{
 if(!V2validateData(this.desc,this.itemobj,this.error))
 {
    
    if(this.itemobj.visibility == "visible") {
        this.itemobj.focus();
    }
        return false;
 }
 return true;
}
function ValidationSet(inputitem)
{
    this.vSet=new Array();
    this.add= add_validationdesc;
    this.validate= vset_validate;
    this.itemobj = inputitem;
}
function add_validationdesc(desc,error)
{
  this.vSet[this.vSet.length]= 
      new ValidationDesc(this.itemobj,desc,error);
}
function vset_validate()
{
   for(var itr=0;itr<this.vSet.length;itr++)
     {
       if(!this.vSet[itr].validate())
         {
           return false;
         }
     }
     return true;
}
function validateEmailv2(email)
{
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
    if(email.length <= 0)
    {
      return true;
    }
    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)
    {
//2007-10-09 MODIF par nico: {2,5} passe ) {2,4} pour accepter abac-info.LOCAL
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,5}$/;
      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;
      }// if
      return true;
    }
return false;
}
function V2validateData(strValidateStr,objValue,strError) 
{ 
    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 "date": 
         { 
           if(eval(objValue.value.length) > 0) 
           { 
                 if ( ValidateDate(objValue.value,"jj/mm/aaaa") == false )
                   {
                  if(!strError || strError.length ==0) 
                  { 
                    strError = objValue.name + " : Le format de la date est incorect"; 
                  }//if 
                  alertconsole(strError); 
                  return false; 
                }//if  
           }//if 
           break;             
         }//case date         
        case "req": 
        case "required": 
         { 
           if(eval(objValue.value.length) == 0) 
           { 
              if(!strError || strError.length ==0) 
              { 
                strError = objValue.name + " : Champ requis"; 
              }//if 
              alertconsole(strError); 
              return false; 
           }//if 
           break;             
         }//case required
        case "reqcheck": 
          { 
               if(objValue.checked!=true) 
               { 
                 if(!strError || strError.length ==0) 
                 { 
                    strError = objValue.name+": n a pas été coché.' "; 
                 }//if                                               
                 alertconsole(strError); 
                 return false; 
               }
           break; 
          }//case reqcheck  
        case "maxlength": 
        case "maxlen": 
          { 
             if(eval(objValue.value.length) >  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : "+cmdvalue+" caractères maximum "; 
               }//if 
               alertconsole(strError + "\n[ Vous avez tapé " + objValue.value.length + " caractères ]"); 
               return false; 
             }//if 
             break; 
          }//case maxlen 
        case "minlength": 
        case "minlen": 
           { 
             if(eval(objValue.value.length) <  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : " + cmdvalue + " caractères minimum  "; 
               }//if               
               alertconsole(strError + "\n[Vous avez tapé = " + objValue.value.length + " caractères ]"); 
               return false;                 
             }//if 
             break; 
            }//case minlen 
        case "alnum": 
        case "alphanumeric": 
           { 
              var charpos = objValue.value.search("[^A-Za-z0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
               if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alpha-numeric characters allowed "; 
                }//if 
                alertconsole(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//case alphanumeric 
        case "num": 
        case "numeric": 
           { 
              var charpos = objValue.value.search("[^0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only digits allowed "; 
                }//if               
                alertconsole(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break;               
           }//numeric 
        case "alphabetic": 
        case "alpha": 
           { 
              var charpos = objValue.value.search("[^A-Za-z]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alphabetic characters allowed "; 
                }//if                             
                alertconsole(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//alpha 
        case "alnumhyphen":
            {
              var charpos = objValue.value.search("[^A-Za-z0-9\-_]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _"; 
                }//if                             
                alertconsole(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if             
            break;
            }
        case "email": 
          { 
               if(!validateEmailv2(objValue.value)) 
               { 
                 if(!strError || strError.length ==0) 
                 { 
                    strError = objValue.name+": Enter a valid Email address "; 
                 }//if                                               
                 alertconsole(strError); 
                 return false; 
               }//if 
           break; 
          }//case email
        case "lt": 
        case "lessthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alertconsole(objValue.name+": Should be a number "); 
              return false; 
            }//if 
            if(eval(objValue.value) >=  eval(cmdvalue)) 
            { 
              if(!strError || strError.length ==0) 
              { 
                strError = objValue.name + " : value should be less than "+ cmdvalue; 
              }//if               
              alertconsole(strError); 
              return false;                 
             }//if             
            break; 
         }//case lessthan 
        case "gt": 
        case "greaterthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alertconsole(objValue.name+": Should be a number "); 
              return false; 
            }//if 
             if(eval(objValue.value) <=  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : value should be greater than "+ cmdvalue; 
               }//if               
               alertconsole(strError); 
               return false;                 
             }//if             
            break; 
         }//case greaterthan 
        case "regexp": 
         { 
             if(objValue.value.length > 0)
            {
                if(!objValue.value.match(cmdvalue)) 
                { 
                  if(!strError || strError.length ==0) 
                  { 
                    strError = objValue.name+": Invalid characters found "; 
                  }//if                                                               
                  alertconsole(strError); 
                  return false;                   
                }//if 
            }
           break; 
         }//case regexp 
        case "dontselect": 
         { 
            if(objValue.selectedIndex == null) 
            { 
              alertconsole("BUG: dontselect command for non-select Item"); 
              return false; 
            } 
            if(objValue.selectedIndex == eval(cmdvalue)) 
            { 
             if(!strError || strError.length ==0) 
              { 
              strError = objValue.name+": Please Select one option "; 
              }//if                                                               
              alertconsole(strError); 
              return false;                                   
             } 
             break; 
         }//case dontselect 
    }//switch 
    return true; 
}

/////////////////////////////////////////////////////////////////
///    Copyright 2003 JavaScript-coder.com. All rights reserved.    ///
/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////
//////           Custom Validation Routines          ////////////
/////////////////////////////////////////////////////////////////
function DoCustomValidation()
{
    
    if(false == DoCustomValidationPayment())
  {
    return false;
  }    
  
  if(false == DoCustomValidationState1())
  {           
    return false;
  }  
  

    
  return true;
      
}

        
        

function DoCustomValidationPasswd(){
  var frm = document.forms["contact_us"];
    if(frm.x_passwd.value != frm.x_passwd_r.value) {
        alertconsole('The Password and Confirmation password do not match!');
        return false;
    }
    else{
        return true;
  }
}

function DoCustomValidationState1(){
   var frm = document.forms["process_order"];
   var status = "ok";
    
   /*
   if( ( trim(frm.x_state.value) == "" )  && ( trim(frm.xs_state.value) == "" ) )
   {
     alertconsole('The State/Province Field is required!');
     return false; 
   }
   else 
   */
       
   if ( ( ( trim(frm.x_country.value) == "USA" ) || ( trim(frm.x_country.value) == "CAN" ) ) && ( trim(frm.xs_state.value) == "" )  )
   {
     alertconsole('Please supply the State/Province using the selection box.');
     frm.xs_state.focus();
     return false;
   }    
   else if ( ( ( trim(frm.x_country.value) != "USA" ) && ( trim(frm.x_country.value) != "CAN" ) ) && ( trim(frm.x_state.value) == "" )  )
   {
     alertconsole('Please supply the State/Province using the Others specify box.');
     frm.x_state.focus();
     return false;
   }
   else if ( ( trim(frm.x_ship_to_country.value) == "USA" ) || ( trim(frm.x_ship_to_country.value) == "CAN" ) )
   {
     status = "check_na";
   }    
   else if ( ( trim(frm.x_ship_to_country.value) != "" ) && ( trim(frm.x_ship_to_country.value) != "USA" ) && ( trim(frm.x_ship_to_country.value) != "CAN" ) )
   {
     status = "check_nna";
   }
   else
   {
     return true;
   }

   if ( (status == "check_nna") || (status == "check_na") )
   {    
       if ( (trim(frm.xs_ship_to_state.value) == "") && (status == "check_na" ) )
       {
         alertconsole('Please supply the Ship To State/Province using the selection box.');
         frm.xs_ship_to_state.focus();
         return false;
       }
       else if ( (trim(frm.x_ship_to_state.value) == "") && (status == "check_nna") )
       {
         alertconsole('Please supply the Ship To State/Province using the Others specify box.');
         frm.x_ship_to_state.focus();
         return false;
       }
       else if ( trim(frm.x_ship_to_address.value) == "" )
       {
         alertconsole('Please supply the Ship To Address.');
         frm.x_ship_to_address.focus();
         return false;        
       }
       else if ( trim(frm.x_ship_to_city.value) == "" )
       {
         alertconsole('Please supply the Ship To City.');
         frm.x_ship_to_city.focus();
         return false;        
       }
       else if ( trim(frm.x_ship_to_zip.value) == "" )
       {
         alertconsole('Please supply the Ship To Zip code.');
         frm.x_ship_to_zip.focus();
         return false;        
       }
       else
       {
         return true;
       }
   }

}

function DoCustomValidationPayment(){
   var frm = document.forms["process_order"];
     
     // 0 - Contact customer for payment details.
     // 1 - Credit Card Information must be provided.
     
   if ( frm.x_option[1].checked )
   {
        var rey = frm.x_option[1].value;
                
        if ( trim(frm.x_cc_type.value) == "" )
        {
         alertconsole('Please provide Credit Card Type.');
         frm.x_cc_type.focus();
         return false;        
        }
       else if ( trim(frm.x_cc.value) == "" )
           {
               alertconsole('Please provide Credit Card Number.');
               frm.x_cc.focus();
             return false;        
         }
        else if ( trim(frm.x_exp.value) == "" )
           {
               alertconsole('Please provide Credit Card Expiry.');
               frm.x_exp.focus();
             return false;        
         }
        else if ( trim(frm.x_cc_name.value) == "" )
           {
               alertconsole('Please provide Credit Card Name.');
               frm.x_cc_name.focus();
             return false;        
         }             
     else 
             
      {
          return true;
      }    
   }
  else if ( frm.x_option[0].checked )
  {
        return true;        
    }    
    else 
    {
        alertconsole('Please Choose Payment Option.');
        return false;
    }    
}   

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

/////////////////////////////////////////////////////////////////
//////           Date Validation Routines            ////////////
/////////////////////////////////////////////////////////////////
    
function isInteger(s){
    var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
        if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr,dtFormat){
    // Declaring minimum year and maximum year
    
    var minYear=1900;
    var maxYear=2100;    
    
    var dtCh        
    var daysInMonth = DaysArray(12);
    var pos1
    var pos2
    var strYear
    var strMonth
    var strDay
    
    if (dtFormat == "jj/mm/aaaa")
    {
        dtCh= "/";    
        pos1=dtStr.indexOf(dtCh);
        pos2=dtStr.indexOf(dtCh,pos1+1);
        strDay=dtStr.substring(0,pos1);
        strMonth=dtStr.substring(pos1+1,pos2);
        strYear=dtStr.substring(pos2+1);
    }  
        
    strYr=strYear;
    
    if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
    if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
    for (var i = 1; i <= 3; i++) {
        if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
    }
    
    month=parseInt(strMonth);
    day=parseInt(strDay);
    year=parseInt(strYr);
    
    if (pos1==-1 || pos2==-1){
        alertconsole("Le format de la date doit être : jj/mm/aaaa (exemple 31/01/2007)" + dtFormat );
        return false;
    }
    if (strMonth.length<1 || month<1 || month>12){
        //alertconsole("Please enter a valid month");
        return false;
    }
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
        //alertconsole("Please enter a valid day");
        return false;
    }
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
        alertconsole("merci de saisir une année à 4 chifres entre "+minYear+" et "+maxYear);
        return false;
    }
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
        alertconsole("Votre date n est pas correcte");
        return false;
    }
return true;
}

function ValidateDate(dtStr,dtFormat){

    if (isDate(dtStr,dtFormat)==false){
        return false;
    }
    return true;
 } 

/*///////////////////////////////////////////////////////
///  End Date validation routines                      //
/ /////////////////////////////////////////////////////*/
 
 
/*///////////////////////////////////////////////////////
///  Routine that Alternate Color on table data       //
/ /////////////////////////////////////////////////////*/
function setCellsDOM(strTableID, strClasses) {
    
        var objTable = document.getElementById(strTableID);
        var objRows;
        var objCells;
        
        var arrClasses = strClasses.split(",");
        var intClassCnt = arrClasses.length;
        var strClass;
        
        if (objTable != null) {

            //Get the table rows
            objRows = objTable.getElementsByTagName("TR");

            //Loop around rows
            for (i = 1; i < objRows.length; i++) {
                //Get style class for row cell                
                strClass = arrClasses[(i % intClassCnt)];
    
                //Get cells
                objCells = objRows[i].getElementsByTagName("TD");
                
                //Loop around cells
                for (j = 0; j < objCells.length; j++) {
                    ///???
                    //Not sure why the attribute is named 'className'
                    //as I'd expect it to be named 'class'.                    
                    objCells[j].setAttribute("className", strClass);
                }
    
            }
        }    
    
    }
    
/*///////////////////////////////////////////////////////
///  End Routine that Alternate Color on table data   //
/ /////////////////////////////////////////////////////*/


/*///////////////////////////////////////////////////////
///  Routine that Validate the Browser                ///
/ /////////////////////////////////////////////////////*/

var theform;
var isIE;
var isNS;

/*
Function to detect the Browser type.
*/
function detectBrowser()
{
    if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) 
        theform = document.forms["Form1"];
    else 
        theform = document.Form1;
        
    //browser detection
    var strUserAgent = navigator.userAgent.toLowerCase();
    isIE = strUserAgent.indexOf("msie") > -1;
    isNS = strUserAgent.indexOf("netscape") > -1;
    
}

/*///////////////////////////////////////////////////////
///  Routines that Validate Monetary Fields           ///
/ /////////////////////////////////////////////////////*/
/*
This function will fire when the control leaves the Text Box.
The function is responsible for formating the numbers to amount type.
*/
function FormatAmtControl(ctl){
    var vMask ;
    var vDecimalAfterPeriod ;
    var ctlVal;
    var iPeriodPos;
    var sTemp;
    var iMaxLen 
    var ctlVal;
    var tempVal;
    ctlVal = ctl.value;
    vDecimalAfterPeriod  = 2
    iMaxLen  = ctl.maxLength;

    ctlVal =  ctl.value;
    iPeriodPos =ctlVal.indexOf(".");

    if (iPeriodPos<0)
    {
        if (ctl.value.length > (iMaxLen-3))
        {
            sTemp = ctl.value
             tempVal = sTemp.substr(0,(iMaxLen-3)) + ".00";
        }
        else
        tempVal = ctlVal + ".00"
    }
    else{
        if ((ctlVal.length - iPeriodPos -1)==1)
            tempVal = ctlVal + "0"
        if ((ctlVal.length - iPeriodPos -1)==0)
            tempVal = ctlVal + "00"
        if ((ctlVal.length - iPeriodPos -1)==2)
            tempVal = ctlVal;
        if ((ctlVal.length - iPeriodPos -1)>2){
            tempVal = ctlVal.substring(0,iPeriodPos+3);
        }

    }
    ctl.value=tempVal;
}

/*
This function is responsible for filtering the keys pressed 
and the maintain the amount format of the value in the Text box.
*/
function HandleAmountFiltering(ctl){
    var iKeyCode, objInput;
    var iMaxLen 
    var reValidChars = /[0-9,.]/;
    var strKey;
    var sValue;
    var event = window.event || arguments.callee.caller.arguments[0];
    iMaxLen  = ctl.maxLength;
    sValue = ctl.value;
    detectBrowser();

    if (isIE) {
        iKeyCode = event.keyCode;
            objInput = event.srcElement;
    } else {
        iKeyCode = event.which;
        objInput = event.target;
    }

    strKey = String.fromCharCode(iKeyCode);

    if (reValidChars.test(strKey))
    {
        if(iKeyCode==46)
        {
            if(objInput.value.indexOf('.')!=-1)
                if (isIE)
                    event.keyCode= 0;
                 else
                 {
                      if(event.which!=0 && event.which!=8)
                    return false;
                 }
        }
        else
        {
            if(objInput.value.indexOf('.')==-1)
            {
                
                if (objInput.value.length>=(iMaxLen-3))
                {
                    if (isIE)
                        event.keyCode= 0;
                     else
                     {
                          if(event.which!=0 && event.which!=8)
                        return false;
                     }
    
                }
            }
            if ((objInput.value.length==(iMaxLen-3)) && (objInput.value.indexOf('.')==-1))
            {
                objInput.value = objInput.value +'.';
            
            }

    
        }

    }
    else{
        if (isIE)
            event.keyCode= 0;
         else
         {
              if(event.which!=0 && event.which!=8)
             return false;
         }
    }

}

/*///////////////////////////////////////////////////////
///  End Routines that Validate Monetary Fields       ///
/ /////////////////////////////////////////////////////*/


/*///////////////////////////////////////////////////////
///  Start Routine that Validate Numeric Fields       ///
/ /////////////////////////////////////////////////////*/
/*
This function is responsible for filtering the keys pressed 
and the maintain the numeric format of the value in the Text box.
*/
function HandleNumericFiltering(ctl){
    var iKeyCode, objInput;
    var iMaxLen 
    var reValidChars = /[0-9]/;
    var strKey;
    var sValue;
    var event = window.event || arguments.callee.caller.arguments[0];
    iMaxLen  = ctl.maxLength;
    sValue = ctl.value;
    detectBrowser();

    if (isIE) {
        iKeyCode = event.keyCode;
            objInput = event.srcElement;
    } else {
        iKeyCode = event.which;
        objInput = event.target;
    }

    strKey = String.fromCharCode(iKeyCode);

    if (reValidChars.test(strKey))
    {
        if(iKeyCode==46)
        {
            if(objInput.value.indexOf('.')!=-1)
                if (isIE)
                    event.keyCode= 0;
                 else
                 {
                      if(event.which!=0 && event.which!=8)
                    return false;
                 }
        }
        else
        {
            if(objInput.value.indexOf('.')==-1)
            {
                
                if (objInput.value.length>=(iMaxLen-3))
                {
                    if (isIE)
                        event.keyCode= 0;
                     else
                     {
                          if(event.which!=0 && event.which!=8)
                        return false;
                     }
    
                }
            }
            if ((objInput.value.length==(iMaxLen-3)) && (objInput.value.indexOf('.')==-1))
            {
                objInput.value = objInput.value +'.';
            
            }

    
        }

    }
    else{
        if (isIE)
            event.keyCode= 0;
         else
         {
              if(event.which!=0 && event.which!=8)
             return false;
         }
    }

}
/*///////////////////////////////////////////////////////
///  End Routines that Validate Numeric Fields       ///
/ /////////////////////////////////////////////////////*/



/*/////////////////////////////////////////////////////////
///  Routine that Focus on the last form Modified.       //
///  This will focus on the first text feld of the form. //
/////////////////////////////////////////////////////////*/
//function placeFocus( strFormId ) {
    //this.objForm = document.forms[strFormId];
  //    var myelement = document.getElementById(strFormId); 
    
//    if (this.objForm.length > 0) {
//        var field = this.objForm;
        
    //field.elements[i].[field.length ].focus();
//        for (i = 0; i < field.length; i++) {
//            if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea") ) {
//                field.elements[i].focus();
                //alertconsole("YPosition : " + myelement.scrollHeight );
                //this.objForm.scrollTo(0, this.objForm.elements[i].scrollTop ); 
//                break;
//        }
//      }
//  }
//}


    
function placeFocus( strFormId ) {
        var myelement = document.getElementById(strFormId);
        myelement.focus();
}        
    
    
/*/////////////////////////////////////////////////////////
///  Routine that Opens a new window                     //
///                                                      //
/////////////////////////////////////////////////////////*/
var newwindow;
function popwindow(url)
{
    newwindow=window.open(url,'name','height=600,width=800,scrollbars=yes');
    if (window.focus) {newwindow.focus()}
}
    
