//start menu script
sfHover = function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
//end menu script

function checkField (strng) {
	 var error = 0;
	 var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	 if (strng == "") {
		error = 1;
	 } else if (strng.match(illegalChars)) {
		error = 2;
	 }
	 return error;
}
	 
function checkEmail (strng) {
	var error = 0;
	var emailFilter=/^.+@.+\..{2,3,4,6}$/;
	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	var atpos=strng.indexOf("@");
	var dotpos=strng.lastIndexOf(".");
	if (strng == "") {
		error = 1;
	} else if (atpos<1 || dotpos<atpos+2 || dotpos+2>=strng.length) { 
		error = 3;
	} else if (strng.match(illegalChars)) {
		error = 2;
	}
	return error;
}

function checkRadioButton(str) {
	for (i=0, n=str.length; i<n; i++) {
	   if (str[i].checked) {
		  var checkvalue = str[i].value;
		  break;
	   }
	}
	if (checkRadio(checkvalue) != 0) {
		return 1;
	} else {
		return 0;
	}
} 
function checkRadio(checkvalue) {
var error = 0;
   if (!(checkvalue)) {
       error = 1;
    }
return error;    
}

function checkRadioPayment() {
	var form = document.getElementById('subscribeForm');
	var oRadio = form.paymentoption;
	for(var i = 0; i < oRadio.length; i++)
	{
	  if(oRadio[i].checked)
	  {
		 var oRadioval = oRadio[i].value;
	  }
	}
	if(oRadioval == 'ch') {
		if (document.getElementById('oc_form')) {
		document.getElementById('oc_form').style.display = 'none';
		}
		if (document.getElementById('cc_form')) {
		document.getElementById('cc_form').style.display = 'none';
		}
		document.getElementById('check_form').style.display = 'block';
	} else if (oRadioval == 'oc') {
		document.getElementById('oc_form').style.display = 'block';
		document.getElementById('check_form').style.display = 'none';	
	} else if (oRadioval == 'cc') {
		document.getElementById('cc_form').style.display = 'block';
		document.getElementById('check_form').style.display = 'none';	
	}
}

function checkRadioPayment1() {
	var form = document.getElementById('reprintsForm');
	var oRadio = form.paymentoption;
	for(var i = 0; i < oRadio.length; i++)
	{
	  if(oRadio[i].checked)
	  {
		 var oRadioval = oRadio[i].value;
	  }
	}
	if(oRadioval == 'ch') {
		document.getElementById('cc_form').style.display = 'none';
		document.getElementById('check_form').style.display = 'block';
	} else if (oRadioval == 'cc') {
		document.getElementById('cc_form').style.display = 'block';
		document.getElementById('check_form').style.display = 'none';
	}	
}

