// revision version 3
// Virtualshop3 functions list
// Credit Card Number
// Email Address
// End Virtualshop3 functions list

var m1="You have missed some vital information required to submit this form:";
var m2=" is invalid";


var viname;
var vivalue;
var vicheck;
var virequired;
var vimsg="";
var vivld="";
var viprev="";

function vs3like(intstr,delim){
intstr = intstr.toLowerCase();
delim = delim.toLowerCase();
tstr=intstr.split(delim);
 if (tstr[1]||intstr.substring(intstr.length-delim.length,intstr.length)==delim){
 return true;
 }else{
 return false;
 }
}


function vs3validate(theForm){
var els=theForm.elements; 

 for(i=0; i<els.length; i++){

 viname=els[i].name;

 if (vs3like(viname,'[ccnum]')){
 vicheck = 'Credit Card Number';
 }
 if (vs3like(viname,'[email]')){
 vicheck = 'Email Address';
 }
 //  vicheck=els[i].validateRule;

 if (vs3like(viname,'[required]')){
 virequired = 'yes';
 }
 //  virequired=els[i].required;

  if (els[i].options){ // IS A SELECT BOX
  vivalue=els[i].options[els[i].selectedIndex].value;
  }else{
   if (els[i].type=="checkbox"){ // IS A CHECKBOX
    if (els[i].checked){
    vivalue=els[i].value;
    }else{
    vivalue="";
    }
   }else if (els[i].type=="radio"){ // IS A RADIO BUTTON
    var radvals=theForm[viname];
    if (radvals[0]){
     for(j=0; j<radvals.length; j++){
      if (radvals[j].checked) {
      vivalue=radvals[j].value;
      }
     }
    }else{
      if (els[i].checked){
      vivalue=els[i].value;
      }
    }
   }else{ // IS OTHER INPUT
   vivalue=els[i].value;
   }
  }

 if (!viname){viname="";}
 if (!vivalue){vivalue="";}
 if (!vicheck){vicheck="";}
 if (!virequired){virequired="";}


// CHECK REQUIRED
 if (virequired=="yes" && !vivalue){
  if (viname != viprev){
  vimsg += viname+"\n";
  }
 viprev = viname;
 }
 

// CHECK CREDIT CARD NO
 if (vivalue && vicheck=="Credit Card Number"){
  if (vsCCno(vivalue)==false){
  vivld += viname+m2+"\n";
  }
 }


// CHECK EMAIL ADDRESS
 if (vivalue && vicheck=="Email Address"){
  if (vsemail(vivalue)==false){
  vivld += viname+m2+"\n";
  }
 }



// alert(viname + " - " + vivalue + " - " + vicheck + " - " + virequired);


 viname="";
 vivalue="";
 vicheck="";
 virequired="";


 }//END FOR i


 if (vimsg){
 vimsg = m1+"\n\n"+vimsg;
 vimsg = vs3tidyMessage(vimsg);
 alert(vimsg);
 vimsg = "";
 vivld = "";
 return false;
 }

 if (vivld){
 vivld = vs3tidyMessage(vivld);
 alert(vivld);
 vimsg = "";
 vivld = "";
 return false;
 }



vimsg = "";
vivld = "";


// RENAME REQUIRED AND VALIDATED INPUTS
 for(i=0; i<els.length; i++){
 viname=els[i].name;
  els[i].name = viname.replace(/\[required\]/g,'');
  els[i].name = els[i].name.replace(/\[ccnum\]/g,'');
  els[i].name = els[i].name.replace(/\[email\]/g,'');
 }//END FOR i




viprev = "";
return true;
} //END vs3vlidate







function vs3tidyMessage(msg){
msg=msg.replace(/\[required\]/g,'');
msg=msg.replace(/\[ccnum\]/g,'');
msg=msg.replace(/\[email\]/g,'');
return msg;
}











function vsCCno(cc) {
var z='';
var k='';
 for(cn=1;cn<=cc.length+1;cn++) {
 k=cc.substring(cn-1,cn);
 if (k != ' ') z=z+k;
 }
cc=z;

 if ((cc.length > 19)||(cc.length < 13)){
 return false;
 }

sum = 0; mul = 1; l = cc.length;
 for (cn = 0; cn < l; cn++) {
 digit = cc.substring(l-cn-1,l-cn);
 tproduct = parseInt(digit ,10)*mul;
 if (tproduct >= 10)
 sum += (tproduct % 10) + 1;
 else
 sum += tproduct;
  if (mul == 1)
  mul++;
  else
  mul--;
  }

 if ((sum % 10) != 0){
 return false;
 }
return true;
}


function vsemail(vadr){
var vsemp=/^(.+)@(.+)$/
var vssch="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + vssch + "\]"
var vseu="(\"[^\"]*\")"
var vsipd=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var vsatm=validChars + '+'
var vsbit="(" + vsatm + "|" + vseu + ")"
var vsup=new RegExp("^" + vsbit + "(\\." + vsbit + ")*$")
var vsdp=new RegExp("^" + vsatm + "(\\." + vsatm +")*$")
var vsma=vadr.match(vsemp)
if (vsma==null){
return false
}
var vsubit=vsma[1]
var vsdom=vsma[2]

if (vsubit.match(vsup)==null){
return false
}
var vsipa=vsdom.match(vsipd)
if (vsipa!=null){
for (var i=1;i<=4;i++){
if (vsipa[i]>255){
return false
}
}
}
var vsdar=vsdom.match(vsdp)
if (vsdar==null){
return false
}
var vsapa=new RegExp(vsatm,"g")
var vsdoa=vsdom.match(vsapa)
var len=vsdoa.length
if ((vsdoa[vsdoa.length-1].length<2)||(vsdoa[vsdoa.length-1].length>4)){
return false
}
if (len<2){
return false
}
}