// Utilities
function addLoadEvent(func){
  var oldonload = window.onload;
  if (typeof window.onload != 'function'){
    window.onload = func;
  } else {
    window.onload = function(){
	  oldonload();
	  func();
	}
  }
}
function replaceText(el,text){
  if (el){
    clearText(el);
    var newNode = document.createTextNode(text);
    el.appendChild(newNode);
  }
}
function clearText(el){
  if (el){
    if (el.childNodes){
      for(var i = 0; i < el.childNodes.length; i++){
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}
function stripeTable(tableId, altClass) {
  var table = document.getElementById(tableId);
  var tableRows = table.getElementsByTagName("tr");
  var alt = "odd";
  for (var i=0; i<tableRows.length; i++) {
    if (alt == "odd") {
	  alt = "even";
	  tableRows[i].className = altClass;
	} else {
	  tableRows[i].className = "";
	  alt = "odd";
	}
  }
}

// Calculator
function prepCalc(){
  if (document.getElementById("calculator")) {
    var calculator = document.getElementById("calculator");
    calculator.onsubmit = function(){
      calculateM();
      return false;
    }
  }
}
addLoadEvent(prepCalc);

function calculateM(){
  var button = document.getElementById("submit-button");
  button.value = "Calculating...";
  var p = document.getElementById("p").value;
  var regEx = new RegExp('[^0-9\.]', 'g');
  p = p.replace(regEx, "");
  var i = document.getElementById("i").value;
  i = i.replace(regEx, "");
  var l = document.getElementById("l").value;
  l = l.replace(regEx, "");
  var j = i/1200;
  var n = l * 12;
  var jn = j + 1;
  var ejn = jn;
  var count = 0;
  while(count < n){
    ejn = ejn * jn;
    count = count + 1;
  }
  var m = p * ( j / (1 - (1/ejn)));
  m = Math.round(100 * m)/100;
  var result = document.getElementById("m");
  replaceText(result,m);
  button.value = "Calculate Monthly Payments";
  if (!document.getElementById("result-table")) {
    buildResultTable();
  }
  addResult(p,i,l,m);
  return false;
}

function addResult(p,i,l,m) {
  var content = document.getElementById("content");
  var resultTable = document.getElementById("result-table");
  var tableBody = resultTable.getElementsByTagName("tbody")[0];
  var tableRow = document.createElement("tr");
  var date = new Date();
  var time = date.getTime();
  var calcId = "c" + time;
  tableRow.setAttribute("id", calcId);
  tableBody.insertBefore(tableRow, tableBody.firstChild);
  
  tableCell = document.createElement("td");
  tableRow.appendChild(tableCell);
  row1 = document.createTextNode("$" + p);
  tableCell.appendChild(row1);
  
  tableCell = document.createElement("td");
  tableRow.appendChild(tableCell);
  row2 = document.createTextNode(i + "%");
  tableCell.appendChild(row2);
  
  tableCell = document.createElement("td");
  tableRow.appendChild(tableCell);
  row3 = document.createTextNode(l + " yrs.");
  tableCell.appendChild(row3);
  
  tableCell = document.createElement("td");
  tableCell.className = "due-col";
  tableRow.appendChild(tableCell);
  row4 = document.createTextNode("$" + m + "*");
  tableCell.appendChild(row4);
  
  fadeIn(calcId, 60);
  stripeTable('result-table', 'alt');
}

function buildResultTable() {
  // Create table and append to content
  var content = document.getElementById("content");
  var resultTable = document.createElement("table");
  content.appendChild(resultTable);
  resultTable.setAttribute("id", "result-table");
  resultTable.setAttribute("summary", "Use this chart of current calculations to compare mortgage rate scenarios. Reuse the form above to add to this chart.");
  // Create table caption
  var tableCaption = document.createElement("caption");
  resultTable.appendChild(tableCaption);
  var tableCaptionText = document.createTextNode("Current Calculations");
  tableCaption.appendChild(tableCaptionText);
  // Create table head with headers
  var tableHead = document.createElement("thead");
  resultTable.appendChild(tableHead);
  var tableRow = document.createElement("tr");
  tableHead.appendChild(tableRow);
  var tableHeadings = new Array("Amount of Loan", "Annual Interest Rate", "Length of Loan", "Due Monthly");
  var tableHeading;
  for (var i=0; i<tableHeadings.length; i++) {
    tableHeading = document.createElement("th");
    if (i == 3) {
	  tableHeading.className = "due-col";
	}
    tableHeading.setAttribute("scope", "col");
    thText = document.createTextNode(tableHeadings[i]);
    tableHeading.appendChild(thText);
    tableRow.appendChild(tableHeading);
  }
  // Create table body
  tableBody = document.createElement("tbody");
  resultTable.appendChild(tableBody);
}

// Site Map
startList = function() {
	if (document.getElementById("sitemap")) {
		navRoot = document.getElementById("sitemap");
		for (var i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				node.onmouseover=function() {
					this.className+=" over";
				}
				node.onmouseout=function() {
					this.className=this.className.replace(" over", "");
				}
			}
		}
	}
}
addLoadEvent(startList);

// prepareForms initializes resetFields, which is used to handle default form values
function prepareForms(){
  theForms = document.getElementsByTagName("form");
  for (var i=0; i<theForms.length; i++){
    resetFields(theForms[i]);
  }
}

function resetFields(whichForm){
  for (var i=0; i<whichForm.elements.length; i++){
    var element = whichForm.elements[i];
    if (element.type == "submit") continue;
    if (!element.defaultValue) continue;
    element.onfocus = function(){
	  if(this.value == this.defaultValue){
	    this.value = "";
	  }
	}
	element.onblur = function(){
	  if (this.value == ""){
	    this.value = this.defaultValue;
	  }
	}
  }
}
addLoadEvent(prepareForms);

// Animations
var opacity = 0;
function fadeIn(elemId, speed){
  var elem = document.getElementById(elemId);
  if (elem.fader) {
    clearTimeout(elem.fader);
  }
  if (opacity < 100) {
    opacity = opacity + 10;
    opacity2 = opacity/100;
    elem.style.opacity = opacity2;
    document.getElementById("result-table").style.filter = "alpha(opacity=" + opacity + ")"; //IE fix
    var repeat = "fadeIn('" + elemId +"','" + speed + "')";
    elem.fader = setTimeout(repeat, speed);
  } else {
    opacity = 0;
	return false;
  }
}

function prepareNotice(){
  var e = document.getElementById("notice-bar");
  if(e)
  {
	e.style.marginTop = "-32px";
	setTimeout("slideDown('notice-bar')", 2000);
  }
}

addLoadEvent(prepareNotice);

function slideDown(elemID)
{
  var e = document.getElementById(elemID);
  if(e.movement)
  {
    clearTimeout(e.movement);
  }
  var epos = parseInt(e.style.marginTop);
  if(epos < 0)
  {
    epos = Math.ceil((epos + 1) / 1.5);
    e.style.marginTop = epos+"px";
    e.movement = setTimeout("slideDown('"+elemID+"')", 10);
  }
}