
//
// Hightlight a field
//
function HighlightField(objField)
{
	objField.style.border = "1px solid #ff0000";
	objField.style.padding = "2px";
	objField.focus();
}

// Trim leading/trailing whitespace off string
function Trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
}

function RemoveSpace(str)
{
	return str.replace(/\s/g, "");
}

function CheckEmail(strEmail)
{
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=strEmail.match(emailPat);

	if (matchArray==null)
	{
		// alert("Email address seems incorrect (check @ and dots)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat)==null)
	{
		// user is not valid
		// alert("Email address username doesn't seem to be valid.");
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null)
	{
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
			{
				// alert("Destination IP address is invalid!");
				return false;
			}
		}
		return true;
	}

	var domainArray=domain.match(domainPat);
	if (domainArray==null) {
		// alert("Email address domain name doesn't seem to be valid.");
		return false;
	}

	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)
	{
		// alert("Email address must end in a three-letter domain, or two letter country.");
		return false;
	}

	if (len<2)
	{
		// var errStr="Email address is missing a hostname!";
		// alert(errStr);
		return false;
	}
	return true;
}

//
// arrExempt is a comma separated list of fields to ignore
//
function ValidateForm(objFrm, arrExempt, arrInts, arrEmails, arrCurrency)
{
	// Only 1 click
	// if (boolBtnClicked) return false;

	// Check exemptions array
	if (arrExempt == null || arrExempt == "")
	{
		arrExempt = new Array();
	}

	// Check ints array
	if (arrInts == null || arrInts == "")
	{
		arrInts = new Array();
	}

	// Check email array
	if (arrEmails == null || arrEmails == "")
	{
		arrEmails = new Array();
	}

	// Check Currency array
	if (arrCurrency == null || arrCurrency == "")
	{
		arrCurrency = new Array();
	}

	// Strip out span tags
	// var re1 = new RegExp("<span.*?>.*?<\/span>", "gi")
	var _strMsgNeedsInt = "Please use an number for";
	var _strMsgNeedsValue = "Please complete";
	var _strMsgNeedsEmail = "Format looks incorrect for ";
	var _strMsgNeedsCurrency = "Please ensure currency format for ";

	for (var i = 0; i < objFrm.elements.length; i++)
	{
		var boolEmptyTest = true;
		var boolIntTest = true;
		var boolEmailTest = true;
		var boolCurrencyText = true;
		var strMsg = "";

		// These must have a value of some kind
		if (objFrm.elements[i].value == "" && !InArray(objFrm.elements[i].name, arrExempt))
		{
			boolEmptyTest = false;
			strMsg = _strMsgNeedsValue;
		}

		// Does this need to be an integers
		else if (objFrm.elements[i].value != "" && InArray(objFrm.elements[i].name, arrInts) && !isInteger(objFrm.elements[i].value))
		{
			boolIntTest = false;
			strMsg = _strMsgNeedsInt;
		}

		// Check for email
		else if (InArray(objFrm.elements[i].name, arrEmails) && !CheckEmail(objFrm.elements[i].value))
		{
			boolEmailTest = false;
			strMsg = _strMsgNeedsEmail;
		}

		// Check for currency
		else if (InArray(objFrm.elements[i].name, arrCurrency) && !IsCurrency(objFrm.elements[i].value))
		{
			boolCurrencyText = false;
			strMsg = _strMsgNeedsCurrency;
		}

		//
		// Final test
		//
		if (!boolEmptyTest || !boolIntTest || !boolEmailTest || !boolCurrencyText)
		{
			objFrm.elements[i].style.border = "1px solid #ff0000";
			objFrm.elements[i].style.margin = "0px";
			objFrm.elements[i].focus();
			if (document.getElementById)
			{
				var itemName = "LABEL_"+objFrm.elements[i].name;
				obj = document.getElementById(itemName);
				if (obj != null)
				{
					alert(strMsg+" '"+obj.innerHTML.replace(/<span.*?>.*?<\/span>/gim, "")+"'");
				}
				else
				{
					alert(strMsg+" '"+objFrm.elements[i].name+"'");
				}
			}
			// Older Browsers only
			else
			{
				alert(strMsg+" '"+objFrm.elements[i].name+"'");
			}
			return false;
		}
	}
	return true;
}

// Don't use for floats
function isInteger(value)
{
  return (parseInt(value) == value);
}

function InArray(strValue, arrArray)
{
	for(i = 0; i < arrArray.length; i++)
	{
		if (strValue == arrArray[i]) return true;
	}
	return false;
}

function IsCurrency(fValue)
{
	if (fValue == "" || fValue == null) return false;
	else if (fValue == 0) return true;
	else if (!parseFloat(fValue)) return false;


	// Test values
	var intTest = fValue;
	if (parseInt(intTest) == fValue)
	{
		return true;
	}

	// Perhaps a float
	else
	{
		fValue = fValue.toString();
		var arrParts = fValue.split(".");

		if (parseInt(arrParts[0]) == arrParts[0] && parseInt(arrParts[1]) == arrParts[1])
		{
			if (parseInt(arrParts[1]) < 100) return true;
			else return false;
		}
		else
		{
			return false;
		}
	}
}

//
// Button should be verdana and have a width of at least 100px
//
function DisableButton(btnObj)
{
	if (btnObj != null)
	{
		btnObj.disabled = true;
		// btnObj.style.fontFamily = "Verdana";
		btnObj.value = "Please wait ...";
		btnObj.style.cursor = "wait";
	}
}

function GetPage(strNewUrl)
{
	location.href = strNewUrl;
	return true;
}
