var vld_Email =  /^(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,5}|[0-9]{1,3})(\]?))?$/;
var reWhitespace = /^\s+$/;
var reLetter = /^[a-zA-Z]$/;
var reAlphabetic = /^[a-zA-Z]+$/;
var reAlphanumeric = /^[a-zA-Z0-9]+$/;
var reDigit = /^\d/;
var reLetterOrDigit = /^([a-zA-Z]|\d)$/;
var reInteger = /^\d+$/;
var reSignedInteger = /^(\+|\-)?\d+$/;
var reFloat = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
var reSignedFloat = /^(((\+|\-)?\d+(\.\d*)?)|((\+|\-)?(\d*\.)?\d+))$/;
var reEmail = /^.+\@.+\..+$/;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var phoneNumberDelimiters = "()- ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var SSNDelimiters = ".- ";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters;
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var creditCardDelimiters = ".- ";

var defaultEmptyOK = false;

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

var theDate = new Date();
var thisMonth = theDate.getMonth();
var thisYear = theDate.getFullYear();

var months = "January,February,March,April,May,June,July,August,September,October,November,December";

var codeDelimiter = ",";

var USStateDefault = "UT";
var USStateCodes = "AL,AK,AS,AZ,AR,CA,CO,CT,DE,DC,FM,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MH,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA,PR,RI,SC,SD,TN,TX,UT,VT,VI,VA,WA,WV,WI,WY,AE,AA,AE,AE,AP";
var USStates = "Alabama,Alaska,American Samoa,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,District Of Columbia,Micronesia,Florida,Georgia,Guam,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Marshall Islands,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,New Hampshire,New Jersey,New Mexico,New York,North Carolina,North Dakota,Mariana Islands,Oiho,Oklahoma,Oregon,Palau,Pennsylvania,Puerto Rico,Rhode Island,South Carolina,South Dakota,Tennessee,Texas,Utah,Vermont,Virgin Islands,Virginia,Washington,West Virginia,Wisconsin,Wyoming,Armed Forces Africa,Armed Forces Americas,Armed Forces Canada,Armed Forces Europe,Armed Forces Middle East,Armed Forces Pacific";

var CountyDefault = "Salt Lake"
var UtahCounties = "Beaver,Box Elder,Cache,Carbon,Daggett,Davis,Duchesne,Emery,Garfield,Grand,Iron,Juab,Kane,Millard,Morgan,Piute,Rich,Salt Lake,San Juan,Sanpete,Sevier,Summit,Toolele,Uintah,Utah,Wasatch,Washington,Wayne,Weber";

var CCTypeDefault = "Visa";
var CCTypes = "Visa,MasterCard,American Express,Diner's Club,Carte Blanche,Discover,en Route,JCB";

var defaultPrefix = " ";
var prefixes = " ,Mr,Mrs,Ms,Miss";

var defaultSuffix = " ";
var suffixes = " ,Jr,Sr";

var iErrorCount = 0;
var aError;
aError = new Array();

var eFirstName = "Please enter a first name.";
var eLastName = "Please enter a last name.";
var eAddress1 = "Please enter an address.";
var eCity = "Please enter a city.";
eImage=""
var eCountry = "Please enter a country.";
var eZip = "Please enter a valid zip code.";
var ePhone = "Please enter a valid phone number.";
var eEMail = "Please enter a valid email address.";
var eSSN = "Please enter a valid Social Security Number.";
var eBirthday = "Please enter a valid birth date.";
var eCCNumber = "Please enter a valid credit card number.";
var eState = "Please enter a valid state code.";
var eIntPhone = "Please enter a valid phone number.";

function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}

function isWhitespace(s) {
	return (isEmpty(s) || reWhitespace.test(s));
}

function stripCharsInRE(s, bag) {
	return s.replace(bag, "");
}

function stripCharsInBag(s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}

	return returnString;
}

function stripCharsNotInBag(s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) returnString += c;
	}

	return returnString;
}

function stripWhitespace(s) {
    return stripCharsInBag (s, whitespace);
}

function stripInitialWhitespace(s) {
	var i = 0;

	while ((i < s.length) && indexOf(s.charAt(i), whitespace))
		i++;
    
	return s.substring (i, s.length);
}

function isLetter(c) {
	return reLetter.test(c);
}

function isDigit(c) {
	return reDigit.test(c);
}

function isLetterOrDigit(c) {
	return reLetterOrDigit.test(c);
}

