/**
 * @author Jose H Ochoa
 */
var map;
var geocoder;
var page = 1;
var limit = 15;



window.onload = function() {
	load();
	document.getElementById('btnShow').onclick = function(){
		showPrecinct();
	}
	document.getElementById('btnSearch').onclick = function(){
		searchLocations();
	}
	
}

window.onunload = function(){
	GUnload();
}

function load(){
    if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
        map.enableScrollWheelZoom();
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(29.756944, -95.37), 11);
    }
    
}

function searchLocations(reset){
    if (typeof reset == 'undefined') 
        reset = true;
    if (reset) {
        page = 1;
    }
    var address = document.getElementById('addressInput').value;
    geocoder.getLatLng(address, function(latlng){
        if (!latlng) {
            alert(address + ' not found');
        }
        else {
            searchLocationsNear(latlng);
        }
    });
}

function showPrecinct(reset){
    if (typeof reset == 'undefined') 
        reset = true;
    if (reset) {
        page = 1;
    }
    var precinct = document.getElementById('precinctSelect').value;
    var searchUrl = 'phpsqlprecinct_genxml.php?precinct=' + precinct + '&limit=' + limit + '&page=' + page;
    //window.open(searchUrl, 'new');
    GDownloadUrl(searchUrl, function(data){
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        map.clearOverlays();
        
        var sidebar = document.getElementById('sidebar');
        sidebar.innerHTML = '';
        if (markers.length == 0) {
            sidebar.innerHTML = 'No results found.';
            map.setCenter(new GLatLng(29.756944, -95.37), 11);
            return;
        }
        
        var cnt = xml.documentElement.getAttribute('cnt');
        var total = xml.documentElement.getAttribute('total');
        var setlimit = xml.documentElement.getAttribute('setlimit');
        sidebar.appendChild(createSidebarEntryCnt(cnt, total, setlimit));
        
        var bounds = new GLatLngBounds();
        for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute('name');
            var address = markers[i].getAttribute('address');
            var distance = parseFloat(markers[i].getAttribute('distance'));
            var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
            var info = infoHtml(markers[i], address);
            var marker = createMarker(point, name, info);
            map.addOverlay(marker);
            var sidebarEntry = createSidebarEntry(marker, name, address, distance);
            sidebar.appendChild(sidebarEntry);
            bounds.extend(point);
        }
        sidebar.appendChild(createSidebarEntryPage(total, true));
        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    });
}

function searchLocationsNear(center){
    var radius = document.getElementById('radiusSelect').value;
    var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius + '&limit=' + limit + '&page=' + page;
    //window.open(searchUrl, 'new');
    GDownloadUrl(searchUrl, function(data){
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        map.clearOverlays();
        
        var sidebar = document.getElementById('sidebar');
        sidebar.innerHTML = '';
        if (markers.length == 0) {
            sidebar.innerHTML = 'No results found.';
            map.setCenter(new GLatLng(29.756944, -95.37), 11);
            return;
        }
        
        var cnt = xml.documentElement.getAttribute('cnt');
        var total = xml.documentElement.getAttribute('total');
        var setlimit = xml.documentElement.getAttribute('setlimit');
        sidebar.appendChild(createSidebarEntryCnt(cnt, total, setlimit));
        var bounds = new GLatLngBounds();
        for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute('name');
            var address = markers[i].getAttribute('address');
            var distance = parseFloat(markers[i].getAttribute('distance'));
            var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
            var info = infoHtml(markers[i], address);
            var marker = createMarker(point, name, info);
            map.addOverlay(marker);
            var sidebarEntry = createSidebarEntry(marker, name, address, distance);
            sidebar.appendChild(sidebarEntry);
            bounds.extend(point);
        }
        sidebar.appendChild(createSidebarEntryPage(total));
        
        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    });
}

function createSidebarEntryCnt(cnt, total, setlimit){
    var div = document.createElement('div');
    var html = '';
    if (total > limit) {
        html = 'Results <b>' + setlimit + ' - ';
        if ((page * limit) > total) {
            html += total;
        }
        else {
            html += (page * limit);
        }
        
        html += '</b> of ' + total;
    }
    else {
        html = 'Results <b>1 - ' + total + '</b>';
    }
    html += '<br/><br/>';
    div.innerHTML = html;
    //div.style.cursor = 'pointer';
    div.style.marginBottom = '5px';
    return div;
}

