var results = $A();
var gMap;
var geocoder;
var searchLocation = "";
var searchPoint = null;

function doSearch(){
    searchLocation = $F('loc');
    if (searchLocation.blank() == true) {
        searchLocation = "USA";
    }
    
    // CREATE MAP GEOCODER
    
    if (gMap == null) {
        var divMap = $('divMap');
        gMap = new GMap2(divMap);
        gMap.enableScrollWheelZoom();
        gMap.enableContinuousZoom();
        gMap.addControl(new GLargeMapControl());
        divMap.style.border = "solid 1px black";
        
        GEvent.addListener(gMap, "click", mapClicked);
    }
    if (geocoder == null) {
        geocoder = new GClientGeocoder();
    }
    
    var divResults = $('divResults');
    divResults.innerHTML = "Searching...";
    
    // GET CENTER POINT
    
    fetchAddressLocation(searchLocation, receiveCenterPoint);
    
}

Event.observe(window, 'load', function() {
  var href = window.location.href;
  var p = href.toQueryParams();
  if(p.searchphrase != null)
  {
  	$('phrase').value = p.searchphrase
  	doSearch();
  }
  if(p.id != null)
  {
  	doSearch();
  }
});



function addResult(p){
    results.push(p);
}

function fetchAddressLocation(address, cb){
    if (geocoder == null) {
        return null;
    }
    
    CB = cb;
    geocoder.getLatLng(address, function(point){
        CB(point);
    });
    
}

function receiveCenterPoint(point){
    if (point == null) {
        alert("Unabled to find location:" + searchLocation);
        return;
    }
    
    // CLEAR
    
    gMap.clearOverlays();
    
    searchPoint = point;
    var parea = $F('parea');
	var phrase = $F('phrase');
    
    if (searchLocation != "USA") {
        gMap.setCenter(point, 10);
    }
    else {
        gMap.setCenter(point, 3);
    }
    
    results.clear();
    lxFetch(10225, 0, "parea=" + parea + "&phrase=" + phrase);
}

var resultCount = 0;
function displayResults(){
    resultCount = 0;
    results.sort(sortResult);
    results.each(displayResult);
}

function sortResult(a, b){
    if (searchPoint == null) {
        return 0;
    }
    var pointA = new GLatLng(a.lat, a.lng);
    var pointB = new GLatLng(b.lat, b.lng);
    var distA = searchPoint.distanceFrom(pointA);
    var distB = searchPoint.distanceFrom(pointB);
    a.distance = distA;
    b.distance = distB;
    if (a.distance < b.distance) {
        return -1;
    }
    if (a.distance == b.distance) {
        return 0;
    }
    return 1;
}

function displayResult(r){
    if (gMap == null) {
        return;
    }
    if (resultCount == 0) {
        var fpoint = new GLatLng(r.lat, r.lng);
        gMap.setCenter(fpoint, 10);
    }
    
    var markerSrc = "http://www.verdigre.com/DesktopModules/JetkeySmartMap/Icons/dd-end.png";
    var iconSrc = "http://www.verdigre.com/DesktopModules/JetkeySmartMap/Icons/dd-end.png";
    
    if (resultCount <= 25) {
        markerSrc = "http://www.verdigre.com/DesktopModules/JetkeySmartMap/Icons/marker" + String.fromCharCode(resultCount + 65) + ".png";
        iconSrc = "http://www.verdigre.com/DesktopModules/JetkeySmartMap/Icons/icon" + String.fromCharCode(resultCount + 65) + ".png";
    }
    
    var point = new GLatLng(r.lat, r.lng);
    
    var marker = new GMarker(point, {
        title: name
    });
    
    
    var divResults = $('divResults');
    
    var call = "javascript:selectResult(" + resultCount + ")";
    var html = "<table id='tblResult" + resultCount + "'><tr><td><a href='" + call + "'><img src='" + iconSrc + "' border='0'/></a></td><td>";
    
    var name = r.title + " " + r.fname + " " + r.mname + " " + r.lname;
    
    if (r.use_company.toLowerCase() == "yes") {
        name = r.company;
    }
    
    name = "<div class='FinderName'><a href='" + call + "'>" + name + "</a></div>";
    
    var listing = "<div class='ResultBlock'>" + name;
    var dist = Math.round((r.distance * 0.000621371192237334) * 10) / 10;
    listing += "<div class='FinderDistance'>Distance: " + dist + "</div></div>"
    html = html + listing + "</td></tr></table>";
    Element.insert(divResults, {
        bottom: html
    });
    
    var e = $("tblResult" + resultCount);
    e.marker = marker;
    e.point = point;
    e.result = r;
    
    gMap.addOverlay(marker);
    marker.setImage(markerSrc);
    marker.resultIndex = resultCount;
    resultCount++;
}

