<!-- Hide from old browsers that dont support JavaScript

//***********************************************
//* Architecture JavaScript Validation Routines *
//***********************************************

function isValidString(formField, fieldDesc, required)
{
	var testString = trimString(formField.value);
	if ( required && isEmpty(testString) )
	{
		return warnEmpty(formField, fieldDesc);
	}
	return true;
}

function isValidInteger(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( isNumeric(testString) )
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
	return false;
}

function isValidDecimal(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( isFloat(testString) )
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
	return false;
}

function isValidMoney(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( isFloat(testString) )
		{
			index = testString.indexOf( "." );
			if ( index == -1 )
			{
				return true;
			}
			else
			{
				if ( testString.substring( index+1, testString.length ).length < 3 )
				{
					return true;
				}
			}
		}
		return warnInvalid(formField, fieldDesc);
	}
	return false;
}

function isValidDate(formField, fieldDesc, required, delimiter)
{
	if ( delimiter == null )
		delimiter = "/"
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( ! required && isEmpty(testString) )
		{
			return true;
		}
 		var elems = testString.split(delimiter);
 		var result = false
 		if (elems.length == 3)	// should be three components
 		{
 			var month = parseInt(elems[0], 10);
  			var day = parseInt(elems[1], 10);
 			var year = parseInt(elems[2], 10);
			result = !isNaN(month) && isValidMonth(month) &&
			         !isNaN(year) && (elems[2].length == 4 || elems[2].length == 2) &&
			         !isNaN(day) && isValidDay(month, day, year);
 		}
 		if (result)
 		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	} 
	return false;
}

function isValidRadioBtn(formField, fieldDesc, required)
{
	if ( formField.length == null && formField.checked )
	{
		return true;
	}
	for (i=0; i<formField.length; i++)
	{
		if ( formField[i].checked )
		{
			return true;
		}
	}
	alert("Please select a " + fieldDesc);
	return false;
}

function isValidName(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( isAlpha(testString) )
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
	return false;
}

function isValidZipCode(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( ! required && isEmpty(testString) )
		{
			return true;
		}
		if ( ( testString.length == 5 && isNumeric(testString) ) || ( testString.length == 6 && isCanadianZip(testString) ) )
		{
	  		return true;
		}
		return warnInvalid(formField, fieldDesc);
  	}
  	return false;
}

function isValidPhoneNumber(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		testString = replaceChar(testString, ' ', '');
		
		if ( !required && isEmpty(testString) )
		{
			return true;
		}
		
		var i = 0;
		for(i=0; i < testString.length; i++) {
			if (!(isNumeric(testString.charAt(i)))) {
				testString = replaceChar(testString, testString.charAt(i), '');
			}
		}
		if ( isNumeric(testString) && (testString.length >= 10) &&  (testString.length <= 15))
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
  	return false;
}

function isValidPhoneNumber2(formField, fieldDesc, required, minDigits, maxDigits)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		testString = replaceChar(testString, ' ', '');
		
		if ( !required && isEmpty(testString) )
		{
			return true;
		}
		
		var i = 0;
		for(i=0; i < testString.length; i++) {
			if (!(isNumeric(testString.charAt(i)))) {
				testString = replaceChar(testString, testString.charAt(i), '');
			}
		}
		if ( isNumeric(testString) && (testString.length >= minDigits) &&  (testString.length <= maxDigits))
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
  	return false;
}

function isValidEmailAddress(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( ! required && isEmpty(testString) )
		{
			return true;
		}
		var message = validateEmailAddressMessage(testString);
		if ( message == 'OK' )
		{
			return true;
		}
		return warnInvalidWithMessage(formField, fieldDesc, message);
	}
	return false;
}

function validateEmailAddressMessage(address) {
	var firstPartSpecialChars = "!#$%&'*+-/=?^_`{|}~.";
	var secondPartSpecialChars = ".-";
	var lettersAndDigits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	var validFirstPart  = lettersAndDigits + firstPartSpecialChars;
	var validSecondPart = lettersAndDigits + secondPartSpecialChars;
	var atPosition = address.indexOf('@');
	if (atPosition < 0) {
		return "Must have @";
	}
	if (address.indexOf("@", atPosition+1) >= 0) {
		return "Cannot have more than one @";
	}
	var firstPart = address.substring(0, atPosition);
	var secondPart = address.substring(atPosition+1);
	if (firstPart.length < 1) {
		return "Missing name before @";
	}
	for ( var i=0 ; i<firstPart.length ; i++ ) {
		if (validFirstPart.indexOf(firstPart.charAt(i)) < 0) {
			if (firstPart.charAt(i) == ' ') {
				return "Must not contain any spaces";
			} else {
				return "Has invalid character " + firstPart.charAt(i);
			}
		}
	}
	if (firstPart.charAt(0) == '.') {
		return "Cannot begin with dot";
	}
	if (firstPart.charAt(firstPart.length-1) == '.') {
		return "Cannot have dot immediately before @";
	}
	if (firstPart.indexOf("..") >= 0) {
		return "Must not have two consecutive dots";
	}

	if (secondPart.length < 3) {
		return "Must have at least three characters after @";
	}
	for ( var i=0 ; i<secondPart.length ; i++ ) {
		if (validSecondPart.indexOf(secondPart.charAt(i)) < 0) {
			if (secondPart.charAt(i) == ' ') {
				return "Must not contain any spaces";
			} else {
				return "Has invalid character " + secondPart.charAt(i);
			}
		}
	}
	if (secondPart.indexOf(".") < 0) {
		return "Must have at least one dot after @";
	}
	if (secondPart.indexOf("..") >= 0) {
		return "Must not have two consecutive dots";
	}
	if (secondPart.charAt(0) == '.') {
		return "Cannot have a dot immediately after @";
	}
	if (secondPart.charAt(secondPart.length-1) == '.') {
		return "Cannot end with dot";
	}
	if (secondPart.indexOf(".-") >= 0 || secondPart.indexOf("-.") >= 0) {
		return "Cannot have hyphen next to dot";
	}
	if (secondPart.charAt(0) == '-') {
		return "Cannot have hyphen immediately after @";
	}
	if (secondPart.charAt(secondPart.length-1) == '-') {
		return "Cannot end with hyphen";
	}
	return "OK";
}

