function cent(amount) {
// returns the amount in the .99 format 
    amount -= 0;
    amount = (Math.round(amount*100))/100;
    return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
} 

function recalculatetotal(){
var today = new Date()
var month = today.getMonth() + 1
var day = today.getDate()
var year = today.getFullYear()
var s = "/"

document.basketform.date.value = day + s + month + s + year

document.basketform.Donation.value="0.00";
document.basketform.MembershipFee.value=document.basketform.MembershipType.value;
document.basketform.nameofmembership.value=document.basketform.MembershipType.options[document.basketform.MembershipType.selectedIndex].text;
document.basketform.PostagePacking.value=document.basketform.ShippingRegion.value;
if (document.basketform.tempdonation.value){
	if (isNaN(document.basketform.tempdonation.value)){
	alert("Donation is not a number") ;
	}else{
	document.basketform.Donation.value=document.basketform.tempdonation.value;
	document.basketform.Donation.value=cent(document.basketform.Donation.value);
	}
}

document.basketform.OrderTotal.value=parseFloat(document.basketform.GoodsTotal.value)+parseFloat(document.basketform.MembershipFee.value)+parseFloat(document.basketform.PostagePacking.value)+parseFloat(document.basketform.Donation.value);
document.basketform.OrderTotal.value=cent(document.basketform.OrderTotal.value);

//check for noneu orders
if (document.basketform.ShippingRegion.value == "999.00"){
	alert("For Non-UK orders over 100 pounds or all Non-EU orders please contact us. Contact details are at the bottom of the page");
	document.basketform.PostagePacking.value = "0.00";
	document.basketform.Button.disabled = true;
}else{
		document.basketform.Button.disabled = false;
}

}

var emailok=true; // if false email incorrect
var ccNum="";var ccName=""; //for CC checking
var Xlen=true; // if false length is wrong
var Xpfx=true; // if false prefix is wrong
var Xc10=null; // if false Code10 is wrong
var Xyex=true; // if false Year  of expiry was omitted
var Xmex=true; // if false Month of expiry was omitted
var Xiss=true; // if false Issue number omitted when required

function verify(form) {
//Check out donation
//Check to see that all required fields are filled in
var themessage = "Please complete the following fields: ";
if (!doesExist(form.FirstName.value)) {
themessage = themessage + " - First name";
}
if (!doesExist(form.Surname.value)) {
themessage = themessage + " -  Surname";
}
if (!doesExist(form.Email.value)) {
themessage = themessage + " -  Email address";
}
if (!doesExist(form.Address1.value)) {
themessage = themessage + " -  Postal address";
}
if (!doesExist(form.Town.value)) {
themessage = themessage + " -  Town";
}
if (!doesExist(form.PostCode.value)) {
themessage = themessage + " -  Post code";
}
//if (!doesExist(form.Country.value)) {
//themessage = themessage + " -  Country";
//}
checkregion = form.ShippingRegion.options[form.ShippingRegion.selectedIndex].text
if(checkregion == 'Region') {
themessage = themessage + " -  Shipping region";
}



if (form.CardType.selectedIndex==0){
themessage = themessage + " -  Card type";
}
if (!doesExist(form.CardNumber.value)){
themessage = themessage + " -  Card number";
}
if (!doesExist(form.CardName.value)){
themessage = themessage + " -  Card name";
}

//alert if fields are empty and cancel form submit
if (themessage == "Please complete the following fields: ") {

	//Everything OK so far, check for a valid email address
	checkEmail(form);
	if (emailok == false) {
	themessage = "Invalid E-mail Address! Please re-enter";
	alert(themessage);
	return false;
	}
	else {

	//Finally let's check the credit card
	var submittable;var Issue_needed=false;
	ccNum=digitsOnly(form.CardNumber.value);
	ccName=listtext(form.CardType);
	Issue_needed=(ccName=="Delta" || ccName=="Switch/Maestro");
	Xiss=!(Issue_needed&&form.IssueNumber.value.length==0);
	Xmex=(listtext(form.CardExpiryMonth)!="MM");
	Xyex=(listtext(form.CardExpiryYear)!="YY");
	
	if(validatecardnumber())
	 {
	  Xc10=cardcheck(ccNum);
	 }
	 
	var suspect=!(Xlen&&Xpfx&&Xc10);
	var submittable=Xiss&&Xmex&&Xyex;
	var msg=(submittable&&!suspect)?"":cardError(suspect);

	
	//################
if(ccName!="Switch/Maestro"){
	if(!submittable){alert(msg);return false;}
	else if(submittable&&suspect){alert(msg);return false;}
	else {return true;}
}
if(ccName=="Switch/Maestro"){
	if(!submittable){return true;}
	else if(submittable&&suspect){return true;}
	else {return true;}
}
	//################
	}
}
else {
alert(themessage);
return false;
   }
}

function doesExist(inputValue) {
	var aCharExists=0
	if (inputValue) {
		for (var i=0; i<inputValue.length; i++) {
			if (inputValue.charAt(i) != " ") {			
				aCharExists = 1
			}
		}
	}
	if (!aCharExists) {
		return false			
	}
	else {
		return true
	}
}

function checkEmail(form) {
if (/^.+@.+\..{2,3,4,6}$/.test(form.Email.value)){
emailok=true;
}
else {
emailok=true;
}
}

function cardError(suspect){
var ret="";
ret+=(suspect)?"Please enter a valid card number.":"";
ret+=(Xiss)?"":"Issue number is required";
ret+=(Xyex)?"":"No Year of Expiry selected.";
ret+=(Xmex)?"":"No Month of Expiry selected.";
return(ret);

}

function validatecardnumber() {
var validcard=false;var pfx="";
var ccLen=ccNum.length;
if(ccName=="Mastercard"){pfx=1*ccNum.substring(0,2);Xlen=(ccLen==16);Xpfx=(pfx>=51 && pfx<=55);}
if(ccName=="Visa"){pfx=1*ccNum.substring(0,1);Xlen=(ccLen==16 || ccLen ==13);Xpfx=(pfx==4);}
if(ccName=="Switch/Maestro"){Xpfx=true;Xlen=true;} // NO VALIDATION DATA AVAILABLE
validcard=(Xlen&&Xpfx);
return (validcard);
}

function cardcheck(Num){ // function only called if number passed on length and prefix
var mask="2121212121212121";var CheckSum=0;var ProdVal;
if(Num.length>=13){while(Num.length<16){Num="0"+Num;}}
for(var count=1;count<=16;count++)
 {ProdVal=Num.charAt(count-1)*mask.charAt(count-1);ProdVal=(ProdVal>9)?ProdVal-9:ProdVal;CheckSum+=ProdVal;}
CheckSum%=10;
return(CheckSum==0);
}

function listtext(List){var Item=List.selectedIndex;return(List.options[Item].text);}
function digitsOnly(Instr){var L=Instr.length;var i=0;var OutStr="";var x="";var NOZAP="0123456789";for(i=0;i<L;i++){x=Instr.charAt(i);OutStr+=(NOZAP.indexOf(x)>-1)?x:"";}return(OutStr);}

function goSubmit() {    if (verify(document.basketform)) { document.basketform.submit(); }}
