var DialingCode = 
{
	init: function()
	{
		var inputCountry	/* :html.input */	= document.getElementById("country");
		var inputTelCountry	/* :html.input */	= document.getElementById("telCountry");
		var inputFaxCountry	/* :html.input */	= document.getElementById("faxCountry");
		
		if (inputCountry === null || inputTelCountry === null || inputFaxCountry === null) return;
		
		inputTelCountry.readOnly = true;
		inputFaxCountry.readOnly = true;

		function getDialingCode()
		{
			var selectedData	/* :Object */	= this.options[this.selectedIndex].className.parseMachineTags(); // takes format data:dialingCode=/code/
			if (typeof selectedData.data === "undefined" || typeof selectedData.data.dialingCode === "undefined" || selectedData.data.dialingCode === "")
			{
				inputTelCountry.value	= "";
				inputFaxCountry.value	= "";
			}
			else
			{
				var dialingCode	/* :String */	= selectedData.data.dialingCode;
				inputTelCountry.value	= "+" + dialingCode;
				inputFaxCountry.value	= "+" + dialingCode;	
			}
		}
		
		addEvent(inputCountry, "onchange", getDialingCode);
		inputCountry.onchange();
	}
}

addDOMLoadEvent(DialingCode.init);

var InvoiceRequest =
{
	init: function()
	{
		var inputUseAnotherContact	/* :html.input */	= document.getElementById("useAnotherContact");
		if (inputUseAnotherContact === null) return;

		var inputTitle				/* :html.input */	= document.getElementById("title");
		var inputFirstName			/* :html.input */	= document.getElementById("firstName");
		var inputSurname			/* :html.input */	= document.getElementById("surname");
		var inputJobTitle			/* :html.input */	= document.getElementById("jobTitle");
		var inputDepartment			/* :html.input */	= document.getElementById("department");
		var inputCompany			/* :html.input */	= document.getElementById("company");
		var inputAddress			/* :html.input */	= document.getElementById("address");
		var inputAddress2			/* :html.input */	= document.getElementById("address2");
		var inputTown				/* :html.input */	= document.getElementById("town");
		var inputPostcode			/* :html.input */	= document.getElementById("postcode");
		var inputCountry			/* :html.select */	= document.getElementById("country");
		var inputTelCountry			/* :html.input */	= document.getElementById("telCountry");
		var inputTelArea			/* :html.input */	= document.getElementById("telArea");
		var inputTel				/* :html.input */	= document.getElementById("tel");
		var inputFaxCountry			/* :html.input */	= document.getElementById("faxCountry");
		var inputFaxArea			/* :html.input */	= document.getElementById("faxArea");
		var inputFax				/* :html.input */	= document.getElementById("fax");
		var inputEmail				/* :html.input */	= document.getElementById("email");
		var inputEmail1				/* :html.input */	= document.getElementById("email1");
		

		function enableContactFields()	/* :void */
		{
			inputTitle.disabled			= false;
			inputFirstName.disabled		= false;
			inputSurname.disabled		= false;
			inputJobTitle.disabled		= false;
			inputDepartment.disabled	= false;
			inputCompany.disabled		= false;
			inputAddress.disabled		= false;
			inputAddress2.disabled		= false;
			inputTown.disabled			= false;
			inputCountry.disabled		= false;
			inputPostcode.disabled		= false;
			inputTelCountry.disabled	= false;
			inputTelArea.disabled		= false;
			inputTel.disabled			= false;
			inputFaxCountry.disabled	= false;
			inputFaxArea.disabled		= false;
			inputFax.disabled			= false;
			inputEmail.disabled			= false;
			inputEmail1.disabled		= false;
		}
		
		function setToDefault(input)	/* :void */
		{
			var tags	/* :Object */	= input.className.parseMachineTags();
			if (typeof tags.data === "undefined" || typeof tags.data["default"] ===  "undefined" || tags.data["default"] === "") return;
			switch (input.type)
			{
			case "text":
				input.value = tags.data["default"];
				break;
			case "select-one":
			case "select":
				{
					function updateSelection(item)
					{
						item.selected = item.value === tags.data["default"];
					}
					Arr(input.options).forEach(updateSelection);
					break;
				}
			}
		}
		
		function disableContactFields()	/* :void */
		{
			// Disable first, then set to default. This is visually more coherent.
			inputTitle.disabled			= true;
			inputFirstName.disabled		= true;
			inputSurname.disabled		= true;
			inputJobTitle.disabled		= true;
			inputDepartment.disabled	= true;
			inputCompany.disabled		= true;
			inputAddress.disabled		= true;
			inputAddress2.disabled		= true;
			inputTown.disabled			= true;
			inputCountry.disabled		= true;
			inputPostcode.disabled		= true;
			inputTelCountry.disabled	= true;
			inputTelArea.disabled		= true;
			inputTel.disabled			= true;
			inputFaxCountry.disabled	= true;
			inputFaxArea.disabled		= true;
			inputFax.disabled			= true;
			inputEmail.disabled			= true;
			inputEmail1.disabled		= true;

			setToDefault(inputTitle);
			setToDefault(inputFirstName);
			setToDefault(inputSurname);
			setToDefault(inputJobTitle);
			setToDefault(inputDepartment);
			setToDefault(inputCompany);
			setToDefault(inputAddress);
			setToDefault(inputAddress2);
			setToDefault(inputTown);
			setToDefault(inputCountry);
			setToDefault(inputPostcode);
			setToDefault(inputTelCountry);
			setToDefault(inputTelArea);
			setToDefault(inputTel);
			setToDefault(inputFaxCountry);
			setToDefault(inputFaxArea);
			setToDefault(inputFax);
			setToDefault(inputEmail);
			setToDefault(inputEmail1);
		}
		
		function toggleContactFields()	/* :void */
		{
			if(inputUseAnotherContact.checked)
			{
				enableContactFields();
			}
			else
			{
				disableContactFields();
			}
		}
		
		addEvent(inputUseAnotherContact, "onchange", toggleContactFields);
		toggleContactFields();
	}
}