function isInteger(s) {
	var i;

	if (isEmpty(s))
		if (isInteger.arguments.length == 1) return defaultEmptyOK;
		else return (isInteger.arguments[1] == true);

	return reInteger.test(s);
}

function isSignedInteger(s) {
	if (isEmpty(s))
		if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
		else return (isSignedInteger.arguments[1] == true);

	else {
		return reSignedInteger.test(s);
	}
}

function isPositiveInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isPositiveInteger.arguments.length > 1)
		secondArg = isPositiveInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}

function isNonnegativeInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNonnegativeInteger.arguments.length > 1)
		secondArg = isNonnegativeInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}

function isNegativeInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNegativeInteger.arguments.length > 1)
		secondArg = isNegativeInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}

function isNonpositiveInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNonpositiveInteger.arguments.length > 1)
		secondArg = isNonpositiveInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}

function isFloat(s) {
	if (isEmpty(s)) 
		if (isFloat.arguments.length == 1) return defaultEmptyOK;
		else return (isFloat.arguments[1] == true);

	return reFloat.test(s)
}

function isSignedFloat(s) {
	if (isEmpty(s)) 
		if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
		else return (isSignedFloat.arguments[1] == true);
	else {
		return reSignedFloat.test(s)
	}
}

function isAlphabetic(s) {
	var i;

	if (isEmpty(s))
		if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
		else return (isAlphabetic.arguments[1] == true);
	else {
		return reAlphabetic.test(s);
	}
}

function isAlphanumeric(s) {
	var i;

	if (isEmpty(s))
		if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
		else return (isAlphanumeric.arguments[1] == true);
	else {
		return reAlphanumeric.test(s)
	}
}

function reformat(s) {
	var arg;
	var sPos = 0;
	var resultString = "";

	for (var i = 1; i < reformat.arguments.length; i++) {
		arg = reformat.arguments[i];
		if (i % 2 == 1) resultString += arg;
		else {
			resultString += s.substring(sPos, sPos + arg);
			sPos += arg;
		}
	}
	return resultString;
}

function isSSN(s) {
	if (isEmpty(s)) 
		if (isSSN.arguments.length == 1) return defaultEmptyOK;
		else return (isSSN.arguments[1] == true);
	return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}

function isUSPhoneNumber(s) {		
	if (isEmpty(s)) 
		if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isUSPhoneNumber.arguments[1] == true);
	return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}

function isInternationalPhoneNumber(s) {
	if (isEmpty(s)) 
		if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isInternationalPhoneNumber.arguments[1] == true);
	return (isPositiveInteger(s))
}

function isZIPCode(s) {
	if (isEmpty(s)) 
		if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
		else return (isZIPCode.arguments[1] == true);
	return (isInteger(s) && 
			((s.length == digitsInZIPCode1) ||
			(s.length == digitsInZIPCode2)))
}

function isStateCode(s) {
		if (isEmpty(s)) 
		if (isStateCode.arguments.length == 1) return defaultEmptyOK;
		else return (isStateCode.arguments[1] == true);
	return ( (USStateCodes.indexOf(s) != -1) &&
			(s.indexOf(codeDelimiter) == -1) )
}

function isEmail(s) {
	if (isEmpty(s)) 
	if (isEmail.arguments.length == 1) return defaultEmptyOK;
	else return (isEmail.arguments[1] == true);

	else {
		return reEmail.test(s)
	}
}

function isYear(s) {
	if (isEmpty(s)) 
	if (isYear.arguments.length == 1) return defaultEmptyOK;
	else return (isYear.arguments[1] == true);
	if (!isNonnegativeInteger(s)) return false;
	return ((s.length == 2) || (s.length == 4));
}

function isIntegerInRange(s, a, b) {
	if (isEmpty(s)) 
	if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
	else return (isIntegerInRange.arguments[1] == true);

	if (!isInteger(s, false)) return false;

	var num = parseInt (s);
	return ((num >= a) && (num <= b));
}

function isMonth(s) {
	if (isEmpty(s)) 
	if (isMonth.arguments.length == 1) return defaultEmptyOK;
	else return (isMonth.arguments[1] == true);
	return isIntegerInRange (s, 1, 12);
}

function isDay(s) {
	if (isEmpty(s)) 
	if (isDay.arguments.length == 1) return defaultEmptyOK;
	else return (isDay.arguments[1] == true);   
	return isIntegerInRange (s, 1, 31);
}

