//---Variable to hold properties---//
arrayAllProps = [];
arrayDisplayedProps = [];
var toggledProp='';

function findDisplayedPosition(propId){
	var result;
	for(var i=0; i<arrayDisplayedProps.length; i++){
		if(arrayDisplayedProps[i].id==propId){
			result=i;
			break;
		}
	}
	return result;
}

function zoomToProp(id){
	$selectedDiv = $('#'+id);
	$selectedDiv.trigger('click');
	newScrolltop = $selectedDiv.scrollTop();
	$selectedDiv.scrollTop(newScrolltop);
	$('#'+id).removeClass('listingContainer');
	$('#'+id).addClass('listingContainer_expanded');
	document.location='#'+id;
}

function property(id, propType, address, city, banner, short_description, long_description, bedrooms, bathrooms, pics, thumb, price){

	//----Constructor----//
	this.id=unescape(id);
	this.propType=unescape(propType);
	this.address=unescape(address);
	this.city=unescape(city);
	this.banner=unescape(banner);
	this.short_description=unescape(short_description);
	this.long_description=unescape(long_description);
	this.bedrooms=unescape(bedrooms);
	this.bathrooms=unescape(bathrooms);
	this.pics=unescape(pics);
	this.thumb=unescape(thumb);
	this.price=unescape(price);
	
	//----Public Methods----//
	
	this.printCollapsed=printCollapsed;
	this.printExpanded=printExpanded;
	
	function printCollapsed(containingDivId){
		var short_output = "<div class='collapsed_listing_left'>";
		if(this.thumb!=""){
			short_output += "<img src='property_images/thumb_"+this.thumb+"' class='prop_thumb' />";
		}
		short_output += "</div><div class='collapsed_listing_center'><span class='collapsed_header'>"+this.short_description+"</span><br />";
		if(this.banner != "") short_output += "<span class='banner'>"+this.banner+"</span><br &#47;>";
		short_output += "<span class='collapsed_standard_text'>"+this.address+"</span><br &#47;>";
		short_output += "<span class='collapsed_standard_text'>"+this.city+"</span><br &#47;>";
		short_output += "</div><div class='collapsed_listing_right'>";
		short_output += "<p>$"+fixPrice(this.price)+"<br /> Bedrooms: "+this.bedrooms+"<br &#47;> Bathrooms:"+this.bathrooms+"<br /></p>";
		short_output += "</div><div class='clear'></div></div>";
		return short_output;
	}
		
	function printExpanded(containingDivId){	
		var long_output = "<div class='expanded_listing_minimize'>Click Here to Minimize</div>";
		long_output += "<div class='expanded_listing_top'><span class='expanded_header'>"+unescape(address)+" - "+unescape(city)+" - $"+fixPrice(price)+"</span><br />";
		long_output += "Bedrooms: "+unescape(bedrooms)+" Bathrooms: "+unescape(bathrooms)+"<br /></div><div class='clear'></div>";
		long_output += "<div class='expanded_listing_left'>";
		if(thumb!=''){
			var picsLength=pics.length;
			var picsLastChar = pics.charAt(picsLength-1);
			if(picsLastChar=='x'||picsLastChar=='X') pics = pics.slice(0,picsLength-1); 
			long_output += "<img src='property_images/thumb_"+thumb+"' class='expanded_thumb' /><br />";						
			long_output += "<div class='propMenuContainer'><ul><li><a href='includes/image_displayer.php?imgs="+pics+"&address="+unescape(address)+"' class='picLauncher'>More Images</a></li></ul></div>";
		}
		else{
			long_output += "<img src='../graphics/nopic.gif' class='expanded_thumb' /><br />";
		}
		long_output += "</div><div class='expanded_listing_right'>"+unescape(long_description)+"<div class='propMenuContainer'><ul><li><a href='dbaccess/pdf_create.php?id="+id+"' target='_blank'>Printable Flier</a></li><li><a href='includes/map_displayer.html?city="+escape(city)+"&address="+escape(address)+"&thumb="+escape(thumb)+"&short_description="+escape(short_description)+"' class='picLauncher'>Map</a></li></ul></div></div>";
		long_output += "<div class='clear'></div>";
		long_output += "<div class='expanded_listing_minimize'>Click Here to Minimize</div>";
		long_output += "<div class='clear'></div>";
		return long_output;
	}

	//----Private Methods----//
	
	function fixPrice(amount){
		if(amount<1000) amount*=1000;
		amount += '';
		x = amount.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}
}

