/********************************
	Form submission functions
********************************/
var msg = '', errmsg = '', focuselement = null, aEmailFields = null, aNumericFields = null, aRequireOneFields = null;

function FilterList(lstFilterBy, strFilters) {
	var lstFilters, lstFiltersFull, i, intStart, objOpt, strFilterBy;
	
	lstFilters = document.getElementById(strFilters);
	lstFiltersFull = document.getElementById(strFilters + '-full');
	
	if (lstFilters && lstFiltersFull) {
		intStart = (lstFilters[0].value == '') ? 1 : 0;

		//Clear list
		lstFilters.selectedIndex = intStart - 1;
		for (var i = lstFilters.length - 1; i >= intStart; i--) {
			lstFilters[i] = null;
		}
	
		//Add filtered items to list
		strFilterBy = lstFilterBy[lstFilterBy.selectedIndex].value;
		
		for (var i = 0; i < lstFiltersFull.length; i++) {
			if (strFilterBy == lstFiltersFull[i].value) {
				objOpt = new Option();
				
				objOpt.text = lstFiltersFull[i].text;
				objOpt.value = lstFiltersFull[i].text;
				
				lstFilters[lstFilters.length] = objOpt;
			}
		}
	}
}

function ShowHideOptionalGroups(lst, strGroup, strType) {
	var objGroup, intCurrent, strCurrent;
	
	if (lst) {
		if (lst.tagName == 'SELECT')
			strCurrent = lst[lst.selectedIndex].value;
		
		switch(strType) {
		case 'showupto':
			intCurrent = parseInt(strCurrent);
			
			for (var i = 0; i < lst.length; i++) {
				if (lst[i].value != '') {
					ShowHideGroups(strGroup + lst[i].value, (lst[i].value <= intCurrent));
				}
			}
			break;
			
		case 'choose':
			var objSettings;
			//Get settings for this list
			objSettings = document.getElementById(lst.id + 'settings');
			
			if (objSettings) {
				var aSettings, blnShow;
				aSettings = objSettings.value.split('|');
				//Default show or hide setting
				blnShow = (aSettings[0] == '1');
				//Values to show
				if (aSettings[1].indexOf(strCurrent) >= 0) {
					blnShow = true;
				}
				//Values to hide
				if (aSettings[2].indexOf(strCurrent) >= 0) {
					blnShow = false;
				}
					
				ShowHideGroups(strGroup, blnShow);
			}
			break;

		case 'yesno':
			blnShow = ((lst.value == '1') || (lst.value == 'Yes'));
			ShowHideGroups(strGroup, blnShow);
			
			break;
		}
	}
}
function ShowHideGroups(strGroupName, blnShow) {
	var objGroup = document.getElementById(strGroupName);
	if (objGroup) {
		objGroup.style.display = (blnShow) ? '' : 'none';
	}
}

function CheckSelection(frm, strType) {
	var objList = frm.productid;
	
	if (objList) {
		if (objList.value == '') {
			alert('Please select a ' + strType + ' first.')
			objList.focus();
			return false;
		}
		if (objList.value == '0') {
			var strNewAction;
			strNewAction = objList[objList.selectedIndex].label;
			if (strNewAction  != '')
				frm.action = strNewAction;
			else
				return false;
		}
	}
	
	return true;
}

function CheckForm(frm) {
	//Loop through form elements, checking for a non-empty value, a selection, or valid email
	// Use the TITLE attribute of the element as the error message, adding for each error
	// Focus is set to the first offending element
	
	msg = '';
	errmsg = '';
	focuselement = null;

	//Array of email fields
	var objEmailFields = document.getElementById('emailfields')
	if (objEmailFields) aEmailFields = objEmailFields.value.split(',')

	//Array of numeric fields
	var objNumericFields = document.getElementById('numberfields')
	if (objNumericFields) aNumericFields = objNumericFields.value.split(',')

  
	//Check each form element
	for (var i = 0; i <= frm.elements.length - 1; i++) {
		CheckElement(frm.elements[i])
	}

	if (frm.whereheardother!=undefined) {
		if (frm.whereheard.options[frm.whereheard.selectedIndex].text=="Other" && frm.whereheardother.value=="")  {
			msg = msg + "Please enter some text into the 'Other' field..\n";
			}
		}

	if (msg == '') {

		if (frm.newsletter.selectedIndex==1){
			makeRequest(frm.emailaddress.value);
		}
	frm.action=document.getElementById("faction").value;
	//frm.submit();
		return true;
		} 
	else {
		msg = 'You need to complete the form fully before proceeding\n\n' + msg;
		alert(msg);
		//if (focuselement && focuselement.focus) focuselement.focus();
	}
	
	return false;	
}

