// Function runs on window load, determines what images are in the 
// thumbs section, sets their onclick events, and preloads the
// larger images.
//
function initThumbs()
{
	
	if (!document.getElementsByTagName){ return; }
	var gallery = document.getElementById("thumbs");
	if(!gallery){ return; }
	var thumbs = gallery.getElementsByTagName("a");
	var preload = new Array();

	// loop through all anchor tags
	for (var i=0; i<thumbs.length; i++){
		var thumb = thumbs[i];
		preload[i] = thumb.getAttribute("href").replace('full','mid');
		thumb.onclick = function() { 
			// swap image
			MM_swapImage('mainPhoto','',this.getAttribute("href").replace('full','mid'),0); 
			// change photo link
			var anchors = document.getElementById('photo-holder').getElementsByTagName('a');
			var photolink = anchors[0];
			photolink.href = this.getAttribute("href");
			return false; 
		}
	}
	preLoad(preload);
}
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_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function preLoad(images) {
	var loader = new Array();
	for(var i = 0; i < images.length; i++){
	   loader[i] = new Image();
	   loader[i].src = images[i];
	}
}


//
// calcPayment()
// calculates mortgage payment
//
function calcPayment(frm) {
/*
$sale_price              = ereg_replace( "[^0-9.]", "", $sale_price);
$annual_interest_percent = eregi_replace("[^0-9.]", "", $annual_interest_percent);
$annual_property_taxes   = eregi_replace("[^0-9.]", "", $annual_property_taxes);
$annual_insurance        = eregi_replace("[^0-9.]", "", $annual_insurance);
$year_term               = eregi_replace("[^0-9.]", "", $year_term);
$down_percent            = eregi_replace("[^0-9.]", "", $down_percent);
$down_payment            = eregi_replace("[^0-9.]", "", $down_payment);
*/
	
	var sale_price = stripCurrency(frm.sale_price.value);
	var annual_interest_percent = parseFloat(frm.annual_interest_percent.value);
	if(frm.annual_property_taxes.value == '') var annual_property_taxes = 0;
	else var annual_property_taxes = stripCurrency(frm.annual_property_taxes.value);
	if(frm.annual_insurance.value == '') var annual_insurance = 0;
	else var annual_insurance = stripCurrency(frm.annual_insurance.value);
	var year_term = parseFloat(frm.year_term.value);
	var down_payment = stripCurrency(frm.down_payment.value);

	if((year_term == '') || (sale_price == '') || (annual_interest_percent == '')) {
		alert('You must enter Sale Price of Home, Length of Mortgage,\n and an Annual Percentage Rate.');
	}
	else {
		var month_term = year_term * 12;
		var annual_interest_rate = annual_interest_percent / 100;
		var monthly_interest_rate = annual_interest_rate / 12;
		var financing_price = sale_price - down_payment;
		var monthly_factor = get_interest_factor(year_term, monthly_interest_rate);
		//alert('Monthly Interest Rate: ' + monthly_interest_rate + '\n Monthly Factor: ' + monthly_factor);
		var monthly_payment = financing_price / monthly_factor;
		var monthly_taxes = annual_property_taxes / 12;
		var monthly_insurance = annual_insurance / 12;
		var total_payment = monthly_payment + monthly_taxes + monthly_insurance;
		monthly_payment = moneyFormat(monthly_payment);
		total_payment = moneyFormat(total_payment);
	}
	updatePayment(monthly_payment,1);
	updatePayment(total_payment,2);
	DoFade(StartFadeAt, 'payment-info');
}

function stripCurrency(num) {
	num = num.toString().replace(/\%|\$|\,/g,'');
	return(num);
}

function get_interest_factor(year_term, monthly_interest_rate) {
	var factor = 0;
	var base_rate = 1 + monthly_interest_rate;
	var denominator = base_rate;
	for (i=0; i < (year_term * 12); i++) {
		factor += (1 / denominator);
		denominator *= base_rate;
	}
	return factor;
}  

function moneyFormat(mnt) {
    mnt -= 0;
    mnt = (Math.round(mnt*100))/100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00' 
              : ( (mnt*10 == Math.floor(mnt*10)) ? 
                       mnt + '0' : mnt);
}

//
// updatePayment()
// updates payment-info dd with new payment info
function updatePayment(amt, num) {
	var payment_info = document.getElementById('payment-info');
	var dds = payment_info.getElementsByTagName('dd');
	var dd_length = dds.length;
	for(i=0; i<dds.length; i++) {
		if((i+1) == num) dds[i].innerHTML = '$' + amt;
	}
}

// This is the amount of time (in milliseconds) that will lapse between each step in the fade
var FadeInterval = 300;

// This is where the fade will start, if you want it to be faster and start with a lighter color, make this number smaller
// It corresponds directly to the FadeSteps below
var StartFadeAt = 7;

// This is list of steps that will be used for the color to fade out
var FadeSteps = new Array();
	FadeSteps[1] = "F5F5F5";
	FadeSteps[2] = "f7f7e6";
	FadeSteps[3] = "f8f8d6";
	FadeSteps[4] = "fafac7";
	FadeSteps[5] = "fcfcb8";
	FadeSteps[6] = "fdfda8";
	FadeSteps[7] = "FFFF99";
	
// This is the recursive function call that actually performs the fade
function DoFade(colorId, targetId) {
    if (colorId >= 1) {
		document.getElementById(targetId).style.backgroundColor = "#" + FadeSteps[colorId];
		
        // If it's the last color, set it to transparent
        if (colorId==1) {
            //document.getElementById(targetId).style.backgroundColor = "transparent";
		}
        colorId--;
		
        // Wait a little bit and fade another shade
        setTimeout("DoFade("+colorId+",'"+targetId+"')", FadeInterval);
	}
}

function initCalc() {
	if(pageForm = document.getElementById('calcForm')) {
		pageForm.onsubmit = function() { calcPayment(this); return false; }
	}
}

addLoadEvent(initCalc);
addLoadEvent(initThumbs);
