/*
 *	MAP CODE FOR FRONT END
 *  v 1.0
 */
 
 	var map = null;
	var markerCollection = new Array();
	var selectedMarker = null;
	
	/*
	*	Load Map With Initial Conditions
	*/
	function load()
	{
		if (GBrowserIsCompatible())
		{
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GOverviewMapControl());
			GEvent.addListener(map, 'load', function()
            {
				configHandle();
            });
			GEvent.addListener(this.map, 'zoomend', function(oldLevel, newLevel)
            {
				if (slider)
				{
					slider.setValue(map.getZoom());
				}
            });
			
			map.setCenter(new GLatLng(orgLat, orgLng), orgZoom);
			
			iconPin = new GIcon();
			iconPin.image = "images/p.0.png";
			iconPin.iconSize = new GSize(26, 40);
			iconPin.iconAnchor = new GPoint(13, 20);	
			
			var hazMarker;
			for(var iMarker = 0; iMarker < mapMarkers.length; iMarker++)
			{
				var markerData = mapMarkers[iMarker];
				var filter = (markerData[0] != null) && (markerData[0] != null) && 
							 (markerData[0] != undefined) && (markerData[0] != undefined);
				if (filter)
				{
					hazMarker = createMarker(markerData[0], markerData[1], markerData[2], markerData[3]);
					map.addOverlay(hazMarker);
					markerCollection.push(hazMarker);
				}
			}
		}
	}
	
	/*
	*	Marker Functions create,select,focus
	*/
	function createMarker(lng, lat, ID, city)
	{
		var point = new GLatLng(lat, lng);
		var marker = new GMarker(point, {icon:iconPin, draggable:false, bouncy:false});
		marker.ID = ID;
		marker.city = city;
		marker.lat = lat;
		marker.lng = lng;
		GEvent.addListener(marker, "mouseover", function()
		{
			
		});
		GEvent.addListener(marker, 'click', function()
		{
			selectMarker(this);
		});
		return marker;
    }
	
	function selectMarker(marker)
	{
		// Unselect Old Marker
		if (selectedMarker != null)
		{
			selectedMarker.setImage('images/p.0.png');
		}
		
		// Select Marker
		selectedMarker = marker;
		selectedMarker.setImage('images/p.a.png');
		
		// Unselect Old Item
		if(oldItemSelected != null)
		{
			oldItemSelected.setClassName('item');
		}
		
		// Select Item
		var HTML_DIV = HTML('LOC_' + selectedMarker.ID);
		if( HTML_DIV != null)
		{
			HTML('LOC_' + selectedMarker.ID).setClassName('itemSelect');
			oldItemSelected = HTML('LOC_' + selectedMarker.ID);
		}
		
		var HTML_CITY = null;
		if(selectedMarker.city == 'DC')
		{
			HTML_CITY = HTML('city_DC');
		}
		else if(selectedMarker.city == 'MD')
		{
			HTML_CITY = HTML('city_Maryland');
		}
		else if(selectedMarker.city == 'VA')
		{
			HTML_CITY = HTML('city_Virginia');
		}
		
		HTML('city_DC').setClassName('none');
		HTML('city_Maryland').setClassName('none');
		HTML('city_Virginia').setClassName('none');
		if( HTML_CITY != null)
		{
			HTML_CITY.setClassName('selected');	
		}
		
		
		// Center Location in Map
		map.panTo(new GLatLng(selectedMarker.lat, selectedMarker.lng));
		
		// Show Details
		loadPopup(selectedMarker.ID);
	}
	
	function focusMarker(MARKER_ID)
	{
		for(var iMarker = 0; iMarker < markerCollection.length; iMarker++)
		{
			if (markerCollection[iMarker].ID == MARKER_ID)
			{
				var marker = markerCollection[iMarker]
				map.setCenter(new GLatLng(marker.lat, marker.lng), orgZoom);
				selectMarker(marker);
				return;
			}
		}
	}
	
	/*
	*	Controls
	*/
	var slider;
	function configHandle()
	{
		slider = new Control.Slider(
			'handle',
			'track',
			{
				range:$R(18,3),
				values:[18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3],
				axis:'vertical',
				onChange: function(v){
					map.setZoom(v);
				}
			}
		);
		slider.setValue(map.getZoom());
	}
	
	function changeMapType(type, sender)
	{
		HTML('mapType_MAP').setClassName('map');
		HTML('mapType_SATELITE').setClassName('satellite');
		HTML('mapType_HYBRID').setClassName('terrain');
		if (type == 'n')
		{
			map.setMapType(G_NORMAL_MAP);
			HTML('mapType_MAP').setClassName('map active0');
		}
		else if (type == 's')
		{
			map.setMapType(G_SATELLITE_MAP);
			HTML('mapType_SATELITE').setClassName('map active1');
		}
		else if (type == 't')
		{
			map.setMapType(G_PHYSICAL_MAP);
			HTML('mapType_HYBRID').setClassName('map active2');
		}		
	}
	
	function resetZoom()
	{
		map.setCenter(new GLatLng(orgLat, orgLng), orgZoom);
	}
	
	function changeZoom(way)
	{
	    if(way == 'in')
		{
			map.zoomIn();
		}
		else
		{
			map.zoomOut();
		}
	}
	
	/*
	*	Go to location Functions
	*/
	var oldItemSelected = null;
	function gotoLocation(HTML_ID)
	{
		scrollToTop(0);
		focusMarker(HTML_ID);
	}
	
	function gotoCity(_orgLng, _orgLat, HTML_ITEM)
	{
		HTML('city_DC').setClassName('none');
		HTML('city_Maryland').setClassName('none');
		HTML('city_Virginia').setClassName('none');
		HTML(HTML_ITEM).setClassName('selected');
		citySelected = HTML(HTML_ITEM);
		map.setCenter(new GLatLng(_orgLat, _orgLng), orgZoom);
		orgLat = _orgLat;
		orgLng = _orgLng;
	}
	
	/*
	*	Pop Up Functions
	*/
	function closePopup()
	{
		if(oldItemSelected != null)
		{
			oldItemSelected.setClassName('item');
		}
		if (selectedMarker != null)
		{
			selectedMarker.setImage('images/p.0.png');
		}
		HTML('map_pop_up').hide();
	}
	
	var http_request_PopUp;
	var POP_UP_URL = 'http://www.douglasdevelopment.com/details_template.php?propertyId=';
	var loading_HTML = '<div style="padding-top:50px;text-align:center;"><img src="images/icon_load.gif" /></div>';
	
	function loadPopup(ID)
	{	
		// Create HTTP_REQUEST
		createHTTP_Request();
		
		HTML('map_pop_up').show();
		HTML('map_pop_up').innerHTML = loading_HTML;	
		
		http_request_PopUp.onreadystatechange = function()
		{
			if (http_request_PopUp.readyState == 4)
			{ // XML cargado
				if (http_request_PopUp.status == 200)
				{ // XML parseado y OK
					var xmldoc = http_request_PopUp.responseText;
					//var xmldoc = http_request_PopUp.responseXML;
					//alert(xmldoc);
					HTML('map_pop_up').innerHTML = xmldoc;
				}
				else
				{
					//alert("Problema cargando el XML:\n" + http_request_PopUp.statusText);
				}
			}
		};
		
		http_request_PopUp.open('GET', (POP_UP_URL + ID), true);
		//http_request_PopUp.open('GET', 'details_template.html', true);
		http_request_PopUp.send(null);		
	}
	
	function createHTTP_Request()
	{
		try
		{
			http_request_PopUp.abort();
		}
		catch(e)
		{
		}
		http_request_PopUp = false;
		if (window.XMLHttpRequest)
		{ // Mozilla, Safari, ...
			http_request_PopUp = new XMLHttpRequest();
			if (http_request_PopUp.overrideMimeType)
			{
				http_request_PopUp.overrideMimeType('text/xml');
				// See note below about this line
			}
		}
		else if (window.ActiveXObject)
		{ // IE
			try
			{
				http_request_PopUp = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				try
				{
					http_request_PopUp = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e)
				{
				}
			}
		}
		if (!http_request_PopUp)
		{
			alert('Giving up :( Cannot create an XMLHTTP instance');
			return false;
		}
	}
	
	
	/*
	*	Scroll top Top
	*/
    function scrollToTop(target)
	{
		var t = (typeof target == 'undefined') ? 0 : target;
		var scrollY = document.viewport.getScrollOffsets().top;
		var ppms = 30;
		
		function doScrollY()
		{
			var scrollY = document.viewport.getScrollOffsets().top;
			if(scrollY > t)
			{
				scrollBy(0, (scrollY - (scrollY + ppms)));
			}
			else
			{
				clearInterval(si);
			}
		}
		
		var si = setInterval(doScrollY, 1);
    }