function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function vDateKey(obj) {
	var DateString, DatePattern, DateArray, nDay, nMaxDay, nMonth, nYear, cMonth, cDay
	var Dateobject = new Date();
	DateString = obj.value;
	if (DateString.length > 0) {
		DatePattern = /^(\d{1,2}|$)([^a-zA-Z0-9]|$)(\d{1,2}|$)([^a-zA-Z0-9]|$)(\d{1,4}|$)$/;
		DateArray = DateString.match(DatePattern);
		if (DateArray == null) {
			DatePattern = /^(\d{1,2}|$)(\d{1,2}|$)(\d{1,4}|$)$/;
			DateArray = DateString.match(DatePattern);
			if (DateArray == null) {
				obj.value = Left(obj.value, obj.value.length-1);
				obj.focus;
				vDateKey(obj);
			}
		}
	}
}

function vDate(obj) {
	var DateString, DatePattern, DateArray, nDay, nMaxDay, nMonth, nYear, cMonth, cDay
	var Dateobject = new Date();

	DateString = obj.value;
	if (DateString.length > 0) {
		DatePattern = /^(\d{1,2})([^a-zA-Z0-9])(\d{1,2})([^a-zA-Z0-9])(\d{2}|\d{4}|$)$/;
		DateArray = DateString.match(DatePattern);
		if (DateArray == null) {
			DatePattern = /^(\d{1,2})(\d{1,2})(\d{2}|\d{4}|$)$/;
			DateArray = DateString.match(DatePattern);
			if (DateArray == null) {
				alert("Please enter in a valid date.")
				obj.value = "";
				return false;
			} else {
				nMonth = DateArray[1];
				nDay = DateArray[2];
				if (DateArray.length < 3) {
					nYear = Dateobject.getFullYear();
				} else {
					nYear = DateArray[3];
				}
			}
		} else {
			nMonth = DateArray[1];
			nDay = DateArray[3];
			if (DateArray.length < 5) {
				nYear = Dateobject.getFullYear();
			} else {
				nYear = DateArray[5];
			}
		}

		nMaxDay = 31
		if ((nMonth==4 || nMonth==6 || nMonth==9 || nMonth==11)) {
			nMaxDay = 30
		}
		if (nMonth==2) {
			if (nYear % 4 == 0 && (nYear % 100 != 0 || nYear % 400 == 0)) {
				nMaxDay = 29
			} else {
				nMaxDay =28
			}
		}

		if (nDay < 1) {
			nDay = 1;
		}
		if (nDay > nMaxDay) {
			nDay = nMaxDay;
		}

		if (nMonth < 1) {
			nMonth = 1;
		}
		if (nMonth > 12) {
			nMonth = 12;
		}

		if (nYear <= 0) {
			nYear = Dateobject.getFullYear();
		}

		if (nMonth.toString().length == 1) {
			cMonth = "0" + nMonth.toString();
		} else {
			cMonth = nMonth.toString();
		}

		if (nDay.toString().length == 1) {
			cDay = "0" + nDay.toString();
		} else {
			cDay = nDay.toString();
		}

		if (nYear.toString().length == 2) {
			cYear = "20" + nYear.toString();
		} else {
			cYear = nYear.toString();
		}

		obj.value = cMonth + "/" + cDay + "/" + cYear;
	}
	return true;
}

function vEmail(obj) {
	var emailReg = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	if (emailReg.test(obj.value) == false) {
		alert("Please enter in a valid email address.");
		obj.value = "";
		return false;
	}
	return true;
}

function vPhoneKey(obj) {
	var PhoneString, PhonePattern, PhoneArray
	PhoneString = obj.value;
	if (PhoneString.length > 0) {
		PhonePattern = /^([a-zA-Z0-9]{3}|[a-zA-Z0-9]{0,2}$)([^a-zA-Z0-9]{1}|$)([a-zA-Z0-9]{3}|[a-zA-Z0-9]{0,2}$)([^a-zA-Z0-9]{1}|$)([a-zA-Z0-9]{4}|[a-zA-Z0-9]{0,3}$)$/;
		PhoneArray = PhoneString.match(PhonePattern);
		if (PhoneArray == null) {
			PhonePattern = /^([a-zA-Z0-9]{3}|[a-zA-Z0-9]{0,2}$)([a-zA-Z0-9]{3}|[a-zA-Z0-9]{0,2}$)([a-zA-Z0-9]{4}|[a-zA-Z0-9]{0,3}$)$/;
			PhoneArray = PhoneString.match(PhonePattern);
			if (PhoneArray == null) {
				obj.value = Left(obj.value, obj.value.length-1);
				obj.focus();
				vPhoneKey(obj);
			}
		}
	}
}

