////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  validate function
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function validate_form(FORM){

        // validation variables
        var bgBad = "#f7a810";
        var bgGood = "#FFFFFF";
        var valid = true;
        var missingFields = "The following fields are required:\n\n";            
        var numElements = FORM.elements.length;             

        // check all fields to ensure that they are not empty       
        var i;
        for(i=0;i<numElements;i++){
			// alert(FORM.elements[i].type);
			if (FORM.elements[i].type != "hidden") {
				if(FORM.elements[i].getAttribute("required") == "true"){
				    if(!FORM.elements[i].value){
				        valid = false;
				        FORM.elements[i].style.backgroundColor = bgBad;
				        missingFields += FORM.elements[i].getAttribute("errormsg") + " \n";						
				    }
				    else{
				        FORM.elements[i].style.backgroundColor = bgGood;
				    }
				}
			}
        }

      // return proper validation status
      if(!valid) {
			alert(missingFields);
			return valid;
		}        
        
        	if(FORM.name == "RegForm"){
        	
				var fname = FORM.ship_to_first_name;
				var fname2 = FORM.bill_to_first_name;
				var lname = FORM.ship_to_last_name;
				var lname2 = FORM.bill_to_last_name;
				var city = FORM.ship_to_city;
				var city2 = FORM.bill_to_city;
				var zip = FORM.ship_to_zip;
				var zip2 = FORM.bill_to_zip;
				var email = FORM.email;
				var areacode = FORM.bill_to_area_code;
				var phone = FORM.bill_to_phone;
				var cardtype = FORM.card_type;
				var cardnum = FORM.card_number;
				var cardexpm = FORM.card_exp_month;
				var cardexpy = FORM.card_exp_year;
				var cardcvv2 = FORM.card_cvv2;
				var amex = FORM.card_type.options[0];
				var disc = FORM.card_type.options[1];
				var mc = FORM.card_type.options[2];
				var visa = FORM.card_type.options[3];

			   if(!(isNaN(fname.value)) && (fname.value != "")){
					valid = false;
					fname.style.backgroundColor = bgBad;
					alert("Your Ship-to First Name cannot contain numeric characters.");
					fname.focus();
					fname.blur();
					fname.select();
					return valid;
				}
				
				if(!(isNaN(fname2.value)) && (fname2.value != "")){
					valid = false;
					fname2.style.backgroundColor = bgBad; 
					alert("Your Bill-to First Name cannot contain numeric characters.");
					fname2.focus();
					fname2.blur();
					fname2.select();
					return valid;
				}
			
				if(!(isNaN(lname.value)) && (lname.value != "")){
					valid = false;
					lname.style.backgroundColor = bgBad; 
					alert("Your Ship-to Last Name cannot contain numeric characters.");
					lname.focus();
					lname.blur();
					lname.select();
					return valid;
				}
			
				if(!(isNaN(lname2.value)) && (lname2.value != "")){
					valid = false;
					lname2.style.backgroundColor = bgBad; 
					alert("Your Bill-to Last Name cannot contain numeric characters.");
					lname2.focus();
					lname2.blur();
					lname2.select();
					return valid;
				}
				
				if (!(isNaN(city.value)) && (city.value != "")) {
					valid = false;
					city.style.backgroundColor = bgBad;
					alert("Your Ship-to City cannot contain numeric characters.");
					city.focus();
					city.blur();
					city.select();
					return valid;
				}
				
				if (!(isNaN(city2.value)) && (city2.value != "")) {
					valid = false;
					city2.style.backgroundColor = bgBad;
					alert("Your Bill-to City cannot contain numeric characters.");
					city2.focus();
					city2.blur();
					city2.select();
					return valid;
				}
			
				if (zip.value.length != 0 && zip.value.length < 5) {
					valid = false;
					zip.style.backgroundColor = bgBad;
					alert("Invalid Ship-to Zip Code.");
					zip.focus();
					zip.blur();
					zip.select();
					return valid;
				} else {
					if (isNaN(zip.value)) {
						valid = false;
						zip.style.backgroundColor = bgBad;
						alert("Ship-to Zip Code must be numeric characters.");
						zip.focus();
						zip.blur();
						zip.select();
						return valid;
					}
				}
			
				if (zip2.value.length != 0 && zip2.value.length < 5) {
					valid = false;
					zip2.style.backgroundColor = bgBad;
					alert("Invalid Bill-to Zip Code.");
					zip2.focus();
					zip2.blur();
					zip2.select();
					return valid;
				} else {
					if (isNaN(zip2.value)) {
						valid = false;
						zip2.style.backgroundColor = bgBad;
						alert("Bill-to Zip Code must be numeric characters.");
						zip2.focus();
						zip2.blur();
						zip2.select();
						return valid;
					}
				}
			
				// check email for @ symbol
				if((email.value.indexOf("@") == -1) && (email.value != "")){
					valid = false;
					email.style.backgroundColor = bgBad; 
					alert("Please enter a valid e-mail address.");
					email.focus();
					email.blur();
					email.select();
					return valid;
				}			
	
				// check email for . symbol
				if((email.value.indexOf(".") == -1) && (email.value != "")){
					valid = false;
					email.style.backgroundColor = bgBad; 
					alert("Please enter a valid e-mail address.");
					email.focus();
					email.blur();
					email.select();
					return valid;
				}			

				if (areacode.value.length != 0 && areacode.value.length < 3) {
					valid = false;
					areacode.style.backgroundColor = bgBad;
					alert("Invalid area code.");
					areacode.focus();
					areacode.blur();
					areacode.select();
					return valid;
				} else {
					if (isNaN(areacode.value)) {
						valid = false;
						areacode.style.backgroundColor = bgBad;
						alert("Area code must be numeric characters.");
						areacode.focus();
						areacode.blur();
						areacode.select();
						return valid;
					}
				}
			
				if (phone.value.length != 0 && phone.value.length < 7) {
					valid = false;
					phone.style.backgroundColor = bgBad;
					alert("Invalid phone number.");
					phone.focus();
					phone.blur();
					phone.select();
					return valid;
				} else {			
					if (isNaN(phone.value)) {
						valid = false;
						phone.style.backgroundColor = bgBad;
						alert("Phone number must be numeric characters.");
						phone.focus();
						phone.blur();
						phone.select();
						return valid;
					}
				}

	         // make sure the cc is not expired
				var today = new Date();
				var today_month = today.getMonth()+ 1;
				var today_year = today.getFullYear();
	            
				if ((today_year > cardexpy.value) && (cardexpy.value != "-Yr-")) {
					valid = false;
					cardexpy.style.backgroundColor = bgBad;
					alert("Your credit card has expired.");
					cardexpy.focus();
					cardexpy.blur();
					return valid;
				}
				
				if ((today_year == cardexpy.value) && (today_month > cardexpm.value)) {
					valid = false;
					cardexpy.style.backgroundColor = bgBad;
					cardexpm.style.backgroundColor = bgBad;
					alert("Your credit card has expired" );
					cardexpm.focus();
					cardexpm.blur();
					return valid;
				}
				
				if (isNaN(cardnum.value)) {
					valid = false;
					cardnum.style.backgroundColor = bgBad;
					alert("Card # must be numeric characters.");
					cardnum.focus();
					cardnum.blur();
					cardnum.select();
					return valid;
				}

				// visa,mc, must have 3 digits.
				// amex must have 4
				if((cardcvv2.value.length < 3) && (cardcvv2.value != "")){
					valid = false;
					cardcvv2.style.backgroundColor = bgBad; 
					alert("Please enter a complete cvv2 code.");
					cardcvv2.focus();
					cardcvv2.blur();
					cardcvv2.select();
					return valid;
				}  
				
				// check for valid credit card number
				var s = cardnum.value;
				var v = "0123456789";
				var w = "";

				for (var i=0; i < s.length; i++) {
					x = s.charAt(i);
					if (v.indexOf(x,0) != -1)
					w += x;
				}

				var j = w.length / 2;
				if (j < 6.5 || j > 8 || j == 7){
					valid = false;
					cardnum.style.backgroundColor = bgBad; 
					alert("Please enter a valid credit card number.");
					cardnum.focus();
					cardnum.blur();
					cardnum.select();
					return valid;
				}

				var k = Math.floor(j);
				var m = Math.ceil(j) - k;
				var c = 0;

				for (var i=0; i<k; i++) {
					a = w.charAt(i*2+m) * 2;
					c += a > 9 ? Math.floor(a/10 + a%10) : a;
				}

				for (var i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;

				if(c%10 != 0){
					valid = false;
					cardnum.style.backgroundColor = bgBad; 
					alert("Please enter a valid credit card number.");
					cardnum.focus();
					cardnum.blur();
					cardnum.select();
					return valid;
				}
				
	      }
	
      // post alert if not valid
      if(!valid) {
			alert(missingFields);
		}

      // return proper validation status
      return valid;
		
    }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




