CommuteCalcDlg = function() {
	this.create();
};
	
CommuteCalcDlg.prototype.toString = function () {
	return "CommuteCalcDlg";
};

CommuteCalcDlg.prototype.verifyGeneralData = function () {
	var msg = "";
	
	if (commuterRecordDlg.commuters.length == 0) {
		msg = "You need to add at least one commuter.\n";
	}
	
	if (isNaN(document.getElementById("fuel_cost").value) || parseInt(document.getElementById("fuel_cost").value) < 0) {
		document.getElementById("fuel_cost").select();
		document.getElementById("fuel_cost").focus();
		msg += "Fuel cost is invalid.\n";
	}
	
	if (isNaN(document.getElementById("home_loan_a").value) || parseInt(document.getElementById("home_loan_a").value) < 0) {
		document.getElementById("home_loan_a").select();
		document.getElementById("home_loan_a").focus();
		msg += "Loan amount for Home A is invalid.\n";
	}
	
	if (isNaN(document.getElementById("home_loan_b").value) || parseInt(document.getElementById("home_loan_b").value) < 0) {
		document.getElementById("home_loan_b").select();
		document.getElementById("home_loan_b").focus();
		msg += "Loan amount for Home B is invalid.\n";
	}
	
	if (document.getElementById("cecBuyingSw").checked) {
		if (isNaN(document.getElementById("interest_rate").value) || parseInt(document.getElementById("interest_rate").value) < 0) {
			document.getElementById("interest_rate").select();
			document.getElementById("interest_rate").focus();
			msg += "Interest rate is invalid.\n";
		}
	}

	if (msg.length > 0) {
		alert(msg);
		return false;
	} else {
		return true;
	}
	
};

CommuteCalcDlg.prototype.display = function () {
	if (!this.verifyGeneralData()) {
		return;
	}
	
	document.getElementById("commuteCalcDlg").style.left = cecGetDlgLeft(0, true);
	document.getElementById("commuteCalcDlg").style.top = cecGetScrollTop(0, true);
	
	var report_cell = document.getElementById("commuteCalcReportCell");
	report_cell.innerHTML = "";
	
	this.calculateExpenses();
	document.getElementById("commuteCalcDlg").style.visibility = "visible";
};

CommuteCalcDlg.prototype.hide = function () {
	document.getElementById("commuteCalcDlg").style.visibility = "hidden";
	var report_cell = document.getElementById("commuteCalcReportCell");
	report_cell.innerHTML = "";
};

CommuteCalcDlg.prototype.moreInfo = function (id) {
	
	document.getElementById("commuteCalcDlg").style.left = cecGetDlgLeft(15, false);
	document.getElementById("commuteCalcDlg").style.top = cecGetScrollTop(110, false);

	var reportCell = document.getElementById("commuteCalcReportCell");
	
	if (id == "maint_cost_link") {
		reportCell.innerHTML = "Excluding insurance, registration, and actual car payments, wear/tear, and "
												 + "depreciation on the average car is about 22 cents per mile. This figure should"
												 + "be raised for cars worth more than $20,000, and lowered for cars less than "
												 + "$20,000 in value.";
	} if (id == "commuter_details_link") {
		reportCell.innerHTML = "Using the 'Add' button to the right, you can enter details about you and your car "
												 + "so you can calculate what your commute costs you on a monthly basis.<br /><br />"
												 + "If there are more than one of you commuting to work in your household, be sure to "
												 + "add details for each of you separately. Your combined commuting costs will be "
												 + "calculated for you.";
	} else {
		reportCell.innerHTML = "Annual gross income is used to determine what your time is worth, and what that "
												 + "extra time spent on the road is costing you.";
	}
	
	document.getElementById("commuteCalcDlg").style.visibility = "visible";
};

CommuteCalcDlg.prototype.toggleTolls = function (id) {
	
	if (id == "toll_yes") {
		document.getElementById("tollPanel").style.display = "inline";
	} else {
		document.getElementById("tollPanel").style.display = "none";
	}
		
};

