function getNumber(strInput) {
	var pattern = new RegExp("[^1234567890\.]","g");
	var theNumber = strInput.replace(pattern, "");
	return(theNumber);
}


function isEmpty(elem, helperMsg){
	if(elem.value.length == 0){
		alert(helperMsg);
		elem.focus(); // set the focus to this input
        return true;
        }
	return false;
}

/* this function is called as follows 
<input type="reset" value="Reset">
<input type="button" value="Clear All" onclick="clear_form_elements(this.form)">
*/
function clear_form_elements(ele) {

    tags = ele.getElementsByTagName('input');
    for(i = 0; i < tags.length; i++) {
        switch(tags[i].type) {
            case 'password':
            case 'text':
                tags[i].value = '';
                break;
            case 'checkbox':
            case 'radio':
                tags[i].checked = false;
                break;
        }
    }
   
    tags = ele.getElementsByTagName('select');
    for(i = 0; i < tags.length; i++) {
        if(tags[i].type == 'select-one') {
            tags[i].selectedIndex = 0;
        }
        else {
            for(j = 0; j < tags[i].options.length; j++) {
                tags[i].options[j].selected = false;
            }
        }
    }

    tags = ele.getElementsByTagName('textarea');
    for(i = 0; i < tags.length; i++) {
        tags[i].value = '';
    }
   
}
	
		
function getF_percent() {
			num = Number(document.employee_cost.hour_week.value) / Number(document.employee_cost.full_time.value) * 100;
			str1 = num.toFixed(2);
			document.employee_cost.f_percent.value = str1.concat('%');
}

function validateWages() {
	isEmpty(document.employee_cost.hour_week, "You must enter weekly hours before starting this section");
	isEmpty(document.employee_cost.hour_rate, "You must enter an hourly rate before starting this section");
}

function validateRequired() {
	isEmpty(document.employee_cost.rate_suta, "You must enter a SUTA rate to calculate the summary");
	isEmpty(document.employee_cost.rate_comp, "You must enter a workers' comp rate to calculate the summary");
}

function checkOT() {
	if(Number(document.employee_cost.hour_week.value) > 40) {
		document.employee_cost.ot_warning.value = 'You have indicated this employee will always have overtime. This form does not account for time and a half pay. You can still use it, but the numbers for annual wages, paid time off, and workers\' comp may be wrong.';
	}
	else if(Number(document.employee_cost.full_time.value) > 40) {
		document.employee_cost.ot_warning.value = 'You have indicated full time is over 40 hours. This form does not account for time and a half pay. You can still use it, but the numbers for annual wages, paid time off, and workers\' comp may be wrong.';
	}
	else {
		document.employee_cost.ot_warning.value = '';
	}
}