function checkForm(type) {
	var form = document.getElementById('subscribeForm');
	var oRadio = form.paymentoption;
	for(var i = 0; i < oRadio.length; i++)
	{
	  if(oRadio[i].checked)
	  {
		 var oRadioval = oRadio[i].value;
	  }
	}
	if (type == 'renew' ) {
		message = 0;
		if (checkEmail(form.email_renew.value) == 1) {
			message = 'If you are renewing your subscription, please enter your renewal email. If entering a new subscription please fill out the new subscription information and click the submit button below.';
		} else if (checkEmail(form.email_renew.value) == 3 || checkEmail(form.email_renew.value) == 2 ) {
			message = 'Your email is not valid';
		} 
		if(message != 0) {
			alert(message);
			window.scrollTo(0,400);
			return false;
		} else {
			form.order_type.value = 'renew';
			return true;	
		}
	} else if(type == 'subscribe') {
		var formerror = 0;
		if(checkField(form.first_name.value)!= 0) {
			form.first_name.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.first_name.style.border = '';
		}	
		if(checkField(form.last_name.value)!= 0) {
			form.last_name.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.last_name.style.border = '';
		}
		if(checkField(form.address1.value)!= 0) {
			form.address1.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.address1.style.border = '';
		}
		if(checkField(form.city.value)!= 0) {
			form.city.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.city.style.border = '';
		}
		if(checkField(form.zip.value)!= 0) {
			form.zip.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.zip.style.border = '';
		}
		if(checkField(form.email_subscribe.value)!= 0) {
			form.email_subscribe.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.email_subscribe.style.border = '';
		}
		if(checkField(form.phone.value)!= 0) {
			form.phone.style.border = '1px solid red';
			formerror = 1;
		} else {
			form.phone.style.border = '';
		}
		if (!oRadioval) {
			document.getElementById('paymentText').style.color = 'red';
			formerror = 1;
		} else {
			 if (oRadioval == 'cc') {
				document.getElementById('paymentText').style.color = 'red';
				if (!checkCreditCard(form.cc_number.value, form.card_type.value) || form.cc_number.value == '' || form.card_type.value == '' ) {
					document.getElementById('ccnumber').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('ccnumber').style.border = '';
				}
				if (form.cc_code.value.length < 3 || form.cc_code.value.length >4 || isNaN(form.cc_code.value) || form.cc_code.value == '') {
					document.getElementById('cc_code').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('cc_code').style.border = '';
				}
				if (form.cc_name.value == '' || !isNaN(form.cc_name.value)) {
					document.getElementById('cc_name').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('cc_name').style.border = '';
				}
				var d = new Date();
				if (form.exp_year.value < d.getFullYear()) {
					alert('Credit Card Expired!');
					formerror = 1;	
				}
			} else if (oRadioval == 'oc') {
				document.getElementById('paymentText').style.color = 'red';
				if (!checkCreditCard(form.oc_cc_number.value, form.oc_card_type.value) || form.oc_cc_number.value == '' || form.oc_card_type.value == '' ) {
					document.getElementById('oc_ccnumber').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('oc_ccnumber').style.border = '';
				}
				if (form.oc_cc_code.value.length < 3 || form.oc_cc_code.value.length >4 || isNaN(form.oc_cc_code.value) || form.oc_cc_code.value == '') {
					document.getElementById('oc_cc_code').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('oc_cc_code').style.border = '';
				}
				if (form.oc_cc_name.value == '' || !isNaN(form.oc_cc_name.value)) {
					document.getElementById('oc_cc_name').style.border = '1px solid red';
					formerror = 1;
				} else {
					document.getElementById('oc_cc_name').style.border = '';
				}
				var d = new Date();
				/*if (form.oc_exp_year.value < d.getFullYear()) {
					alert('Credit Card Expired!');
					formerror = 1;	
				}*/
			} else {
				document.getElementById('paymentText').style.color = '';
			}
			
		}
		
		
		if (formerror == 1) {
			alert ('All required fields need to be filled correctly!');
			window.scrollTo(0,500);
			return false;
		}  else {
			form.order_type.value = 'subscribe';
			return true;	
		}
	}
}

function checkHear(id) {
	document.getElementById('friendField').style.display = 'none';
	document.getElementById('otherField').style.display = 'none';
	
	for(var i = 0; i < id.options.length; i++) {
	  if(i == id.options.selectedIndex)
	  {
		 if (id.options[i].value == 'Friend') {
			document.getElementById('friendField').style.display = 'block';	 
		 } else if (id.options[i].value == 'Other') {
			document.getElementById('otherField').style.display = 'block';	 
		 }
	  }
	}
}

