var curSort;		// current sort type
var curPage = 0;

var curSortOrder = 'asc';
var resultsPageSize = 5;
var prevPageObj = null;

var numComms = 0;
var numFilteredComms = 0;

var popUpWidth;
var popUpHeight;
var curPhotoViewer;

var largePhotoWidth = 276;
var largePhotoHeight = 184;

var commResultTemplate = '<div><div class="apartment-unit-listing-for-rent"><div class="apartment-module-main"><div class="inside"><div class="apartment-rent-price"><div class="amount"><span class="amount_field"></span>{per_month}</div><div class="result-distance">Distance:<span class="distance_field"></span></div></div><div class="apartment-size"><div class="beds-baths"><span class="beds_field"></span></div><div class="beds-baths"><span class="baths_field"></span></div><div class="floor-plan">{available_text}</div><div class="square-footage"><span class="sqft_field"></span></div></div><div class="apartment-rental-community-info"><div class="community-name"><a class="link_to_comm@href" href="#" title="View this available unit at {name}"><span class="name_field"></span><span class="apartment-community">{display_text}</span></a></div><br />{promo}</div><div class="apartment-photo-thumb"><div class="photo-thumb-number"></div><div class="photo-top"></div><div class="photo-mid"><img id="" class="front_jpeg jpeg_field@src jpeg_id@id" src="{front_jpeg}" alt="{display_text}" /></div><div class="photo-bot"></div></div><div class="unit-result-flare"></div><div class="apt-buttons"><span class="btn-view-unit"><a href="#" class="link_to_comm@href" title="View this {display_text}">Go to {apthome}</a></span></div></div></div></div></div>';

var photoPopUpTemplate = $('<div class="apartment-rental-photo-viewer" style="position:absolute;">	<div class="large-photo-top">	<div class="search-thumb-text"><span class="forward">Click GO</span>See all <span class="countField"></span> photos.</div>	<img src="images/pixel.png" class="popUp@src" width="276" height="184" />	</div>	<div class="large-photo-bot"></div>	</div>').get(0);

var thumbPositions = [];

$(document).ready(function() {
	
	if ($("#apartment-search-map").length) {
		mflMap = new MFLMap();
	}
	
	numComms = numFilteredComms = loadCommData();
	
	var pageOptions = {click: clickCommPage, numItems: numFilteredComms, textButtons: false};
	var cookiePage = $.cookies.get('curPage');
	var cookieLoc = $.cookies.get('curLoc');
		
	if (cookiePage && cookieLoc == window.location) {
		curPage = parseInt(cookiePage);
		pageOptions['initialPage'] = curPage+1;
	}
	else if (typeof(searchPageNum) == 'number') {
		pageOptions['initialPage'] = searchPageNum;
		curPage = searchPageNum-1;
	}
	else curPage = 0;
	
	$("ul.results-pager").paginate(pageOptions);
	
	var s = (numComms == 1) ? '' : 'ES';
	$("#num_search_results").text(numComms + ' MATCH' + s + ' TOTAL');
	
	// handle switching sort types
	$("div.switcher a").click(function() {
		$("div.switcher a").removeClass('selected');
		$(this).addClass('selected');
		var sortType = $(this).text();
		switch(sortType) {
			case 'Price':
				sortResults('rent');
				break;
			case 'Size (sq. ft.)':
				sortResults('area');
				break;
			case 'Distance':
				sortResults('distance');
				break;
		}
		var cur_span = $(this).find('span').eq(1);
		cur_span.removeClass();
		var newClass = (curSortOrder == 'asc') ? 'center-down' : 'center-up';
		cur_span.addClass(newClass);
		return false;
	});
	
	// hilight distance button
	if (numComms) {
		$("div.switcher a:eq(0)").addClass('selected').find('div').eq(1).addClass('center-down');
		clickCommPage(curPage);
	}
	
	var thumbWidth = 75;
	var thumbHeight = 50;
	var photoViewerShowing = false;
	
	$(document).mousemove(function(e) {
		var x,y;
		var mouseX, mouseY;
		var overViewer = false;
		mouseX = e.clientX - window.scrollX;
		mouseY = e.clientY + scrollY();
		for (i in thumbPositions) {
			x = thumbPositions[i][0];
			y = thumbPositions[i][1];
			if (mouseX > x && mouseX < x + thumbWidth && mouseY > y && mouseY < y + thumbHeight) {	
				photoViewerShowing = true;
				showPhotoViewer($("#" + i).get(0));
				overViewer = true;
			}
		}
		
		if (!overViewer && photoViewerShowing) {
			photoViewerShowing = false;
			hidePhotoViewer();
		}
	});
	
	// set up filter checkboxes
	$("#photos_checkbox,#video_checkbox,#rtavail_checkbox").click(function() {
		clickCommPage(0);
		var pageOptions = {click: clickCommPage, numItems: numFilteredComms, textButtons: false};
		$("ul.results-pager").paginate(pageOptions);
	});
	
	$('.apartment-unit-listing-for-rent').hover(
	function() {
		$(this).addClass("hovered");
	},
	function() {
		$(this).removeClass("hovered");
	});
});

