//name,price,shipping,shiptype
//shiptype:1=variable scale, 2=fixed price, 3=price per book
var alldata=new Array(
 new Array("ABC Basic Chart Reading",20,2,2),
 new Array("Astro-Guide To Nutrition and Vitamins",14,2,2),
 new Array("Your Lucky Days and Numbers",3,1,2),
 new Array("Astrological Compatibility",19,5,1),
 new Array("Money Magic",3,2,3),
 new Array("Astrological Treasure Map",6,1,2),
 new Array("Astrological Almanac for 2012",20,5,1),
 new Array("Prosperity",5,5,1),
 new Array("Gambling to Win",15,2,1),
 new Array("ABC Chart Erection",15,5,1),
 new Array("Is Your Name Lucky for You",5,4,1),
 new Array("Are You Compatible with Your Boss..",5,5,1),
 new Array("Dear Sun Signs",2,1,2),
 new Array("Lucky Days and Winning Numbers",4,2,2),
 new Array("Lottery Winning Systems by Gail Howard",3,1,2),
 new Array("Beginners Course 1",100,5,2),
 new Array("Beginners Course 2",50,5,2),
 new Array("Beginners Course 3",25,5,2),
 new Array("Beginners Course 4",50,5,2),
 new Array("Beginners Course 5",25,5,2),
 new Array("Intermediate Course 1",50,5,2),
 new Array("Intermediate Course 2",75,5,2),
 new Array("Intermediate Course 3",25,5,2),
 new Array("Intermediate Course 4",25,5,2),
 new Array("Intermediate Course 5",25,5,2),
 new Array("Intermediate Course 6",25,5,2),
 new Array("Advanced Course 1",25,5,2),
 new Array("Advanced Course 2",25,5,2),
 new Array("Advanced Course 3",25,5,2),
 new Array("Advanced Course 4",25,5,2),
 new Array("Advanced Course 5",25,5,2),
 new Array("Advanced Course 6",25,5,2),
 new Array("Advanced Course 7",50,5,2),
 new Array("Advanced Course 8",25,5,2)
);
function shipping(index,quantity) {
 if(alldata[index][3]==2){
  return alldata[index][2];
 }
 else if(alldata[index][3]==1) {
  if(quantity<=2){
   return 5;
  }
  else if(quantity<=4){
   return quantity+2;
  }
  else{
   return (quantity-1)*2;
  }
 }
 else if(alldata[index][3]==3) {
  return alldata[index][2]*quantity;
 }
 else {
  return 0;
 }
}
var totp=0;
var intp=0;
function calcPrice() {
 var i;
 var nvc="";
 totp=0;
 for(i=0;i<alldata.length;i++){
  var q=document.getElementById("q"+i).selectedIndex;
  if(q){
   var sprice=shipping(i,q);
   var p=q*alldata[i][1]+sprice;
   nvc+=formatPrice(p)+" - ("+q+")  "+alldata[i][0]+"\n";
   document.getElementById("t"+i).value=formatPrice(p);
   document.getElementById("s"+i).value=formatPrice(sprice);
   totp+=p;
  }
  else {
   document.getElementById("t"+i).value="";
   document.getElementById("s"+i).value="";
  }
 }
 intp=0;
 if(document.getElementById("country").selectedIndex==1 || document.getElementById("country").selectedIndex==2 ) {
  intp=3;
 }
 if(document.getElementById("country").selectedIndex==document.getElementById("country").options.length-1) {
  intp=5;
 }
 document.getElementById("order").value=nvc;
 document.getElementById("intfee").value=formatPrice(intp);
 document.getElementById("total").value=formatPrice(totp+intp);
 document.getElementById("subtot").value=formatPrice(totp);
 otherCountry();
}
function formatPrice(dollars) {
 if(dollars=="?") return "$    ??.??";
 if(dollars==0) return "$     0.00";
 var ret=Math.round(dollars*100)/100;//to fix rounding errors
 ret=ret.toString();
 if(ret.indexOf('.')==-1) {//decimal not found in number
  ret+=".00"
 } else {//decimal found in number
  ret+=("00").substring(ret.length-ret.indexOf('.')-1,2);
 }
 return "$"+("         ").substring(0,9-ret.length)+ret;
}
function otherCountry() {
 if(document.getElementById("country").selectedIndex==document.getElementById("country").options.length-1) {
  document.getElementById("othercountry").style.visibility="visible";
 }
 else {
  document.getElementById("othercountry").style.visibility="hidden";
 }
}
function checkAll() {
 var err=0; 
 calcPrice();
 if(document.getElementById("nm").value.length==0) {
  document.getElementById("nm").style.background='red';
  err++;
 }
 if(document.getElementById("adr1").value.length==0) {
  document.getElementById("adr1").style.background='red';
  err++;
 }
 if(document.getElementById("city").value.length==0) {
  document.getElementById("city").style.background='red';
  err++;
 }
 if(document.getElementById("country").selectedIndex==0) {
  if(document.getElementById("state").value.length==0) {
   document.getElementById("state").style.background='red';
   err++;
  }
  if(document.getElementById("zip").value.length==0) {
   document.getElementById("zip").style.background='red';
   err++;
  }
 }
 if(document.getElementById("country").selectedIndex==document.getElementById("country").options.length-1) {
  if(document.getElementById("other").value=="") {
   document.getElementById("other").style.background='red';
   err++;
  }
 }
 if(document.getElementById("phone").value.length==0) {
  document.getElementById("phone").style.background='red';
  err++;
 }
 if(document.getElementById("email").value.length==0) {
  document.getElementById("email").style.background='red';
  err++;
 }
 if(document.getElementById("ccv").value.length<3) {
  document.getElementById("ccv").style.background='red';
  err++;
 }
 var eme=checkCreditCard();
 if(eme!="OK"){
  if(eme=="CCNULL") {
   document.getElementById("cc").style.background='red';
  }
  else {
   if(eme=="CCNOTYPE") alert("Credit card type could not be determined.");
   if(eme=="CCAM") alert("We do not accept American Express.");
   if(eme=="CCDC") alert("We do not accept Discover cards.");
   if(eme=="CCTOOLONG") alert("The credit card number entered is too long.");
   if(eme=="CCTOOSHORT") alert("The credit card number entered is too short.");
   if(eme=="CCFAILCHECK") alert("The credit card number entered is not a valid number.");
   if(eme=="CCEXPIRED"){
    alert("The credit card entered is expired.");
    document.getElementById("emo").style.background='red';
    document.getElementById("eyr").style.background='red';
   }
   else {
    document.getElementById("cc").style.background='red';
   }
  }
  err++;
 }
 if(document.getElementById("cname").value.length==0) {
  document.getElementById("cname").style.background='red';
  err++;
 }
 if(err) {
  alert("Please fill in the required fields (in red).");
 }
 if(!err){
  var ccb=document.getElementById("retccNum").value;
  var ccblank="";
  for(var i=0;i<ccb.length-4;i++) {
   ccblank+=((("0123456789").indexOf(ccb.charAt(i))==-1)?ccb.charAt(i):"x");
  }
  ccblank+=ccb.substring(ccb.length-4,ccb.length);
  err=!confirm("Is this order correct?\n\n"+"--------------- CUSTOMER CONTACT INFO ---------------\n"
  +document.getElementById("nm").value+"\n"
  +document.getElementById("adr1").value+"\n"
  +document.getElementById("adr2").value+"\n"
  +document.getElementById("city").value+", "+document.getElementById("state").value+" "+document.getElementById("zip").value+"\n"
  +document.getElementById("country").options[document.getElementById("country").selectedIndex].text+" "+document.getElementById("other").value+"\n"
  +document.getElementById("phone").value+"\n"
  +document.getElementById("email").value+"\n"
  +"----------------- CREDIT CARD INFO ------------------\n"
  +"Cardholder Name: "+document.getElementById("cname").value+"\n"
  +"Credit Card Number: "+document.getElementById("retccType").value+" "+ccblank+" "+(document.getElementById("emo").selectedIndex+1)+"/"+document.getElementById("eyr").options[document.getElementById("eyr").selectedIndex].text+"\n"
  +"------------------ ORDER DETAILS --------------------\n"
  +document.getElementById("order").value+"\n"
  +document.getElementById("subtot").value+" - Subtotal\n"
  +document.getElementById("intfee").value+" - International Shipping Fee\n"
  +document.getElementById("total").value+" - Total");
 }
 return !err;
}
function checkCreditCard() {//checks validity of credit card(returns true if valid)
 //card type indentifier/card prefix/number length
 var ccdata=new Array(
  new Array("AM","34",15),
  new Array("AM","37",15),
  new Array("VC","4",16),
  new Array("MC","5",16),
  new Array("DC","6011",16)
 );
 var mycc=document.getElementById("cc").value;
 if(mycc.length==0) return "CCNULL";
 //clean up number - replace L with 1 and o with 0 and remove anything else that is not a digit
 var newstr="";
 for(var i=0;i<mycc.length;i++) {
  var ci=mycc.charAt(i);
  if( (ci=='l')||(ci=='L') ) ci=1;
  if( (ci=='o')||(ci=='O') ) ci=0;
  if( ("0123456789").indexOf(ci)!=-1 ) newstr+=ci;
 }
 mycc=newstr;
 //determine cc type
 var mytype=-1;
 for(var i=0;i<5;i++) {
  if( mycc.indexOf(ccdata[i][1])==0 ) mytype=i;
 }
 if( mytype==-1 ) return "CCNOTYPE";
 if(ccdata[mytype][0]=="AM") return "CCAM";
 if(ccdata[mytype][0]=="DC") return "CCDC";
 //check length of credit card number
 if( mycc.length!=ccdata[mytype][2] ) {
  return ((mycc.length>ccdata[mytype][2])?"CCTOOLONG":"CCTOOSHORT");
 }
 //make a formatted version of the cc number
 var gap=((mycc.length==15)?6:4);
 var newcc=mycc.substring(0,4)+"-"+mycc.substring(4,4+gap)+"-"+mycc.substring(4+gap,4+gap+gap);
 if( 4+gap+gap<mycc.length ) newcc+="-"+mycc.substring(4+gap+gap,mycc.length);
 //set in new cc number and type in main form
 document.getElementById("retccType").value=ccdata[mytype][0];
 document.getElementById("retccNum").value=newcc;
 //check card validity
 var flag=false;
 var csum=0;
 for(var i=mycc.length-1;i>=0;i--) {
  var d=parseInt(mycc.charAt(i));
  if( flag ) {
   d*=2;
   if( d>9 ) d-=9;
  }
  csum+=d;
  flag=!flag;
 }
 if( (csum%10)!=0 ) return "CCFAILCHECK";
 var curryear=(new Date()).getYear();
 if(curryear<2000) curryear+=1900;
 var currmonth=(new Date()).getMonth();
 if(curryear==document.getElementById("eyr").options[document.getElementById("eyr").selectedIndex].text) {
  if(currmonth>document.getElementById("emo").selectedIndex) return "CCEXPIRED";
 }
 return "OK";
}
