var validation={
	NotNullSimpleNames:[
		"First_Name",
		"Last_Name",
		"Street_Address",
		"Address_Town",
		"Postcode",
		"Phone",
		"Title",
		"State",
		"Country",
		"Qualifications",
		"Moving_to_NT"
	],
	tablePreferredIds:[
		"Preferred"
	],
	tablePreferredIdsForCheckBoxControl:[
		"Preferred",
		"Partner_Preferred"
	],
	selectElementsIds:[
		"Preferred_Region",
		"Found_Out"
	],
	isValid:true,
	init:function()
	{
		//Attach event handler to form
		document.getElementById("Job_Form").onsubmit=validation.formOnSubmitEventHandler;
		
		//Attach Checkbox event handlers
		for (n in validation.tablePreferredIdsForCheckBoxControl)
		{
			var tableElement = document.getElementById(validation.tablePreferredIdsForCheckBoxControl[n]);	
			
			var chkBoxes = tableElement.getElementsByTagName("input");
			for (i=0;i<chkBoxes.length;i++)
			{
					chkBoxes[i].onclick = validation.checkBoxDisabler;
					
			}
		}
		
	},
	checkBoxDisabler:function()
	{
		
		var tableElement=this.parentNode.parentNode.parentNode.parentNode;
		var chkBoxes = tableElement.getElementsByTagName("input");
		var counter=0;
		for (var i=0;i<chkBoxes.length;i++)
		{
			if (chkBoxes[i].checked)
			{
				counter++;	
			}
		}
		if (counter==3)
		{
			validation.disablecheckBoxes(tableElement,false);
		}
		else
		{
			validation.disablecheckBoxes(tableElement,true);
		}
	},
	disablecheckBoxes:function(tableElement,isEnable)
	{
		var chkBoxes = tableElement.getElementsByTagName("input");
		
		for (var i=0;i<chkBoxes.length;i++)
		{
			if (!chkBoxes[i].checked)
			{
				chkBoxes[i].disabled=!isEnable;
			}
		}
	},
	formOnSubmitEventHandler:function()
	{
		return validation.validate(); 
	},
	reset:function()
	{
		for (n in validation.NotNullSimpleNames)
		{
			var element = document.getElementById("r_"+validation.NotNullSimpleNames[n]);
			element.className = "hide";
		}
		for (n in validation.tablePreferredIds)
		{
			var element = document.getElementById("r_"+validation.tablePreferredIds[n]);
			element.className = "hide";
		}
		
		for (n in validation.selectElementsIds)
		{
			var element = document.getElementById("r_"+validation.selectElementsIds[n]);
			element.className = "hide";
		}
	},
	validate:function()
	{
		validation.reset();

		validation.isValid=true;

		validation.validateSimple();

	validation.validateTables();

	validation.validateSelects();
		if (!validation.isValid){
			var topElement = document.getElementById("errorMessage");
			topElement.className="errorShow";
			scroll(0,0);
			
		}
		return validation.isValid; 
		
	},
	validateSimple:function()
	{
		var listElementsID = new Array();
		for (n in validation.NotNullSimpleNames)
		{
			var element = document.getElementById(validation.NotNullSimpleNames[n]);
			if (element.value=="")
			{
				listElementsID.push("r_"+element.name);
				validation.isValid=false;
			}
			
		}
		validation.highlightElements(listElementsID);
	},
	highlightElements:function(listElements)
	{
		for (n in listElements)
		{
			var element = document.getElementById(listElements[n]);
			
			element.className="errorShow";
		}
	},
	validateTables:function(tableId)
	{
		var listElementsID = new Array();
		for (n in validation.tablePreferredIds)
		{
			var table=document.getElementById(validation.tablePreferredIds[n]);
			var chkBoxes = table.getElementsByTagName("input");
			var atLeastOneIsSelected=false;
			for (i=0;i<chkBoxes.length;i++)
			{
				if (chkBoxes[i].checked)
				{
					atLeastOneIsSelected=true;
					break;
				}
			}
			if (!atLeastOneIsSelected)
			{
				listElementsID.push("r_"+validation.tablePreferredIds[n]);
				validation.isValid=false;
			}
		}
		validation.highlightElements(listElementsID);
	},
	validateSelects:function()
	{
		var listElementsID = new Array();		
		for (n in validation.selectElementsIds)
		{
			var select=document.getElementById(validation.selectElementsIds[n]);
			if (select.selectedIndex==-1)
			{
				listElementsID.push("r_"+validation.selectElementsIds[n]);
				validation.isValid=false;
			}
		}
		validation.highlightElements(listElementsID);
	}
}

if (typeof( window.addEventListener ) != "undefined" ) 
{
        // Firefox way
	window.addEventListener("load", validation.init, false);
} 
    	else 
{
       // IE way
       window.attachEvent('onload', validation.init);
}