function vPhone(obj) {
	var PhoneString, PhonePattern, PhoneArray
	PhoneString = obj.value;
	if (PhoneString.length > 0) {
		PhonePattern = /^([a-zA-Z0-9]{3})([^a-zA-Z0-9]{1})([a-zA-Z0-9]{3})([^a-zA-Z0-9]{1})([a-zA-Z0-9]{4})$/;
		PhoneArray = PhoneString.match(PhonePattern);
		if (PhoneArray == null) {
			PhonePattern = /^([a-zA-Z0-9]{3})([a-zA-Z0-9]{3})([a-zA-Z0-9]{4})$/;
			PhoneArray = PhoneString.match(PhonePattern);
			if (PhoneArray == null) {
				alert("Please enter in a valid phone number.");
				obj.value = "";
				return false;
			}
			else {
				obj.value = PhoneArray[1] + "-" + PhoneArray[2] + "-" + PhoneArray[3];
			}
		}
		else {
			obj.value = PhoneArray[1] + "-" + PhoneArray[3] + "-" + PhoneArray[5];
		}
	}
	return true;
}

function vZipKey(obj) {
	var ZipString, ZipPattern, ZipArray
	ZipString = obj.value;
	if (ZipString.length > 0) {
		ZipPattern = /^([0-9]{5}|[0-9]{0,4}$)([^a-zA-Z0-9]{1}|$)([0-9]{4}|[0-9]{0,3}$)$/;
		ZipArray = ZipString.match(ZipPattern);
		if (ZipArray == null) {
			ZipPattern = /^([0-9]{5}|[0-9]{0,4}$)$/;
			ZipArray = ZipString.match(ZipPattern);
			if (ZipArray == null) {
				obj.value = Left(obj.value, obj.value.length-1);
				obj.focus();
				vZipKey(obj);
			}
		}
	}
}

function vZip(obj) {
	var ZipString, ZipPattern, ZipArray
	ZipString = obj.value;
	if (ZipString.length > 0) {
		ZipPattern = /^([0-9]{5})([^a-zA-Z0-9])([0-9]{4})$/;
		ZipArray = ZipString.match(ZipPattern);
		if (ZipArray == null) {
			ZipPattern = /^([0-9]{5})$/;
			ZipArray = ZipString.match(ZipPattern);
			if (ZipArray == null) {
				alert("Please enter in a valid zip code.");
				obj.value = "";
				return false;
			}
			else {
				obj.value = ZipArray[1]
			}
		}
		else {
			obj.value = ZipArray[1] + "-" + ZipArray[3]
		}
	}
}

function vNumeric(obj) {
	if (isNaN(obj.value) == true) {
		obj.value = Left(obj.value, obj.value.length-1);
		vNumeric(obj);
	}
}

function swap(oitemone, oitemtwo) {
	ctemptext = oitemone.text;
	ctempvalue = oitemone.value;
	oitemone.text = oitemtwo.text;
	oitemone.value = oitemtwo.value;
	oitemtwo.text = ctemptext;
	oitemtwo.value = ctempvalue;
}

function insert(olist, oitem) {
	j = 0;
	clength = olist.length;
	while (j < clength) {
		if (olist.options[j].text > oitem.text) {
			cswap = swap(olist.options[j], oitem);
		}
		j = j + 1;
	}
	olist.options.add(oitem);
}

function vTextarea(oField, nMaxLength, nLines) {
	if (oField.value.length > nMaxLength) {
		oField.value = Left(oField.value, nMaxLength);
		alert("There is maximum length of " + nMaxLength);
	}
	aStr = oField.value.split(String.fromCharCode(13, 10));
	if (aStr.length == 1) {
		aStr = oField.value.split(String.fromCharCode(13));
	}
	if (aStr.length == 1) {
		aStr = oField.value.split(String.fromCharCode(10));
	}
	if (aStr.length > nLines) {
		newValue = "";
		for (var x = 0; x < aStr.length; x++) {
   		if (aStr[x].length > 0) {
   			if (x < nLines -1) {
   				newValue = newValue + aStr[x] + String.fromCharCode(13);
   			}
   			if (x >= nLines - 1) {
   				newValue = newValue + aStr[x];
   			}
   		}
   	}
		oField.value = newValue;
	}
}