addDOMLoadEvent(InvoiceRequest.init);

var SelectPackage = 
{
	init: function()
	{
		var formSelectPackage 	/* :html.ul */	= document.getElementById("selectPackage");
		if (formSelectPackage === null) return;
		
		// Filter callbacks
		
		function isInputPackageOption(item) /* :Boolean */
		{
			return item.nodeName === "INPUT" && (item.name === "packageOption" || item.name === "additionalPackageOption");
		}
		
		function isSelectedInputPackageOption(item) /* :Boolean */
		{
			return isInputPackageOption(item) && item.checked;
		}
		
		// Iterator callbacks
		
		function walkLis(item)
		{
			var localLis	/* :Array */	= Arr(item.childNodes).filter(getFilterByProperty("nodeName", "LI"));
			lisSelectPackage = lisSelectPackage.concat(localLis);	
		}
		
		function walkInputs(item)			/* :void */
		{
			var inputsPackageOption /* :Array */ = Arr(item.childNodes).filter(isInputPackageOption);
			inputsPackageOption.forEach(setUpTrigger);
		}
		
		function setUpTrigger(item)	/* :void */
		{
			addEvent(item, "onclick", doTrigger);
		}
		
		function assignClass(item)		/* :void */
		{
			item.className = Arr(item.childNodes).some(isSelectedInputPackageOption) ? "selected" : null;
		}
		
		// The actual functionality
		
		function doTrigger()
		{
			lisSelectPackage.forEach(assignClass);
		}
		
		var ulsSelectPackage	/* :Array */	= Arr(formSelectPackage.childNodes).filter(getFilterByProperty("nodeName", "UL"));
		var lisSelectPackage	/* :Array */	= new Array();
		ulsSelectPackage.forEach(walkLis);
		lisSelectPackage.forEach(walkInputs);
		doTrigger();
	}
}

addDOMLoadEvent(SelectPackage.init);

var RemoveOrder =
{
	init: function()
	{
		var tableRegistrantActions	/* :html.table */	= document.getElementById("registrantActions");
		
		if (tableRegistrantActions === null) return;
		
		var asRegistrantActions	/* :Array */			= Arr(tableRegistrantActions.getElementsByTagName("a"));
		
		function isClassRemoveOrder(item)
		{
			return item.className === "remove-order";
		}
		
		var asRemoveOrder		/* :Array */			= asRegistrantActions.filter(isClassRemoveOrder);
		
		function confirmDelete()
		{
			return confirm(this.firstChild.alt + " from your order?");
		}
		
		function addClickEvent(item)
		{
			addEvent(item, "onclick", confirmDelete);
		}
		
		asRemoveOrder.forEach(addClickEvent);
	}
}

