//--------------------------------------------------------------------------------
//   Application:   Agile Shopping Cart -- PHP Edition
//	 Version    :   5.0
//   Author     :   Eastland Data Systems
//
//
//                         COPYRIGHT NOTICE
//
//   The contents of this file is protected under the United States
//   copyright laws, and is confidential and proprietary to Eastland Data Systems.
//   Its use or disclosure in whole or in part without the expressed written 
//   permission of Eastland Data Systems is prohibited.
//
//   (c) Copyright Eastland Data Systems.  All rights reserved.
//
//--------------------------------------------------------------------------------->

function popUp(url) {
	sealWin=window.open(url,"win",'toolbar=0,location=0,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,width=500,height=450');self.name = "mainWin"; 
}

function sameas() {
	if (document.B.shiptosame.checked) {
		document.B.shipping_company.value = document.B.company.value;
		document.B.shipping_firstname.value = document.B.firstname.value;
		document.B.shipping_lastname.value = document.B.lastname.value;
		document.B.shipping_address.value = document.B.address.value;
		document.B.shipping_city.value = document.B.city.value;
		document.B.shipping_state.selectedIndex = document.B.state.selectedIndex
		document.B.shipping_province.value = document.B.province.value;
		document.B.shipping_zip.value = document.B.zip.value;
		document.B.shipping_country.selectedIndex = document.B.country.selectedIndex
		document.B.shipping_phone.value = document.B.phone.value;
		document.B.shipping_fax.value = document.B.fax.value;
		document.B.shipping_email.value = document.B.email.value;
	} else {
		document.B.shipping_company.value = '';
		document.B.shipping_firstname.value = '';
		document.B.shipping_lastname.value = '';
		document.B.shipping_address.value = '';
		document.B.shipping_city.value = '';
		document.B.shipping_state.selectedIndex = 0;
		document.B.shipping_province.value = '';
		document.B.shipping_zip.value = '';
		document.B.shipping_country.selectedIndex = 0;
		document.B.shipping_phone.value = '';
		document.B.shipping_fax.value = '';
		document.B.shipping_email.value = '';
	}
}


function checkInput(form) {
	var bgBad = "ffff99";
	var bgGood = "white";
	var valid = true;
	var blankField = false;
	var badEmailAddress = false;
	var badCCnumber = false;
	var badCCexpDate = false;
	var badCCtype = false;
	var countryselect = form.country.selectedIndex;
	var shipping_countryselect = form.shipping_country.selectedIndex;
	
	if (form.firstname.value == "") { blankField = true; setColor(form.firstname, bgBad); } else { setColor(form.firstname, bgGood); }	
	if (form.lastname.value == "") { blankField = true; setColor(form.lastname, bgBad); } else { setColor(form.lastname, bgGood); }	
	if (form.address.value == "") { blankField = true; setColor(form.address, bgBad); } else { setColor(form.address, bgGood); }
	if (form.city.value == "") { blankField = true; setColor(form.city, bgBad); } else { setColor(form.city, bgGood); }
	if (form.zip.value == "") { blankField = true; setColor(form.zip, bgBad); } else { setColor(form.zip, bgGood); }
	if (form.phone.value == "") { blankField = true; setColor(form.phone, bgBad); } else { setColor(form.phone, bgGood); }
	if (form.email.value == "") { blankField = true; setColor(form.email, bgBad); } else { setColor(form.email, bgGood); }
	if (form.country.options[countryselect].text == "United States") { 
		if (form.state.selectedIndex == 0) { blankField = true; setColor(form.state, bgBad); setColor(form.province, bgGood); } else { setColor(form.state, bgGood); setColor(form.province, bgGood); }
	} else {
		if (form.province.value == "") { blankField = true; setColor(form.province, bgBad); setColor(form.state, bgGood); } else { setColor(form.province, bgGood); setColor(form.state, bgGood); }
	}
	
	if (form.shipping_firstname.value == "") { blankField = true; setColor(form.shipping_firstname, bgBad); } else { setColor(form.shipping_firstname, bgGood); }
	if (form.shipping_lastname.value == "") { blankField = true; setColor(form.shipping_lastname, bgBad); } else { setColor(form.shipping_lastname, bgGood); }
	if (form.shipping_address.value == "") { blankField = true; setColor(form.shipping_address, bgBad); } else { setColor(form.shipping_address, bgGood); }
	if (form.shipping_city.value == "") { blankField = true; setColor(form.shipping_city, bgBad); } else { setColor(form.shipping_city, bgGood); }
	if (form.shipping_zip.value == "") { blankField = true; setColor(form.shipping_zip, bgBad); } else { setColor(form.shipping_zip, bgGood); }
	if (form.shipping_phone.value == "") { blankField = true; setColor(form.shipping_phone, bgBad); } else { setColor(form.shipping_phone, bgGood); }
	if (form.shipping_email.value == "") { blankField = true; setColor(form.shipping_email, bgBad); } else { setColor(form.shipping_email, bgGood); }
	if (form.shipping_country.options[shipping_countryselect].text == "United States") { 
		if (form.shipping_state.selectedIndex == 0) { blankField = true; setColor(form.shipping_state, bgBad); setColor(form.shipping_province, bgGood); } else { setColor(form.shipping_state, bgGood); setColor(form.shipping_province, bgGood); }
	} else {
		if (form.shipping_province.value == "") { blankField = true; setColor(form.shipping_province, bgBad); setColor(form.shipping_state, bgGood); } else { setColor(form.shipping_province, bgGood); setColor(form.shipping_state, bgGood); }
	}
	if (form.cc_name.value == "") { blankField = true; setColor(form.cc_name, bgBad); } else { setColor(form.cc_name, bgGood); }
	if (form.cc_number.value == "") { blankField = true; setColor(form.cc_number, bgBad); } else { setColor(form.cc_number, bgGood); }
//	if (form.cc_code.value == "") { blankField = true; setColor(form.cc_code, bgBad); } else { setColor(form.cc_code, bgGood); }
	
	// Check for blank fields
	if (blankField) { 
		valid = false; alert("Please fill out all required fields"); 
		
	} else {
		// Check email address validity
		if (!check_email(form.email.value)) { badEmailAddress = true; setColor(form.email, bgBad); } else { setColor(form.email, bgGood); }
		if (!check_email(form.shipping_email.value)) { badEmailAddress = true; setColor(form.shipping_email, bgBad); } else { setColor(form.shipping_email, bgGood); }
		if (badEmailAddress) { 
			valid = false; alert("Please enter a valid email address");

		} else {
			
			if ( (typeof( form.old_cc_number ) != "undefined") && (form.cc_number.value.indexOf('x') != -1) ) {

				// Check just expiration date
				if (!check_expiration(form.ccexp_month.options[form.ccexp_month.selectedIndex].text,form.ccexp_year.options[form.ccexp_year.selectedIndex].text)) { badCCexpDate = true; setColor(form.ccexp_month, bgBad); setColor(form.ccexp_year, bgBad); } else { setColor(form.ccexp_month, bgGood); setColor(form.ccexp_year, bgGood); }
				if (badCCexpDate) { 
					valid = false; alert("Please enter a valid expiration date"); 
				}
				
			} else {

				// LUNE 10 check credit card number
				if (!check_cardnumber(form.cc_number.value)) { badCCnumber = true; setColor(form.cc_number, bgBad); } else { setColor(form.cc_number, bgGood); }
				if (badCCnumber) {
					valid = false; alert("Please enter a valid credit card number"); 

				} else {
					// Check card type
					if (!check_cardType(form.cc_number.value,form.cc_type.options[form.cc_type.selectedIndex].text)) { badCCtype = true; setColor(form.cc_number, bgBad); } else { setColor(form.cc_number, bgGood); }
					if (badCCtype) { 
						valid = false; alert("Please enter a valid "+form.cc_type.options[form.cc_type.selectedIndex].text+" card number");

					} else {
						// Check expiration date
						if (!check_expiration(form.ccexp_month.options[form.ccexp_month.selectedIndex].text,form.ccexp_year.options[form.ccexp_year.selectedIndex].text)) { badCCexpDate = true; setColor(form.ccexp_month, bgBad); setColor(form.ccexp_year, bgBad); } else { setColor(form.ccexp_month, bgGood); setColor(form.ccexp_year, bgGood); }
						if (badCCexpDate) { 
							valid = false; alert("Please enter a valid expiration date"); 
						}
					}
				}
			}
		}
	} 
	return valid;
}