function CheckElement(element) {
	var blnEmailProblem, blnNumericProblem, blnRequireOneProblem, blnVisible;

	blnVisible = ElementVisible(element);

	if (blnVisible) {
		errmsg = element.title;

		//If email field then validate
		blnEmailProblem = false;
		if (element.value != '' && IsElementInArray(element, aEmailFields)) {
			blnEmailProblem = !ValidEmail(element);
		}
		//If numeric field then validate
		blnNumericProblem = false;
		if (element.value != '' && IsElementInArray(element, aNumericFields)) {
			blnNumericProblem = !ValidNumeric(element);
		}
		//If require one field
		blnRequireOneProblem = false;
		if (element.value != '' && element.name && element.name.indexOf('requireone-brochure') == 0) {
			blnRequireOneProblem = !ValidRequireOne(element);
			if (blnRequireOneProblem) {
				//Change element to first required field
				element = document.getElementById(aRequireOneFields[1]);
			}
		}
		
		//If there were problems then show message and set focus to first problem
		if ( blnEmailProblem || blnNumericProblem || blnRequireOneProblem || (element.title != '' && element.value == '') ) {
			msg += errmsg + '\n';
			if (!focuselement) focuselement = element;
		}
	}
}

function ElementVisible(element) {
	var objElement = element;
	while (objElement) {
		if (objElement.style && objElement.style.display == 'none') return false;
		if (objElement.tagName == 'FORM') break;
		objElement = objElement.parentNode;
	}
	
	return true;
}

function IsElementInArray(element, aFields) {
	if (aFields) {
		for (var i = 0; i < aFields.length; i++) {
			if (element.name == aFields[i]) {
				return true;
			}
		}
	}

	return false;
}

function GetLabel(element) {
	var aLabels, objLabel;
	
	aLabels = document.getElementsByTagName('LABEL');
	
	for (var i = 0; i < aLabels.length; i++) {
		objLabel = aLabels[i];
		if (objLabel.htmlFor == element.id) {
			return objLabel;
		}
	}
	
	return null;
}

function ValidEmail(element) {
	var valid, strFor, re = /^[a-z0-9_-]+(\.[a-z0-9_-]+)*@[a-z0-9_-]+(\.[a-z0-9_-]+)+$/ig;
	valid = re.test(element.value);
	if (!valid) {
		objLabel = GetLabel(element);
		if (objLabel) strFor = ' for ' + objLabel.childNodes[0].nodeValue;
		errmsg = 'Please enter a valid email address';
	}
	return valid;
}

function ValidNumeric(element) {
	var valid, strFor, re = /^[-+]?[0-9]+([.][0-9]*)?$/ig;
	valid = re.test(element.value);
	if (!valid) {
		objLabel = GetLabel(element);
		if (objLabel) strFor = ' for ' + objLabel.childNodes[0].nodeValue;
		errmsg = 'Please enter a numeric value' + strFor;
	}
	return valid;
}

function ValidRequireOne(element) {
	var valid, strFor, objField;
	
	valid = false;
	
	aRequireOneFields = element.value.split(',');
	for (var i = 1; i < aRequireOneFields.length; i++) 
	{
		objField = document.getElementById(aRequireOneFields[i]);
		
		if (objField) {
			switch (objField.type) {
			case 'checkbox':
				valid = objField.checked;
				break;
			default:
				valid = objField.value != '';
				break;
			}
			
		}
		
		//Quit loop early if valid
		if (valid) break;
	}
	
	if (!valid) {
		//strFor = element.name.replace('requireone-', '');
		strFor = aRequireOneFields[0];
		errmsg = 'At least one is required: ' + strFor;
	}
	return valid;
}
function Ebrochurecheckform(frm)   {
		var msg="";
		doc=document.frm;
		
		if (doc.title.value=="")   { msg=msg+"Your title is missing..\n";  }
		if (doc.firstname.value=="")   { msg=msg+"Your Firstname is missing..\n";  }
		if (doc.lastname.value=="")   { msg=msg+"Your Lastname is missing..\n";  }
		if (doc.address1.value=="")   { msg=msg+"Your Address line1 is missing..\n";  }
		if (doc.town.value=="")   { msg=msg+"Please enter the name of your town\n";  }
		if (doc.county.value=="")   { msg=msg+"Please enter the name of your County\n";  }
		if (doc.postcode.value=="")   { msg=msg+"Please enter your postcode\n";  }
		if (doc.country.value=="")   { msg=msg+"Please enter the name of your country..\n";  }
		if (doc.tel.value=="")   { msg=msg+"Please enter the name of your telephone number\n";  }
		email=doc.emailaddress.value;
		if (email==""||((email.indexOf("@") == -1)||email.indexOf(".") == -1)) { msg=msg+"Your email address is either missing or in an invalid format...\n"; }
		if (doc.whereheard.selectedIndex==0)   { msg=msg+"Please choose an option from 'Where did you hear about us'..\n";  }
		if (doc.newsletter.selectedIndex==0)   { msg=msg+"Please select whether you wish to recieve our newsletter\n";  }
		//if (doc.brochure14.checked==false) { msg=msg+"Please choose the introduction of New Zealand to recieve the PDF file..\n"; }
		//if (doc.brochure2.checked==false) { msg=msg+"Please choose the introduction of Australia to recieve the PDF file..\n"; }
		if (msg!="")  { msg=msg+"\nPlease try again.";alert(msg); return false;}
		else  { 
		if (doc.newsletter.selectedIndex==1){
			makeRequest(doc.emailaddress.value);
//
		}

		doc.action="request-an-e-brochure-process2.aspx";
		return true; }
		}