function onLoad()
{
	window.setInterval(keepAlive, 15 * 60 * 1000); // 15 minutes
	function keepAlive() { httpRequest('/keep_alive.php', function() { }, function() { }); }
//	var photos = document.getElementsByClassName ? document.getElementsByClassName('photo_div') : getElementsByClassName(document, 'div', 'photo_div');
//	for(var n = 0; n < photos.length; n++)
//		photo(photos[n]);

//	document.body.appendChild(mortgageCalc(519000, '', [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(1, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(10, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(100, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(1000, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(10000, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(519000, 103800, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
//	document.body.appendChild(mortgageCalc(1038000, [{rate:4.71, length:15, text:'15 Year Fixed (4.71%)'}, {rate:5.15, length:30, text:'30 Year Fixed (5.15%)'}]));
}

function activateBanner(banners, index)
{
	var banner = $('banner_div');
	var image = banner.firstChild;
	var caption = banner.lastChild;
	
	var img = new Image(); img.src = '/'+banners[++index < banners.length ? index : index = 0].image;
//	alert(banner+'\n'+image+'\n'+caption+'\n'+banners+'\n'+img);
	window.setInterval(next, 5000);
	
	function next()
	{
		var opacity = 100;
		fadeOut();
		
		function fadeOut()
		{
			if((opacity -= 5) > 0)
			{
				banner.style['opacity'] = banner.style['-moz-opacity'] = (opacity / 100);
				banner.style['filter']  = 'alpha(opacity='+opacity+')';
				setTimeout(fadeOut, 20);
			}
			else
			{
				image.src = img.src;
				caption.innerHTML = banners[index].caption;
				fadeIn();
			}
		}
		
		function fadeIn()
		{
			if((opacity += 5) < 100)
			{
				banner.style['opacity'] = banner.style['-moz-opacity'] = (opacity / 100);
				banner.style['filter']  = 'alpha(opacity='+opacity+')';
				setTimeout(fadeIn, 20);
			}
			else
			{
				img = new Image(); img.src = '/'+banners[++index < banners.length ? index : index = 0].image;
			}
		}		
	}
}

function nextFeatured(link)
{
	httpRequest(link.href+'&jsLoad=1', onLoad);
//	httpRequest('/?nextRental=1&jsLoad=1', onLoad);
// httpRequest('/index.php', onLoad);
	return false;
	
	function onLoad(html)
	{
		if(html)
		{
			var div = ce('div');
			div.innerHTML = html;
			ce(link.parentNode).rw(div.firstChild);
		}
	}
}

function showPopup(link)
{
	var div = ce('div').sp('className', 'popup').sp('id', 'contact').at('Loading...');
	httpRequest(link.href+'&inline=1', onLoad);
	
	function onLoad(html)
	{
		div.innerHTML = html;
	}
}

function fixHeight()
{
	var container_div = $('container');
	var content_div = $('content');
//		var header = $('header');
	var footer = $('footer');
	//var edge_div = document.getElementById('edge_div');
	//var link_div = document.getElementById('link_div');

	var pageH = (document.documentElement) ? document.documentElement.clientHeight : document.body.clientHeight;
	var offset = footer.offsetHeight + content_div.offsetTop + 43;
//		container_div.style.height = '';
//		var contentH = container_div.clientHeight;
	var contentH = content_div.clientHeight;

//	if(pageH > contentH + offset)
		content_div.style.minHeight = (pageH - offset)+'px';
	
//		var newH = (contentH + offset < pageH ? pageH - offset : contentH);
	
	//edge_div.style.height = link_div.style.height = (newH - 40)+'px';
//		container_div.style.height = newH+'px';
}


