﻿var ListResultsManager = Class.create({
	initialize: function(params)
	{
		this.viewMode = params.viewMode;
		this.showPrint = true;
		this.allowCache = true;
		
		this.map = new MapResultsManager({
			viewMode: this.viewMode
		});
		
		Event.observe($('sort-price'), 'click', this.sort_Click.bindAsEventListener(this));
		Event.observe($('sort-bed'), 'click', this.sort_Click.bindAsEventListener(this));
		Event.observe($('sort-bath'), 'click', this.sort_Click.bindAsEventListener(this));
		Event.observe($('sort-sqft'), 'click', this.sort_Click.bindAsEventListener(this));
		
	},
	getSearchResults: function()
	{
		var sort = this.getSortField();
		this.doAjaxSearch({
			mode: 'Advanced',
			price: $F('ddlHSPriceLow') + ':' + $F('ddlHSPriceHigh'),
			squarefeet: $F('ddlHSSquareFeet'),
			community: $F('ddlHSCommunity'),
			status: $F('ddlHSStatus'),
			city: $F('ddlHSCity'),
			bathrooms: $F('ddlHSBathrooms'), 
			bedrooms: $F('ddlHSBedrooms'),
			levels: $F('ddlHSLevels'),
			garage: $F('ddlHSGarageSize'),
			floorplan: $F('ddlHSFloorplan'),
			collection: $F('ddlHSCollection'),
			sort: sort
		}); 
	},
	doSimilarPriceSearch: function(lowprice, highprice)
	{		
		var sort = this.getSortField();
		this.doAjaxSearch({
			mode: 'Advanced',
			price: lowprice + ':' + highprice,
			squarefeet: '',
			community: '',
			status: '',
			city: '',
			bathrooms: '', 
			bedrooms: '',
			levels: '',
			garage: '',
			floorplan: '',
            collection: '',
			sort: sort
		});		 		 
	},	
	doSimilarSqFtSearch: function(minsqft, maxsqftt)
	{		
		var sort = this.getSortField();
		this.doAjaxSearch({
			mode: 'Advanced',
			price: '0:1000000',
			squarefeet: minsqft + ':' + maxsqftt,
			community: '',
			status: '',
			city: '',
			bathrooms: '', 
			bedrooms: '', 
			levels: '',
			garage: '',
			floorplan: '',
			collection: '',
			sort: sort
		});		 		 
	},
	getDefaultResults: function()
	{
		this.loadFeatured('MostPopular');
	},
	loadFeatured: function(featureType)
	{
		this.showPrint = false;
		this.allowCache = false;
		
		new Effect.Appear('loading', {duration: .2});	
		$('print-link').hide();
		
		var base = this;
		new Ajax.Updater('resultslist', '/assets/ajax/handlers/mls-featured.aspx', 
		{
			method: 'get',
			parameters: {type: featureType},
			onComplete: function(transport)
			{ 	
				new Effect.Fade('loading', {duration: .5});
				base.showPrint = true;
				base.allowCache = true;
				
				$$('ul.featured-homes li a.homelink').each(function(item)
		        {
		            Event.observe(item, 'click', function(ev)
		            {
		                Event.stop(ev);
		                $$('div.featuredtooltip').each(function(tip)
		                {
		                    tip.hide();
		                });
		                new Effect.Appear($(item).siblings('div.featuredtooltip')[0], {duration: .2});	
		            });
		        });
			},
			onFailure: function(transport)
			{ 	
				//alert(transport.responseText);
			}
		 });
	
	},
	getLookupResults: function()
	{
		var sort = this.getSortField();
		this.doAjaxSearch({
			mode: 'MLSAddress',
			search: $F('txtHSLookupMLS'),
			sort: sort
		});
	},
	doAjaxSearch: function(params)
	{	
		new Effect.Appear('loading', {duration: .2});	
		if (this.showPrint)
		{
			$('print-link').show();
		}
		else
		{
			$('print-link').hide();
		}
		
		params = Object.extend(params, 
		{
			allowCache: this.allowCache
		});
		
		var base = this;
		new Ajax.Updater('resultslist', '/assets/ajax/handlers/mls-search.aspx', 
		{
			method: 'get',
			parameters: params,
			onComplete: function(transport)
			{ 	
				if (base.viewMode == 'map')
				{
					base.map.update();
				}
				base.updateCount();
				new Effect.Fade('loading', {duration: .5});
				base.showPrint = true;
				base.allowCache = true;
			},
			onFailure: function(transport)
			{ 	
				//alert(transport.responseText);
			}
		 });
		 		 
	},
	updateCount: function(count)
	{
		$('spnCount').hide();
		new Effect.Appear($('spnCount'), {from: .3, to: 1});
		$('spnCount').update($$('div.resultitem').length);	
	},
	sort_Click: function()
	{
		var sorted = new Array();
		switch(this.getSortField())
		{
			case 'SquareFeet' :
				sorted = $$('#resultslist div.resultitem').sort(this.sortBySquareFootage);
				break;
			case 'Price' :
				sorted = $$('#resultslist div.resultitem').sort(this.sortByPrice);
				break;
			case 'Beds' :
				sorted = $$('#resultslist div.resultitem').sort(this.sortByNumBeds);
				break;
			case 'Baths' :
				sorted = $$('#resultslist div.resultitem').sort(this.sortByNumBaths);
				break;
		}
		$$('#resultslist div.resultitem').each(function(item)
		{
			item.remove();
		});
		for(var idx = 0; idx < sorted.length; idx++)
		{
			$('resultslist').insert(sorted[idx]);
		}		
	},
	getSortField: function()
	{
		if ($('sort-price').checked)
		{
			return 'Price';
		}
		else if($('sort-bed').checked)
		{
			return 'Beds';
		}
		else if($('sort-bath').checked)
		{
			return 'Baths';
		}
		else if($('sort-sqft').checked)
		{
			return 'SquareFeet';
		}
	},
	sortBySquareFootage: function(a,b)
	{
		//a,b are list items
		var x = parseInt(a.select('span.squarefeet')[0].innerHTML);
		var y = parseInt(b.select('span.squarefeet')[0].innerHTML);
		return ((x > y) ? -1 : ((x < y) ? 1 : 0)); //desc
	},
	sortByPrice: function(a,b)
	{
		//a,b are list items
		var x = parseInt(a.select('span.pricenum')[0].innerHTML);
		var y = parseInt(b.select('span.pricenum')[0].innerHTML);
		return ((x < y) ? -1 : ((x > y) ? 1 : 0)); //asc
	},
	sortByNumBeds: function(a,b)
	{
		//a,b are list items
		var x = parseInt(a.select('span.bedrooms')[0].innerHTML);
		var y = parseInt(b.select('span.bedrooms')[0].innerHTML);
		return ((x > y) ? -1 : ((x < y) ? 1 : 0)); //desc
	},
	sortByNumBaths: function(a,b)
	{
		//a,b are list items
		var x = parseFloat(a.select('span.bathrooms')[0].innerHTML);
		var y = parseFloat(b.select('span.bathrooms')[0].innerHTML);
		return ((x > y) ? -1 : ((x < y) ? 1 : 0)); //desc
	}
});