
var compareHomes = new Class({
	
	//
	// Initalize compareHomes
	//
	initialize: function(options) {
		this.options = options; //save our opitons.

		this.buttons = $S('.compbutton');
		this.buttons.each(this.buttonHandler,this);
		
		this.clear = $('clear');
		
		// clear href support and bind onclick
		this.clear.setProperty('href', 'javascript:void(0);');
		this.clear.onclick = this.clearFolder.bind(this);
		
		// check if the folder has homes in it, if so show the compare folder
		if($('folder_cnt').innerHTML.toInt() > 0) {
			$('folder').setStyles({
				display:'block',
				visibility:'visible'
			});
		}
		
	},

	//
	// handles compare button clicks
	//
	buttonHandler: function(el, i) {
		el.setProperty('href', 'javascript:void(0);');
		el.onclick = function(){

			this.id = el.getProperty('rel');
			var o = $(this.id);
			
			if(this.overLimit()) {
				alert('Only a max of 3 homes allowed in the compare folder.');
				return;
			}
			
			var clone = o.clone(this.id);
			
			var x = o.getLeft();
			var y = o.getTop();
			var w = o.getStyle('width');
			var h = o.getStyle('height');
			
			
			var left = Window.getScrollLeft();
			var top =  Window.getScrollTop();
			var width = Window.getWidth();
			var height = Window.getHeight();
	
			// make sure folder is visible
			$('folder').setStyles({
				display:'block',
				visibility:'visible'
			});
	
			clone.setProperty('id', 'transEffect');
			clone.setStyles({
			   position:'absolute',
			   overflow:'hidden',
			   zindex:5,
			   top: y + 'px',
			   left:  x + 'px',
			   width: w,
			   height: h
			});
			
			clone.injectAfter('folder');
			
			var myFx = new Fx.Style(clone, 'opacity').set(0.8); //will make it immediately transparent
	
			var myEffects = clone.effects({
				duration: 750, 
				transition: Fx.Transitions.linear, 
				fps: 20,onComplete:this.updateFolder.bind(this)
			});
			
			myEffects.custom({
				'top': [y, top + height], 
				'left': [x, left + width - $('folder').getStyle('width').toInt() + 50],
				'width':[550, 0],
				'height':[150, 0]
			});
		}.bind(this);
	},
	
	//
	// update the compare folder
	//
	updateFolder: function() {
		
		// destroy animation effect
		$('transEffect').remove();
		
		// get home count
		var hcnt = $('folder_cnt').innerHTML.toInt();
		$('folder_cnt').setHTML(++hcnt);
		
		new Ajax('/myhome/compare_addhome.php?id=' + this.id, {
			method:'get',
		    onComplete: this.addhomeComplete.bind(this)
		}).request();

	},
	
	//
	// Ajax returns after completing add of home to folder
	//
	addhomeComplete:function(responseText){
		
		if(responseText.length > 0) {
			alert(responseText);
			
			var hcnt = $('folder_cnt').innerHTML.toInt();
			$('folder_cnt').setHTML(--hcnt);
		}
		
	},
	
	//
	// clear the compare folder
	//
	clearFolder:function(event){
		// get home count
		$('folder_cnt').setHTML(0);
		
		new Ajax('/myhome/compare_clear.php', {
			method:'get'
		}).request();
		window.location.reload();
	},
	
	
	//
	// Check if the folder is over the limit
	//
	overLimit: function() {

		var hcnt = $('folder_cnt').innerHTML.toInt();
		
		if(hcnt >= 3)
			return true;
			
		return false;
	}
	
			
});

var TmMenu = new Class({

	setOptions: function(options){
		this.options = {
			transitionStart: Fx.Transitions.sineInOut,
			transitionEnd: Fx.Transitions.sineInOut,
			fxDuration: 500,
			maxOpacity: 0.8,
			timeOut: 250,
			
			className: 'menutip'
		}
		Object.extend(this.options, options || {});
	},
	
	//
	// Initalize compareHomes
	//
	initialize: function(options) {
		this.setOptions(options);
		this.a = $ES('a','menu');
		this.menuTip = new Element('div').addClass(this.options.className).setStyle('opacity', '0.8').injectInside(document.body);
		this.menuInner = new Element('div').injectInside(this.menuTip);
		this.menuText = new Element('p').injectInside(this.menuInner);
		this.fx = new Fx.Style(this.menuInner, 'margin-top', {duration: this.options.fxDuration, wait: false,unit:'em'}).set(-3);
		
		// iterate each list item
		$A(this.a).each(function(el){
			$(el).myText = el.title || false;
			if (el.myText) {
				el.removeAttribute('title');
/*
				el.onmouseover = function(){
					this.show(el);
					return false;
				}.bind(this);
				el.onmouseout = function(){
					this.timer = $clear(this.timer);
					this.disappear();
				}.bind(this);
*/
				}
			
		},this);
	},
/*	
	show: function(el){
		this.menuText.innerHTML = el.myText;
		this.timer = $clear(this.timer);
		this.fx.options.transition = this.options.transitionStart;
		this.timer = this.appear.delay(this.options.timeOut, this);
	},
*/
	appear: function(){
		this.fx.custom(this.fx.now,0);			
	},
	
	disappear: function(){
		this.fx.options.transition = this.options.transitionEnd;
		this.fx.custom(this.fx.now,-3);
	}
	
});

