﻿
function onResultsHeaderClick(event)
{
	var eventCell = null;
	var eventTable = event.target;
	var sortTableId = 0;
	var imgSortDesc = null;
	var bSortDesc = false;
	var found = false;
	//var bNewHeader = false;

	// ---- find the column and table we're sorting ----
	// ---- at the end of the loop eventCell will be the column to sort and eventTable will be the entire listing table
	while(eventTable.tagName.search(/table/gi) == -1)
	{		
		if ((eventTable.tagName.search(/th/gi)!= -1) && !found) { 
			found = true; // set the flag so we don't find the thead element further up the chain
			eventCell = eventTable; 
		}
		eventTable = eventTable.parentNode;
	}
	if (jQuery(eventCell).hasClass('sortable'))
	{

		// ---- figure out which direction to sort ----
		imgSortDesc = jQuery('img', eventCell).attr('src');
		bSortDesc = (imgSortDesc.search(/icon1up/gi) != -1)? true : false;
		
		//alert (imgSortDesc);
		//alert (bSortDesc);
		
		// ---- clear all the sort img's ---
		jQuery('th.sortable img', eventTable).attr('src', '/images/spacer.gif');
		
		// ---- set the sort arrow for the current column ----
		if (bSortDesc) {
			jQuery('img', eventCell).attr('src', '/images/icon1.gif');
		} else {
			jQuery('img', eventCell).attr('src', '/images/icon1up.gif');
		}
		
		
		sortTableId = ((jQuery(eventTable).attr("sort")) ? jQuery(eventTable).attr("sort") : eventTable.id);

		var cellIndex = eventCell.cellIndex;
		if (jQuery(eventCell).attr("sort")) cellIndex = jQuery(eventCell).attr("sort");
	
		var bSortNumeric = (jQuery(eventCell).attr("sorttype")=='numeric') ? true : false;
		//alert(jQuery(eventCell).attr("sorttype"));
		onResultsSort(sortTableId, cellIndex, bSortDesc, bSortNumeric);
		
//alert("onResultHeaderClick: cell: " + eventCell.outerHTML);

		var sortIndex = bSortDesc ? -(eventCell.cellIndex + 1) : (eventCell.cellIndex + 1);
	}
}

function setResultsHeaderClick(sortTableID, sortIndex)
{
	var eventTable = jQuery("#" + sortTableID);
	var eventCell = jQuery("#" + sortTableID + " > thead > tr > th")[Math.abs(sortIndex) - 1];
	var bSortDesc = (sortIndex < 0);
	
	// ---- clear all the sort img's ---
	jQuery('th.sortable img', eventTable).attr('src', '/images/spacer.gif');
		
	// ---- set the sort arrow for the current column ----
	if (bSortDesc) {
		jQuery('img', eventCell).attr('src', '/images/icon1.gif');
	} else {
		jQuery('img', eventCell).attr('src', '/images/icon1up.gif');
	}
}

function sortResults(sortTableID, sortIndex)
{
	var eventTable = jQuery("#" + sortTableID);
	var eventCell = jQuery("#" + sortTableID + " > thead > tr > th")[Math.abs(sortIndex) - 1];
	var bSortDesc = (sortIndex < 0);
	
	// ---- clear all the sort img's ---
	jQuery('th.sortable img', eventTable).attr('src', '/images/spacer.gif');
		
	// ---- set the sort arrow for the current column ----
	// ---- but set it backwards/opposite so the click() will sort correcly
	if (bSortDesc) {
		//jQuery('img', eventCell).attr('src', '/images/icon1.gif');
		jQuery('img', eventCell).attr('src', '/images/icon1up.gif')
	} else {
		//jQuery('img', eventCell).attr('src', '/images/icon1up.gif');
		jQuery('img', eventCell).attr('src', '/images/icon1.gif');
	}
	
	// ---- initiate sorting
	eventCell.click();
}

function onResultsSort(tableID, columnIndex, bSortDesc, bSortNumeric)
{
	//alert('table: '+tableID+'  column: '+columnIndex+'  sort desc: '+bSortDesc);
	
	var rowArray = Array();
	var sortArray = Array();
	var expandoArray = Array();
	var numericSort = true;

	var sortRowIndex = 0;
	var startRowIndex = 0;
	var expandoSort =(jQuery(document.getElementById(tableID)).hasClass("expando")) ? true : false;
	var tableRows = document.getElementById(tableID).tBodies[0].rows;
	if (tableRows.length > 0)
	{
		if (tableRows[0].cells[0].tagName.search(/th/gi) != -1) startRowIndex = 1;
		sortRowIndex = startRowIndex;
	
		// leave the header row in place
		for (var i = startRowIndex; i < tableRows.length; i++)
		{	// collect row sort values
			rowArray.push(tableRows[i]);
			
			//alert(jQuery(tableRows[i]).attr('class'));
			var rowType = (jQuery(tableRows[i]).hasClass('FeaturedListing') ? 1 : (jQuery(tableRows[i]).hasClass('MLSListingHeader') ? 2 : (jQuery(tableRows[i]).hasClass('MLSListing') ? 3 : 0)));
			var rowValue = "";
		
			if (rowType != 2)
			{
				if (jQuery(tableRows[i].cells[columnIndex]).attr("sort")) rowValue = jQuery(tableRows[i].cells[columnIndex]).attr("sort");
				else rowValue = jQuery(tableRows[i].cells[columnIndex]).text();
				//else rowValue = tableRows[i].cells[columnIndex].innerHTML;
				
				// check for numeric first
				if (rowValue.search(/[^0-9\.\,]/g) != -1)
				{	// found non-numeric, check non-monetary
					if (numericSort && rowValue.search(/[^0-9\.\$\,]/g) != -1) numericSort = false;
					//else numericSort = true;
				}
				// numeric sort override
				if (bSortNumeric) numericSort = true;
				if (expandoSort) expandoArray.push(tableRows[++i]);
			}
			else if (expandoSort) expandoArray.push(tableRows[++i]);
			
			// TBD: jQuery(tableRows[i]).hasClass('FeaturedListing');
			// 		jQuery(tableRows[i]).hasClass('MLSListing');
//if (i == 1) alert("rowtype: " + rowType);

			if (numericSort) rowValue = rowValue.replace(/[,$#]/g, ''); // strip out dollar signs and commas
			//alert(rowValue);
			sortArray.push(new Array(sortRowIndex++, rowType, rowValue, bSortDesc ? -1 : 1));
		}
//alert("numeric: " + numericSort);	
		// sort the values
		if (numericSort) sortArray.sort(numericColumnSort);
		else sortArray.sort(alphaColumnSort);

		// reorder the rows
		for (var i = 0; i < sortArray.length; i++)
		{
			document.getElementById(tableID).tBodies[0].appendChild(rowArray[ sortArray[i][0] - startRowIndex ]);
			if (expandoSort) document.getElementById(tableID).tBodies[0].appendChild(expandoArray[ sortArray[i][0] - startRowIndex ]);
		}
	}
}


function alphaColumnSort(a, b)
{
	if (a[1] == b[1])
	{
		if (a[2] == b[2]) return 0;
		else if (a[2] > b[2]) return a[3];
		else return (0 - a[3]);
	}
	else return (a[1] - b[1]);

}
function numericColumnSort(a, b)
{
	if (a[1] == b[1])
	{  // same record type ... compare the values
		var diff = parseInt(a[2], 10) - parseInt(b[2], 10);
		if (diff == 0) return 0;
		else if (diff > 0) return a[3];
		else return (0 - a[3]);
	}
	else return (a[1] - b[1]); // different record types, sort by type

}