function mortgageCalc(e, prop) //price, down, terms, id)
{
	e = Form(e, prop);
//	var downPayment = ce('input').sp('type', 'text').sp('name', 'downPayment').sp('onchange', calculate).sp('value', money(down)).sp('onkeyup', tryCalc);
//	var loanTerms = ce('select').sp('name', 'loanTerm').sp('onchange', calculate).sp('onkeyup', calculate);
//	for(var n = 0; n < terms.length; n++)
//		loanTerms.ac(ce('option').sp('value', n).sp('term', terms[n]).at(terms[n].text));
//	var monthlyPayment = ce('div');
	
	var price = prop.value.price;
//	var terms = prop.fields.term.options;
	var downPayment = e.fields.down; downPayment.sp('onchange', calculate).sp('onkeyup', tryCalc);
	var loanLength  = e.fields.len;  loanLength.sp('onchange',  calculate).sp('onkeyup', tryCalc);
	var loanRate    = e.fields.rate; loanRate.sp('onchange',    calculate).sp('onkeyup', tryCalc);
	//var loanTerms   = e.fields.term; loanTerms.sp('onchange', calculate).sp('onkeyup', calculate);
	var monthlyPayment = ce('td'); e.getElementsByTagName('table')[0].tBodies[0].appendChild(ce('tr').ac(ce('th').at('Monthly Payment')).ac(monthlyPayment));
	calculate();

	e.onsubmit = function() { return false; };
	e.saveForm.rs();
	return e;	
	
	function tryCalc() { calculate(true); }
	function calculate(tryCalc)
	{
		var down = parseFloat(downPayment.value.replace(/\$|,/g, ''));
		var len  = parseFloat(loanLength.value.replace(/,/g, ''));
		var rate = parseFloat(loanRate.value.replace(/\%|,/g, ''));
		if(tryCalc != true)
		{
			downPayment.value = money(down, 2);
			loanLength.value  = len || 30;
			loanRate.value    = rate.toFixed(2) || '5.00';
			
			if(isNaN(down))
				return error('Please enter a numeric value for the down payment');
			else if(isNaN(len))
				return error('Please enter a numeric value for the loan length');
			else if(isNaN(rate))
				return error('Please enter a percentage for the loan rate');
		}
		
		if(down && len && rate)
		{
			if(down > price)
				return error('Down payment is greater than the price of the property');
			// var term = terms[loanTerms.selectedIndex];
			// var rate = term.rate / 1200;
			// var len  = term.length;
			rate /= 1200;
			len *= 12;
			var total = price - down;
			var payment = total * (rate / (1 - Math.pow(1 + rate, -len)));
			monthlyPayment.cl().sp('className', 'payment').at(money(payment));
		}
		else monthlyPayment.cl();
	}
	
	function error(text)
	{
		monthlyPayment.cl().sp('className', 'error').at(text);
	}
	
	function money(num, places)
	{
		if(isNaN(num))
			return '';

		var out = '';
		var match = (num.toFixed(places || 2)+'').match(/(\d+)\.?(\d*)/);
		num = match[1];
		dec = match[2];
		var len = num.length;
		for(var n = 1; n <= len; n++)
			out = ((n % 3) == 0 && len > 4 && n < len ? ',' : '')+num.charAt(len - n) + out;
		return (out != 0 ? '$' : '')+out+(parseInt(dec) ? '.'+dec : '');
	}
}

function photo(element, photos)
{
	var img  = element; img.onload = null;
	var link = img.parentNode; if(link.href == 'javascript:;' && photos.length > 1) link.onclick = next;
	var div  = link.parentNode;
	var nav_div    = div.getElementsByTagName('div')[0];
	var count_span = nav_div.getElementsByTagName('span')[0];
	
	var match = count_span.innerHTML.match(/(\d+)([^\d]*?)(\d+)/);
	var index = parseInt(match[1]) - 1;
	var sep   = match[2];
	var count = photos.length;

	var temp = new Image(); temp.src = photos[(index > 0 ? index : count) - 1];
	temp = new Image(); temp.src = photos[(index + 1) % count];
	
	if(count > 1)
	{
		var prev_a = document.createElement('a'); prev_a.onclick = prev; prev_a.href = 'javascript:;'; prev_a.className = 'prev'; prev_a.appendChild(document.createTextNode('<'));
		nav_div.insertBefore(prev_a, count_span);
		
		var next_a = document.createElement('a'); next_a.onclick = next; next_a.href = 'javascript:;'; next_a.className = 'next'; next_a.appendChild(document.createTextNode('>'));
		nav_div.appendChild(next_a);
	}
	
	return img;
	
	function prev()
	{
		if(--index < 0)
			index = count - 1;
		temp = new Image(); temp.src = photos[(index > 0 ? index : count) - 1];
		prev_a.blur();
		return show();
	}
	
	function next()
	{
		if(++index >= count)
			index = 0;
		temp = new Image(); temp.src = photos[(index + 1) % count];
		next_a.blur();
		return show();
	}
	
	function show()
	{
		img.src = photos[index];
		count_span.innerHTML = (index + 1)+sep+count;
		return false;
	}
}

function showPrint(id, link, removeElement)
{
	var element = $(id);
	var onresize = window.onresize;
	window.onresize = null;

	var elements = [], temp;
	while(temp = document.body.lastChild)
	{
		elements.push(temp);
		document.body.removeChild(temp);
	}
	
	if(removeElement)
	{
		for(var n = 0; n < element.childNodes.length; n++) // adds everything except the print link
			if((temp = element.childNodes[n]) != link)
				document.body.appendChild(temp.cloneNode(true));
	}
	else document.body.appendChild(element.cloneNode(true));
	
	window.setTimeout(print, 250);
	
	function print()
	{
		window.print();
		window.setTimeout(close, 250);
	}
	
	function close()
	{
		while(temp = document.body.lastChild)
			document.body.removeChild(temp);
		for(var n = 0; n < elements.length; n++)
			document.body.appendChild(elements[n]);
		window.onresize = onresize;
	}
	
	return false;
}

function httpRequest(url, handler, onError)
{
	if(window.XMLHttpRequest || window.ActiveXObject)
	{
		var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
		request.onreadystatechange = onStateChange;
		request.open('GET', url, true);
		request.send('');
	}
	else if(onError)
		onError('XML request not supported, get a new browser!!!');
	else alert('XML request not supported, get a new browser!!!');
	
	function onStateChange()
	{
		if(request.readyState == 4) // 4 means done loading
		{
			if(request.status == 200)
				handler(request.responseText);
			else if(onError)
				onError(request);
			else alert('Load Failed: status: '+request.status+": "+request.statusText);
		}
	}
}

function $(id)
{
	return document.getElementById(id);
}