function daysInFebruary(year) {
	return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate(year, month, day) {
	if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

	var intYear = parseInt(year);
	var intMonth = parseInt(month);
	var intDay = parseInt(day);

	if (intDay > daysInMonth[intMonth]) return false; 

	if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

	return true;
}

function checkString(theField, error, emptyOK) {
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (isWhitespace(theField.value)) {
		addError(error);
		return false;
	} else {
		return true;
	}
}

function checkStateCode(theField, error, emptyOK) {
	if (! error) error = eState;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  theField.value = theField.value.toUpperCase();
		if (!isStateCode(theField.value, false)) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function reformatZIPCode(ZIPString) {
	if (ZIPString.length == 5) return ZIPString;
	else return (reformat (ZIPString, "", 5, "-", 4));
}

function checkZIPCode(theField, error, emptyOK) {
	if (! error) error = eZip;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{ var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
		if (!isZIPCode(normalizedZIP, false))  {
			addError(error);
			return false;
		} else {
			theField.value = reformatZIPCode(normalizedZIP);
			return true;
		}
	}
}

function reformatUSPhone(USPhone, theField) {
	return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

function checkUSPhone(theField, error, emptyOK) {
	if (! error) error = ePhone;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
		if (!isUSPhoneNumber(normalizedPhone, false)) {
			addError(error);
			return false;
		} else {
			theField.value = reformatUSPhone(normalizedPhone)
			return true;
		}
	}
}

function checkInternationalPhone(theField, error, emptyOK) {
	if (! error) error = eIntPhone;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  if (!isInternationalPhoneNumber(theField.value, false)) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function checkEmail(theField, error, emptyOK) {
	if (! error) error = eEMail;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else if (!isEmail(theField.value, false)) {
		addError(error);
		return false;
	} else {
		return true;
	}
}

function reformatSSN(SSN) {
	return (reformat (SSN, "", 3, "-", 2, "-", 4))
}

function checkSSN(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
		if (!isSSN(normalizedSSN, false))  {
			addError(error);
			return false;
		} else {
			theField.value = reformatSSN(normalizedSSN)
			return true;
		}
	}
}

function checkYear(theField, emptyOK) {
	if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isYear(theField.value, false)) 
		return false;
	else return true;
}

function checkMonth(theField, emptyOK) {
	if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isMonth(theField.value, false)) 
		return false;
	else return true;
}

function checkDay(theField, emptyOK) {
	if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isDay(theField.value, false)) 
		return false;
	else return true;
}

function checkDate(yearField, monthField, dayField, error, OKtoOmitDay) { 
	if (checkDate.arguments.length == 4) OKtoOmitDay = false;
	if (!isYear(yearField.value)) addError(error); return false;
	if (!isMonth(monthField.value)) addError(error); return false;
	if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
	else if (!isDay(dayField.value)) {
		addError(error);
		return false;
	}
	if (isDate (yearField.value, monthField.value, dayField.value))
		return true;

	addError(error);
	return false
}

function checkCreditCard(typeField, theField, error) {
	if (! error) error = eCCNumber;
	var cardType = typeField.options[typeField.selectedIndex].text;
	var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
	if (!isCardMatch(cardType, normalizedCCN)) {
		addError(error);
		return false;
	} else {
		theField.value = normalizedCCN
		return true
	}
}

function isCreditCard(st) {
	if (st.length > 19)
		return (false);

	sum = 0; mul = 1; l = st.length;
	for (i = 0; i < l; i++) {
		digit = st.substring(l-i-1,l-i);
		tproduct = parseInt(digit ,10)*mul;
		if (tproduct >= 10)
			sum += (tproduct % 10) + 1;
		else
			sum += tproduct;
		if (mul == 1)
			mul++;
		else
			mul--;
	}

	if ((sum % 10) == 0)
		return (true);
	else
		return (false);
}

function isVisa(cc) {
	if (((cc.length == 16) || (cc.length == 13)) &&
		(cc.substring(0,1) == 4))
		return isCreditCard(cc);
	return false;
}

function isMasterCard(cc) {
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if ((cc.length == 16) && (firstdig == 5) &&
		((seconddig >= 1) && (seconddig <= 5)))
		return isCreditCard(cc);
	return false;
}

function isAmericanExpress(cc) {
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if ((cc.length == 15) && (firstdig == 3) &&
		((seconddig == 4) || (seconddig == 7)))
		return isCreditCard(cc);
	return false;
}