CommuteCalcDlg.prototype.toggleUnits = function (id) {
	var avg_fe_lbl = document.getElementById("avg_fe_lbl");
	if (id == "units_mpg") {
		avg_fe_lbl.innerHTML = "Average MPG of Car";
	} else {		
		avg_fe_lbl.innerHTML = "Average L/100Km of Car";
	}
		
};

CommuteCalcDlg.prototype.resetForm = function () {
	document.getElementById("fuel_cost").value = document.getElementById("default_fuel_cost").value;
	document.getElementById("interest_rate").value = document.getElementById("default_interest_rate").value;
	if (document.getElementById("default_buy_or_rent").value == "buy") {
		document.getElementById("cecBuyingSw").checked = true;
		toggleBuyRent("cecBuyingSw");
	} else {
		document.getElementById("cecRentingSw").checked = true;
		toggleBuyRent("cecRentingSw")
	}
};

CommuteCalcDlg.prototype.calculateExpenses = function () {
	
	if (document.getElementById("cecResultsIfrm") != null) {
		document.getElementsByTagName('head')[0].removeChild(document.getElementById("cecResultsIfrm"), true);
	}
		
	var iframe  = document.createElement('iframe');
	var qString = this.buildRequest();
	
	iframe.src  = "http://www.costofcommuting.com/ajax_calculation_request.php?" + qString;
  iframe.id = "cecResultsIfrm";
	iframe.frameBorder = 0;
	iframe.style.visibility = "visible";
	iframe.style.border = "none";
	iframe.style.width = "100%";
	iframe.style.height = "300px";
	iframe.frameborder = "0";
	iframe.scrolling = "no";
	var report_cell = document.getElementById("commuteCalcReportCell");
	report_cell.appendChild(iframe);

};

CommuteCalcDlg.prototype.buildRequest = function () {
	
	var qString = "trxcd=" + document.getElementById("trxcd").value;
	qString += "&hr=" + document.location.href;
	qString += '&json=[{"general":{';
	// for backwards compatability with older calculators
	if (document.getElementById("cecUnitsMPG")) {
		qString += '"vd":"' + document.getElementById("cecUnitsMPG").checked + '",';
	} else {
		qString += '"vd":"true",';
	}
	qString += '"fc":' + document.getElementById("fuel_cost").value + ',';
	qString += '"rob":"' + document.getElementById("cecBuyingSw").checked + '",';
	qString += '"la":' + document.getElementById("home_loan_a").value + ',';
	qString += '"lb":' + document.getElementById("home_loan_b").value + ',';
	qString += '"csm":"' + MD5(document.getElementById("cecLinks").innerHTML.toLowerCase().replace(/class=cecLinkStyle/ig, 'class="ceclinkstyle"').replace(/\s*/g, '')) + '",';
	qString += '"ir":' + document.getElementById("interest_rate").value + '}},';
	
	// now get the commuters
	var commuters = commuterRecordDlg.commuters;
	for (var i = 0; i < commuters.length; i++) {
		var commuter = commuters[i];
		qString += "{";
		qString += '"lbl":"' + commuter.label + '",';
		qString += '"da":' + commuter.distanceA + ',';
		qString += '"db":' + commuter.distanceB + ',';
		qString += '"ta":' + commuter.tollAmountA + ',';
		qString += '"tb":' + commuter.tollAmountB + ',';
		qString += '"cpm":' + commuter.commutesPerMonth + ',';
		qString += '"avg":' + commuter.avgMpg + ',';
		qString += '"vc":' + commuter.valueOfCar + ',';
		qString += '"gi":' + commuter.grossInc + '}';
		if (i < (commuters.length - 1)) {
			qString += ",";
		}
	}
	
	qString += "]";
	return qString;	
};