var windowTemplate = new Template("<table><tr><td valign='top'><img src='/portals/194/images/no_found.jpg'/></td><td valign='top'>\
<div class='FinderName'>#{displayName}</div>\
<div class='FinderCompany'>#{displayCompany}</div>\
<div class='FinderCreds'>#{displayCreds}</div>\
<div class='FinderEmail'><a href='mailtp:#{email}'><img src='/portals/194/images/email.gif' align='top' border='0'/> Email Me</a></div>\
<div class='FinderAddr'><strong>Address:</strong>\
<div>#{p_street1}</div>\
<div>#{p_street2}</div>\
<div>#{p_city}, #{p_state} #{p_zip}</div>\
</div>\
<div class='FinderPhone'>#{p_phone} #{p_phone_ext}</div>\
<div><br/><a class='FinderMoreInfo' href='javascript:showPractitionerDetail(#{pid})'>More Information</a></div>\
</td></tr></table>");

var divMap = null;
var divDetail = null;
var trMap = $('trMap');

function selectResult(index){
    var r = $('tblResult' + index).result;
    var p = $('tblResult' + index).point
	
	divMap = $('divMap');
	divDetail = $('divDetail');
	trMap = $('trMap');
    
    // FORMAT NAME
    
    var call = "";
    var name = r.title + " " + r.fname + " " + r.mname + " " + r.lname;
    
    if (r.use_company.toLowerCase() == "yes") {
        name = r.company;
    }
    r.displayName = name;
    
    // FORMAT COMPANY
    
    var company = r.company;
    if (r.use_company.toLowerCase() == "yes") {
        company = ""
    }
    r.displayCompany = company;
    
    // FORMAT CREDS
    
    var creds = "";
    if (r.credential1.blank() == false) {
        creds += r.credential1;
    }
    if (r.credential2.blank() == false) {
        creds += ", " + r.credential2;
    }
    if (r.credential3.blank() == false) {
        creds += ", " + r.credential3;
    }
    if (r.credential4.blank() == false) {
        creds += ", " + r.credential4;
    }
    if (r.credential5.blank() == false) {
        creds += ", " + r.credential5;
    }
    r.displayCreds = creds;
    
    
    var html = windowTemplate.evaluate(r);
    
    showMapPane();
    gMap.openInfoWindowHtml(p, html);
    
}

function mapClicked(overlay, point){
    if (overlay != null) {
        if (overlay.resultIndex != null) {
            selectResult(overlay.resultIndex);
        }
    }
}

function showPractitionerDetail(pid){
   
    if(divMap)    
    divMap.hide();
	if(divDetail) 
    divDetail.show();
    
    lxFetch(10405, 0, "member_id=" + pid);
    
}

function showMapPane(){

	if(divMap)    
    divMap.show();
	if(divDetail) 
    divDetail.hide();
    
    
}

function resizeDetailArea(){

	var d = Element.getDimensions(divDetail);
    trMap.style.height = d.height
}

function trapCR(e){
    var keynum;
    var keychar;
    var numcheck;
    
    if (window.event) // IE
    {
        keynum = e.keyCode;
    }
    else 
        if (e.which) // Netscape/Firefox/Opera
        {
            keynum = e.which;
        }
    if(keynum == 13)
	{
		doSearch();
	}
}