function isDinersClub(cc) {
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if ((cc.length == 14) && (firstdig == 3) &&
		((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
		return isCreditCard(cc);
	return false;
}

function isCarteBlanche(cc) {
	return isDinersClub(cc);
}

function isDiscover(cc) {
	first4digs = cc.substring(0,4);
	if ((cc.length == 16) && (first4digs == "6011"))
		return isCreditCard(cc);
	return false;
}

function isEnRoute(cc) {
	first4digs = cc.substring(0,4);
	if ((cc.length == 15) &&
		((first4digs == "2014") ||
		(first4digs == "2149")))
		return isCreditCard(cc);
	return false;
}

function isJCB(cc) {
	first4digs = cc.substring(0,4);
	if ((cc.length == 16) &&
		((first4digs == "3088") ||
		(first4digs == "3096") ||
		(first4digs == "3112") ||
		(first4digs == "3158") ||
		(first4digs == "3337") ||
		(first4digs == "3528")))
		return isCreditCard(cc);
	return false;
}

function isAnyCard(cc) {
	if (!isCreditCard(cc))
		return false;
	if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
		!isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
		return false;
	}
	return true;
}

function isCardMatch(cardType, cardNumber) {
	cardType = cardType.toUpperCase();
	var doesMatch = true;

	if ((cardType == "VISA") && (!isVisa(cardNumber)))
		doesMatch = false;
	if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") )
		&& (!isAmericanExpress(cardNumber))) doesMatch = false;
	if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	if ((cardType == "JCB") && (!isJCB(cardNumber)))
		doesMatch = false;
	if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
		doesMatch = false;
	if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
		doesMatch = false;
	if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
		doesMatch = false;
	return doesMatch;
}

function writeStates() {
	var selected = (writeStates.arguments.length == 1) ? writeStates.arguments[0] : USStateDefault;

	document.write('<select name=state>');
	
	aStateCodes = USStateCodes.split(codeDelimiter);
	aStates = USStates.split(codeDelimiter);
	for ( var x = 0; x < aStateCodes.length; x++ ) {
		if (aStateCodes[x] == selected) {
			document.write('<option value=\"'+ aStateCodes[x] + '\" selected>'+ aStates[x]);
		} else {
			document.write('<option value=\"'+ aStateCodes[x] + '\">'+ aStates[x]);
		}
	}
	
	document.write('</select>');
}

function writeCounties() {
	var selected = (writeCounties.arguments.length == 1) ? writeCounties.arguments[0] : CountyDefault;

	document.write('<select name=counties>');
	
	aCounties = UtahCounties.split(codeDelimiter);
	for ( var x = 0; x < aCounties.length; x++ ) {
		if (aCounties[x] == selected) {
			document.write('<option value=\"'+ aCounties[x] + '\" selected>'+ aCounties[x]);
		} else {
			document.write('<option value=\"'+ aCounties[x] + '\">'+ aCounties[x]);
		}
	}
	
	document.write('</select>');
}

function writeCC(name) {
	var selected = (writeCC.arguments.length == 2) ? writeCC.arguments[1] : CCTypeDefault;
	
	document.write('<select name='+ name +'>');
	
	aCCTypes = CCTypes.split(codeDelimiter);
	for ( var x = 0; x < aCCTypes.length; x++ ) {
		if (aCCTypes[x] == selected) {
			document.write('<option value=\"'+ aCCTypes[x] + '\" selected>'+ aCCTypes[x]);
		} else {
			document.write('<option value=\"'+ aCCTypes[x] + '\">'+ aCCTypes[x]);
		}
	}
	
	document.write('</select>');
}

function writeMonths(group) {
	var selected = (writeMonths.arguments.length == 2) ? writeMonths.arguments[1] : thisMonth;
	
	document.write('<select name=months_'+ group +' onChange=\"updateDays(\''+ group +'\', this.form)\">');
	
	aMonths = months.split(codeDelimiter);
	for ( var x = 0; x < aMonths.length; x++ ) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ aMonths[x]);
		} else {
			document.write('<option value=\"'+ x + '\">'+ aMonths[x]);
		}
	}
	
	document.write('</select>');
}

function writeDays(group) {
	var OKtoOmitDay = (writeDays.arguments.length == 2) ? true : false;
	var selected = (writeDays.arguments.length == 3) ? writeDays.arguments[2] : theDate.getDate();

	document.write('<select name=\"days_'+ group +'\">');
	if (OKtoOmitDay) {
		document.write('<option value=\"\">none');
	}

	for ( var x = 1; x < (daysInMonth[thisMonth] + 1); x++ ) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ x);
		} else {
			document.write('<option value=\"'+ x + '\">'+ x);
		}
	}
	
	document.write('</select>');
}