CommuteCalcDlg.prototype.create = function () {
	var masterDiv = document.createElement("div");
	masterDiv.id = "commuteCalcDlg";
			
	var handleRow = document.createElement("div");
	handleRow.id = "commuteCalcDlgHandle";
	
	handleRow.innerHTML = "<div class=\"cecPopupTitle\">Commuting Expense Comparison</div><div class=\"cecPopupClose\"><img onClick=\"commuteCalcDlg.hide();\" src='http://www.costofcommuting.com/display/images/gray_close.gif' width='17' "
											+ "height='17' border='0' " + "id='closeCommuteCalcDlgLink' style='cursor:pointer' /></div>";
	
	masterDiv.appendChild(handleRow);
	
	var infoRow = document.createElement("div");
	infoRow.id = "commuteCalcReportCell";
	infoRow.style.textAlign = "left";
	infoRow.className = "standardText";
	infoRow.innerHTML = "";
	masterDiv.appendChild(infoRow);

	var btnRow = document.createElement("div");
	btnRow.id = "commuteCalcButtonCell";
	btnRow.className = "standardText";
	btnRow.innerHTML = "<input id='commute_calc_dlg_cancel_btn' type='button' value='Close' style='width:75px' onClick=\"commuteCalcDlg.hide();\" />";
	masterDiv.appendChild(btnRow);
	document.body.appendChild(masterDiv);																				
};

CommuterRecord = function() {};

CommuterRecord.prototype = {

	name: "",
	label: "",
	distanceA: 2,
	distanceB: 20,
	avgMpg: 20,
	grossInc: 50000,
	valueOfCar: 20000,
	commutesPerMonth: 22,
	tollAmountA: 0,
	tollAmountB: 0

};

CommuterRecord.prototype.toString = function (){
	return this.label;
};

CommuterRecordDlg = function() {
	this.create();
};

CommuterRecordDlg.prototype = {
	commuters: new Array(),
	currentCommuterId: ""
};

CommuterRecordDlg.prototype.display = function () {
	this.currentCommuterId = "";
	document.getElementById("distance_a").value = document.getElementById("default_distance_a").value;
	document.getElementById("distance_b").value = document.getElementById("default_distance_b").value;
	document.getElementById("avg_mpg").value = document.getElementById("default_avg_mpg").value;
	document.getElementById("gross_income").value = document.getElementById("default_gross_income").value;
	document.getElementById("value_of_car").value = document.getElementById("default_value_of_car").value;
	document.getElementById("commutes_per_month").value = document.getElementById("default_commutes_per_month").value;
	
	if (document.getElementById("default_has_toll").value == "yes") {
		document.getElementById("toll_yes").checked = true;
		document.getElementById("toll_a").value = "0";
		document.getElementById("toll_b").value = document.getElementById("default_toll_value").value;	
		document.getElementById("tollPanel").style.display = "inline";
	}
		
	document.getElementById("commuterRecordDlg").style.left = cecGetDlgLeft(0, true);
	document.getElementById("commuterRecordDlg").style.top = cecGetScrollTop(0, true);
	document.getElementById("commuterRecordDlg").style.visibility = "visible";
};

CommuterRecordDlg.prototype.hide = function () {
	this.currentCommuterId = "";
	document.getElementById("commuterRecordDlg").style.visibility = "hidden";
};

CommuterRecordDlg.prototype.addUpdateCommuter = function () {

	if (this.currentCommuterId != "") {
		this.updateCommuter(this.currentCommuterId);
	} else {
		this.insertCommuter();
	}

};

