	//take care of browsers without getElementById
	//by creating a wrapper function.
	if(document.all && !document.getElementById) {
    	document.getElementById = function(id) {
         	return document.all[id];
    	}
	}

	function clearIf(fieldIn, strCheck)
	{

		if (fieldIn.value == strCheck)
		{
			fieldIn.value="";
		}
	}

	function populateIfEmpty(fieldIn, strTxt)
	{
		if (fieldIn.value.length==0)
		{
			fieldIn.value = strTxt;
		}
	}

	function ValidatePostcode(pCodeIn)
	{
		return (/^[a-pr-uwyz]((\d{1,2})|([a-hk-y]\d{1,2})|(\d[a-hjks-uw])|([a-hk-y]\d[abehmnprv-y]))\s{0,1}\d[abd-hjlnp-uw-z]{2}$/i).test(pCodeIn);
	}



	function ValidateEmail(strObjId)
	{
		var emailAddrStr = document.getElementById(strObjId).value;
		return (/^([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z]{2,4})+/i).test(emailAddrStr);
	}

	function ValidateTelephone(strObjId)
	{
		var telNum = document.getElementById(strObjId).value;

		//telephone number is not compulsory, but it should be checked
		//if the user has entered it.
		if (telNum.length > 0)
		{
			return (/^0[1|2|7]{1}[0-9\s]{9,12}/i).test(telNum);
		}
		else
		{
			return false;
		}
	}

	function CleanNumber(numberIn)
	{
		//there is a bug in parseInt that seems not to like the value 08 and so parses it as 0.
		if (numberIn.substring(0,1) == "0") numberIn = numberIn.substring(1,2);
		return parseInt(numberIn);
	}

	var selectedDate = null;
	var dateNow = new Date();

	function ValidateDate(strDayElementId, strMonthElementId, strYearElementId)
	{
		var dateOK = true;
		var moveDayInt = CleanNumber(document.getElementById(strDayElementId).value);
		var moveMonthInt = CleanNumber(document.getElementById(strMonthElementId).value);
		var moveYearInt = CleanNumber(document.getElementById(strYearElementId).value);

		if (moveDayInt < 1 || moveMonthInt < 1 || moveYearInt < 1)
		{
			dateOK = false;
		}
		else
		{
			if (moveDayInt > 28)
			{
				//check february, plus leap years...
				if (moveMonthInt == 2)
				{
					//leap years
					if (moveYearInt%4 != 0)
					{
						dateOK = (moveDayInt < 29); //up to 28 days is fine
					}
					else if (moveYearInt%400 == 0)
					{
						dateOK = (moveDayInt < 30); //up to 29 days is fine
					}
					else if (moveYearInt%100 == 0)
					{
						dateOK = (moveDayInt < 29); //up to 28 days is fine
					}
					else
					{
						dateOK = (moveDayInt < 30);
					}
				}
				//check April, June, September, November
				else if ((moveMonthInt == 4) || (moveMonthInt == 6) || (moveMonthInt == 9) || (moveMonthInt == 11))
				{
					dateOK = (moveDayInt < 31); //only 30 days in these months.
				}

			}
		}

		if (dateOK) selectedDate = new Date(moveYearInt, moveMonthInt, moveDayInt);

		return dateOK;
	}

	function CheckDateIsInFuture(strDayElementId, strMonthElementId, strYearElementId, strMoveType)
	{

		var dateDayObj = document.getElementById(strDayElementId);
		var dateMonthObj = document.getElementById(strMonthElementId);
		var dateYearObj = document.getElementById(strYearElementId);

		selectedMoveDate = null;
		var dateOK = true;

		if ((dateDayObj.options[dateDayObj.selectedIndex].value == "-1")
			&& (dateMonthObj.options[dateMonthObj.selectedIndex].value == "-1")
			&& (dateYearObj.options[dateYearObj.selectedIndex].value == "-1") )
		{
			//no date entered, return true;
			return true;
		}
		else
		{
			if (ValidateDate(strDayElementId, strMonthElementId, strYearElementId))
			{
				if (selectedDate.getTime() < dateNow.getTime())
				{
					alert("Please select a date in the future for your " + strMoveType);
					dateOK = false;
				}
			}
			else
			{
				alert("Please enter a valid date for your " + strMoveType);
				dateOK = false;
			}


		}

		return dateOK;

	}

	function ValidatePulldown(strObjId, strErrorMessage)
	{
		var objPulldown = document.getElementById(strObjId);
		if (objPulldown.options[objPulldown.selectedIndex].value == "-1")
		{
			alert(strErrorMessage);
			return false;
		}
		return true;

	}

	function CommonCheckForm()
	{

		for (var i = 0; i < mandatories.length; i++)
		{
			var objTemp = document.getElementById(mandatories[i][0]);
			if (objTemp.value.length == 0)
			{
				alert(mandatories[i][1]);
				objTemp.focus();
				return false;
			}
		}

		if (ValidateTelephone("telephone_number") == false)
		{
			alert("Please enter a valid telephone number using numbers only.");
			document.getElementById("telephone_number").focus();
			return false;
		}


		if (ValidateEmail("email") == false)
		{
			alert("Please enter a valid email address.");
			document.getElementById("email").focus();
			return false;
		}

		if ( (document.getElementById("address_line_1").value.length == 0)
			|| (document.getElementById("address_town").value.length == 0)
			|| (ValidatePostcode(document.getElementById("address_postcode").value) == false) )
		{
			alert("Please enter your address, including a valid UK postcode.");
			document.getElementById("address_line_1").focus();
			return false;
		}


		if (document.getElementById("contact_me").checked == false && document.getElementById("send_me_info").checked == false)
		{
			alert("Please tell us how you want us to contact you\nby checking one of the options.");
			return false;
		}

		var atLeastOneChecked = false;
		//do the checkelements...
		for (var i = 0; i < checkElements.length; i++)
		{
			if (document.getElementById(checkElements[i]).checked)
			{
				atLeastOneChecked = true;
				break;
			}
		}

		if (!atLeastOneChecked)
		{
			alert("Please tell us which service you are interested in.");
			return false;
		}

		//get to here, all is ok.
		return true;

	}