function writeYears(group, start, end) {
	var selected = (writeYears.arguments.length == 4) ? writeYears.arguments[3] : theDate.getFullYear();

	document.write('<select name=\"years_'+ group +'\" onChange=\"updateDays(\''+ group +'\', this.form)\">');
	
	for (x = start; x <= end; x++) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ x);
		} else {
			document.write('<option value=\"'+ x + '\">'+ x);
		}
	}
	
	document.write('</select>');
}

function updateDays(group, form) {
	var curYearField = eval(form.elements['years_' + group]);
	var curYear = curYearField.options[curYearField.selectedIndex].value;

	var curField = eval(form.elements['months_' + group]);
	var curMonth = (parseInt(curField.options[curField.selectedIndex].value) + 1);
	var totDays = (curMonth == 2) ? daysInFebruary(curYear): daysInMonth[curMonth];
	
	var curDayField = eval(form.elements['days_' + group]);
	var curSelectedDay = curDayField.options[curDayField.selectedIndex].value;
	
	var days = new Array();
	
	for (x = 0; x < (totDays + 1); x++) {
		days[x] = x;
	}
	
	curDayField.length = 0;
	for (x = 1; x < days.length; x++) {
		curDayField.options[x - 1] = new Option(days[x], days[x]);
	}
	
	var selected = (curSelectedDay <= days.length) ? (curSelectedDay - 1) : (days.length - 2);
	selected = (selected > 0 ) ? selected : 0;
	curDayField.selectedIndex = selected;
}

function writeSalutations() {
	var selected = (writeSalutations.arguments.length == 1) ? writeSalutations.arguments[0] : defaultPrefix;
	var aPrefixes = prefixes.split(codeDelimiter);
	
	document.write('<select name=\"salutation\">');
	
	for (x = 0; x <= aPrefixes.length - 1; x++) {
		if (x == selected) {
			document.write('<option value=\"'+ aPrefixes[x] + '\" selected>'+ aPrefixes[x]);
		} else {
			document.write('<option value=\"'+ aPrefixes[x] + '\">'+ aPrefixes[x]);
		}
	}
	
	document.write('</select>');
}

function writeSuffixes() {
	var selected = (writeSuffixes.arguments.length == 1) ? writeSuffixes.arguments[0] : defaultSuffix;
	var aSuffixes = suffixes.split(codeDelimiter);
	
	document.write('<select name=\"suffix\">');
	
	for (x = 0; x <= aSuffixes.length - 1; x++) {
		if (x == selected) {
			document.write('<option value=\"'+ aSuffixes[x] + '\" selected>'+ aSuffixes[x]);
		} else {
			document.write('<option value=\"'+ aSuffixes[x] + '\">'+ aSuffixes[x]);
		}
	}
	
	document.write('</select>');
}

function addError(s) {
	aError[iErrorCount] = s;
	iErrorCount++;
}

function returnError(newLine) {
	if (! newLine)
		newLine = '<br>'; //can also be '\n' or anything else you might need
	
	var sError = '';
	for (x=0; x < aError.length; x++) {
		sError += aError[x] + newLine;
	}
	
	aError = null;
	aError = new Array;
	iErrorCount = 0;
	
	return sError;
}

function hasErrors() {
	return (aError.length == 0) ? false : true;
}

function errorWindow(error, width, height, startHTML, endHTML) {
	if (! error) error = returnError();
	if (! width) width = 300;
	if (! height) height = 300;
	
	var posY = ( screen.availHeight - height ) / 2;
	var posX = ( screen.availWidth - width ) / 2;
	var features = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width='+ width +',height='+ height + ',top=' + posY + ',left=' + posX;
	var newWindow = window.open ("", "newWindow", features);
	
	if (startHTML) newWindow.document.write(startHTML);
	newWindow.document.write(error);
	if (endHTML) newWindow.document.write(endHTML);
}


function trim1(inputString) 
{
	if (typeof inputString != "string") 
	{
		return inputString; 
	}
	var retValue = inputString;
	var ch = retValue.substring(0, 1);
	while (ch == " ") 
	{ // Check for spaces at the beginning of the string
		retValue = retValue.substring(1, retValue.length);
		ch = retValue.substring(0, 1);
	}
	ch = retValue.substring(retValue.length-1, retValue.length);
	while (ch == " ") 
	{ // Check for spaces at the end of the string
		retValue = retValue.substring(0, retValue.length-1);
		ch = retValue.substring(retValue.length-1, retValue.length);
	}
	//while (retValue.indexOf(" ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
	//retValue = retVal
//}
return retValue;
}




