/*
  -------------------------------------------------------------------------
	                    JavaScript Form Validator 
                                Version 2.0.2
	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/
    -------------------------------------------------------------------------  
*/
function Validator(frmname)
{
  this.formobj=document.forms[frmname];
	if(!this.formobj)
	{
	  alert("BUG: couldnot 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;
}
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 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)
	{
	  alert("BUG: the form object is not set properly");
		return;
	}//if
	var itemobj = this.formobj[itemname];
  if(!itemobj)
	{
	  alert("BUG: Could not 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))
 {
  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)
    {
      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;
      }// 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 "req": 
        case "required": 
         { 
           if(eval(objValue.value.length) == 0) 
           { 
              if(!strError || strError.length == 0) 
              { 
                strError = objValue.name + " : Required Field"; 
              }//if 
              alert(strError); 
              return false; 
           }//if 
           break;             
         }//case required 
        case "maxlength": 
        case "maxlen": 
          { 
             if(eval(objValue.value.length) >  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : "+cmdvalue+" characters maximum "; 
               }//if 
               alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
               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 + " characters minimum  "; 
               }//if               
               alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
               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 
                alert(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               
                alert(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                             
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//alpha 
        case "alspacehyphen": 
           { 
              var charpos = objValue.value.search("[^A-Za-z\-\x20]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alphabetic characters, dashes and spaces allowed."; 
                }//if                             
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//alspacehyphen
        case "alnumspacehyphen": 
           { 
              var charpos = objValue.value.search("[^A-Za-z0-9\-\x20]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alphabetic characters, numbers, dashes and spaces allowed."; 
                }//if                             
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//alsnumpacehyphen
		case "alnumhyphencomma":
			{
              var charpos = objValue.value.search("[^A-Za-z0-9\-\x20\\,]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alphabetic characters, numbers, spaces, hyphens and commas allowed."; 
                }//if                             
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 			
		  break;
		  }//alnumhyphencomma
        case "email": 
          { 
               if(!validateEmailv2(objValue.value)) 
               { 
                 if(!strError || strError.length ==0) 
                 { 
                    strError = objValue.name+": Enter a valid Email address "; 
                 }//if                                               
                 alert(strError); 
                 return false; 
               }//if 
           break; 
          }//case email 
        case "lt": 
        case "lessthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alert(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               
              alert(strError); 
              return false;                 
             }//if             
            break; 
         }//case lessthan 
        case "gt": 
        case "greaterthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alert(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               
               alert(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                                                               
	              alert(strError); 
	              return false;                   
	            }//if 
			}
           break; 
         }//case regexp 
        case "dontselect": 
         { 
            if(objValue.selectedIndex == null) 
            { 
              alert("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                                                               
              alert(strError); 
              return false;                                   
             } 
             break; 
         }//case dontselect 
    }//switch 
    return true; 
}

//custom validation by Dr P Blandon
//first pick up the name of the form
//all forms have the name 'mainformJRP?

function DoCustomValidation()
{

//first find the form name
var counter;
var formishere = false;

for (counter=0; counter<=document.forms.length - 1; counter++)
{
if (document.forms[counter].name.substring(0,11) == "mainformJRP")
 {
 var frm = document.forms[counter];
 formishere = true;
 }
}

if (formishere == false)
  {alert("PROBLEM: could not find form");return;}

// check that the read conditions has been
// checked on the fourth page, mainformJRP4
// and if it has submit the encrypted form
// NOTE THERE IS NO CHECK FOR THE EXISTENCE OF
// THE ENCRYPTED FORM OR ITS NAME.
if (frm.name == "mainformJRP4")
{
  if(frm.elements["ReadConditions"].checked != true)
   {
   alert('Please read the terms and conditions and check the box if you wish to accept them.');return false;
   }
   else
   { 
    document.forms['VSPForm'].submit();
    return true;
   }
}

// check that at least one box has been
// checked on the first page, mainformJRP1
if (frm.name == "mainformJRP1")
{
var formisOK = false;
for (counter=0; counter<=frm.elements.length - 1; counter++)
 {
  if (frm.elements[counter].type == "checkbox") 
   {
    if (frm.elements[counter].checked == true){formisOK = true;}
   }
 }
if (formisOK == false)
 {
  alert('Please select at least one type of rail pass.');return false;
 }
}

// check that at least one pass number is
// selected. DEPENDS on the country dropdown being
// called country. Then check that the required fields
// in the delivery address table are filled IF the check box
// is checked.
if (frm.name == "mainformJRP2")
{
var NumberOfPasses = 0;
for (counter=0; counter<=frm.elements.length - 1; counter++)
 {
  if (frm.elements[counter].type == "select-one" && frm.elements[counter].name != "Country" && frm.elements[counter].name != "DeliveryCountry" && frm.elements[counter].name != "HearAboutUs")
    {
     NumberOfPasses = NumberOfPasses + parseInt(frm.elements[counter].value);
    }
  }
if (NumberOfPasses == 0)
  {
  alert('Please select at least one rail pass.'); return false;
  }
if (frm.elements["BillingDelivery"].checked == true) //check there's something in the delivery address table
  {
  if (frm.elements["Delivery_Address_Line_One"].value.length == 0)
  {alert('Please enter the delivery address in the lower part of the table');return false;}
  if (frm.elements["Delivery_Address_Postal_Code"].value.length == 0)
  {alert('Please enter a postal code for the delivery address in the lower part of the table. If you have no post code please enter "none"');return false;}
  }
if (frm.elements["BillingDelivery"].checked == false) //check there's nothing in the delivery address table
  {
  if (frm.elements["Delivery_Address_Line_One"].value.length != 0)
  {
  var DecideDelivery = false;
  DecideDelivery = confirm('You have entered an address in the "Delivery Address" section of the form but have not checked the "Check Box" just above it.\n     If you wish the pass(es) to be sent to the delivery address you have entered please click "OK". If you wish the pass(es) to be sent to your billing address, please click "Cancel".');}
   if (DecideDelivery == true) //they want to use the delivery address
    {
    if(frm.elements["Delivery_Address_Postal_Code"].value.length == 0) //if no post code alert, check the box and return
       {alert('Please enter a postal code for the delivery address in the lower part of the table. If you have no post code please enter "none"');frm.elements["BillingDelivery"].checked = true;return false;}
    {frm.elements["BillingDelivery"].checked = true; return true;}
    }
    else //they do not want to use the delivery address
    {
    frm.elements["Delivery_Address_Line_One"].value = "";
    frm.elements["Delivery_Address_Line_Two"].value = "";
    frm.elements["Delivery_Address_Line_Three"].value = "";
    frm.elements["Delivery_Address_Postal_Code"].value = "";
    frm.elements["DeliveryCountry"].selectedIndex = frm.elements["Country"].selectedIndex;
    return true;
    }
  }
return true;
}
}

/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/