function getTimeOff() {
	
	num = Number(document.employee_cost.hour_week.value) * 52;
	document.employee_cost.tot_annual_hours.value = num.toFixed(2);
	
	num = Number(document.employee_cost.hour_week.value) * Number(document.employee_cost.hour_rate.value) * 52;
	document.employee_cost.pay_total.value = num.toFixed(2);

	num = Number(document.employee_cost.breaks_year.value)
		+ Number(document.employee_cost.vac_year.value)
		+ Number(document.employee_cost.sick_year.value)
		+ Number(document.employee_cost.hol_year.value)
		+ Number(document.employee_cost.pd_other_year.value);
	document.employee_cost.tot_time_off.value = num.toFixed(2);
	
	num = Number(document.employee_cost.tot_annual_hours.value) - Number(document.employee_cost.tot_time_off.value);
	document.employee_cost.tot_working.value = num.toFixed(2);
	
	num = Number(document.employee_cost.breaks_year.value)
		+ Number(document.employee_cost.vac_year.value)
		+ Number(document.employee_cost.sick_year.value)
		+ Number(document.employee_cost.hol_year.value)
		+ Number(document.employee_cost.pd_other_year.value);
	document.employee_cost.tot_time_off.value = num.toFixed(2);
	
	num = Number(document.employee_cost.tot_annual_hours.value) - Number(document.employee_cost.tot_time_off.value);
	document.employee_cost.tot_working.value = num.toFixed(2);
	
	num = Number(document.employee_cost.breaks_year.value)
		+ Number(document.employee_cost.vac_year.value)
		+ Number(document.employee_cost.sick_year.value)
		+ Number(document.employee_cost.hol_year.value)
		+ Number(document.employee_cost.pd_other_year.value);
	document.employee_cost.tot_time_off.value = num.toFixed(2);
	
	num = Number(document.employee_cost.breaks_year.value)
		+ Number(document.employee_cost.vac_year.value)
		+ Number(document.employee_cost.sick_year.value)
		+ Number(document.employee_cost.hol_year.value)
		+ Number(document.employee_cost.pd_other_year.value);
	document.employee_cost.tot_time_off.value = num.toFixed(2);
	
	num = Number(document.employee_cost.tot_annual_hours.value) - Number(document.employee_cost.tot_time_off.value);
	document.employee_cost.tot_working.value = num.toFixed(2);
	
	num = Number(document.employee_cost.tot_time_off.value) / Number(document.employee_cost.tot_annual_hours.value) * 100;
	str1 = num.toFixed(2);
	document.employee_cost.tot_time_off_percent.value = str1.concat('%');
	
	num = Number(document.employee_cost.tot_working.value) 
		/ Number(document.employee_cost.tot_annual_hours.value) * 100;
	str1 = num.toFixed(2);
	document.employee_cost.tot_working_percent.value = str1.concat('%');
	
	num = Number(document.employee_cost.tot_time_off.value) * Number(document.employee_cost.hour_rate.value);
	document.employee_cost.pay_time_off.value = num.toFixed(2);
	
	num = Number(document.employee_cost.tot_working.value) * Number(document.employee_cost.hour_rate.value);
	document.employee_cost.pay_working.value = num.toFixed(2);
	
	num = Number(document.employee_cost.pay_working.value) + Number(document.employee_cost.pay_time_off.value);
	document.employee_cost.pay_total.value = num.toFixed(2);
}

function makeNum(strNum)
{
		strNum = getNumber(strNum);
		return(strNum);
}

function getHealthInsurance() {
	num = Number(document.employee_cost.health_total.value);
	document.employee_cost.health_total.value = num.toFixed(2);
	
	num = Number(document.employee_cost.health_ip.value);
	document.employee_cost.health_total.ip = num.toFixed(2);

	num = Number(document.employee_cost.health_emp.value) * 12;
	document.employee_cost.pretax_health.value = num.toFixed(2);
	
	num = Number(document.employee_cost.health_company.value) * 12;
	document.employee_cost.company_health.value = num.toFixed(2);
	
	num = Number(document.employee_cost.company_health.value) 
		+ Number(document.employee_cost.company_dental.value) 
		+ Number(document.employee_cost.company_other_ins.value);
	document.employee_cost.tot_ins.value = num.toFixed(2);
}

function getHealthSplit() {
			num = Number(document.employee_cost.health_total.value) - Number(document.employee_cost.health_company.value) - Number(document.employee_cost.health_ip.value);
			document.employee_cost.health_emp.value = num.toFixed(2);
			num = Number(document.employee_cost.health_company.value);
			document.employee_cost.health_company.value = num.toFixed(2);
			num = Number(document.employee_cost.health_ip.value);
			document.employee_cost.health_ip.value = num.toFixed(2);
}


function getDentalInsurance() {
	num = Number(document.employee_cost.dental_total.value);
	document.employee_cost.dental_total.value = num.toFixed(2);

	num = Number(document.employee_cost.dental_emp.value) * 12;
	document.employee_cost.pretax_dental.value = num.toFixed(2);
	
	num = Number(document.employee_cost.dental_company.value) * 12;
	document.employee_cost.company_dental.value = num.toFixed(2);
	
	num = Number(document.employee_cost.company_health.value) 
		+ Number(document.employee_cost.company_dental.value) 
		+ Number(document.employee_cost.company_other_ins.value);
	document.employee_cost.tot_ins.value = num.toFixed(2);
}