var g_picks = new Array(6) ;
var g_nPicks = 0 ;
for(i=0;i<6;i++)
	g_picks[i] = -1 ;
	
function clicked( elem )
{
	// alert( btn ) ;
	var isPick = false ;
	var btn = elem.value ;
	for (i=0;i<6;i++)
		{
		if (g_picks[i] == btn)
			{
				g_picks[i] = -1 ;
				g_nPicks-- ;
				//alert(isPick)
				isPick = true ;
				elem.checked = false ;
			}
		}
	if (isPick == false)
		{
		if (g_nPicks == 6)
			{
			elem.checked = false ;
			alert( 'You have already selected six numbers.  Deselect a number to change.' );
			}
		else
			{
			for(i=0;i<6;i++)
				{
					if (g_picks[i] == -1)
						{
						g_picks[i] = btn ;
						g_nPicks++ ;
						//alert(g_picks[0]);
						i = 7 ;
						}
				}
			}
		}
}

function reset_picks()
{
	for( i=0;i<6;i++)
		{
		g_picks[i] = -1 ;
		}
		g_nPicks = 0 ;
		//window.document.forms[0].reset();
	for(i=0;i<window.document.forms[0].length;i++)
		{
		window.document.forms[0].elements[i].checked = false;
		}
		window.document.forms[0].elements['terms'].checked = true ;
	return false ;
}

function check_numbers()
{
	if (g_nPicks == 6)
		return true ;
	else
		{
		return false ;
		}
}

function random_pick()
{
	var rn ;
	var i, check ;

	// clear whatever was picked
	reset_picks();
	i = 0 ;
	rn = Math.round(Math.random()*93) ;
	rn++ ;
	g_picks[i] = rn ;
	i++ ;
	while( i<6 )
		{
		rn = Math.round(Math.random()*93) ;
		rn++ ;
		// Make sure no duplicates
		check = 0 ;
		for( j=0;j<i;j++ )
			{
			if (g_picks[j] == rn)
				check = 1 ;
			}
		if (check == 0)
			{
			g_picks[i] = rn ;
			i++ ;
			}
		} // while
	for(i=0;i<6;i++)
		{
		window.document.forms[0].elements[g_picks[i]].checked = true ;
		}
	g_nPicks = 6 ;
	window.document.forms[0].elements['terms'].checked = true ;
	//alert('dude' + g_picks[0]);
	return false ;
}
function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else { 
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}








function isValidEmail(email)
{
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}



function isValidEmail1233(emstr)
{
	var vEMailID=emstr
	var atPos= vEMailID.indexOf("@") + 1
	var lastDotPos= vEMailID.lastIndexOf(".") + 1
	var firstDotPos = vEMailID.indexOf(".") + 1
	var atInstances=0
	var dotInstances=0
	var test=0
	var inValid = new Array()
	var errorMessages = new Array()
	var errNo = 0
		
	for(var i=0;i<vEMailID.length;i++)
	{   
		if(vEMailID.charAt(i)=="@" )
		   atInstances+=1
		else if(vEMailID.charAt(i)==".")
		   dotInstances=1
		else if(vEMailID.charAt(i)=="!" || vEMailID.charAt(i)=="?" || vEMailID.charAt(i)==":" || vEMailID.charAt(i)==";" || vEMailID.charAt(i)=="#")
		   test=1
	}

	inValid[errNo] = (atInstances==0)
	errorMessages[errNo] = "@ symbol is missing"
	errNo++

	inValid[errNo] = (dotInstances==0)
	errorMessages[errNo] = ". symbol is missing"
	errNo++
///////////////

	inValid[errNo] = (test==1)
	errorMessages[errNo] = ". symbol is missing"
	errNo++

/////////////////
	inValid[errNo] = (atInstances>1)
	errorMessages[errNo] = "@ symbol should not repeat"
	errNo++

	inValid[errNo] = (Math.abs(firstDotPos-atPos)==1)
	errorMessages[errNo] = "@ and . symbols can't come together"
	errNo++

	inValid[errNo] = ((lastDotPos-atPos)<=1)
	errorMessages[errNo] = ". symbol is missing"
	errNo++

	inValid[errNo] = (atPos==vEMailID.length)
	errorMessages[errNo] = "@ symbol can't appear at end"
	errNo++

	inValid[errNo] = (lastDotPos==vEMailID.length)
	errorMessages[errNo] = ". symbol can't appear at end"
	errNo++

	inValid[errNo] = (atPos==0)
	errorMessages[errNo] = "@ symbol is missing"
	errNo++

	inValid[errNo] = (atPos==1)
	errorMessages[errNo] = "@ symbol should not appear at first position"
	errNo++

	inValid[errNo] = (firstDotPos==0)
	errorMessages[errNo] = ". symbol is missing"
	errNo++

	inValid[errNo] = (firstDotPos==1)
	errorMessages[errNo] = ". symbol should not appear at first position"
	errNo++

	inValid[errNo] = (vEMailID.indexOf(" ")>=0)
	errorMessages[errNo] = "E-mail can't contain blank spaces."
	errNo++

	inValid[errNo] = (vEMailID.indexOf("/")>=0) || (vEMailID.indexOf("\\")>=0)
	errorMessages[errNo] = "E-mail can't contain \\ or /"
	errNo++

	var fullErrorMessage = "Invalid " + name + " email address.\n"
	for(var ind=0; ind<errNo; ind++)
	{
		if(inValid[ind])
		{
			fullErrorMessage += errorMessages[ind] + "\n"
//			alert(fullErrorMessage)			
			return false
		}
	}
		var SingleQuotePos = vEMailID.indexOf("'") 
		if(SingleQuotePos!=-1)
		{
					//alert("Enter valid characters.Single Quotes ( ' ) are not allowed.")					
					return false

		} 
	return true;
	
}




