function isValid(oInput, sType) {
	//Create regular expressions for each type of validation
	var regPhone = /^\d{3}\-\d{3}\-\d{4}$|^\d{10}$/;
	var regEmail = /^[a-z][a-z_0-9\.]+@[a-z_0-9\.\-]+\.[a-z]{2,3}$/i;
	var regSSN = /^\d{3}\-\d{2}\-\d{4}$|^\d{9}$/;
	var regZip = /^\d{5}$|^\d{5}\-\d{4}$/;
	var regDate = /^([0-1]?\d\/[0-3]?\d\/\d\d\d\d,?)+$/;
	var regNumber = /^[1-9]\d*$/;
	var regText = /^[a-zA-Z\s]*$/;
	
	var regSource;
	var sAlert;

	if (sType == "phone") {
		sAlert = "Please enter a valid phone number: ###-###-#### or ##########.";
		regSource = regPhone;
	}
	else if (sType == "email") {
		sAlert = "Please enter a valid email address.";
		regSource = regEmail;
	}
	else if (sType == "ssn") {
		sAlert = "Please enter a valid Social Security Number: ###-##-#### or #########.";
		regSource = regSSN;
	}
	else if (sType == "zip") {
		sAlert = "Please enter a valid zip code: ##### or #####-####.";
		regSource = regZip;
	}
	else if (sType == "date") {
		sAlert = "Please enter a valid date: ##/##/####, or multiple dates separated by commas (no spaces).";
		regSource = regDate;
	}
	else if (sType == "number") {
		sAlert = "Please enter a value in the correct format (ex. 10000, not $10,000).";
		regSource = regNumber;
	}
	else if (sType == "text") {
		sAlert = "Please enter valid text without numbers or symbols.";
		regSource = regText;
	}
	else if (sType == "URL") {
		if (oInput.value.substring(0, 7) != "http://")
			oInput.value = "http://" + input.value;
		return true;
	}
	else if (isFinite(sType)) {
		if (oInput.value.length > sType) {
			var sPlural = new String();
			if(sType > 1)
				sPlural = "s";
			alert("Please limit your text to " + sType + " character" + sPlural + ".");
			oInput.focus();
			oInput.select();
			return false;
		}
		else
			return true;
	}
	else
		return true;
	
	if ((regSource.test(trim(oInput.value))) || (trim(oInput.value).length == 0))
		return true;
	else {
		alert(sAlert);
		oInput.focus();
		oInput.select();
		return false;
	}
}

function checkRequiredFields(oForm) {
	var iFirstComma, iSecondComma;
	var oField, sField, sFieldName, sFieldLabel, sValidationType;
	var bValid = true;
	var sRadio;

	var aRequiredFields = new Array();
	var sRequiredFields = new String(oForm.RequiredFields.value);

	aRequiredFields = sRequiredFields.split(";");
	for(var x=0; x<aRequiredFields.length; x=x+1) {
		sField = aRequiredFields[x];
		iFirstComma = sField.indexOf(",");
		iSecondComma = sField.indexOf(",", iFirstComma + 1);

		sFieldName = sField.substring(0, iFirstComma);
		sFieldLabel = sField.substring(iFirstComma + 1, iSecondComma);
		sValidationType = sField.substring(iSecondComma + 1, sField.length);
		oField = findInputObject(oForm, sFieldName);

		if(sFieldLabel.length > 0) {
			if(oField.type == "radio") {
				if(findRadioValue(oForm.name, sFieldName).length == 0) {
					bValid = false;
					break;
				}
			}
			else if(oField.type == "checkbox") {
				if(oField.checked == false) {
					bValid = false;
					break;
				}
			}
			else if(trim(oField.value).length == 0) {
				bValid = false;
				break;
			}
		}

		if(sValidationType.length > 0) {
			if(!isValid(oField, sValidationType))
				return false;
		}
	}

	if(!bValid) {
		alert("Please fill out the " + sFieldLabel + " field and try again.");
		oField.focus();
		return false;
	}
	else
		return true;
}

function findInputObject(oForm, sFieldName) {
	aElements = oForm.elements;
	for(var x=0; x<aElements.length; x++) {
		if(aElements[x].name == sFieldName)
			return aElements[x];
	}
}

function findRadioValue(sFormName, sRadioName) {
	sRadio = "document." + sFormName + "." + sRadioName;
	for(var x=0; x<eval(sRadio + ".length"); x++) {
		if(eval(sRadio + "[" + x + "].checked"))
			return eval(sRadio + "[" + x+ "].value");
	}
	return "";
}

function trim(sInput){
	var iStart = 0;
	var iEnd = sInput.length - 1;
	while(sInput.charAt(iStart) == ' ')
		iStart++;	
	while(sInput.charAt(iEnd) == ' ')
		iEnd--;
	if(iStart > iEnd)
		return '';
	return sInput.substring(iStart, iEnd + 1);
}

function calculate() {
	iEmp = document.frmCalculate.employees.value;
	iCost = document.frmCalculate.cost.value;
	iTime = document.frmCalculate.time.value;
	
	if(isFinite(iEmp) && isFinite(iCost) && isFinite(iTime)) {
		document.frmCalculate.day.value = (iEmp*iCost*iTime/5).toCurrency();
		document.frmCalculate.week.value = (iEmp*iCost*iTime).toCurrency();
		document.frmCalculate.year.value = (iEmp*iCost*iTime*47).toCurrency();
	}
}

String.prototype.insert = function(chr, pos) 
    { 
            return this.substring(0,pos) + chr + this.substring(pos); 
    } 
        
Number.prototype.toCurrency = function(sym) 
    { 
        var symbol = sym ? sym : "$"; // default to dollars 
        var num = this.toFixed(2); 
        var negative = this < 0; 


        if(negative) num = num.substring(1); 


        // this next section inserts commas -- 
        // comment it out if they are not rerquired 


        var i = num.indexOf(".") - 3;  // location for first comma 
        while(i > 0) 
                { 
                        num = num.insert(",", i); 
                        i -= 3; 
                } 
        // end insert commas 


        return (negative ? "-" : "") + symbol + num; 
    } 