var sort_col_idx = 8;
var sort_asc_dsc = "ascending";

  function sortText(a,b)
  {
	var aa = a[sort_col_idx];
	var bb = b[sort_col_idx];
	var rtn = 0;
	if (aa > bb) rtn = 1;
	else if (aa < bb) rtn = -1;
	else rtn = 0;
	if (sort_asc_dsc == "descending") rtn *= -1;
	return rtn;
  }

  function sortNumeric(a,b)
  {
	var aa = Number(a[sort_col_idx]);
	var bb = Number(b[sort_col_idx]);
	//
	// for 1/2 baths
	//
	if (sort_col_idx == 6 && Number(a[7]) > 0.0) aa += 0.5;
	if (sort_col_idx == 6 && Number(b[7]) > 0.0) bb += 0.5;
	//
	var rtn = 0;
	if (aa > bb) rtn = 1;
	else if (aa < bb) rtn = -1;
	else rtn = 0;
	if (sort_asc_dsc == "descending") rtn *= -1;
	return rtn;
  }

function sortColumn(col_idx, col_type)
{
	if (sort_col_idx != col_idx) {
		sort_asc_dsc = "ascending";
	} else {
		if (sort_asc_dsc == "ascending")
			sort_asc_dsc = "descending";
		else
			sort_asc_dsc = "ascending";
	}
	sort_col_idx = col_idx;
	propArray.sort( col_type == "numeric" ? sortNumeric : sortText );
	renderList();
	renderPoints();
}

/**
 * @purpose            : Get the (x,y) coordinate of a DOM element
 * @param  object elem : a DOM element or null
 * @return object      : an associative array, where indicies "x"
 *                       and "y" hold their respective coordinates
 * @note               : function is recursive
 */
function getXYpos(elem) {
   if (!elem) {
      return {"x":0,"y":0};
   }
   var xy={"x":elem.offsetLeft,"y":elem.offsetTop}
   var par=getXYpos(elem.offsetParent);
   for (var key in par) {
      xy[key]+=par[key];
   }
   return xy;
}

var cur_id = -1;
var hideDivDelay;

function showFloatPropDiv( e, elm_td )
{
    if ( elm_td.id != cur_id ) {
	    var p = new Property(propArray[elm_td.id]);
	    var elm = document.getElementById("FloatPropDiv");
        elm.onmouseover = function( ) { }
        elm.onmouseout  = function( ) { }
	    var xy = getXYpos( elm_td );
	    while (elm.lastChild != null)
		    elm.removeChild(elm.lastChild);
	    elm.innerHTML =
	        "<span>" + p.addr + ", " + p.city_st + "</span>" +
	        p.createDivControl()
	        ;
	    elm.style.pixelLeft = xy.x;
	    elm.style.pixelTop = xy.y+16;
	    elm.style.visibility = "visible";
	    cur_id = elm_td.id;
	    // hideDivDelay = setTimeout( "hideFloatPropDiv()", 10000 );
    }
}

function hideFloatPropDiv()
{
	var elm = document.getElementById("FloatPropDiv");
	elm.style.visibility = "hidden";
	cur_id = -1;
}
 
function renderList()
{
	var list = document.getElementById("PropertyListTable");
	while (list.lastChild != null)
		list.removeChild(list.lastChild);

	var tbody = document.createElement("TBODY");
	list.appendChild(tbody);
	tbody.appendChild(createHeader());

	var row = 0;
	var nFiltered = 0;
	for (i=0; i<propArray.length; i++) {
	    var p = new Property(propArray[i]);
	    var px = properties[p.pidx];
	    
	    //
	    // Check search criteria ...
	    //
        if (!filter.meetsCriteria(p)) {
	        px.setVisible(false);
            continue;
        }
        
        //
        // Check for max display count
        if (++nFiltered > max_props) {
	        px.setVisible(false);
            continue;
        }
        
        //
        // Create and add a new row to the table
        //
        
	    row++;
        px.setVisible(true);

	    var tr = document.createElement("TR");
	    if (row%2 == 1) tr.className = "odd";
	    else tr.className = "even";
	    tr.id = i;
        tr.onmouseover = function( e ) { 
            if (this.className == "even") this.className = "even_highlight";
            if (this.className == "odd") this.className = "odd_highlight";
            showFloatPropDiv( e, this );
        }
        tr.onclick = function() { 
	        var p = new Property(propArray[this.id]);
	        var px = properties[p.pidx];
	        var marker = px.getGeoMarker();
	        if (marker)
	            openShapePopup( p.pidx );
        }
        tr.onmouseout = function() { 
            if (this.className == "even_highlight") this.className = "even";
            if (this.className == "odd_highlight") this.className = "odd";
        }

        var td;
        var tspan;
        var a;
        
        /*
	    td = document.createElement("TD");
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.pidx + 1;
	    a = document.createElement("A");
	    a.href = 'javascript:viewProperty("'+ getMLSString(p.mls_no) + '");';
	    a.appendChild(tspan);
	    td.appendChild(a);
	    tr.appendChild(td);
	     */

	    td = document.createElement("TD"); td.align = "left";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.addr;
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.ptype;
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = formatPrice(p.lprice);
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.bedrooms;
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.baths;
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.sqft;
	    td.appendChild(tspan);
	    tr.appendChild(td);

	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.acre;
	    td.appendChild(tspan);
	    tr.appendChild(td);

        /*
	    td = document.createElement("TD"); td.align = "center";
	    tspan = document.createElement("SPAN");
	    tspan.innerHTML = p.byear;
	    td.appendChild(tspan);
	    tr.appendChild(td);
	    */

        /*
	    td = document.createElement("TD"); td.align = "center"; td.width = "100";
	    var thumb = document.createElement("IMG");
	    thumb.src = "sample.jpg";
	    thumb.height = "48";
	    thumb.hspace = "0";
	    thumb.vspace = "0";
	    var a = document.createElement("A");
	    a.href = 'javascript:showProperty("' + p.mls_no + '");';
	    a.appendChild(thumb);
	    td.appendChild(a);
	    tr.appendChild(td);
	    */

	    tbody.appendChild(tr);
	}
	
	var pc = document.getElementById("propCount");
	pc.innerHTML = "Displaying " + row + " of " + filter.totalChecked() + " properties";
	
	return nFiltered;
}


function createHeader()
{
	var tr = document.createElement("TR");
	tr.className = "header";
	tr.style.background = "d6d6d6";

    var td;
    var tspan;
    var a;
    
    /*
	td = document.createElement("TD");
	tspan = document.createElement("SPAN");
	tspan.innerHTML = '#';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(12,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);
	 */

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Address' ;
	var a = document.createElement("A");
	a.setAttribute('href', 'javascript:sortColumn(0,"text");');
	a.setAttribute('alt', 'Sort by Address');
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Type' ;
	var a = document.createElement("A");
	a.setAttribute('href', 'javascript:sortColumn(11,"text");');
	a.setAttribute('alt', 'Sort by Type');
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Price';
	var a = document.createElement("A");
	a.href = 'javascript:sortColumn(8,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Beds';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(5,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Baths';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(6,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Sq Ft';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(9,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);

	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Acres';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(10,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);
	
	/*
	td = document.createElement("TD"); td.align = "center";
	tspan = document.createElement("SPAN");
	tspan.innerHTML = 'Year';
	a = document.createElement("A");
	a.href = 'javascript:sortColumn(13,"numeric");';
	a.appendChild(tspan);
	td.appendChild(a);
	tr.appendChild(td);
	 */
	
	return tr;
}