function getUrlVars(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

function printDisplayed(){
	var stringToPrint = "";
	for (var n in arrayDisplayedProps){
		stringToPrint+="<div id='"+arrayDisplayedProps[n].id+"' class='listingContainer'>";
		stringToPrint+=arrayDisplayedProps[n].printCollapsed();
		stringToPrint+="</div>";
	}
	document.getElementById("propscontainer").innerHTML = stringToPrint;
	//$('#propscontainer').html(stringToPrint);
}

function populateCitySelect(){
	var cityArray = [];
	for(n in arrayAllProps){
		currCity = arrayAllProps[n].city;
		if($.inArray( currCity, cityArray )===-1){
			cityArray.push(currCity);
			$('#citiesSelect').append('<option value="'+currCity+'">'+currCity+'</option>');
		}
	}
}

$(document).ready(
	function(){
	
		$('a.picLauncher').live("click", function() {
			$.nyroModalManual({
				url: this.href,
				height: 500,
				width: 700
			});
			return false;
		});
		
		$('div.listingContainer').live("click", function(){
			if(!$(this).hasClass('listingContainer_expanded')){
				var currProperty=arrayDisplayedProps[findDisplayedPosition(this.id)];
				var newHeightStr = '25em';
				var numchars = currProperty.long_description.length;
				if(numchars > 600){
					estLines = numchars/75;
					excessLines = estLines-10;
					newHeightInt = 30 + (excessLines*1.2);
					newHeightStr = newHeightInt + 'em';
				}
				$('#'+this.id).removeClass('listingContainer');
				$('#'+this.id).addClass('listingContainer_expanded');
				if(toggledProp!=''){
					$('#'+ toggledProp).removeClass('listingContainer_expanded');
					$('#'+ toggledProp).addClass('listingContainer');
					document.getElementById(toggledProp).innerHTML = arrayDisplayedProps[findDisplayedPosition(toggledProp)].printCollapsed();
					$('#'+toggledProp).animate({
						height: '5.5em'
						}, 500
					);
				}
				toggledProp=this.id;
				document.getElementById(this.id).innerHTML = currProperty.printExpanded();
				$('#'+ this.id).animate({
					height: newHeightStr
					}, 500
				);
			}
		});
		
		$('.expanded_listing_minimize').live("click", function(){
			$(this).parent().removeClass('listingContainer_expanded').addClass('listingContainer').animate({ height: '5em' }, 500);
			document.getElementById(toggledProp).innerHTML = arrayDisplayedProps[findDisplayedPosition($(this).parent().attr('id'))].printCollapsed();
			toggledProp='';
			}
		);
		
		$('#citiesSelect').change(
			function(){
				newCity = this.value;
				if(newCity=="all") arrayDisplayedProps = arrayAllProps;
				else {
					arrayDisplayedProps = $.grep(arrayAllProps, function(e){
						return e.city == newCity;
						}
					);
				}
				printDisplayed();
				$('#citiesSelect').blur();
			}
		);

		params=getUrlVars();
		$.ajax({
			async: false,
			url: '../dbaccess/xml_create.php',
			data: 'propType='+params["propType"],
			success: function($xml){
				$xml = $($xml);
				$xml.find("property").each(
					function() {
						currProp = new property($(this).attr('id'), $(this).find("propType").text(), $(this).find("address").text(), $(this).find("city").text(), $(this).find("banner").text(), $(this).find("short_description").text(), $(this).find("long_description").text(), $(this).find("bedrooms").text(), $(this).find("bathrooms").text(), $(this).find("pics").text(), $(this).find("thumb").text(), $(this).find("price").text());
						arrayAllProps.push(currProp);
						arrayDisplayedProps.push(currProp);
						printDisplayed();
						if(typeof params["selectedId"]!='undefined') zoomToProp(params["selectedId"]);
					}
				);
				populateCitySelect();
			}
		});
	}
);
