function validateForm(whichform) {
  	var submitOk = "true";
  	var errormessage = document.getElementById('errorblock');
  	errormessage.style.display = "none";
	var phoneErrorMessage = document.getElementById('phoneerrormessage');
	/*  	phoneErrorMessage.style.display = "none";*/
	document.getElementById('phoneerror').style.color = "black";
  	document.getElementById('postcodeerror').style.color = "black";
	document.getElementById('countryerror').style.display = "none";
	var stockordered = "false";
  	var contactNumberSupplied = "false";

  	for (var i=0; i<whichform.elements.length; i++) {
  		var element = whichform.elements[i];
		if (element.className.indexOf("required") != -1) {
      		element.style.borderColor = "#8D9DBC";
	  		element.style.color = "#000";
	  		if (!isFilled(element) || element.value == "required") {
        		element.value = "required";
        		element.style.borderColor = "red";
				element.style.color = "red";
				submitOk = "false";
      		}
    	}

    	if (element.className.indexOf("email") != -1) {
	  		element.style.borderColor = "#8D9DBC";
	  		element.style.color = "#000";
      		if (!isEmail(element) || element.value == "invalid email address") {
        		element.value = "invalid email address";
				element.style.borderColor = "red";
				element.style.color = "red";
        		//return false;
				submitOk = "false";
      		}
    	}

		// check all quantities for items ordered
		if (element.className.indexOf("orderqty") != -1) {
			if (element.value > 0) {
				stockordered = "true";
			}
		}

		if (element.className.indexOf("contactnumbers") != -1) {
			element.style.borderColor = "#8D9DBC";
	  		element.style.color = "#000";
			if (isFilled(element)) {
				contactNumberSupplied = "true";
			}
			if (!isPhoneNumber(element) || element.value == "invalid number") {
        		element.value = "invalid number";
				element.style.borderColor = "red";
				element.style.color = "red";
        		document.getElementById('phoneerror').style.color = "red";
				//return false;
				submitOk = "false";
      		}
		}

		if (document.getElementById('country').value == "Australia") {
	  		document.getElementById('countryerror').style.display = "block";
			submitOk = "false";
		}

		if (element.className.indexOf("postcode") != -1) {
			element.style.borderColor = "#8D9DBC";
	  		element.style.color = "#000";
			if (isFilled(element)) {
				contactNumberSupplied = "true";
			}
			if (!isPostcode(element) || element.value == "invalid" || !isFilled(element)) {
        		element.value = "invalid";
				element.style.borderColor = "red";
				element.style.color = "red";
				document.getElementById('postcodeerror').style.color = "red";
				//return false;
				submitOk = "false";
      		}
		}
 	}

  	if (stockordered == "false") {
		errormessage.style.display = "block";
  	}

  	if (submitOk == "true" && stockordered == "true" && contactNumberSupplied == "true") {
		return true;
  	}
  	return false;
}

