﻿function validateSpecialCharsASCII(keyASCII) {
// validates for delete or backspace key being pressed
	return ((keyASCII == 0 || keyASCII == 8));
}

function validateNumericASCII(keyASCII) {
// validate for a number [0-9]
	return (keyASCII >= 48 && keyASCII <= 57);
}

function validateAlphabeticASCII(keyASCII) {
// validate for an alphabetic character [a-zA-Z]
	return ((keyASCII >= 65 && keyASCII <= 90) || (keyASCII >= 97 && keyASCII <= 122));
}

function validateNumericKeyPress(e) {			
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validateAlphabeticKeyPress(e) {
// allows characters [A-Za-z-' ]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateAlphabeticASCII(keyASCII)  || validateSpecialCharsASCII(keyASCII) || keyASCII == 45 || keyASCII == 39 || keyASCII == 32) {
		return true;
	}
	else {
		return false;
	}
}

function validateAddressKeyPress(e) {
// allows characters [A-Za-z-'. ]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || validateAlphabeticASCII(keyASCII) || keyASCII == 45 || keyASCII == 39 || keyASCII == 46 || keyASCII == 32 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validateStateKeyPress(e) {
// allows characters [A-Za-z-' ]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateAlphabeticASCII(keyASCII) || keyASCII == 45 || keyASCII == 39 || keyASCII == 32 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validateUSPostalKeyPress(e) {
// allows characters [0-9-]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || keyASCII == 45 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {		
		return false;
	}
}

function validateCanadianPostalKeyPress(e) {
// allows characters [0-9A-Za-z]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || validateAlphabeticASCII(keyASCII) || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validateOtherPostalKeyPress(e) {
// allows characters [0-9A-Za-z-]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || validateAlphabeticASCII(keyASCII) || keyASCII == 45 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validatePhoneKeyPress(e) {
// allows characters [0-9-]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || keyASCII == 45 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function validateEmailKeyPress(e) {
// allows characters [A-Za-z0-9._-@]
	var keyASCII = window.event ? e.keyCode : e.which;
	
	if (validateNumericASCII(keyASCII) || validateAlphabeticASCII(keyASCII) || keyASCII == 45 || keyASCII == 46 || keyASCII == 64 || keyASCII == 95 || validateSpecialCharsASCII(keyASCII)) {
		return true;
	}
	else {
		return false;
	}
}

function blockSemiColon(e) {
	var keyASCII = window.event ? e.keyCode : e.which;
		
	return (keyASCII != 59);	
}

function popupWindow (target, width, height) {
	popupWin = window.open(target, 'popupWin', 'toolbar=no,location=no,scrollbars=no,status=yes,width=' + width + ',height=' + height)
}

function encodeHtml(text) {
	return text.replace(/&/gi, '&amp;').replace(/\"/gi, '&quot;').replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
}

function decodeHtml(text) {
	return text.replace(/&gt;/gi, '>').replace(/&lt;/gi, '<').replace(/&quot;/gi, '"').replace(/&amp;/gi, '&');
}

function validAlphabetic(fieldValue) {
	// determines if alphabetic field value is valid
	var reTest = new RegExp('^[a-zA-Z\\-\' ]+$', 'gi');
	return reTest.test(fieldValue);	
}

function validAddress(fieldValue) {
	// determines if address field value is valid
	var reTest = new RegExp('^[\\da-zA-Z\\-\'. ]+$', 'gi');
	return reTest.test(fieldValue);	
}

function validState(fieldValue) {
	// determines if state field value is valid
	var reTest = new RegExp('^[a-zA-Z\\-\' ]+$', 'gi');
	return reTest.test(fieldValue);	
}

function validUSPostal(fieldValue) {
	// determines if US postal code field value is valid	
	var reTest = new RegExp('^\\d{5}([\\-]\\d{4})?$', 'gi');
	return reTest.test(fieldValue);	
}

function validCanadianPostal(fieldValue) {
	// determines if Canadian postal code field value is valid
	var reTest = new RegExp('^[\\dA-Za-z]{6}$', 'gi');
	return reTest.test(fieldValue);	
}

function validOtherPostal(fieldValue) {
	// determines if other postal code field value is valid
	var reTest = new RegExp('^[\\dA-Za-z\\-]+$', 'gi');
	return reTest.test(fieldValue);	
}

function validPhone(fieldValue) {
	// determines if phone field value is valid
	var reTest = new RegExp('^[\\d\\-]+$', 'gi');
	return reTest.test(fieldValue);	
}

function validEmail(email) {
	// determines if email address is valid
	var reTest = new RegExp('^[A-Za-z0-9._-]+@(?:[A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$', 'gi');
	return reTest.test(email);
}

function validPassword(fieldValue) {
	// determines if password is valid
	var reTest = new RegExp('.{6,30}$', 'gi');
	var returnVal = false;
	
	if (reTest.test(fieldValue)) {		
		var reTest2 = new RegExp('[a-zA-Z]+', 'gi');
		
		if (reTest2.test(fieldValue)) {		
			var reTest3 = new RegExp('[0-9]+', 'gi');
			
			if (reTest3.test(fieldValue)) {			
				returnVal = true;
			}
		}
	}
	
	return returnVal;
}

//DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
function isInteger(s) {
	var i;

	for (i = 0; i < s.length; i++) {
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < '0') || (c > '9'))) {
			return false;
		}		
	}
	
	// All characters are numbers.
	return true;
}

function stripCharsInBag(s, bag){
	var i;
	var returnString = '';
	
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	
	return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i == 4 || i == 6 || i == 9 || i == 11) {
			this[i] = 30;
		}
		if (i == 2) {
			this[i] = 29;
		}
   }
   
   return this;
}

function isDate(dtStr,errStr){
	var dtCh= '/';
	var minYear=1900;
	var maxYear=2100;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh, (pos1 + 1));
	var strMonth=dtStr.substring(0, pos1);
	var strDay=dtStr.substring((pos1 + 1), pos2);
	var strYear=dtStr.substring((pos2 + 1));
	
	strYr = strYear;
	
	if (strDay.charAt(0) == '0' && strDay.length > 1) {
		strDay=strDay.substring(1);
	}
	if (strMonth.charAt(0) == '0' && strMonth.length > 1) {
		strMonth=strMonth.substring(1);
	}
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0) == '0' && strYr.length > 1) {
			strYr = strYr.substring(1);
		}
	}
	
	month = parseInt(strMonth);
	day = parseInt(strDay);
	year = parseInt(strYr);
	
	if (pos1 == -1 || pos2 == -1) {
		return false;
	}
	if (strMonth.length < 1 || month < 1 || month > 12) {
		return false;
	}
	if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
		return false;
	}
	if (strYear.length != 4 || year == 0 || year < minYear || year > maxYear) {
		return false;
	}
	if (dtStr.indexOf(dtCh, (pos2 + 1)) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false) {
		return false;
	}
	
	return true;
}