var cardnameErrMsg = "Please enter your name as it appears on the card";
var billingaddressErrMsg = "Please enter the card billing address";
var billingcityErrMsg = "Please enter the card billing city";
var billingzipcodeErrMsg = "Please enter the card billing zipcode";
var ccErrMsg = "Please enter a valid card number";
var ccOKMsg = "16 digits. No spaces or dashes.";
var cvvErrMsg = "Please enter the card security code";
var expErrMsg = "Please select your card expiration date";
var emailErrMsg = "Please enter your email address";


function baValidate(){
	var err = false;
	if (!validateCC()){err = true;}
	if (!validateCVV()){err = true;}
	if (!validateExp()){err = true;}
	if (!validateLength('cardname',2)){err = true;}
	if (!validateLength('billingaddress',2)){err = true;}
	if (!validateLength('billingcity',2)){err = true;}
	if (!validateLength('billingzipcode',2)){err = true;}

if(err){
		document.getElementById("submitErr").innerHTML = "Please correct the errors shown before submitting";
		document.getElementById("submitErr").style.display = "block";
		new Effect.Pulsate(document.getElementById('submitErr'));
	
		return false;
	}
	else{
		document.getElementById("submitErr").innerHTML = "";
		document.getElementById("submitErr").style.display = "none";
		return true;
	}
}


/************************************************
These functions do the actual work of changing
things on the screen
*************************************************/

function validateEmail(){
	var fld = document.getElementById('billingemail');
	var td = document.getElementById('billingemailTD');
	var err = document.getElementById('billingemailErr');	
	if (!emailregex.test(fld.value)){
		td.className = 'inputBad';
		err.innerHTML = emailErrMsg;
		return false;
	}else{
	
		err.innerHTML = "";
		td.className = 'inputGood';
		return true;
	}
}

function validateCC(){
	var fld = document.getElementById('cc');
	var td = document.getElementById('ccTD');
	var err = document.getElementById('ccErr');
	
	
	var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');
	
	// Check length 
	if (stripped.length != 16){
		td.className = 'inputBad';
		err.innerHTML = ccErrMsg;
		return false;
	}
	else{
		if (isValidCreditCard(fld.value)){
			td.className = 'inputOK';
			err.innerHTML = ccOKMsg;
			return true;
		}
		else{
			td.className = 'inputBad';
			err.innerHTML = ccErrMsg;
			return false;
		}
		
		
		
	}
}

function validateCVV(){
	var fld = document.getElementById('cvv');
	var td = document.getElementById('cvvTD');
	var err = document.getElementById('cvvErr');
	var e = 0;
	
	if (fld.value.length != 3){
		e = 1;
	}
	
	if (isNaN(parseInt(fld.value))){
		e = 1;	
	}
		
	if(e == 1){	
		td.className = 'inputBad';
		err.innerHTML = cvvErrMsg;
		return false;
	}
	else{
		td.className = 'inputGood';
		err.innerHTML = '';
		return true;
	}
	
}


function validateExp(){
	
	var ccM = document.getElementById('CCMonth');
	var ccY = document.getElementById('CCYear');
	var td = document.getElementById('expTD');
	var err = document.getElementById('expErr');
	var e = 0;
	if (ccM.selectedIndex == 0){
		e = 1;	
	}
	if (ccY.selectedIndex == 0){
		e = 1;
	}
	

	
	if (e == 1){
		td.className = 'inputBad';
		err.innerHTML = expErrMsg;
		return false;
	}
	else{
		// need to subtract one because Date obj uses zero based array, and we don't
		var m = eval(ccM.options[ccM.selectedIndex].value - 1);
		var y = ccY.options[ccY.selectedIndex].value;
		
		var today = new Date();
		var tm = today.getMonth();
		var ty = today.getFullYear();
	
		var mErr = 0;
		var yErr = 0;
	
	// Test month
	if(m < tm){
		mErr = 1;
	}
	// Test year
	if(y < ty){
		yErr = 1;
	}

if ((mErr && yErr) || (y == ty && mErr)){
		td.className = 'inputBad';
		err.innerHTML = 'Your credit card has expired';
		return true;
		}
		else{
		td.className = 'inputGood';
		err.innerHTML = '';
		return true;
		}
	}
}









function validateZipcode(f){

	var fld = document.getElementById(f);
	var td = document.getElementById(f+'TD');
	var err = document.getElementById(f+'Err');	
	
	var e = false; // indicates an error has occurred

	// Make sure length not zero
	if (fld.value.length < l){
	
		e = true;
	}

	// Make sure zipcode is valid for US or Canada
	
	// canada
	//[A-Z]\d[A-Z]\s\d[A-Z]\d  

	


	    td.className = 'inputBad';
		err.innerHTML = eval(f+"ErrMsg");
		return false;

		td.className = 'inputOK';	
		err.innerHTML = "";
		return true; 


}

function validateLength(f,l){

	if (l == null){	l = 1;	} // If no min. length specified, default is 1
	

	var fld = document.getElementById(f);
	var td = document.getElementById(f+'TD');
	var err = document.getElementById(f+'Err');	
	
	if (fld.value.length < l){
	
	    td.className = 'inputBad';
		err.innerHTML = eval(f+"ErrMsg");
		return false;
	}
	else{
		td.className = 'inputOK';	
		err.innerHTML = "";
		return true; 
	}
}

//  Forward Slashes "/" are used to quote the regex. Not single quotes! 
var emailregex = new RegExp(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);