function x(b){
	if (document.layers){
		e = document.layers[b];
	}else if (document.all) {
		e = document.all[b];
	}else if (document.getElementById) {
		e = document.getElementById(b);
	}return e;
}

function Replace(expression, find, replace_value)
{
	var temp = expression;
	var a = 0;

	for (var i = 0; i < expression.length; i++) 
	{
		a = temp.indexOf(find,i);
		if (a == -1)
		{
			break;
		}
		else
		{
			temp = temp.substring(0, a) + replace_value + temp.substring((a + find.length));
		}
	}

	return temp;
}

/*	Begin trim utility function
	Utility function that trims leading and trailing white space from a string.
*/
function Trim(expression) {
	expression = expression.replace(/(^\s+)|(\s+$)/g,"");
	return expression;
}

/*	IsOnlyAllowed: Returns a Boolean value indicating whether an 
	expression contains only the specified allowable characters.
	Parameters:
		Expression = Variable containing a string to be checked.
		Allowed = Variable containing a string that contains 
		allowable characters.
		Returns: Boolean
*/
function IsOnlyAllowed(expression, allowed)
{
	expression = expression.toLowerCase();
	if (expression.length < 1) 
		return true;
	for (var i = 0; i < expression.length; i++) 
	{
		var ch = expression.substr(i, 1)
		var a = allowed.indexOf(ch, 0)
		if (a == -1)
		{
			return false;
		}
	}
	return true;
}

// Begin Alpha validation
function validateAlpha(expression, minLen, maxLen)
{
	if (!IsOnlyAllowed(expression, "abcdefghijklmnopqrstuvwxyz-\'_ \."))
	{
		return false;
	}
	if ((expression.length == 0) && (minLen == 0))
	{
		return true;
	}
	else if ((expression.length >= minLen) && (expression.length <= maxLen))
	{
		return true;
	}
	else
	{
		return false;
	} 
}

// Begin Alphanumberic validation
function validateAlphaNum(expression, minLen, maxLen)
{
	if (!IsOnlyAllowed(expression, "abcdefghijklmnopqrstuvwxyz1234567890-\'_ \."))
	{
		return false;
	}
	if ((expression.length == 0) && (minLen == 0))
	{
		return true;
	}
	else if ((expression.length >= minLen) && (expression.length <= maxLen))
	{
		return true;
	}
	else
	{
		return false;
	} 
}


// Begin string validation
function validateString(expression, minLen, maxLen)
{
	if (!IsOnlyAllowed(expression, "abcdefghijklmnopqrstuvwxyz1234567890-_~@?#()/\\.,*&%$!;:'\"+= "))
	{
		return false;
	}
	if ((expression.length == 0) && (minLen == 0))
	{
		return true;
	}
	else if ((expression.length >= minLen) && (expression.length <= maxLen))
	{
		return true;
	}
	else
	{
		return false;
	} 
}

// Title Validation
function isTitle(value){
	if (value.equals("Dr.")) { return true; }
	else if(value.equals("Ms.")){ return true; }
	else if(value.equals("Mrs.")){ return true; }
	else if(value.equals("Mr.")){ return true; }
	else if(value.equals("Rev.")){ return true; }
	else { return false; }
}

// Begin zipcode validation
// This function checks that inputed value is a valid zip code.
// This is appropriate for US Zip codes only, as it is matches a specific
// pattern -- the 12345 or the 12345-1234 formats

function isUSZip(value) {
	return isRegExp(value,/(^\d{5}(\-\d{4})?$)|(^\d{9}$)/);
}

function isCanadianZip(value) {
	return isRegExp(value,/((^[a-zA-Z]{1}\d{1}[a-zA-Z]{1}\s{1}\d{1}[a-zA-Z]{1}\d{1})$)|((^[a-zA-Z]{1}\d{1}[a-zA-Z]{1}\d{1}[a-zA-Z]{1}\d{1})$)/);
}

function isBirthday(value) {
	return isRegExp(value,/(^\d{2}(\/\d{2})$)/);
}

function isExpirationDate(value) {
	return isRegExp(value,/(^\d{2}(\/\d{2})$)|(^\d{2}\/\d{2}(\/\d{2})$)/);
}

function isValidDate(value) {
	return isRegExp(value,/(^\d{2}(\/\d{2})$)|(^\d{2}\/\d{2}(\/\d{2})$)/);
}

// Begin phone validation
function validatePhone(phone, minLen, maxLen)
{
	if (!IsOnlyAllowed(phone, "1234567890 x().-/\\")) {
		return false;
	}
	if ((phone.length == 0) && (minLen == 0)) {
		return true;
	}
	else if ((phone.length >= minLen) && (phone.length <= maxLen)) {
		return true;
	}
	else
	{
		return false;
	} 
}

// Begin email validation
function valEmail(emailStr)
{
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var firstChars=validChars
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom="(" + firstChars + validChars + "*" + ")"
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null)
	{
  		return false;
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null)
		{
	       return false;
		}
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null)
		 {
			  for (var i=1;i<=4;i++)
			  	{
			    	if (IPArray[i]>255)
						{
						   return false;
					    }
			    }
		    return true;
		}
	var domainArray=domain.match(domainPat)
	if (domainArray==null)
		{
			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)
		{
		   return false;
		}
	if (domArr[domArr.length-1].length==2 && len<3)
		{
		   return false;
		}
	if (domArr[domArr.length-1].length==3 && len<2)
		{
		   return false;
		}
	return true;
}

// Utility function that checks the inputed value against the inputed regular expression.
function isRegExp(value,reg) {
	if (value.search(reg) != -1) {
		return true;
	} else {
		return false;
	}
}