function clickCommPage(page) {
	var allComms = commObjects.length;
	var buffer = '';
		
	var unit;
	var curObjects = [];
	var curID;
	
	// get filter values
	var photos = $("#photos_checkbox").attr('checked');
	var video = $("#video_checkbox").attr('checked');
	var rtAvail = $("#rtavail_checkbox").attr('checked');
	var commCount;
	
	// check if list is being filtered
	if (photos || video || rtAvail) {
		commCount = 0;
		for (unit=0; unit < allComms; unit++) {
			curID = commObjects[unit]['id'];
			if (photos && commsArray[curID]['commassets']['photo_count'] == 0) continue;
			if (video && (typeof(commsArray[curID]['commassets']['youtube']) == 'undefined') && (video && typeof(commsArray[curID]['commassets']['comtour']) == 'undefined')) continue;
			if (rtAvail && commsArray[curID]['num_avail'] == 0) continue;
			
			commCount++;
			curObjects.push(commObjects[unit]);
		}
	}
	else {
		commCount = allComms;
	}
	
	numFilteredComms = commCount;
	var start = page*resultsPageSize;
	var end = (page+1)*resultsPageSize;
	if (end > commCount) end = commCount;
	
	curPage = page;
	var searchUnit = 0;
	var idList = [];
	if (photos || video || rtAvail) {
		for (unit=start; unit < end; unit++) {	
			buffer += curObjects[unit].display(commResultTemplate);
			idList.push(curObjects[unit].id);
		}
	} else {
		for (unit=start; unit < end; unit++) {	
			buffer += commObjects[unit].display(commResultTemplate);
			idList.push(commObjects[unit].id);
		}
	}
	$("#search_results_list").html(buffer);
	
	// make whole listing row clickable
	$("div.apartment-module-main").click(function() {
		window.location = $(this).find("span.btn-view-unit a").attr('href');
	});
	
	$("div.unit-result-flare a").click(function() {
		$(this).parents("div.apartment-module-main").click();	
		return false;
	});
	
	mflMap.loadMarkers(idList);
		
	prevPageObj = $(this);
	
	$("span.byline-highlight").text(numFilteredComms);
	
	var location;
	
	location = dataArray['location'];
	$("span.address-highlight").text(location);
	
	var apartmentText = (numFilteredComms == 1) ? 'apartment' : 'apartments';
	
	$("#location-apartment").text(apartmentText);
	
	$("div.coupon-specials a").hover(function() {
		var id = this.id.split('_')[1];	
		displayPromo(id, this);
	}, function() {
		$("#couponPopup").hide();	
	});
	
	// find the absolute positions of each
	thumbPositions = [];
	$("#search_results_list img.front_jpeg").each(function() {
		thumbPositions[this.id] = findPos(this);
		thumbWidth = $(this).width();
		thumbHeight = $(this).height();
	});
	
	$.cookies.set('curPage', page);
	$.cookies.set('curLoc', window.location);
	
	curPage = page;
	return false;
}

function sortResults(sort) {
	if (curSort != sort) {
		curSort = sort;
		curSortOrder = (sort == 'area') ? ' desc' : 'asc';
	}
	else curSortOrder = (curSortOrder == 'asc') ? 'desc' : 'asc';
	commObjects.sort(compareUnit);
	
	clickCommPage(curPage);
}

function compareUnit(a, b) {
	if (curSortOrder == 'asc') {
		switch(curSort) {
			case 'rent':
			if (a.rent == null) return 1;
			if (b.rent == null) return -1;
		return a.rent - b.rent;
			break;
			case 'distance':
			return a.distance - b.distance;
			break;
			case 'area':
			return a.sqft - b.sqft;
			break;
		}
	} else {
		switch(curSort) {
			case 'rent':
			if (a.rent == null) return 1;
			if (b.rent == null) return -1;
			return b.rent - a.rent;
			break;
			case 'distance':
			return b.distance - a.distance;
			break;
			case 'area':
			return b.sqft - a.sqft;
			break;
		}	
	}
}

function showPhotoViewer(thumb) {
	var parts = thumb.id.split('_');
	var id = parts[1];
	var frontJpeg = commsArray[id]['front_jpeg'].replace('_75x50', '_' + largePhotoWidth + 'x' + largePhotoHeight);
	
	if(frontJpeg.match('no-image'))
	{
		frontJpeg = '/../images/no-photos.jpg';
	}
	
	var data = {
		popUp : '/files' + frontJpeg,
		"photo-bot" : commsArray[id]['name'],
		countField : commsArray[id]['commassets']['photo_count']
	}
	
	var html = pure.autoRender(photoPopUpTemplate, data);
	
	hidePhotoViewer();
	
	$("body").append(html);
	
	// position photo pop up
	curPhotoViewer = $("div.apartment-rental-photo-viewer");
	if (!popUpWidth) {	
		popUpWidth = curPhotoViewer.width();
		popUpHeight = curPhotoViewer.height();
	}
	
	var loc = $(thumb).offset();
	curPhotoViewer.css({left: loc.left - (popUpWidth/2) + 40 + 'px', top: loc.top - popUpHeight + 15 + 'px'}).show();
}

function hidePhotoViewer() {
	$("div.apartment-rental-photo-viewer").remove();
}

function findPos(obj) {
	var curLeft= curTop = 0;
	if (obj.offsetParent) {
		do {
			curLeft += obj.offsetLeft;
			curTop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	return [curLeft, curTop];
	}
}