CommuterRecordDlg.prototype.insertCommuter = function () {
	
	if (!this.verifyCommuterData()) {
		return;
	}
	
	// now create the table row that will contain this commuter
	var tbody = document.getElementById("cecCommuters");
	var row = document.createElement("tr");
	var labelCell = document.createElement("td");
	var btnCell = document.createElement("td");
	labelCell.className = "standardText";
	btnCell.style.textAlign = "right";
	
	var commuter = new CommuterRecord();		
	commuter.label = "Commuter " + (this.commuters.length + 1);
	commuter.name = commuter.label +  Math.random();
	commuter.distanceA = document.getElementById("distance_a").value;
	commuter.distanceB = document.getElementById("distance_b").value;
	commuter.avgMpg = document.getElementById("avg_mpg").value;
	commuter.grossInc = document.getElementById("gross_income").value;
	commuter.valueOfCar = document.getElementById("value_of_car").value;
	commuter.commutesPerMonth = document.getElementById("commutes_per_month").value;
	if (document.getElementById("toll_yes").checked) {
		commuter.tollAmountA = document.getElementById("toll_a").value;
		commuter.tollAmountB = document.getElementById("toll_b").value;
	}
	
	row.id = commuter.name;
	btnCell.innerHTML = "<img src='http://www.costofcommuting.com/display/images/edit.png' alt='Edit this Commuter' title='Edit this Commuter' />"
										+ "<img src='http://www.costofcommuting.com/display/images/delete.gif' alt='Remove this Commuter' title='Remove this Commuter' onClick='commuterRecordDlg.removeCommuter(event,\"" + row.id + "\");' />";
	this.commuters.push(commuter);
	labelCell.innerHTML = commuter.label;
	btnCell.style.cursor = "pointer";
	btnCell.title = "Click to edit commuter";
	btnCell.alt = "Click to edit commuter";
	labelCell.style.cursor = "pointer";
	labelCell.title = "Click to edit commuter";
	labelCell.alt = "Click to edit commuter";
	row.appendChild(labelCell);
	row.appendChild(btnCell);
	tbody.appendChild(row);
		
	cecAddEvent(row, "click", this.displaySelectedCommuter, false);
	cecAddEvent(labelCell, "mouseover", this.rowRollOver, false);
	cecAddEvent(labelCell, "mouseout", this.rowRollOut, false);
	cecAddEvent(btnCell, "mouseover", this.rowRollOver, false);
	cecAddEvent(btnCell, "mouseout", this.rowRollOut, false);																									 	

	// now check to see if we've filled the last row.
	if (tbody.rows.length == 4) {
		document.getElementById("commuterAddBtn").disabled = true;
	}
		
	document.getElementById("commuterRecordDlg").style.visibility = "hidden";
};

CommuterRecordDlg.prototype.rowRollOver = function (e) {
	var obj = cecGetTarget(e);
	if (obj != null) {
		obj.className = "cecCommuterRowHover";
	}
};

CommuterRecordDlg.prototype.rowRollOut = function (e) {
	var obj = cecGetTarget(e);
	if (obj != null) {
		obj.className = "cecCommuterRow";
	}
};

CommuterRecordDlg.prototype.displaySelectedCommuter = function (e) {
	
	var obj = cecGetTarget(e);
	
	var commuter = new CommuterRecord();
	
	for (var i = 0; i < commuterRecordDlg.commuters.length; i++) {
		if (commuterRecordDlg.commuters[i].name == obj.id) {
			commuter = commuterRecordDlg.commuters[i];
			break;
		}
	}

	document.getElementById("distance_a").value = commuter.distanceA;
	document.getElementById("distance_b").value  = commuter.distanceB;
	document.getElementById("avg_mpg").value = commuter.avgMpg ;
	document.getElementById("gross_income").value  = commuter.grossInc;
	document.getElementById("value_of_car").value = commuter.valueOfCar;
	document.getElementById("commutes_per_month").value = commuter.commutesPerMonth;
	if (document.getElementById("toll_yes").checked) {
		document.getElementById("toll_a").value = commuter.tollAmountA;
		document.getElementById("toll_b").value = commuter.tollAmountB;
	}
	commuterRecordDlg.currentCommuterId = obj.id;
	
	document.getElementById("commuterRecordDlg").style.visibility = "visible";
};

CommuterRecordDlg.prototype.updateCommuter = function (id) {
	
	if (!this.verifyCommuterData()) {
		return;
	}
	
	var commuter = new CommuterRecord();
	
	for (var i = 0; i < commuterRecordDlg.commuters.length; i++) {
		if (commuterRecordDlg.commuters[i].name == id) {
			commuter = commuterRecordDlg.commuters[i];
			break;
		}
	}

	commuter.distanceA = document.getElementById("distance_a").value;
	commuter.distanceB = document.getElementById("distance_b").value;
	commuter.avgMpg = document.getElementById("avg_mpg").value;
	commuter.grossInc = document.getElementById("gross_income").value;
	commuter.valueOfCar = document.getElementById("value_of_car").value;
	commuter.commutesPerMonth = document.getElementById("commutes_per_month").value;
	if (document.getElementById("toll_yes").checked) {
		commuter.tollAmountA = document.getElementById("toll_a").value;
		commuter.tollAmountB = document.getElementById("toll_b").value;
	}
	
	var row = document.getElementById(id);
	row.getElementsByTagName("td")[0].innerHTML = commuter.label;
	
	document.getElementById("commuterRecordDlg").style.visibility = "hidden";
};