function validateCC(whichform) {
  	var submitOk = "true";
	var cardnumbererror = document.getElementById('card-number-error');
	var expirydateerror = document.getElementById('expiry-date-error');
	var cvverror = document.getElementById('cvv-error');
	cardnumbererror.innerHTML = "&nbsp\;";
	expirydateerror.innerHTML = "Correct Expiry Date Format is mmyy";
	for (var i=0; i<whichform.elements.length; i++) {
  		var element = whichform.elements[i];
		element.style.borderColor = "#8D9DBC";
	  	element.style.color = "#000";

		if (element.className.indexOf("required") != -1) {
      		element.style.borderColor = "#8D9DBC";
	  		element.style.color = "#000";
    		if (!isFilled(element)) {
        		//element.value = "required";
        		element.style.borderColor = "red";
				//element.style.color = "red";
				submitOk = "false";
      		}
		}

		if (document.getElementById('country').value == "Australia") {
	  		document.getElementById('countryerror').style.display = "block";
			submitOk = "false";
		}

		if (element.className.indexOf("cardnumber") != -1) {
			$stripspaces = element.value;
			$stripspaces = $stripspaces.split(' ').join('');
			if (!isFilled(element)) {
        		element.style.borderColor = "red";
    	   	 	cardnumbererror.innerHTML = "Required field";
				cardnumbererror.style.color = "red";
				submitOk = "false";
      		} else if (!isValidCC($stripspaces)) {
				element.style.borderColor = "red";
				//element.style.color = "red";
        		cardnumbererror.style.color = "red";
				submitOk = "false";
      		} else {
				element.style.borderColor = "green";
				//element.style.color = "green";
				cardnumbererror.innerHTML = "Correct!";
        		cardnumbererror.style.color = "green";
			}
    	}

		if (element.className.indexOf("expirydate") != -1) {
	  		expirydateerror.style.color = "#000";
			expirydateerror.innerHTML = "Correct Expiry Date Format is mmyy";
			$stripspaces = element.value;
			$stripspaces = $stripspaces.split(' ').join('');
			if (!isFilled(element)) {
        		element.style.borderColor = "red";
    	   	 	expirydateerror.innerHTML = "Required field";
				expirydateerror.style.color = "red";
				submitOk = "false";
      		} else if (!isValidExpiryDate($stripspaces)) {
				element.style.borderColor = "red";
				//element.style.color = "red";
        		expirydateerror.style.color = "red";
				submitOk = "false";
      		} else {
				element.style.borderColor = "green";
				//element.style.color = "green";
				expirydateerror.innerHTML = "Correct!";
        		expirydateerror.style.color = "green";
			}
    	}

		if (element.className.indexOf("cvvcode") != -1) {
			if (!isFilled(element)) {
        		element.style.borderColor = "red";
    	   	 	cvverror.innerHTML = "Required field";
				cvverror.style.color = "red";
				submitOk = "false";
      		} else if (!isValidCVV(element.value)) {
				element.style.borderColor = "red";
        		cvverror.style.color = "red";
				submitOk = "false";
      		} else {
				element.style.borderColor = "green";
				cvverror.innerHTML = "Correct!";
        		cvverror.style.color = "green";
			}
    	}
 	}

  	if (submitOk == "true") {
		return true;
  	}
  	return false;
}

function isFilled(field) {
  //if (field.value.length < 1 || field.value == field.defaultValue || field.value == "" || /^\s+$/.test(field.value)) {
 if (field.value.length < 1 || field.value == "" || /^\s+$/.test(field.value)) {
    return false;
  } else {
    return true;
  }
}

function isValidCC(sText) {
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   var cardnumbererror = document.getElementById('card-number-error')
   if (sText.length < 13 || sText.length > 16) {
	   IsValid = false;
	   cardnumbererror.innerHTML = "Incorrect card number length";
	   return IsValid;
   }
   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1) {
		 cardnumbererror.innerHTML = "Number format error";
         IsNumber = false;
      }
   }
   return IsNumber;
}

function isValidCVV(sText) {
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   var cvverror = document.getElementById('cvv-error')
   if (sText.length < 3 || sText.length > 4) {
	   IsValid = false;
	   cvverror.innerHTML = "Incorrect CVV length";
	   return IsValid;
   }
   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1) {
		 cvverror.innerHTML = "xIncorrect CVV length";
         IsNumber = false;
      }
   }
   return IsNumber;
}

function isValidExpiryDate(sText) {
   var ValidChars = "0123456789";
   var IsValid=true;
   var Char;
   var expirydateerror = document.getElementById('expiry-date-error')
   if (sText.length != 4) {
	   IsValid = false;
	   expirydateerror.innerHTML = "Incorrect expiry date length";
	   return IsValid;
   }
   for (i = 0; i < sText.length && IsValid == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1) {
		expirydateerror.innerHTML = "Incorrect characters - please use MMYY format";
		IsValid = false;
      }
   }
   return IsValid;
}

function isPhoneNumber(field) {
	var pattern = /^[0-9 \-()\+]*$/;
	if (!pattern.test(field.value))  {
		return false;
  	} else {
    	return true;
  	}
}

function isPostcode(field) {
	var pattern = /^[0-9 a-zA-Z\-]*$/;
	if (!pattern.test(field.value))  {
		return false;
  	} else {
    	return true;
  	}
}

function isEmail(field) {
  if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1) {
    return false;
  } else {
    return true;
  }
}

function prepareForms() {
  for (var i=0; i<document.forms.length; i++) {
    var thisform = document.forms[i];
    if (thisform.className == "tovalidate") {
		thisform.onsubmit = function() {
      		return validateForm(this);
		}
    } else if (thisform.className == "ccvalidate") {
		thisform.onsubmit = function() {
      		return validateCC(this);
		}
	}

	for (var j=0; j<thisform.elements.length; j++) {
		var thiselement = thisform.elements[j];
		if (thiselement.className == "novalidate") {
			thiselement.onclick = function() {
				this.form.onsubmit = null;
			}
		}
	}

  }

}

addLoadEvent(prepareForms);