function setColor(fieldname, bg) {
	if (fieldname.style) fieldname.style.backgroundColor = bg;
}

function check_email(emailaddress) {
	ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
	for(i=0; i < emailaddress.length ;i++) {
		if(ok.indexOf(emailaddress.charAt(i))<0) { 
			return (false);
		}	
	} 
	if (document.images) {
		re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
		re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
		if (!emailaddress.match(re) && emailaddress.match(re_two)) {
			return (true);
		} 
	}
}

function check_cardnumber(cardNumber) {
	for( var i = 0; i < cardNumber.length; ++i ) {
		var c = cardNumber.charAt(i);
		if( c < '0' || c > '9' ) {
			return false;
		}
	}
	if( !mod10( cardNumber ) ) { 
		return false;
	}
	return true;
}

function mod10( cardNumber ) { 
	var ar = new Array( cardNumber.length );
	var i = 0;
	var sum = 0;
	for( i = 0; i < cardNumber.length; ++i ) {
		ar[i] = parseInt(cardNumber.charAt(i));
	}
	for( i = ar.length -2; i >= 0; i-=2 ) { 
		ar[i] *= 2;
		if( ar[i] > 9 ) ar[i]-=9;
	}
	for( i = 0; i < ar.length; ++i ) {
		sum += ar[i];
	}
	return (((sum%10)==0)?true:false);	 	
}

function check_cardType( cardNumber, cardType ) { 
	var length = cardNumber.length;
	switch( cardType ) {
	case 'American Express':
		if( length != 15 ) { return false; }
		var prefix = parseInt( cardNumber.substring(0,2));
		if( prefix != 34 && prefix != 37 ) { return false; }
		break;
	case 'Discover':
		if( length != 16 ) { return false; }
		var prefix = parseInt( cardNumber.substring(0,4));
		if( prefix != 6011 ) { return false; }
		break;
	case 'MasterCard':
		if( length != 16 ) { return false; }
		var prefix = parseInt( cardNumber.substring(0,2));
		if( prefix < 51 || prefix > 55) { return false; }
		break;
	case 'Visa':
		if( length != 16 && length != 13 ) { return false; }
		var prefix = parseInt( cardNumber.substring(0,1));
		if( prefix != 4 ) { return false; }
		break;
	}
	return true;
}

function check_expiration( month, year ) {
	var now = new Date();	
    var expiresIn = new Date(year,month,0,0,0);
    expiresIn.setMonth(expiresIn.getMonth()+1);	
    if( now.getTime() < expiresIn.getTime() ) return true;
    return false;
}
