function FormatField (objField)
{
	if (	objField != null
		&&	objField.value != null
		&&	objField.value.length > 0	)
	{
		var strFieldName = objField.name;
		var strFieldValue = trim(objField.value);
		var strFieldType = objField.name.substring(0, 3);

		switch (strFieldType)
		{

			case 'nme':
				var strRegex = /[ ]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				strFieldValue = ProperCase(strFieldValue);
				break;

			case 'cur':
				var strRegex = /[^0-9.]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				strFieldValue = CorrectDecimal(strFieldValue);
				break;

			case 'pst':
				var strRegex = /[^0-9]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				break;

			case 'eml':
				strFieldValue = strFieldValue.toLowerCase();
				break;

			case 'num':
				var strRegex = /[^0-9]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				break;

			case 'dbd':
				var strRegex = /[^0-9]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				break;

			case 'dbm':
				var strRegex = /[^0-9]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				break;

			case 'dby':
				var strRegex = /[^0-9]/g;
				strFieldValue = strFieldValue.replace(strRegex, "");
				break;

			default:
				break;
		}

		objField.value = strFieldValue;
	}
}

function CorrectDecimal(objValue)
{
	var strValue = objValue.toString();
	var intDecimalIndex = strValue.indexOf(".");
	var intValueLength = strValue.length;

	if (	intDecimalIndex == -1	)
	{
		strValue = strValue + '.00';
	}
	else if (	intDecimalIndex == 0	)
	{
		strValue = '';
	}
	else
	{
		var strDecimalArea = strValue.substring((intDecimalIndex + 1), intValueLength);

		switch (strDecimalArea.length)
		{
			case 0:
				strValue = strValue + '00';
				break;
			case 1:
				strValue = strValue + '0';
				break;
			case 2:
				break;
			default:
				strValue = strValue.substring(0, (intDecimalIndex + 1)) + strDecimalArea.substring(0, 2);
				break;
		}
	}

	return strValue;
}

/* Updates STD */
/* Assumes objField is all numeric! */
function UpdateStateInformation(objField, strSTDID, strStateID)
{
	if (	objField == null
		|| (	strSTDID == null
			&& strState == null	)	)
	{
		return;
	}

	var strFieldValue = objField.value;
	var strFirstDigit = strFieldValue.substring(0, 1);
	var strSTDCode;
	var strState;
	var objSTDField;
	var objStateField;

	if (	strFieldValue.length != 4	)
	{
		return;
	}

	switch (strFirstDigit)
	{
		case "0":
			if (	strFieldValue.substring(1, 2) == "2"	)
 			{
				strSTDCode = "02";
				strState = "ACT";
			}
			else if (	strFieldValue.substring(1, 2) == "8"	)
			{
				strSTDCode = "08";
				strState = "NT";
			}
			break;

		case "1":
			strSTDCode = "02";
			strState = "NSW";
			break;

		case "2":
			var intFieldValue = parseInt(strFieldValue);

			if (	intFieldValue >= 2900
				||	(	intFieldValue >= 2600
					&&	intFieldValue <= 2918	)	)
			{
				strSTDCode = "02";
				strState = "ACT";
			}
			else
			{
				strSTDCode = "02";
				strState = "NSW";
			}
			break;

		case "3":
			strSTDCode = "03";
			strState = "VIC";
			break;

		case "4":
			strSTDCode = "07";
			strState = "QLD";
			break;

		case "5":
			strSTDCode = "08";
			strState = "SA";
			break;

		case "6":
			strSTDCode = "08";
			strState = "WA";
			break;

		case "7":
			strSTDCode = "03";
			strState = "TAS";
			break;

		case "8":
			strSTDCode = "03";
			strState = "VIC";
			break;

		case "9":
			strSTDCode = "04";
			strState = "QLD";
			break;

	}

	if (	strSTDID != null	)
	{
		objSTDField = document.getElementById(strSTDID);

		if (	objSTDField != null	)
		{
			objSTDField.value = strSTDCode;
		}
	}

	if (	strStateID != null	)
	{
		objStateField = document.getElementById(strStateID);

		if (	objStateField != null	)
		{
			objStateField.value = strState;
		}
	}
}

