// JavaScript Document

function validateForm(theForm) {
	
	var fields = theForm.getElementsByTagName("input");
	
	var result = true;
	
	for (var i = 0; i < fields.length; i++) {
		
		var className = fields[i].className;	
		var classRegExp = /(^| )(\S+)\b/g;
		var classResult;
		
		while (classResult = classRegExp.exec(className)) {
			
			var oneClass = classResult[2];
			var ruleRE;
			
			if (oneClass == "required") {
				
				ruleRE = /./;
				if (!ruleRE.test(fields[i].value)) {
					
					result = false;
					addClass(fields[i], "invalid_input");
				} else {
					
					removeClass(fields[i], "invalid_input");
				}
			}
		}
		
	}
	
	return result;
}


function toggleUseBilling(theForm) {
	
	var fields = theForm.getElementsByTagName("input");
	
	var checkbox = getNodeByName(fields, "use_billing_address");
	
	var selects = theForm.getElementsByTagName("select");
	
	var s_name = getNodeByName(fields, "shipping_name");
	var s_street = getNodeByName(fields, "shipping_street");
	var s_street2 = getNodeByName(fields, "shipping_street2");
	var s_city = getNodeByName(fields, "shipping_city");
	var s_state = getNodeByName(selects, "shipping_state");
	var s_zip = getNodeByName(fields, "shipping_zip");
	
	if (checkbox.checked) {
		
		var hiddenBox = getNodeByName(fields, "use_billing");
		hiddenBox.value = "true";
		
		s_name.value = "";
		s_street.value = "";
		s_street2.value = "";
		s_city.value = "";
		s_zip.value = "";
		
		removeClass(s_name, "required");
		removeClass(s_street, "required");
		removeClass(s_city, "required");
		removeClass(s_zip, "required");
		
		removeClass(s_name, "invalid_input");
		removeClass(s_street, "invalid_input");
		removeClass(s_city, "invalid_input");
		removeClass(s_zip, "invalid_input");
		
		s_name.setAttribute("disabled", "disabled");
		s_street.setAttribute("disabled", "disabled");
		s_street2.setAttribute("disabled", "disabled");
		s_city.setAttribute("disabled", "disabled");
		s_state.setAttribute("disabled", "disabled");
		s_zip.setAttribute("disabled", "disabled");
	} else {
		
		var hiddenBox = getNodeByName(fields, "use_billing");
		hiddenBox.value = "false";
		
		addClass(s_name, "required");
		addClass(s_street, "required");
		addClass(s_city, "required");
		addClass(s_zip, "required");
		
		s_name.removeAttribute("disabled");
		s_street.removeAttribute("disabled");
		s_street2.removeAttribute("disabled");
		s_city.removeAttribute("disabled");
		s_state.removeAttribute("disabled");
		s_zip.removeAttribute("disabled");
	}
}


function getElementsByClass(className) {
	
	var elementArray = [];
	
	if (typeof document.all != "undefined") {
		
		elementArray = document.all;	
	} else {
		
		elementArray = document.getElementsByTagName("*");
	}
	
	var matchedArray = [];
	var pattern = new RegExp("(^| )"+className+"( |$)");
	
	for (var i = 0; i < elementArray.length; i++) {
		
		if (pattern.test(elementArray[i].className)) {
			matchedArray[matchedArray.length] = elementArray[i];	
		}
	}
	
	return matchedArray;
}

function hasClass(target, theClass) {
	
	var pattern = new RegExp("(^| )"+theClass+"( |$)");
	
	if (pattern.test(target.className))
		return true;
	else
		return false;
}

function addClass(target, theClass) {
	
	if (!hasClass(target, theClass)) {
		
		if (target.className == "")
			target.className = theClass;
		else
			target.className += " " + theClass;
	}
}

function removeClass(target, theClass) {
	
	var pattern = new RegExp("(^| )"+theClass+"( |$)");
	
	target.className = target.className.replace(pattern, "$1");
	target.className = target.className.replace(/ $/, "");
	target.className = target.className.replace(/^ /, "");
}

function getNodeByName(fields, theName) {

	for (var i = 0; i < fields.length; i++) {
		
		if (fields[i].getAttribute("name") == theName)
			return fields[i];
	}
}