/* -*- mode: java -*- */

/*****************************************
 * Copyright (c) 2006, Emmett M. Pate, Jr.
 * emmett@epate.com
 *
 */
 
function getHTTPObject()
{
 var xmlhttp;
 /*@cc_on
 @if (@_jscript_version >= 5)
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
   try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (E) {
    xmlhttp = false;
   }
  } @else xmlhttp = false;
   @end @*/
   if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
   try {
    xmlhttp = new XMLHttpRequest();
   } catch (e) {
   xmlhttp = false;
  }
 }
 return xmlhttp;
}

var mapobj = getHTTPObject(); // We create the HTTP Object
var listingsobj = getHTTPObject(); // We create the HTTP Object

var map;
var center, zoom;

function InitPage(offset)
{
    listingsDiv = document.getElementById('listings');
    listingsDiv.innerHTML = "<p align=center><i>Retrieving Open Houses...</i><p align=center><img src=/openhouses/graphics/pb_gap.gif>";

    mapDiv = document.getElementById('map');
    mapDiv.style.textAlign = "center";
    mapDiv.style.backgroundColor = "#F6F6F6";
    mapDiv.innerHTML = "<div style=\"position:relative;top:184px\"><img src=graphics/wait.gif></div>";

    if (typeof(map) == 'undefined')
	{
	    map = new GMap2(document.getElementById("map"));
	    map.addControl(new GSmallMapControl());
	    map.addControl(new GMapTypeControl());
	    CreateResetControl();
	    map.setCenter(new GLatLng(36.865247, -76.168358), 7);
	}
    // clear existing overlays
    map.clearOverlays();

    // Null Icon
    var NullIcon = new GIcon();
    NullIcon.image = "/graphics/nullicon.png";
    NullIcon.shadow = "/graphics/nullicon.png";
    NullIcon.iconSize = new GSize(2, 2);
    NullIcon.shadowSize = new GSize(2, 2);
    NullIcon.iconAnchor = new GPoint(1, 1);
    NullIcon.infoWindowAnchor = new GPoint(1, 1);
    var marker = new PdMarker(map.getCenter(), NullIcon);
    marker.setTooltip("Searching...");
    marker.setOpacity(100);
    map.addOverlay(marker);
    marker.showTooltip();
    
    ShowListings();
}

function ShowListings()
{
    listingsobj.open("GET", "ShowListings.cgi", true);
    listingsobj.onreadystatechange = function() {
	if (listingsobj.readyState == 4) {
	    var xml = GXml.parse(listingsobj.responseText);

	    listDiv = document.getElementById('listings');
	    listDiv.innerHTML = xml.documentElement.getElementsByTagName("listings")[0].firstChild.nodeValue;

	    ShowMap(xml);
	}
    }
    listingsobj.send(null);
}

function ShowMap(xml)
{
    function createMarker(point, icon, html, address, num)
	{
	    var marker = new PdMarker(point, icon);
	    marker.setOpacity(100);
	    GEvent.addListener(marker, "mouseover", function() {
				   marker.setTooltip(unescape(address))
		    });
	    GEvent.addListener(marker, "mouseout", function() {
		marker.hideTooltip()
		    });
	    GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml('<div id="infoDiv">' + html + '</div>')
		    });
	    GEvent.addDomListener(document.getElementById("item-"+num), "mouseover", function() {
		marker.openInfoWindowHtml('<div id="infoDiv">' + html + '</div>');
		map.setCenter(point, 15);
	    });

	    return marker;
	}

    // use Googles "tiny" icon
    var RedIcon = new GIcon();
    RedIcon.image = "/graphics/wew_20_red.png";
    RedIcon.shadow = "/graphics/wew_20_shadow.png";
    RedIcon.iconSize = new GSize(20, 20);
    RedIcon.shadowSize = new GSize(40, 20);
    RedIcon.iconAnchor = new GPoint(9, 20);
    RedIcon.infoWindowAnchor = new GPoint(5, 1);
    
    var listings = xml.documentElement.getElementsByTagName("listing");
    var bounds = new GLatLngBounds;
    for (var i=0; i<listings.length; i++)
    {

	var point = new GLatLng(parseFloat(listings[i].getElementsByTagName("marker")[0].getAttribute("lat")),
				parseFloat(listings[i].getElementsByTagName("marker")[0].getAttribute("lng")));
	map.addOverlay(createMarker(point,
				    RedIcon,
				    listings[i].getElementsByTagName("overlay")[0].childNodes[0].nodeValue,
				    listings[i].getAttribute("address"),
				    i
			   ));
    }

    var marker = map.getFirstMarker();
    map.removeOverlay(marker); // this removes the "Searching..." overlay
    map.zoomToMarkers(5); // pdMarker extension
    center = map.getCenter(); // save these for "Reset" control
    zoom = map.getZoom();
}

function TextualResetControl() {
}

function CreateResetControl()
{
    TextualResetControl.prototype = new GControl();
    
    TextualResetControl.prototype.initialize = function(map)
	{
	    var container = document.createElement("div");
	    var resetDiv = document.createElement("div");
	    
	    this.setButtonStyle_(resetDiv);
	    container.appendChild(resetDiv);
	    resetDiv.appendChild(document.createTextNode("Reset"));
	    GEvent.addDomListener(resetDiv, "click", function() {
				      map.setCenter(center, zoom);
				  });
	    
	    map.getContainer().appendChild(container);
	    return container;
	}
    
    TextualResetControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(7, 7));
    }

    TextualResetControl.prototype.setButtonStyle_ = function(button) {
	button.style.textDecoration = "underline";
	button.style.color = "#0000cc";
	button.style.backgroundColor = "white";
	button.style.font = "small Arial";
	button.style.border = "1px solid black";
	button.style.padding = "1px";
	button.style.marginBottom = "2px";
	button.style.textAlign = "center";
	button.style.width = "3em";
	button.style.cursor = "pointer";
    }
    map.addControl(new TextualResetControl());
}

function floatmap()
{
    // alert(document.documentElement.scrollTop);
    // alert(window.pageYOffset);
    var scrOfX = 0, scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
	//Netscape compliant
	scrOfY = window.pageYOffset;
	scrOfX = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	//DOM compliant
	scrOfY = document.body.scrollTop;
	scrOfX = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	//IE6 standards compliant mode
	scrOfY = document.documentElement.scrollTop;
	scrOfX = document.documentElement.scrollLeft;
    }

    floaterDiv = document.getElementById('floater');
    if (scrOfY > 225)
	{
	    floaterDiv.style.top = scrOfY + 25 + 'px';
	}
    else
	{
	    floaterDiv.style.top = '200px';
	}
}
