function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}



function MyCalc() {
	// validator 
	var err = 0;
	var f = 0;
	var j = 0;
	

	j=document.ROI.CurrentMethod.length;
	for (var i=0; i<j; i++) if(document.ROI.CurrentMethod[i].checked) f=1;
	if (!f) {
		err = 1;
		document.getElementById('CurrentMethodBlock').style.border = '2px solid red';
		document.getElementById('CurrentMethodBlock').style.padding = '5px';
		document.getElementById('CurrentMethodBlock').style.margin = '5px';
	} else {
		document.getElementById('CurrentMethodBlock').style.border = '';
		document.getElementById('CurrentMethodBlock').style.padding = '';
		document.getElementById('CurrentMethodBlock').style.margin = '';
	}

	f=0;
	j=document.ROI.PayPeriod.length;
	for (var i=0; i<j; i++) if(document.ROI.PayPeriod[i].checked) f=1;
	if (!f) {
		err = 1;
		document.getElementById('PayPeriodBlock').style.border = '2px solid red';
		document.getElementById('PayPeriodBlock').style.padding = '5px';
		document.getElementById('PayPeriodBlock').style.margin = '5px';
	} else {
		document.getElementById('PayPeriodBlock').style.border = '';
		document.getElementById('PayPeriodBlock').style.padding = '';
		document.getElementById('PayPeriodBlock').style.margin = '';
	}
	
	var fields = ['SchedulePayRate','ProcessPayRate','HoursSchedule','HoursDispatch','HoursInvoices','HoursPayroll','HoursWorkOrder','DayFuelCost','XEstimates','XPercentage','XJobTicket'];
	for (var i=0; i<fields.length; i++) {
		f = document.getElementById(fields[i]);
		if (!f) alert(fields[i]);
		var num = parseFloat(f.value);
		if (isNaN(num) || num <= 0) {
			document.getElementById(fields[i]+'Block').style.padding = '5px';
			document.getElementById(fields[i]+'Block').style.margin = '5px';
			document.getElementById(fields[i]+'Block').style.border = '2px solid red';
			err = 1;
		} else {
			document.getElementById(fields[i]+'Block').style.border = '';
			document.getElementById(fields[i]+'Block').style.padding = '';
			document.getElementById(fields[i]+'Block').style.margin = '1';
		}
	}


	if (err) {
		return alert('Please complete the highlighted fields!');
	}

//Find their current method selection
j=document.ROI.CurrentMethod.length;
for (i=0; i<j; i++){
		if(document.ROI.CurrentMethod[i].checked) var CurrentMethod = document.ROI.CurrentMethod[i].value;
	}
//Find their payroll cycle
j=document.ROI.PayPeriod.length;
for (i=0; i<j; i++){
		if(document.ROI.PayPeriod[i].checked) var PayPeriod = document.ROI.PayPeriod[i].value;
	}

var HPDSaveSched = document.ROI.HoursSchedule.value * (1-CurrentMethod);
var AnnSaveSched = (document.ROI.SchedulePayRate.value * document.ROI.HoursSchedule.value * 52 * 5) - (HPDSaveSched * document.ROI.SchedulePayRate.value * 5 * 52 );

var HPDSaveDisp = document.ROI.HoursDispatch.value * (1-CurrentMethod)
var AnnSaveDisp = (document.ROI.SchedulePayRate.value * document.ROI.HoursDispatch.value * 52 * 5) - (HPDSaveDisp * document.ROI.SchedulePayRate.value * 5 * 52 );

var HPDSaveWO = document.ROI.HoursWorkOrder.value * (1-CurrentMethod)
var AnnSaveWO = (document.ROI.SchedulePayRate.value * document.ROI.HoursWorkOrder.value * 52 * 5) - (HPDSaveWO * document.ROI.SchedulePayRate.value * 5 * 52 );

var HPDSaveInv = document.ROI.HoursInvoices.value * (1-CurrentMethod)
var AnnSaveInv = (document.ROI.ProcessPayRate.value * document.ROI.HoursInvoices.value * 52 * 5) - (HPDSaveInv * document.ROI.ProcessPayRate.value * 5 * 52 );

var HPPSavePay = document.ROI.HoursPayroll.value * (1-CurrentMethod)
var AnnSavePay = (document.ROI.ProcessPayRate.value * PayPeriod * document.ROI.HoursPayroll.value)- (HPPSavePay * document.ROI.ProcessPayRate.value * PayPeriod);
var HPDSavePay

switch (PayPeriod) {

	case "52":
		HPDSavePay = (document.ROI.HoursPayroll.value - HPPSavePay) / 5;
	break
	
	case "26":
		HPDSavePay = (document.ROI.HoursPayroll.value - HPPSavePay) / 10;
	break
	
	default: HPDSavePay = (document.ROI.HoursPayroll.value - HPPSavePay) / 20;
}

var AnnSaveFuel = (document.ROI.DayFuelCost.value * 5 * 52) - ((document.ROI.DayFuelCost.value * 5 * 52) * (1 - CurrentMethod / 4));

var AnnSaveTotal= AnnSaveSched + AnnSaveDisp + AnnSaveWO + AnnSaveInv + AnnSavePay + AnnSaveFuel;

var HPRSaveTotal =  (document.ROI.HoursSchedule.value - HPDSaveSched) + (document.ROI.HoursDispatch.value - HPDSaveDisp) + (document.ROI.HoursWorkOrder.value - HPDSaveWO) + (document.ROI.HoursInvoices.value - HPDSaveInv + HPDSavePay);

// @danny START
var add=parseInt(document.getElementById('XEstimates').value) * parseInt(document.getElementById('XPercentage').value) / 100 * parseInt(document.getElementById('XJobTicket').value) * 0.05 * 52;
//alert(parseInt(document.getElementById('XEstimates').value)+' * '+parseInt(document.getElementById('XPercentage').value)+' * '+parseInt(document.getElementById('XJobTicket').value)+' * '+0.001+' = '+add+' ('+AnnSaveTotal+')');
if (typeof add == 'number') {
    AnnSaveTotal+=add;    
}
// @danny END

//Round result to 2 decimals
AnnSaveTotal = Math.round(AnnSaveTotal*100)/100;

//Round result to 1 decimal
HPRSaveTotal = Math.round(HPRSaveTotal*10)/10;

document.getElementById("AnnSaveTotal").innerHTML = formatCurrency(AnnSaveTotal);
document.getElementById("AvgHoursSave").innerHTML =  HPRSaveTotal;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors); else MyCalc();
  document.MM_returnValue = (errors == '');
}