/* Date format mm/dd/yyyy */
function checkBirthDate(dt)
{
	var reg = new RegExp("[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$");
	if(reg.test(dt))
	{	
		var datepart = dt.split("/");
		for(i=0;i<datepart.length;i++)
			datepart[i] = parseInt(parseFloat(datepart[i]));
		if(datepart[1] > 31 || datepart[0] > 12)
			return false;
		else if((datepart[0] == 4 || datepart[0] == 6 || datepart[0] == 9 || datepart[0] == 11) && datepart[1] == 31)
			return false;	
		else if(datepart[0] == 2)
		{
			if(datepart[1] > 29)
				return false;
			if(!LeapYear(datepart[2]) && datepart[1] == 29)
				return false;
		}
		return true;						
	}
	return false;			
}

function isValidDate(dateStr) {
				var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
				var matchArray = dateStr.match(datePat); // is the format ok?
				if (matchArray == null) {
				alert(dateStr + " Date is not in a valid format.")
				return false;
			}
			month = matchArray[1]; // parse date into variables
			day = matchArray[3];
			year = matchArray[4];
			if (month < 1 || month > 12) { // check month range
			alert("Month must be between 1 and 12.");
			return false;
			}
			if (day < 1 || day > 31) {
			alert("Day must be between 1 and 31.");
			return false;
			}
			if ((month==4 || month==6 || month==9 || month==11) && day==31) {
			alert("Month "+month+" doesn't have 31 days!")
			return false;
			}
			if (month == 2) { // check for february 29th
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) {
			alert("February " + year + " doesn't have " + day + " days!");
			return false;
			   }
			}
			return true;
			}

			function isValidTime(timeStr) {
					// Time validation function courtesty of 
					// Sandeep V. Tamhankar (stamhankar@hotmail.com) -->

					// Checks if time is in HH:MM:SS AM/PM format.
					// The seconds and AM/PM are optional.

			var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

			var matchArray = timeStr.match(timePat);
			if (matchArray == null) {
			alert("Time is not in a valid format.");
			return false;
			}
			hour = matchArray[1];
			minute = matchArray[2];
			second = matchArray[4];
			ampm = matchArray[6];

			if (second=="") { second = null; }
			if (ampm=="") { ampm = null }

			if (hour < 0  || hour > 23) {
			alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
			return false;
			}
			if (hour <= 12 && ampm == null) {
			if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			alert("You must specify AM or PM.");
			return false;
			   }
			}
			if  (hour > 12 && ampm != null) {
			alert("You can't specify AM or PM for military time.");
			return false;
			}
			if (minute < 0 || minute > 59) {
			alert ("Minute must be between 0 and 59.");
			return false;
			}
			if (second != null && (second < 0 || second > 59)) {
			alert ("Second must be between 0 and 59.");
			return false;
			}
			return true;
			}