function createSidebarEntryPage(total, precinct){

    if (typeof precinct == 'undefined') 
        precinct = false;
    
    var div = document.createElement('div');
    var html = '';
    
    if (page > 1) {
        var aprev = document.createElement('a');
        aprev.innerHTML = '&lt&lt prev';
        aprev.style.cursor = 'pointer';
        aprev.style.marginRight = '15px';
        GEvent.addDomListener(aprev, 'click', function(){
            page = page - 1;
            if (precinct) {
                showPrecinct(false);
            }
            else {
                searchLocations(false);
            }
        });
        div.appendChild(aprev);
    }
    
    if ((page * limit) < total) {
        var anext = document.createElement('a');
        anext.innerHTML = 'next &gt&gt';
        anext.style.cursor = 'pointer';
        GEvent.addDomListener(anext, 'click', function(){
            page = page + 1;
            if (precinct) {
                showPrecinct(false);
            }
            else {
                searchLocations(false);
            }
        });
        div.appendChild(anext);
    }
    //      div.innerHTML = anext;
    //div.style.cursor = 'pointer';
    div.style.marginBottom = '5px';
    return div;
}


function createMarker(point, name, info){
    var marker = new GMarker(point);
    GEvent.addListener(marker, 'click', function(){
        marker.openInfoWindowHtml(info);
    });
    return marker;
}

function infoHtml(marker, address){
    var rtnStr = "";
    rtnStr += '<div style="width:390px;height:auto;font-size:12px;padding:5px;">';
    rtnStr += "<B>Precinct Number:</b> " + marker.getAttribute('precinctNumber') + " ";
    rtnStr += "<B>Sale Number:</b> " + marker.getAttribute('saleNumber') + "<br />";
    rtnStr += "<B>Cause Number:</b> " + marker.getAttribute('causeNumber') + " ";
    rtnStr += "<B>District Court:</b> " + marker.getAttribute('districtCourt') + "<br />";
    rtnStr += '<B>Account Number:</b> <a style="color:#1C8200; text-decoration:underline;" title="Go To HCAD Record" href="http://www.hcad.org/records/recorddetails.asp?tab=1&bld=1&card=1&taxyear=2010&acct=' + marker.getAttribute('accountNumber') + '" onclick="javascript:pageTracker._trackPageview(this.href);window.open(this.href); return false;">' + marker.getAttribute('accountNumber') + '</a><br />';
    rtnStr += "<B>Order Issue Date:</b> " + marker.getAttribute('orderIssueDate') + "<br />";
    rtnStr += "<B>Case Style:</b> " + marker.getAttribute('caseStyle') + "<br />";
    rtnStr += "<B>Legal Description:</b> " + marker.getAttribute('legalDescription') + "<br />";
    rtnStr += "<B>Physical Address:</b> " + address + ", " + marker.getAttribute('zip') + "<br />";
    rtnStr += "<B>Adjudged Value:</b> $" + addCommas(marker.getAttribute('adjudgedValue')) + " ";
    rtnStr += "<B>Estimated Minimum Bid:</b> $" + addCommas(marker.getAttribute('estimatedMinimumBid')) + "<br />";
    rtnStr += "<B>Status:</b> " + marker.getAttribute('status');
    rtnStr += "</div>";
    
    
    return rtnStr;
}

function addCommas(nStr){
    nStr += '';
    x = nStr.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 createSidebarEntry(marker, name, address, distance){
    var div = document.createElement('div');
    var html = '<a href="" onclick="return false;">' + address + '</a>';
    if (!isNaN(distance.toFixed(1))) {
        html += ' <span class="distance">(' + distance.toFixed(1) + ' mi)</span>';
    }
    html += '<br/>';
    div.innerHTML = html;
    div.style.cursor = 'pointer';
    div.style.marginBottom = '5px';
    GEvent.addDomListener(div, 'click', function(){
        GEvent.trigger(marker, 'click');
    });
    GEvent.addDomListener(div, 'mouseover', function(){
        div.style.backgroundColor = '#eee';
    });
    GEvent.addDomListener(div, 'mouseout', function(){
        div.style.backgroundColor = '#fff';
    });
    return div;
}

