		var digits		   = "0123456789"
		var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
		var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		var phonesymbols	 = "-()"
		var whitespace	   = " \t\n\r"

		var s_fullname		= "Full name";
		var s_firstname		= "First name";
		var s_lastname		= "Last name";
		var s_street   = "Street address"
		var s_city	 = "City name"
		var s_state				= "State"
		var s_zip				= "ZIP/Postal Code"
		var s_country  = "Country"
		var s_phone				= "Phone number"
		var s_email	= "Valid email address (e.g. user@domain.com)"
		var s_username = "Username (3-16 characters)"
		var s_password = "Password (3-16 characters)"
		var s_confirm_password = "Confirm password - must be same as Password field"
		var s_card_no  = "Credit card No."
		var s_cvc="CVC/CVC"
		var s_cc_name="Cardholder name"
		var s_agree = "Agreed with Terms and Conditions"
        
		var s_method_by="Pay by"  
		var s_check_your_name="Your Name"      
		var s_check_bank_name="Bank Name"
		var s_check_account_owner="Account Number"
		var s_check_routing_number="Routing Number(Transit number)"
		var s_check_account_number="Reference Number(Check number)"

		var prefix								= "You did not enter a value into the following field: "
		var suffix								= "This is a required field. Please enter it now."
		var i_confirm_email		= "You must enter the same Email twice. Please re-enter Confirm Email now."
		var i_username						= "The Username field must be at least three characters long. Please re-enter it now."
		var i_password						= "The Password field must be at least three characters long. Please re-enter it now."
		var i_confirm_password = "You must enter the same password value twice. Please re-enter the Confirm Password now."
		var i_no_space			= "Your Username and Password selections cannot contain whitespace characters (i.e. space, tab, new-line). Please re-enter a correct value."
		var i_user_password		= "Your Username and Password selections cannot be the same. Please choose a different Username or Password."
		var i_zip								= "Your Zip/Postal Code number must be min 5 digits long.  Please re-enter it now."
		var i_phone								= "Your Phone Number must be min 4 digits long.  Please re-enter it now."
		var i_state								= "Please select your state."
		var i_card_no						= "Please enter correct card No."
		var i_card_type				= "Please select a card type"
		var i_cvc								= "CVC code must be min 3 digits long. Please re-enter it now."
		var i_cc_name						 = "Please enter Cardholder Name."
		var i_cc_exp						 = "Please enter correct Expiration Date."
		var i_agree								= "Please see and agree with Terms and Conditions"
		var amex_discover   = 1;
		
		var i_method_by							= "method"
		var i_check_your_name							= "Please enter Your Name."
		var i_check_bank_name							= "Please enter Bank Name."
		var i_check_account_owner							= "Please enter Account Number."
		var i_check_routing_number							= "Please enter Routing Number(Transit number)."
		var i_check_account_number							= "Please enter Reference Number(Check number)."

		function is_empty(s) {
				 return ((s == null) || (s.length == 0))
		}

		
		function validate_method_by(s) {
				var i;
				var returnMethod
				if (is_empty(s)) return true;
				if(s.length == undefined) returnMethod = s.value;
				for (i = 0; i < s.length; i++) {
				if (s[i].value=="CC" && s[i].checked== true) {
				var c = s[i].value
				returnMethod = c
				}
				if (s[i].value=="ECHECK" && s[i].checked== true) {
				var c = s[i].value 
				returnMethod = c
				}
			
				}
				//alert (returnMethod)
					
				return returnMethod;		
		}
		
		function validate_check_your_name(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_check_your_name)
				} else {
						return true
				}
		}
		
		function validate_check_bank_name(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_check_bank_name)
				} else {
						return true
				}
		}
		function validate_check_account_owner(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_check_account_owner)
				} else {
						return true
				}
		}
		function validate_check_routing_number(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_check_routing_number)
				} else {
						return true
				}
		}
		function validate_check_account_number(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_check_account_number)
				} else {
						return true
				}
		}


		function is_space (s) {
				var i;
				if (is_empty(s)) return true
				for (i = 0; i < s.length; i++) {
						var c = s.charAt(i)
						if (whitespace.indexOf(c) == -1) return false
				}
				return true
		}

		function is_digit (s) {
				var i;
				if (is_empty(s)) return true
				for (i = 0; i < s.length; i++) {
						var c = s.charAt(i)
						if (digits.indexOf(c) == -1) return false
				}
				return true
		}

		function is_checked(s) {
				if (s.checked) {
						return true;
				}		 else {
						return false;
				}
		}

		function digit_exist (s) {
				var i;
				if (is_empty(s)) return false

				for (i = 0; i < s.length; i++) {
						var c = s.charAt(i)
						if (digits.indexOf(c) != -1) {
								return true
						}
				}
				return false
		}

		function strip_chars(s, bag) {
				var i;
				var returnString = ""
				for (i = 0; i < s.length; i++) {
						var c = s.charAt(i);
						if (bag.indexOf(c) == -1) returnString += c
				}
				return returnString
		}

		function strip_space (s) {
			return strip_chars (s, whitespace)
		}

		function char_string (c, s) {
				for (i = 0; i < s.length; i++) {
						if (s.charAt(i) == c) return true
				}
				return false
		}

		function is_email (s) {
			if (is_empty(s)) return false
				if (is_space(s)) return false
				var i = 1;
				var sLength = s.length
				while ((i < sLength) && (s.charAt(i) != "@")) { i++ }
				if ((i >= sLength) || (s.charAt(i) != "@")) return false
				else i += 2;
				while ((i < sLength) && (s.charAt(i) != ".")) { i++ }
				if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false
				else return true
		}

		function warning (field, s) {
				field.focus()
				alert(prefix + "\n\n" + s + "\n\n" + suffix)
				return false
		}

		function check_string (field, s) {
				 var s1 = ""
				if (field == null) return true
				s1 = strip_space(field.value)
				if (is_space(field.value))
				   return warning (field, s)
				else return true
		}

		function check_min (field, s, len) {
				 var s1 = ""
				if (field == null) return true
				s1 = strip_space(field.value)
				if (is_space(field.value) || (len != 0 && s1.length < len)) {
						return warning(field, s)
				} else {
						return true
				}
		}

		function check_min_max (field, s, minlen, maxlen) {
				 var s1 = ""
				if (field == null) return true
				s1 = strip_space(field.value)
				if (is_space(field.value) || (minlen != 0 && s1.length < minlen) || (s1.length > maxlen)) {
						return warning(field, s)
				} else {
						return true
				}
		}


		function check_email (field, s) {

				if (field == null) {
						return true
				} else if (!is_email(field.value)) {
				   return warning (field, s)
				} else {
						return true
				}
		}

		function validate_email (field1, field2) {
				  var s1 = ""
				  var s2 = ""
				  if (field2 == null) return true;

				  s1 = strip_space(field1.value)
				  s2 = strip_space(field2.value)

				  if (s1 == s2) return true;

				return warning(field2, i_confirm_email)
		}

		function validate_zip(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 4) {
						return warning(field, i_zip)
				} else {
						return true
				}
		}

		function validate_phone (field) {
				var s = ""
				s = strip_space(field.value)
				s = strip_chars (s, phonesymbols)
				if (s.length < 4) {
						return warning(field, i_phone)
				} else {
						if (digit_exist(field.value)) {
								return true
						} else {
								return warning(field, i_phone);
						}
				}
		}

		function char_string (c, s) {
				for (i = 0; i < s.length; i++) {
						if (s.charAt(i) == c) return true
				}
				return false
		}



		function validate_username(field) {
				if (field == null) {
						return true
				}

		   var s = ""
				s = strip_space(field.value)
			if (s.length < field.value.length) return warning(field, i_no_space)

			if (s.length >= 3) {
						return true
				} else {
						return warning(field, i_username)
				}

		}

		function get_cc(st) {
				if ((st.length > 19) || (st.length<13)) return false;

				sum = 0; mul = 1; l = st.length;
				for (i = 0; i < l; i++) {
						digit = st.substring(l-i-1,l-i);
						tproduct = parseInt(digit ,10)*mul;
						if (tproduct >= 10) {
								sum += (tproduct % 10) + 1;
						} else {
								sum += tproduct;
						}

						if (mul == 1) {
								mul++;
						} else {
								mul--;
						}
				}

				if ((sum % 10) == 0) {
						ch_0 = st.substring(0,1);
						ch_1 = st.substring(1,1);
						ch_01 = st.substring(0,2);
						ch_2 = st.substring(2,1);
						if (ch_0 =='4' && ((st.length == 13) || (st.length == 16))) return 1;
						if (ch_0 =='5') return 2;
						
						if(amex_discover) {
							if ((ch_01 =='34') || (ch_01 =='37')) {								
									return 3;
							}

							if (ch_0 == '6') {
									return 4;
							}
						} else return false;				
				} else {
						return false;
				}
		}

		
		function checkEnter(event)
		{
		
		target = (""+event.target!="undefined") ? event.target : event.srcElement;
		
		if(target.tagName=="TEXTAREA" || target.type=="image") return true;
		
		if(event.keyCode==13) return false;
		else return true;
		}
		
		function validate_card_no(field1,field2) {
				var s = ""
				s = strip_space(field1.value);
				if (s.length < 13) {
						return warning(field1, i_card_no)
				} else {
					if (field2.value.length < 1) {
							return warning(field2, i_card_type);
					}
					c_type = get_cc(s);
					if (!c_type) {
							return warning(field1, i_card_no);
					}
				}
				return true;
		}

		function validate_cvc(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_cvc)
				} else {
						return true
				}
		}

		function validate_cc_name(field) {
				var s = ""
				s = strip_space(field.value);
				if (s.length < 3) {

						return warning(field, i_cc_name)
				} else {
						return true
				}
		}

		function validate_cc_exp(field1, field2) {
				var today = new Date;				
				var expiry = new Date(field2.options[field2.options.selectedIndex].value*1, field1.options[field1.options.selectedIndex].value*1);
				if (today.getTime() > expiry.getTime())
					return warning(field1, i_cc_exp);
				else
					return true;
		}

        function validate_state(field_state, field_country){
            if ((field_country.value == 'US' || field_country.value == 'CA') && field_state.value == ""){
                return warning(field_state, s_state); 
            }
            if (field_country.value == ""){
                return warning(field_country, s_country); 
            }
            return true;
        }
        
		function show_process_page1(form) {
				if(!( check_min(form.elements["bill_fname"], s_firstname, 2) && check_min(form.elements["bill_lname"], s_lastname, 2) &&
						
						check_min(form.elements["bill_street"], s_street, 3) &&
						check_min(form.elements["bill_city"], s_city, 2) &&
						validate_zip(form.elements["bill_zip"], s_zip)&&
			                        validate_state(form.elements["bill_state"], form.elements["bill_country"]) &&
						check_min(form.elements["bill_email"], s_email, 2)
						) )		{
						return false;
				}
				if(form.submitted) {
						alert("Do not press Submit twice");
						return false;
				}
				return true;
		}

			function show_process_page2(form) {
			    	if (form.elements["bill_diff"].checked) {
					if(!( check_min(form.elements["ship_fname"], s_firstname, 2) && check_min(form.elements["ship_lname"], s_lastname, 2) &&
						
							check_min(form.elements["ship_street"], s_street, 3) &&
							check_min(form.elements["ship_city"], s_city, 2) &&
							validate_zip(form.elements["ship_zip"], s_zip) &&
				                        validate_state(form.elements["ship_state"], form.elements["ship_country"])
							) )		{
							return false;
					}
				}

				if(!(validate_cc_exp(form.elements["card_expmon"], form.elements["card_expyr"]) &&						
					validate_card_no(form.elements["card_num"], form.elements["card_type"]) &&
					validate_cc_name(form.elements["card_name"]) &&
					validate_cvc(form.elements["card_cvv"]))  )		{
					return false;
				}
				
				if(form.submitted) {
						alert("Do not press Submit twice");
						return false;
				} else {
						form.submitted = true;
						d = new Date();
						form.client_time.value = (""+d.getTime()).substr(0, 10);
				}
				return true;
		}

		function show_process_uni(form) {
			if(show_process_page1(form))
				return show_process_page2(form);
			return false;
		}

		function copy_billing_to_shipping(form) {
			if(form.elements["ship_eq"].checked) {
				form.elements["ship_fname"].value = form.elements["bill_fname"].value;
				form.elements["ship_lname"].value = form.elements["bill_lname"].value;
				form.elements["ship_street"].value = form.elements["bill_street"].value;
				form.elements["ship_city"].value = form.elements["bill_city"].value;
				form.elements["ship_zip"].value = form.elements["bill_zip"].value;
				form.elements["ship_state"].selectedIndex = form.elements["bill_state"].selectedIndex;
				form.elements["ship_country"].selectedIndex = form.elements["bill_country"].selectedIndex;
			}			
		}