function dateDiff(m,d,y) {
			date1 = new Date();
			date2 = new Date();
			diff  = new Date();

			//if (isValidDate(dateform.firstdate.value))// && isValidTime(dateform.firsttime.value)) { // Validates first date 
			date1temp = new Date()// + " " + dateform.firsttime.value);
			date1.setTime(date1temp.getTime());
			//}
			//else return false; // otherwise exits

			//if (isValidDate(dateform.seconddate.value))// && isValidTime(dateform.secondtime.value)) { // Validates second date 
			date2temp = new Date(m+"/"+d+"/"+y);
			date2.setTime(date2temp.getTime());
			//}
			//se return false; // otherwise exits

			// sets difference date to difference of first date and second date

			diff.setTime(date1.getTime() - date2.getTime());

			timediff = diff.getTime();

			weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
			timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

			days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
			timediff -= days * (1000 * 60 * 60 * 24);

			hours = Math.floor(timediff / (1000 * 60 * 60)); 
			timediff -= hours * (1000 * 60 * 60);

			mins = Math.floor(timediff / (1000 * 60)); 
			timediff -= mins * (1000 * 60);

			secs = Math.floor(timediff / 1000); 
			timediff -= secs * 1000;

			 str=weeks*7;
			 str=str+days
			 days1=str
			 //str=str/366;
			 days1=days1+4
			 
			 //alert(weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds");
			return (Math.round(days1));
			//return false; // form should never submit, returns false
			}


function suycDateDiff( start, end, interval, wholedays ) {

    var iOut = 0;
    
    // Create 2 error messages, 1 for each argument. 
    var startMsg = "Check the Start Date and End Date\n"
        startMsg += "must be a valid date format.\n\n"
        startMsg += "Please try again." ;
		
    var intervalMsg = "Sorry the dateAdd function only accepts\n"
        intervalMsg += "d, h, m OR s intervals.\n\n"
        intervalMsg += "Please try again." ;

    var bufferA = Date.parse( start ) ;
    var bufferB = Date.parse( end ) ;
    	
    // check that the start parameter is a valid Date. 
    if ( isNaN (bufferA) || isNaN (bufferB) ) {
        alert( startMsg ) ;
        return null ;
    }
	
    // check that an interval parameter was not numeric. 
    if ( interval.charAt == 'undefined' ) {
        // the user specified an incorrect interval, handle the error. 
        alert( intervalMsg ) ;
        return null ;
    }
    
    var number = bufferB-bufferA ;
    
    // what kind of add to do? 
    switch (interval.charAt(0))
    {
        case 'd': case 'D': 
            iOut = parseInt(number / 86400000) ;
            if(wholedays) iOut += parseInt((number % 86400000)/43200001) ;
            break ;
        case 'h': case 'H':
            iOut = parseInt(number / 3600000 ) ;
            if(wholedays) iOut += parseInt((number % 3600000)/1800001) ;
            break ;
        case 'm': case 'M':
            iOut = parseInt(number / 60000 ) ;
            if(wholedays) iOut += parseInt((number % 60000)/30001) ;
            break ;
        case 's': case 'S':
            iOut = parseInt(number / 1000 ) ;
            if(wholedays) iOut += parseInt((number % 1000)/501) ;
            break ;
        default:
        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error. 		
        alert(intervalMsg) ;
        return null ;
    }
    
    return iOut ;
}



// The presentDate function is called on when you 
// click on the button on the form.
function presentDate(f) {
    var ierr = 1 ;
    
   // Verify whether the user wants to return only whole
   // intervals or intervals rounded to the nearest number 
   // of interval.
   var roundDays = false;
	
       
   // Verify that the user entered something in the
   // Start Date input box.
        	if(!isNaN(Date.parse( f))) {
	            var s = new Date(Date.parse(f)) ;
        	    ierr = 0 ;
	        }
    
    
   // Verify that the user entered something in the
   // Ending Date input box.
    
            var e = new Date() ;
            var temp = suycDateDiff( s, e,'d', true) ;
    
    // update the tellTime field with our new value.
    return temp.toString() ;
}

function isEmpty1(val)
{   
	for(var i=0;i<val.length;i++)
	{
		if(val.charAt(i) != ' ')
		{
			return false;
		}
	}
	return true;
}

function checkall(frm,bname)
{
	if(frm.tickall.checked)
	{
		for(i=0;i<frm.elements.length;i++)
		{
			if(frm.elements[i].type=="checkbox" && frm.elements[i].name=="bname")
			{
				frm.elements[i].checked=true
			}
		}
	}
	else
	{
		for(i=0;i<frm.elements.length;i++)
		{
			for(i=0;i<frm.elements.length;i++)
			{
				if(frm.elements[i].type=="checkbox" && frm.elements[i].name=="bname")
				{
					frm.elements[i].checked=false
				}
			}
		}
	}
}
	