function isValidCreditCard(formField, fieldDesc, required)
{
	if ( isValidString(formField, fieldDesc, required) )
	{
		var testString = trimString(formField.value);
		if ( ! required && isEmpty(testString) )
		{
			return true;
		}
		if ( isNumeric(testString) && testString.length >= 15 && testString.length <= 16 )
		{
			return true;
		}
		return warnInvalid(formField, fieldDesc);
	}
	return false;
}

//***********************************************
//* Architecture JavaScript Utility Routines *
//***********************************************

function isEmpty(s)
{
	return ( (s == null) || (trimString(s).length == 0) );
}

function isLetter(testChar)
{
	if ( (testChar >= 'a' && testChar <= 'z') || (testChar >= 'A' && testChar <= 'Z') )
	{
		return true;
	}
	return false;
}

function isDigit(testChar)
{
	if ( testChar >= '0' && testChar <= '9' )
	{
		return true;
	}
	return false;
}

function isAlpha(testString)
{
	var i;
	for (i=0; i<testString.length; i++)
	{
		var c = testString.charAt(i);
		if( isDigit(c) )
		{
			return false;
		}
	}
	return true;
}

function isNumeric(testString)
{
	var i;
	for (i=0; i<testString.length; i++)
	{
		var c = testString.charAt(i);
		if ( ! isDigit(c)  )
		{
			return false;
		}
	}
	return true;
}

function isFloat(testString)
{
	var i;
	if ( testString == "." ) return false;
	for (i=0; i<testString.length; i++)
	{
		var c = testString.charAt(i);
		if ( ! isDigit(c) && c != '.' )
		{
			return false;
		}
	}
	return true;
}

function isValidDay(month, day, year)
{
	if(month==2 && isLeapYear(year)) //Feb leap year
		return day >=1 && day <= 29
	else if(month==2 && !isLeapYear()) // Regular leap year
		return day >=1 && day <= 28
	else if(month == 4 || month == 6 || month == 9 || month == 11) //April, June, Sept, November all have 30 days
		return day >=1 && day <= 30;
	else // Everything else has 31 days
		return day >= 1 && day <= 31;
}

function isValidMonth(month)
{
	return month >=1 && month <=12;
}

function isLeapYear(year)
{
	if( year%4 != 0)
		return false
	else if( year%400 == 0 )
		return true
	else if( year%100 == 0 )
		return false
	else
		return true
}

function isCanadianZip(testString)
{
	if( isLetter(testString.charAt(0)) &&
	    isLetter(testString.charAt(2)) &&
	    isLetter(testString.charAt(4)) && 
	    isDigit(testString.charAt(1)) &&
	    isDigit(testString.charAt(3)) &&
	    isDigit(testString.charAt(5) ) )
	{
		return true;	    
	}
	return false;
}

function trimString(testString)
{
	var returnString = "";
	var start = 0;
	var end = testString.length -1; 
	
	while (testString.charAt(start) == ' ')
	{
		start++;
	}	
	while ( testString.charAt(end) == ' ' )
	{
		end--;
	}
	for (i = start; i <= end; i++)
	{
		returnString += testString.charAt(i);
	}
	return returnString;
}

function trimNonNumbers(testString)
{
	var i;
	returnString = ""
	for( i=0; i<testString.length; i++ )
	{
		if ( isDigit(testString.charAt(i))  )
		{
			returnString += testString.charAt(i);
		}
	}
	return returnString;
}

function replaceChar(testString, find, replace)
{
	var i;
	returnString = ""
	testString = trimString(testString);
	for( i=0;i<testString.length;i++ )
	{
		if ( testString.charAt(i) == find )
		{
			returnString += replace;
		}
		else
		{
			returnString += testString.charAt(i);
		}
	}
	return returnString;
}

function warnEmpty(formField, fieldDesc)
{
	formField.focus();
	alert(fieldDesc + " is a required field");
	return false;
}

function warnInvalid(formField, fieldDesc)
{
	formField.focus();
	formField.select();
	alert(fieldDesc + " is invalid");
	return false;
}

function warnInvalidWithMessage(formField, fieldDesc, message)
{
	formField.focus();
	formField.select();
	alert(fieldDesc + " is invalid : " + message);
	return false;
}

// end of script hiding -->