/* For use with CheckForm */
var intSubmitCount = 0;

/* Check Form */
/* Relies on StringTokenizer (stringtokenizer.js) */
function CheckForm(objForm, strSubmitPage)
{
	if (	objForm != null	)
	{
		var intCount;
		var objTokenizer1;
		var objTokenizer2;
		var objField;
		var objImageField;
		var objMessageArea;
		var objFirstErrorField;
		var blnFormOK = true;

		var strFieldValue;
		var strFieldType;
		var strFieldReq;
		var blnFieldReq
		var strFieldName;
		var strFieldLimits;
		var strFieldNumber;

		var intMaxChars;
		var intMinChars;

		objMessageArea = document.getElementById('messagearea')

		if (	objMessageArea != null 	)
		{
			objMessageArea.innerHTML = 'checking form... <br />&nbsp;';
		}

		// Loop to clear problem image
		for (intCount = 0; intCount < objForm.length; intCount++)
		{
			objField = objForm[intCount];

			objTokenizer1 = new StringTokenizer(objField.name, '_');

			strFieldName = 'xxx';

			if (	objTokenizer1.countTokens() == 3	)
			{
				strFieldName = objTokenizer1.nextToken();
				strFieldName = objTokenizer1.nextToken();
				strFieldName = objTokenizer1.nextToken();
			}
			else if 	(	objTokenizer1.countTokens() == 4
						||	objTokenizer1.countTokens() == 5	)
			{
				strFieldName = objTokenizer1.nextToken();
				strFieldName = objTokenizer1.nextToken();
				strFieldName = objTokenizer1.nextToken();
				strFieldName = objTokenizer1.nextToken();
			}

			if (	strFieldName != 'xxx'	)
			{
				objImageField = document.getElementById('img_' + strFieldName)

				if (	objImageField != null	)
				{
					objImageField.src = '../i/val-problem-off.gif';
				}
			}
		}

		for (intCount = 0; intCount < objForm.length; intCount++)
		{
			objField = objForm[intCount];
			strFieldValue = objField.value;

			objTokenizer1 = new StringTokenizer(objField.name, '_');

			if (	objTokenizer1.countTokens() >= 3
				||	objTokenizer1.countTokens() <= 5)
			{
				strFieldType = objTokenizer1.nextToken();

				strFieldReq = objTokenizer1.nextToken();

				if (	strFieldReq == 'r'	)
				{
					if (	objTokenizer1.countTokens() > 3	)
					{
						strFieldLimits = objTokenizer1.nextToken();
						// Strange bug on some fields here, hence extra -
						objTokenizer2 = new StringTokenizer(strFieldLimits + '-', '-');

						if (	objTokenizer2.countTokens() != 2)
						{
							return;
						}

						intMinChars = parseInt(objTokenizer2.nextToken());
						intMaxChars = parseInt(objTokenizer2.nextToken());
					}
					else
					{
						intMinChars = 1;
						intMaxChars = 9999;
					}

					strFieldName = objTokenizer1.nextToken();

					if (	objTokenizer1.countTokens() == 5	)
					{
						alert('here');
						strFieldNumber = objTokenizer1.nextToken();
						alert('here');
					}
					else
					{
						strFieldNumber = -1;
					}

					if (	!ValidateField(objField, strFieldType, intMinChars, intMaxChars)	)
					{
						blnFormOK = false;
						objImageField = document.getElementById('img_' + strFieldName)

						if (	objImageField != null	)
						{
							objImageField.src = '../i/val-problem-on.gif';
						}

						if (	objFirstErrorField == null	)
						{
							objFirstErrorField = objField;
						}
					}

					// Special test for e-mail fields
					if (	strFieldName == 'Email'	)
					{
//						if (	document.getElementById('eml_r_Email').value != document.getElementById('eml_r_EmailAgain').value	)
//						{
//							blnFormOK = false;
//
//							document.getElementById('img_Email').src = '../i/val-problem-on.gif';
//							document.getElementById('img_EmailAgain').src = '../i/val-problem-on.gif';
//						}
					}
				}
			}
		}

		if (	blnFormOK	)
		{
			if (	objMessageArea != null 	)
			{
				objMessageArea.innerHTML = 'sending data, please wait ...<br />&nbsp;';
			}

			objForm.action = strSubmitPage;
			objForm.submit();
		}
		else
		{
			if (	objMessageArea != null 	)
			{
				intSubmitCount++;

				if (	intSubmitCount	> 2	)
				{
					objMessageArea.innerHTML = 'please check the fields marked with an exclamation mark!<br/>if you would any like assistance, please call us on 1300 132 664.';
				}
				else
				{
					objMessageArea.innerHTML = 'please check fields marked with an exclamation mark!<br />&nbsp;';
				}

				alert('One or more required fields have not been completely correctly.\nPlease check the fields marked with an exclamation mark.\n\nIf you are unsure about what to enter into a particular field,\nplease click on the grey question mark next to it for additional help.');

				objFirstErrorField.focus();
			}
		}
	}
}