function getDentalSplit(n) {
	switch(n)
	{
		case "company":
			num = Number(document.employee_cost.dental_total.value) - Number(document.employee_cost.dental_company.value);
			document.employee_cost.dental_emp.value = num.toFixed(2);
			num = Number(document.employee_cost.dental_company.value);
			document.employee_cost.dental_company.value = num.toFixed(2);
			break;
		default:	
			num = Number(document.employee_cost.dental_total.value) - Number(document.employee_cost.dental_emp.value);
			document.employee_cost.dental_company.value = num.toFixed(2);
			num = Number(document.employee_cost.dental_emp.value);
			document.employee_cost.dental_emp.value = num.toFixed(2);
	}
}

function getOtherInsurance() {
	num = Number(document.employee_cost.other_ins_total.value);
	document.employee_cost.other_ins_total.value = num.toFixed(2);

	num = Number(document.employee_cost.other_ins_emp.value) * 12;
	document.employee_cost.pretax_other_ins.value = num.toFixed(2);
	
	num = Number(document.employee_cost.other_ins_company.value) * 12;
	document.employee_cost.company_other_ins.value = num.toFixed(2);
	
	num = Number(document.employee_cost.company_health.value) 
		+ Number(document.employee_cost.company_dental.value) 
		+ Number(document.employee_cost.company_other_ins.value);
	document.employee_cost.tot_ins.value = num.toFixed(2);
}

function getOtherSplit(n) {
	switch(n)
	{
		case "company":
			num = Number(document.employee_cost.other_ins_total.value) - Number(document.employee_cost.other_ins_company.value);
			document.employee_cost.other_ins_emp.value = num.toFixed(2);
			num = Number(document.employee_cost.other_ins_company.value);
			document.employee_cost.other_ins_company.value = num.toFixed(2);
			break;
		default:	
			num = Number(document.employee_cost.other_ins_total.value) - Number(document.employee_cost.other_ins_emp.value);
			document.employee_cost.other_ins_company.value = num.toFixed(2);
			num = Number(document.employee_cost.other_ins_emp.value);
			document.employee_cost.other_ins_emp.value = num.toFixed(2);
	}
}

function calcRequired() {
	
	validateWages();
	
	taxable = Number(document.employee_cost.pay_total.value)
		- Number(document.employee_cost.pretax_health.value)
		- Number(document.employee_cost.pretax_dental.value);
	document.employee_cost.taxable_wages.value = taxable.toFixed(2);
	
	if (Number(document.employee_cost.taxable_wages.value) > Number(document.employee_cost.base_fica.value)) {
		document.employee_cost.wages_fica.value = Number(document.employee_cost.base_fica.value); }
		else {
			document.employee_cost.wages_fica.value = Number(document.employee_cost.taxable_wages.value);
			};
	num = Number(document.employee_cost.wages_fica.value) * Number(document.employee_cost.rate_fica.value);
	document.employee_cost.cost_fica.value = num.toFixed(2);
		
	if (Number(document.employee_cost.taxable_wages.value) > Number(document.employee_cost.base_futa.value)) {
		document.employee_cost.wages_futa.value = Number(document.employee_cost.base_futa.value); }
		else {
			document.employee_cost.wages_futa.value = Number(document.employee_cost.taxable_wages.value);
			};
	num = Number(document.employee_cost.wages_futa.value) * Number(document.employee_cost.rate_futa.value);
	document.employee_cost.cost_futa.value = num.toFixed(2);
			
	if (Number(document.employee_cost.taxable_wages.value) > Number(document.employee_cost.base_suta.value)) {
		document.employee_cost.wages_suta.value = Number(document.employee_cost.base_suta.value); }
		else {
			document.employee_cost.wages_suta.value = Number(document.employee_cost.taxable_wages.value);
			};
	num = Number(document.employee_cost.wages_suta.value) * Number(document.employee_cost.rate_suta.value);
	document.employee_cost.cost_suta.value = num.toFixed(2);
			
	if (Number(document.employee_cost.taxable_wages.value) > Number(document.employee_cost.base_other.value)) {
		document.employee_cost.wages_other.value = Number(document.employee_cost.base_other.value); }
		else {
			document.employee_cost.wages_other.value = Number(document.employee_cost.taxable_wages.value);
			};
	num = Number(document.employee_cost.wages_other.value) * Number(document.employee_cost.rate_other.value);
	document.employee_cost.cost_other.value = num.toFixed(2);
			
	num = Number(document.employee_cost.rate_comp.value) 
		* Number(document.employee_cost.pay_total.value) / 100;
	document.employee_cost.cost_comp.value = num.toFixed(2);
			
	num = Number(document.employee_cost.cost_fica.value)
		+ Number(document.employee_cost.cost_futa.value)
		+ Number(document.employee_cost.cost_suta.value)
		+ Number(document.employee_cost.cost_other.value)
		+ Number(document.employee_cost.cost_comp.value);
	document.employee_cost.cost_required.value = num.toFixed(2);
}