CommuterRecordDlg.prototype.verifyCommuterData = function () {

	var msg = "";

	if (isNaN(document.getElementById("distance_a").value) || parseInt(document.getElementById("distance_a").value) < 0) {
		document.getElementById("distance_a").select();
		document.getElementById("distance_a").focus();
		msg += "Commuting distance from Home A is invalid.\n";
	}
	
	if (isNaN(document.getElementById("distance_b").value) || parseInt(document.getElementById("distance_b").value) < 0) {
		document.getElementById("distance_b").select();
		document.getElementById("distance_b").focus();
		msg += "Commuting distance from Home B is invalid.\n";
	}

	if (isNaN(document.getElementById("avg_mpg").value) || parseInt(document.getElementById("avg_mpg").value) < 0) {
		document.getElementById("avg_mpg").select();
		document.getElementById("avg_mpg").focus();
		msg += "Avgerage miles per gallon is invalid.\n";
	}

	if (isNaN(document.getElementById("gross_income").value) || parseInt(document.getElementById("gross_income").value) < 0) {
		document.getElementById("gross_income").select();
		document.getElementById("gross_income").focus();
		msg += "Annual gross income is invalid.\n";
	}
	
	if (isNaN(document.getElementById("value_of_car").value) || parseInt(document.getElementById("value_of_car").value) < 0) {
		document.getElementById("value_of_car").select();
		document.getElementById("value_of_car").focus();
		msg += "Value of car is invalid.\n";
	}
	
	if (isNaN(document.getElementById("commutes_per_month").value) || parseInt(document.getElementById("commutes_per_month").value) < 0) {
		document.getElementById("commutes_per_month").select();
		document.getElementById("commutes_per_month").focus();
		msg += "Commutes per month is invalid.\n";
	}

	if (msg.length > 0) {
		alert(msg);
		return false;
	} else {
		return true;
	}
	
};

CommuterRecordDlg.prototype.removeCommuter = function (e,id) {
	
	if (confirm("Are you sure you want to delete this commuter?")) {
		var tbody = document.getElementById("cecCommuters");
		tbody.removeChild(document.getElementById(id), true);
			
		for (var i = 0; i < this.commuters.length; i++) {
			if (this.commuters[i].name == id) {
				this.commuters.splice(i, 1);
				break;
			}
		}
		
		document.getElementById("commuterAddBtn").disabled = false;
		cecCancelEvent(e);
	} else {
		cecCancelEvent(e);
	}
};