addDOMLoadEvent(RemoveOrder.init);

var WorldPay =
{
	init: function()
	{
		var formWorldPay	/* :html.form */	= document.forms["worldPay"];
		
		if (formWorldPay === undefined) return;
		
		function doSubmit()
		{
			formWorldPay.submit();
		}
		
		setTimeout(doSubmit, 1000);
	}
}

addDOMLoadEvent(WorldPay.init);

﻿var ReplaceSubmits = {
	init: function(){
		if(document.forms.length){
			//addEvent(document.forms[0], "onsubmit", ReplaceSubmits.replaceSubmits);
			var ps			/* :Array */	= Arr(document.forms[0].getElementsByTagName("p"));
			function isClassNameSubmit(item)	/* :Boolean */
			{
				return "submit" === item.className || false;
			}
			var pSubmits	/* :Array */	= ps.filter(isClassNameSubmit);
			function setSubmitClass()		/* :void */
			{
				function setClass(item)		/* :void */
				{
					item.className			= "submit in-progress";
					var text /* :html.text */
											= document.createTextNode("Form submission in progress; please wait a moment.");
					item.appendChild(text);
				}
				pSubmits.forEach(setClass);
			}
			addEvent(document.forms[0], "onsubmit", setSubmitClass);
		}
	}
}
addDOMLoadEvent(ReplaceSubmits.init);

var Demographics = {
	init: function()				/* :void */
	{
		var formDemographics		/* :html.form */	= document.forms["demographics"];
		if(!formDemographics) return;
		// Not flexible; should do this differently
		var labels					/* :Array */		= Arr(document.getElementsByTagName("label"));
		var labelPublic				/* :html.label */	= labels.filter(getFilterByProperty("innerHTML", "Public"))[0];
		var labelCommercial			/* :html.label */	= labels.filter(getFilterByProperty("innerHTML", "Commercial"))[0];
		var inputPublic				/* :html.input */	= document.getElementById(labelPublic.htmlFor);
		var inputCommercial			/* :html.input */	= document.getElementById(labelCommercial.htmlFor);
		
		function isClearable(item)	/* :Boolean */
		{
			var isClearable			/* :Boolean */		= item !== inputPublic && item !== inputCommercial;
			return isClearable;
		}
		var inputs					/* :Array */		= Arr(formDemographics.getElementsByTagName("input"));
		var radiosCheckboxes		/* :Array */		= inputs.filter(getFilterByProperty("type", "radio")).concat(inputs.filter(getFilterByProperty("type", "checkbox")));				
		var clearables				/* :Array */		= radiosCheckboxes.filter(isClearable);
		function clearOptions(dependency /*:String */)		/* :void */
		{
			function clearOption(item)
			{
				if (item.parentNode.className.indexOf(dependency) === -1)
				{
					item.checked	= false;
				}
			}
			clearables.forEach(clearOption);
		}
		function setClassName()		/* :void */
		{
			if (inputPublic.checked)
			{
				formDemographics.className = "public";
				clearOptions("public");
			}
			else if (inputCommercial.checked)
			{
				formDemographics.className = "commercial";
				clearOptions("commercial");
			}	
			else
			{
				formDemographics.className = "init";
			}
		}
		addEvent(inputPublic, "onclick", setClassName);
		addEvent(inputCommercial, "onclick", setClassName);
		setClassName();
		function updateFreeText(item)		/* :void */
		{
			if (!item.inputFreeText) return;
			var indexOfSelected = item.parentNode.className.indexOf(" unselected");
			if (!item.checked)
			{
				item.inputFreeText.value = "";
				if (indexOfSelected === -1)
				{
					item.parentNode.className += " unselected";
				}
			}
			else if (indexOfSelected > -1)
			{
				item.parentNode.className = item.parentNode.className.split(" unselected").join("");
			}
		}
		function setUpFreeText(item)	/* :void */
		{
			item.inputFreeText = document.getElementById(item.id + "FreeText");
			addEvent(item, "onclick", updateFreeTexts);
			updateFreeText(item);
		}
		function updateFreeTexts()
		{
			radiosCheckboxes.forEach(updateFreeText);
		}
		radiosCheckboxes.forEach(setUpFreeText);
	}
}
addDOMLoadEvent(Demographics.init);