////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  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 mc = FORM.card_type.options[1];
				var visa = FORM.card_type.options[2];

			   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 16 digits.
				// amex must have 15
				if((cardnum.value.length < 15) && (cardnum.value != "")){
					valid = false;
					cardnum.style.backgroundColor = bgBad; 
					alert("Please enter a valid credit card number.");
					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 valid cvv2 code.");
					cardcvv2.focus();
					cardcvv2.blur();
					cardcvv2.select();
					return valid;
				}  
				
				// first number of cc must match type
				if(amex.selected){
					if(cardnum.value.substring(0,1) != 3){
						valid = false;
						cardnum.style.backgroundColor = bgBad; 
						alert("Please enter a valid American Express number.");
						cardnum.focus();
						cardnum.blur();
						cardnum.select();
						return valid;
					}
					// amex codes are 4 digits
					if((cardcvv2.value.length < 4) && (cardcvv2.value != "")){
						valid = false;
						cardcvv2.style.backgroundColor = bgBad; 
						alert("Please enter a valid cvv2 code.");
						cardcvv2.focus();
						cardcvv2.blur();
						cardcvv2.select();
						return valid;
					}  
				}
				
				if(mc.selected){
					if(cardnum.value.substring(0,1) != 5){
						valid = false;
						cardnum.style.backgroundColor = bgBad; 
						alert("Please enter a valid MasterCard number.");
						cardnum.focus();
						cardnum.blur();
						cardnum.select();
						return valid;
					}
				}
			
				if(visa.selected){
					if(cardnum.value.substring(0,1) != 4){
						valid = false;
						cardnum.style.backgroundColor = bgBad; 
						alert("Please enter a valid Visa number.");
						cardnum.focus();
						cardnum.blur();
						cardnum.select();
						return valid;
					}
				}
	      }
	
      // post alert if not valid
      if(!valid) {
			alert(missingFields);
		}

      // return proper validation status
      return valid;
		
    }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





