	function fixCardNum(cardnumber)
	{
		var outstr = '';
		for(var x = 0; x < cardnumber.length; x++) {
			ts = cardnumber.substring(x,x+1)
			if(!isNaN(ts))
				outstr += ts; 
		}
		return outstr; 
	}

	function validate(frm) {
		var focus = '';
		var alerttext = ''; 
		var offerchecked;

		// fix the card number
		frm.elements['cardnumber'].value = fixCardNum(frm.elements['cardnumber'].value);
		
		if(frm.elements['offer']) {
			if(frm.elements['offer'].length) {
				for(var i = 0; i < frm.elements['offer'].length; i ++) {
					if(frm.elements['offer'][i].checked)
						offerchecked = true;
				}
			} else {
				if(frm.elements['offer'].checked) {
					offerchecked = true;
				}
			}
			if(!offerchecked) {
				alerttext += "Please select an offer.\n"; 
				if(!focus) focus = 'offer'; 
			}
		}
		if(frm.elements['firstname'].value == '') {
			alerttext += "First name is required.\n"; 
			if(!focus) focus = 'firstname'; }
		if(frm.elements['lastname'].value == '') {
			alerttext += "Last name is required.\n"; 
			if(!focus) focus = 'lastname'; }
		if(!isValidEmail(frm.elements['email'].value)) {
			alerttext += "A valid e-mail address is required.\n"; 
			if(!focus) focus = 'email'; }
		if(frm.elements['email'].value != frm.elements['confirmemail'].value) {
			alerttext += "The email confirmation values do not match.\n"; 
			if(!focus) focus = 'confirmemail'; }
		if(frm.elements['homephone1'].value == '' || frm.elements['homephone2'].value == '' || frm.elements['homephone3'].value == '' || frm.elements['homephone1'].value.length < 3 || frm.elements['homephone2'].value.length < 3 || frm.elements['homephone3'].value.length < 4  || !IsNumeric(frm.elements['homephone1'].value) || !IsNumeric(frm.elements['homephone2'].value) || !IsNumeric(frm.elements['homephone3'].value)) {
			alerttext += "A valid 10-digit phone number is required.\n"; 
			if(!focus) focus = 'homephone1'; }
		if(frm.elements['addressnumber'].value == '' || frm.elements['address'].value == '') {
			alerttext += "A valid address is required.\n"; 
			if(!focus) focus = 'addressnumber'; }
		if(frm.elements['city'].value == '') {
			alerttext += "City is required.\n"; 
			if(!focus) focus = 'city'; }
		if(frm.elements['state'].selectedIndex == 0) {
			alerttext += "State is required.\n"; 
			if(!focus) focus = 'state'; }
		if(frm.elements['zip'].value == '') {
			alerttext += "Zip code is required.\n"; 
			if(!focus) focus = 'zip'; }
		if(frm.elements['differentbilling'].checked) {
			if(frm.elements['billingfirstname'].value == '') {
				alerttext += "Billing first name is required.\n"; 
				if(!focus) focus = 'billingfirstname'; }
			if(frm.elements['billinglastname'].value == '') {
				alerttext += "Billing last name is required.\n"; 
				if(!focus) focus = 'billinglastname'; }
			if(frm.elements['billingaddressnumber'].value == '' || frm.elements['billingaddress'].value == '') {
				alerttext += "A valid billing address is required.\n"; 
				if(!focus) focus = 'billingaddressnumber'; }
			if(frm.elements['billingcity'].value == '') {
				alerttext += "Billing city is required.\n"; 
				if(!focus) focus = 'billingcity'; }
			if(frm.elements['billingstate'].selectedIndex == 0) {
				alerttext += "Billing state is required.\n"; 
				if(!focus) focus = 'billingstate'; }
			if(frm.elements['billingzip'].value == '') {
				alerttext += "Billing zip code is required.\n"; 
				if(!focus) focus = 'billingzip'; }
		}
		var checkcc = 0;
		if(frm.elements['paymentmethod'].length >1) { // there's a 'bill me' option
			if(!frm.elements['paymentmethod'][0].checked && !frm.elements['paymentmethod'][1].checked) {
				alerttext += "Please select a payment method.\n"; 
				if(!focus) focus = 'paymentmethod'; }
			if(frm.elements['paymentmethod'][0].checked) {
				checkcc = 1;
			}
		} else {
			checkcc = 1;
		}

		if(checkcc == 1) {
			if(frm.elements['cardnumber'].value != '5111111111111111') {
				var cardresponse = CheckCardNumber(frm);
				if(cardresponse != true) {
					switch(cardresponse) {
						case 'nonumber':
							alerttext += "Please enter a credit card number.\n"; 
							if(!focus) focus = 'cardnumber'; 
							break;
						case 'noyear':
							alerttext += "Please enter the expiration date of the card.\n"; 
							if(!focus) focus = 'cardnumber'; 
							break;
						case 'badyear':
							alerttext += "Please enter the expiration date of the card.\n"; 
							if(!focus) focus = 'cardnumber'; 
							break;
						case 'badnumber':
							alerttext += "There seems to be a problem with the credit card number.\n"; 
							if(!focus) focus = 'cardnumber'; 
							break;
						case 'expired':
							alerttext += "Please check the credit card expiration date.\n"; 
							if(!focus) focus = 'cardnumber'; 
							break;
						case 'notype':
							alerttext += "Please enter a credt card type.\n"; 
							if(!focus) focus = 'cardtype'; 
							break;
						case 'badtype':
							alerttext += "Please check the credit card type; this number does not seem to be valid for this type of card.\n"; 
							if(!focus) focus = 'cardtype'; 
							break;
						default:
					}
				}
			}

		}
		if(focus) {
			alert(alerttext)
			if(frm.elements[focus].length)
				frm.elements[focus][0].focus();
			else
				frm.elements[focus].focus();
			return false;
		} else {
			return true;
		}
	}
	function isValidEmail(str) {
		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		if (str.indexOf(at)==-1)
		   return false;
		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
		   return false;
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
		    return false;
		if (str.indexOf(at,(lat+1))!=-1)
		    return false;
		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
		    return false;
		if (str.indexOf(dot,(lat+2))==-1)
		    return false;
		if (str.indexOf(" ")!=-1)
		    return false;
		return true;
	}

	function moveNext(fld, fieldlength, fieldname) {
		if(fld.value.length >= fieldlength) {
			document.forms[0].elements[fieldname].focus();
		}
	}

	function onlynumbers(fld) {
		var mystr = fld.value; 
		var outstr = "";
		for(var x = 0; x < mystr.length; x++) {
			ts = mystr.substring(x,x+1)
			if(!isNaN(ts))
				outstr += ts; 
		}
		fld.value = outstr;
	}

	function showbilling(fld) {
		if(fld.checked == true) {
			show('billingaddresssection')
			if(fld.form.elements['billingfirstname'].value == '') {
				fld.form.elements['billingfirstname'].value = fld.form.elements['firstname'].value;
				fld.form.elements['billinglastname'].value = fld.form.elements['lastname'].value;
			}
		} else {
			hide('billingaddresssection')
		}
	}
	function showpayment(fld) {
		if(fld.value == "Credit card" && fld.checked == true) {
			show('paymentcc')
		} else {
			hide('paymentcc')
		}
	}


function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}