var TmDropdown = new Class({

	setOptions: function(options){
		this.options = {
			transitionStart: Fx.Transitions.sineInOut,
			transitionEnd: Fx.Transitions.sineInOut,
			fxDuration: 300,
			maxOpacity: 0.8,
			timeOut: 300
		}
		Object.extend(this.options, options || {});
	},
	
	//
	// Initalize drop down
	//
	initialize: function(list, trigger, close, options) {
		this.setOptions(options);
		this.list = $(list);
		this.trigger = $(trigger);
		this.fx = new Fx.Style(this.list, 'height', {duration: this.options.fxDuration, wait: true});
		this.height = this.list.scrollHeight;
		this.visible = false;
		this.trigger.setProperty('class','commListClosed');
		this.close = $(close);
		
		this.trigger.onclick = function() {
			if(!this.visible)
				this.show(this.list);
			else
				this.disappear();
				
			return false;
		}.bind(this);
		
		this.close.onclick = function() {
			this.disappear();
			return false;
		}.bind(this);
		
	},
	
	
	show: function(el){
		//console.log('show %o', el);
		this.trigger.setProperty('class','commListOpen');
		this.fx.options.transition = this.options.transitionStart;
		this.fx.custom(0,this.height);	
		this.visible = true;
		
	},
	
	disappear: function(){
		//console.log('disappear');
		this.timer = $clear(this.timer);
		this.timer = this.hide.delay(this.options.timeOut, this);
	},
	
	hide: function() {
		//console.log('hide');
		this.fx.options.transition = this.options.transitionEnd;
		this.fx.custom(this.height,0);
		this.visible = false;
		this.trigger.setProperty('class','commListClosed');
	}
});


var TmHoverAnimate = new Class({

	setOptions: function(options){
		this.options = {
			transitionStart: Fx.Transitions.sineInOut,
			transitionEnd: Fx.Transitions.sineInOut,
			fxDuration: 500
		}
		Object.extend(this.options, options || {});
	},
	
	//
	// Initalize hover icon informmation
	//
	initialize: function(list,caption, options) {
		this.setOptions(options);
		this.list = list;
		
		this.origTxt = caption.innerHTML;
		this.caption = caption;

		this.fxIn = new Fx.Style(this.caption , 'opacity',{onComplete:this.fadedIn.bind(this),duration: this.options.fxDuration, wait: true}).start(0,1); 
		this.fxOut = new Fx.Style(this.caption , 'opacity',{onComplete:this.fadedOut.bind(this), duration:this.options.fxDuration, wait: true}); 
		
		this.list.each(this.hoverHandler,this);
		
	},
	
	hoverHandler: function(el, i) {

		el.onmouseover = function(){
			$clear(this.timer);
			$clear(this.effect_timer);
			
			if(this.text == el.getProperty('rel') )
				return;
			
			this.text = el.getProperty('rel');
			this.effect_timer = this.effectOut.delay(300,this);
			
		}.bind(this);
		
		el.onmouseout = function(){
			$clear(this.effect_timer);
			$clear(this.timer);
			this.timer = this.timeOut.delay(300,this);
			
		}.bind(this);
		
	},
	
	effectIn:function() {
		this.fxIn.start(0,1);
	},
	effectOut:function() {
		this.fxOut.start(1,0);
	},

	fadedOut: function(){

		this.caption.setHTML(this.text);
		this.effect_timer = this.effectIn.delay(300,this);
	},
	
	fadedIn: function() {
		// nothing
	},
	
	
	timeOut: function() {
		this.text = this.origTxt;
		this.fxOut.start(1,0);
	}
	
});