CommuterRecordDlg.prototype.create = function() {
	var masterDiv = document.createElement("div");
	masterDiv.id = "commuterRecordDlg";
			
	var handleRow = document.createElement("div");
	handleRow.id = "commuterRecordDlgHandle";
	
	handleRow.innerHTML = "<div class=\"cecPopupTitle\">Commuter Add/Edit</div><div class=\"cecPopupClose\"><img onClick=\"commuterRecordDlg.hide();\" src='http://www.costofcommuting.com/display/images/gray_close.gif' width='17' "
											+ "height='17' border='0' " + "id='closeCommuteRecordDlgLink' style='cursor:pointer' /></div>";
	
	masterDiv.appendChild(handleRow);
	
	var infoRow = document.createElement("div");
	infoRow.id = "commuterRecordDlgContentPanel";
	infoRow.style.textAlign = "left";
	infoRow.className = "standardText";
	
	var avg_mpg_lbl = "Average MPG of Car";
	
	if (document.getElementById("cecUnitsKM") && document.getElementById("cecUnitsKM").checked) {									
		avg_mpg_lbl = "Average L/100Km of Car";
	}
	
	infoRow.innerHTML = "<div class='cecLabel'><span class='cecLabel'>Commuting distance from Home A (one-way)</span></div>"
										+ "<div class='cecInput' style='padding-left:7px'><input type='text' id='distance_a' value='2' maxlength='4' /></div>"
										+ "<div class='cecLabel'><span class='cecLabel'>Commuting distance from Home B (one-way)</span></div>"
										+ "<div class='cecInput' style='padding-left:7px'><input type='text' id='distance_b' value='20' maxlength='4' /></div>"
										+ "<div class='cecLabel' style='width:160px'><span class='cecLabel'>Would tolls need to be paid?</span></div>"
										+ "<div class='cecInput' style='padding-left:3px'>"
										+ "<input type='radio' name='has_toll' id='toll_yes' value='yes' style='border:none;width:12px;height:12px' onclick='commuteCalcDlg.toggleTolls(this.id)' /><label for='toll_yes'>Yes</label>&nbsp;"
										+ "<input type='radio' name='has_toll' id='toll_no' value='no' style='border:none;width:12px;height:12px' onclick='commuteCalcDlg.toggleTolls(this.id)' checked/><label for='toll_no'>No</label>"
										+ "</div>"
										+ "<div id='tollPanel'>"
										+ "<div class='cecLabel'><span class='cecLabel'>Toll expenses from home A (round trip)</span></div>"
										+ "<div class='cecInput'>$<input type='text' id='toll_a' value='0' maxlength='3' /></div>"
										+ "<div class='cecLabel'><span class='cecLabel'>Toll expenses from home B (round trip)</span></div>"
										+ "<div class='cecInput'>$<input type='text' id='toll_b' value='0' maxlength='3' /></div>"
										+ "</div>"
										+ "<div class='cecLabel'><span class='cecLabel'>Commutes per Month</span></div>"
										+ "<div class='cecInput' style='padding-left:7px'><input type='text' id='commutes_per_month' value='22' maxlength='2' /></div>"
										+ "<div class='cecLabel'><span class='cecLabel'>Value of Car</span></div>"
										+ "<div class='cecInput'>$<input type='text' id='value_of_car' value='20000' maxlength='6' /></div>"
										+ "<div class='cecLabel'><span class='cecLabel' id='avg_fe_lbl'>" + avg_mpg_lbl + "</span></div>"
										+ "<div class='cecInput' style='padding-left:7px'><input type='text' id='avg_mpg' value='20' maxlength='3' /></div>"
										+ "<div class='cecLabel'><span class='cecLabel'>Annual Gross Income (<span style='cursor:pointer' class='linkText' id='gross_income_link' onClick='commuteCalcDlg.moreInfo(this.id)'>more info</span>)</span></div>"
										+ "<div class='cecInput'>$<input type='text' id='gross_income' value='50000' maxlength='7' /></div>";
	masterDiv.appendChild(infoRow);

	var btnRow = document.createElement("div");
	btnRow.id = "commuterRecordDlgButtonCell";
	btnRow.innerHTML = "<input id='commuterRecordDlgCancelBtn' type='button' value='Cancel' style='width:75px' onClick=\"commuterRecordDlg.hide();\" />"
									 + "<input id='commuterRecordDlgEditBtn' type='button' value='Add/Edit' style='width:75px' onClick=\"commuterRecordDlg.addUpdateCommuter();\" />";
	masterDiv.appendChild(btnRow);
	document.body.appendChild(masterDiv);
};

function cecAddEvent(el, eType, fn, uC) {
	if (el.addEventListener) {
		el.addEventListener(eType, fn, uC);
		return true;
	} else if (el.attachEvent) {
		return el.attachEvent('on' + eType, fn);
	} else {
		el['on' + eType] = fn;
	}
};

function cecCancelEvent(e) {
  if(!e) {
    e = window.event;
	}
  
	if(e.stopPropagation) {
    e.stopPropagation();
	}
  
	if(e.preventDefault) {
    e.preventDefault();
  }
	
	e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
};