function getSummary() {
	document.employee_cost.pay_working2.value = currency(document.employee_cost.pay_working.value);
	document.employee_cost.cost_fica2.value = currency(document.employee_cost.cost_fica.value);
	document.employee_cost.cost_futa2.value = currency(document.employee_cost.cost_futa.value);
	document.employee_cost.cost_suta2.value = currency(document.employee_cost.cost_suta.value);
	document.employee_cost.cost_other2.value = currency(document.employee_cost.cost_other.value);
	document.employee_cost.cost_comp2.value = currency(document.employee_cost.cost_comp.value);
	document.employee_cost.cost_required2.value = currency(document.employee_cost.cost_required.value);
	document.employee_cost.pay_time_off2.value = currency(document.employee_cost.pay_time_off.value);
	document.employee_cost.tot_ins2.value = currency(document.employee_cost.tot_ins.value);
	
	num_opt = Number(document.employee_cost.pay_time_off.value) 
		+ Number(document.employee_cost.tot_ins.value);
	document.employee_cost.tot_opt.value = currency(num_opt);
			
	num_real_cost = Number(document.employee_cost.pay_working.value) 
		+ Number(document.employee_cost.cost_required.value)
		+ num_opt;
	document.employee_cost.real_cost.value = currency(num_real_cost);
	
	document.employee_cost.hour_rate2.value = currency(document.employee_cost.hour_rate.value);
	
	num_real_hourly = num_real_cost / Number(document.employee_cost.tot_working.value);
	document.employee_cost.real_hourly.value = currency(num_real_hourly);
			
	num = num_real_hourly / Number(document.employee_cost.hour_rate.value) - 1;
	num = num * 100;
	str1 = num.toFixed(2);
	document.employee_cost.fringe.value = str1.concat('%');

}

function testSum() {
	
}

function currency(num_in) {
num_in = num_in.toString().replace(/\$|\,/g,'');
if(isNaN(num_in))
num_in = "0";
sign = (num_in == (num_in = Math.abs(num_in)));
num_in = Math.floor(num_in*100+0.50000000001);
cents = num_in%100;
num_in = Math.floor(num_in/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num_in.length-(1+i))/3); i++)
num_in = num_in.substring(0,num_in.length-(4*i+3))+','+
num_in.substring(num_in.length-(4*i+3));
return (((sign)?'':'-') + '$' + num_in + '.' + cents);
}

function isNumeric(elem, helperMsg){  // If the element's string matches the regular expression it is all numbers
        var numericExpression = /^[0-9]+$/;
        if(elem.value.match(numericExpression)){
                return true;
        }else{
                alert(helperMsg);
                elem.focus();
                return false;
        }
}