function checkFormReprint() {
	var form = document.getElementById('reprintsForm');
	var oRadio = form.paymentoption;
	for(var i = 0; i < oRadio.length; i++)
	{
	  if(oRadio[i].checked)
	  {
		 var oRadioval = oRadio[i].value;
	  }
	}
	var formerror = 0;
	if(checkField(form.date_initiated.value)!= 0) {
		form.date_initiated.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.date_initiated.style.border = '';
	}
	if(checkField(form.total_number.value)!= 0) {
		form.total_number.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.total_number.style.border = '';
	}
	if(checkField(form.issue_date.value)!= 0) {
		form.issue_date.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.issue_date.style.border = '';
	}
	if(checkField(form.name_of_article.value)!= 0) {
		form.name_of_article.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.name_of_article.style.border = '';
	}
	if(checkField(form.pages_numbers.value)!= 0) {
		form.pages_numbers.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.pages_numbers.style.border = '';
	}
	if(checkField(form.cost.value)!= 0 || isNaN(form.cost.value)) {
		form.cost.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.cost.style.border = '';
	}
	if(!form.black_white.checked && !form.color_glossy.checked && !form.discount_15.checked && !form.pickup.checked && !form.mailed_each.checked && !form.pickup2.checked && !form.photo_reprint.checked && !form.metal_printing.checked && !form.e_mailed.checked && !form.on_disk.checked && !form.dim_5_11.checked && !form.large_format.checked && !form.eletronic_print.checked && !form.cbj_quarterly.checked) {
		document.getElementById('whatRequested').style.color = 'red';
		formerror = 1;
	} else {
		document.getElementById('whatRequested').style.color = '';
	}
	if(checkField(form.first_name.value)!= 0) {
		form.first_name.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.first_name.style.border = '';
	}	
	if(checkField(form.last_name.value)!= 0) {
		form.last_name.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.last_name.style.border = '';
	}
	if(checkField(form.email_subscribe.value)!= 0) {
		form.email_subscribe.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.email_subscribe.style.border = '';
	}
	if(checkField(form.phone.value)!= 0) {
		form.phone.style.border = '1px solid red';
		formerror = 1;
	} else {
		form.phone.style.border = '';
	}
	if (!oRadioval) {
		document.getElementById('paymentText').style.color = 'red';
		formerror = 1;
	} else {
		if(oRadioval == 'cc') {
			document.getElementById('paymentText').style.color = 'red';
			if (!checkCreditCard(form.cc_number.value, form.card_type.value) || form.cc_number.value == '' || form.card_type.value == '' ) {
				document.getElementById('ccnumber').style.border = '1px solid red';
				formerror = 1;
			} else {
				document.getElementById('ccnumber').style.border = '';
			}
			if (form.cc_code.value.length < 3 || form.cc_code.value.length >4 || isNaN(form.cc_code.value) || form.cc_code.value == '') {
				document.getElementById('cc_code').style.border = '1px solid red';
				formerror = 1;
			} else {
				document.getElementById('cc_code').style.border = '';
			}
			if (form.cc_name.value == '' || !isNaN(form.cc_name.value)) {
				document.getElementById('cc_name').style.border = '1px solid red';
				formerror = 1;
			} else {
				document.getElementById('cc_name').style.border = '';
			}
			var d = new Date();
			if (form.exp_year.value < d.getFullYear()) {
				alert('Credit Card Expired!');
				formerror = 1;	
			}
		} else {
			document.getElementById('paymentText').style.color = '';
		}
		
	}
	if (formerror == 1) {
		alert ('All required fields need to be filled correctly!');
		window.scrollTo(0,800);
		return false;
	}  else {
		form.order_type.value = 'reprint_subscription';
		return true;	
	}
}

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {
     
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types as follows.
  
  //  Name:         As in the selection box of the form - must be same as user's
  //  Length:       List of possible valid lengths of the card number for the card
  //  prefixes:     List of possible prefixes for the card
  //  checkdigit:   Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "305,36,38,54,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305",
               checkdigit: true};
  cards [4] = {name: "AmEx", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,622,64,65",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "16", 
               prefixes: "35",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334,6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "12,13,14,15,16,18,19", 
               prefixes: "5018,5020,5038,6304,6759,6761",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913,4508,4844",
               checkdigit: true};
  cards [12] = {name: "LaserCard", 
               length: "16,17,18,19", 
               prefixes: "6304,6706,6771,6709",
               checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname == cards[i].name) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the length if all else was 
  // hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}