function cecGetTarget(e) {
	var obj = null;
	
	if (e.target) {
		obj = e.target;
	} else if (e.srcElement) {
		obj = e.srcElement;
	}

	while (obj.nodeName.toLowerCase() != "tr") {
		obj = obj.parentNode;
	}
	
	return obj;
};

function toggleBuyRent(id) {
	
	if (id == "cecRentingSw") {
		document.getElementById("interest_rate").disabled = true;
		document.getElementById("cecLoanALbl").innerHTML = "Rent Amount of Home in Town A";
		document.getElementById("cecLoanBLbl").innerHTML = "Rent Amount of Home in Town B";
		document.getElementById("home_loan_a").value = document.getElementById("default_rent_a_value").value;
		document.getElementById("home_loan_b").value = document.getElementById("default_rent_b_value").value;
		document.getElementById("cecIRLbl").className = "disabledCecLabel";
	} else {
		document.getElementById("interest_rate").disabled = false;
		document.getElementById("cecLoanALbl").innerHTML = "Loan Amount of Home in Town A";
		document.getElementById("cecLoanBLbl").innerHTML = "Loan Amount of Home in Town B";
		document.getElementById("home_loan_a").value = document.getElementById("default_loan_a_value").value;
		document.getElementById("home_loan_b").value = document.getElementById("default_loan_b_value").value;
		document.getElementById("cecIRLbl").className = "cecLabel";
	}
	
};

function cecGetDlgLeft(offset, isAbsolute) {
	
	var customOffset = document.getElementById("cec_custom_horizontal_offset");
	if (customOffset != null && !isNaN(customOffset.value)) {
		if (!isAbsolute) {
			offset = parseInt(customOffset.value) + offset;
		}  else {
			offset = parseInt(customOffset.value);
		}
	} else {
		offset = 250;
	}
	
	return offset + "px";
}


function cecGetScrollTop(offset, isAbsolute) {
	
	var yPos = 0;
	
	var customOffset = document.getElementById("cec_custom_vertical_offset");
	if (customOffset != null && !isNaN(customOffset.value)) {
		if (!isAbsolute) {
			offset = parseInt(customOffset.value) + offset;
		} else {
			offset = parseInt(customOffset.value);
		}
	}

	if (document.all) {
		if (document.body.scrollTop == 0) {
			yPos = document.documentElement.scrollTop;
		} else {
			yPos = document.body.scrollTop;
		}
	} else {
		yPos = window.pageYOffset;
	}
	
	return (yPos + offset) + "px";
}

function cecInit() {
	commuteCalcDlg = new CommuteCalcDlg();
	commuterRecordDlg = new CommuterRecordDlg();
};

var MD5 = function (string) {

    function RotateLeft(lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    };

    function AddUnsigned(lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    };

    function F(x,y,z) { return (x & y) | ((~x) & z); };
    function G(x,y,z) { return (x & z) | (y & (~z)); };
    function H(x,y,z) { return (x ^ y ^ z); };
    function I(x,y,z) { return (y ^ (x | (~z))); };

    function FF(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function GG(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function HH(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function II(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };

    function WordToHex(lValue) {
        var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
        }
        return WordToHexValue;
    };

    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var x=Array();
    var k,AA,BB,CC,DD,a,b,c,d;
    var S11=7, S12=12, S13=17, S14=22;
    var S21=5, S22=9 , S23=14, S24=20;
    var S31=4, S32=11, S33=16, S34=23;
    var S41=6, S42=10, S43=15, S44=21;

    string = Utf8Encode(string);

    x = ConvertToWordArray(string);

    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

    for (k=0;k<x.length;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=AddUnsigned(a,AA);
        b=AddUnsigned(b,BB);
        c=AddUnsigned(c,CC);
        d=AddUnsigned(d,DD);
    };

    var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

    return temp.toLowerCase();
};

var commuteCalcDlg = null;
var commuterRecordDlg = null;
cecAddEvent(window, "load", cecInit, false);