/* Validate Field */
function ValidateField(objField, strFieldType, intMinChars, intMaxChars)
{
	var blnFieldOK = true;

	if (	strFieldType == 'nme'
		|| strFieldType == 'cur'
		|| strFieldType == 'num'
		|| strFieldType == 'txt'	)
	{
		if (	objField.value.length < intMinChars
			||	objField.value.length > intMaxChars	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'pst'	)
	{
		if	(	objField.value.length != 4	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'dbd'	)
	{
		if	(	objField.value.length != 2	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'dbm'	)
	{
		if	(	objField.value.length != 2	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'dby'	)
	{
		if	(	objField.value.length != 4	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'cmb'	)
	{
		if	(	objField.selectedIndex == 0	)
		{
			blnFieldOK = false;
		}
	}
	else if (	strFieldType == 'eml'	)
	{
		if (!ValidateEmailAddress(objField.value)	)
		{
			blnFieldOK = false;
		}
	}

	return blnFieldOK;
}

/* Validate Email Address */
function ValidateEmailAddress(strEmail)
{
	var regInvalidEmail = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
	var regValidEmail = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

	if (	regInvalidEmail.test(strEmail)
		|| !regValidEmail.test(strEmail)	)
	{
		return false;
	}

	return true;
}

function trim(str)
{
    str.replace(/^\s*/, '').replace(/\s*$/, '');

   return str;
}

function ProperCase(inputString)
{
	var strReturnString = "";
	var intInputLength = inputString.length;

	if(intInputLength == 0)
	{
		return strReturnString;
	}

	var blnUpperNext = false;
	var intCurChar;
	var intCount;

	strReturnString += inputString.charAt(0).toUpperCase();

	for(intCount=1; intCount < intInputLength; intCount++)
	{
		if (blnUpperNext == true)
		{
			strReturnString += inputString.charAt(intCount).toUpperCase();
		}
		else
		{
			strReturnString += inputString.charAt(intCount).toLowerCase();
		}

		intCurChar = inputString.charCodeAt(intCount);

		if(intCurChar == 32 || intCurChar == 45 || intCurChar == 46)
		{
			blnUpperNext = true;
		}
		else
		{
			blnUpperNext = false;
		}

		if (	intCurChar == 99
			|| intCurChar == 67	)
		{
			if (	inputString.charCodeAt(intCount - 1) == 77
				|| inputString.charCodeAt(intCount - 1) == 109	)
			{
				blnUpperNext = true;
			}
		}
	}

	return strReturnString;
}