//
// Load the functions we need immediately.
//
Window.onDomReady(function() {
	
	// need options? try novatexDOM({color: "black"})
	var ntsDOM = new novatexDOM();
	var menu = new TmMenu();
	
	// append hover capabilities
	//ntsDOM.append_over('thumb-results','home-thumbs', 'LI');
	
	// if community drop down list
	if($('communityDropList')) var dd = new TmDropdown('communityDropList','commListA', 'commListClose');
	
	if($('slideshow_viewer'))ntsDOM.imgFadeSwitch('slideshow_viewer');
	
	if($('myhomesearch') && $('info_popup')) var info_ani = new TmHoverAnimate($$('#myhomesearch ul li'), $('info_popup'));
	
	if($('contact_menu') && $('info_popup')) var contact_ani = new TmHoverAnimate($$('#contact_menu ul li'), $('hover_text'));
	
	// create comare folder
	var compareFolder = new compareHomes();
	
	
	// set inline flash replacement for titles
	if(typeof sIFR == "function") sIFR.replaceElement(".swf-replace", named({sFlashSrc: "/sifr/bookAntiquaBoldItalic.swf", sColor: "#E10019",sWmode:"opaque"}));
	
	// handle any ajax links
	$$('.ajax').each(function(link) {
		link.setProperty('ajaxhref',link.getProperty('href'));
		link.setProperty('href', 'javascript:void(0);');
	},this);
	

	$$('.ajax').each(function(tab) {
		tab.onclick = function() {
			$('loading').setStyle('display','block');
			
			ahref = tab.getProperty('ajaxhref');
			update_id = tab.getProperty('rev');
			tab.hideFocus=true;

			var myAjax = new Ajax(ahref + 'ajax/', {evalScripts:true,update: update_id,onComplete:function(){
				$('loading').setStyle('display','none');
				
			}
			}).request();
		
				
		}
	},this);
	
	

	
});


// LEGACY ******************************************************************************
// usage: setCheckedValue(document.forms['radioExampleForm'].elements['number'], '2');"
function setCheckedValue (iForm,iRadio, newValue) {
	var radioObj = document.forms[iForm].elements[iRadio];
	
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}
	
function popup(a, name, width, height, opts) {
	win = window.open(a.href, name, 'width=' + width + ', height=' + height + ', scrollbars, resizable' + ((opts) ? ', ' + opts : '')); 
	return false;
}
	
function sync_fplans(fp1, fp2) {
	if (fp1.selectedIndex == fp2.selectedIndex) return;
		else fp2.selectedIndex = fp1.selectedIndex;
}

function show_search() {
	var s = $('newhomesearch');
	if(!s) return;
	s.className=s.className.replace(new RegExp("hidden\\b"), "");
	
	var r = $('refineSearch');
	if(!r) return;
	r.className += "hidden";
}


function number_format( n, c, d, t ) {
	if (n == 0) return '0.00'
	var m = ( c = Math.abs(c) + 1 ? c : 2, d = d || ".", t = t || ",", /(\d+)(?:(\.\d+)|)/.exec( n + "" ) ), x = m[1].length % 3;
	return ( x ? m[1].substr( 0, x ) + t : "" ) + m[1].substr( x ).replace( /(\d{3})(?=\d)/g, "$1" + t ) + ( c ? d + ( +m[2] ).toFixed( c ).substr( 2 ) : "" );
}
function toFloat(n) {
	return parseFloat(n.replace(/[^\d\.]/, ''));
}
function mortgageCal(el) { 
	var form = (el.form) ? el.form : el;
	var downPayment = toFloat(form.downPayment.value);
	var annualRate = toFloat(form.annualRate.value) / 100;
	var years = toFloat(form.years.value);
	
	var monthRate = annualRate / 12;
	var numPayments = years * 12;
	var payment = form.monthlyPayment.value;
	
	var principal = payment / (monthRate / (1 - Math.pow((1 + monthRate), -numPayments)));
	var loanAmount = principal + downPayment;
	var total = payment * numPayments;
	var interest = total - principal;
	
	$('loanAmount').innerHTML = number_format(loanAmount.toFixed(2)); 
	$('interestPaid').innerHTML = number_format(interest.toFixed(2));
	$('numPayments').innerHTML = numPayments;
	$('total').innerHTML = number_format(total.toFixed(2));
	$('calcOut').style.display = 'block';
}
function paymentCal(el) { 
	var form = (el.form) ? el.form : el;
	var loanAmount = toFloat(form.loanAmount.value);
	var downPayment = toFloat(form.downPayment.value);
	var annualRate = toFloat(form.annualRate.value) / 100;
	var years = parseInt(form.years.value);
	var principal = loanAmount - downPayment;
	
	var monthRate = annualRate / 12;
	var numPayments = years * 12;
	
	var payment = principal * (monthRate / (1 - Math.pow((1 + monthRate), -numPayments)));
	var total = payment * numPayments;
	var interest = total - principal;
	
	$('interestPaid').innerHTML = number_format(interest.toFixed(2));
	$('numPayments').innerHTML = numPayments;
	$('monthlyPayment').innerHTML = number_format(payment.toFixed(2), 2, '.', ','); 
	$('total').innerHTML = number_format(total.toFixed(2));
	$('calcOut').style.display = 'block';
}

Window.onDomReady(function allocateSidebarHeight() {
	//if (document.getElementById("r-column")){
		//var LeftColumn = document.getElementById("l-column");
		//var RightColumn = document.getElementById("r-column");
		//if((LeftColumn.offsetHeight) < RightColumn.offsetHeight) {
			//document.getElementById("l-column").style.height = RightColumn.offsetHeight; 
		//}
	//}
});

