//<![CDATA[

var iconHouse = new GIcon(); 
iconHouse.image = '/site/images/maps/icon_small.png';
iconHouse.iconSize = new GSize(28, 28);
iconHouse.iconAnchor = new GPoint(6, 18);
iconHouse.infoWindowAnchor = new GPoint(12, 6);


// set up marker mouseover tooltip div
var tooltip = document.createElement("div");
var gmarkers = [];


if (GBrowserIsCompatible()) {
	
var mP = {
	init: function() {
		try {
			if(mP.loadedSuccessfully) {
				return;
			}
		}
		catch(e) {
			mP.loadedSuccessfully = 0;
		}
	  if(!document.getElementById('map')) {
	  	return;
	  }
	  
    var map = new GMap2(document.getElementById("map"));
    // reference the map object so we can access outside init().
    mP.map = map;
  	// start with an empty GLatLngBounds object
    var bounds = new GLatLngBounds();
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    $('map').addClass('maploading');
  	if (Cookie.get("map_lat") && Cookie.get("map_lng")) {
			map.setCenter(new GLatLng (Cookie.get("map_lat"), Cookie.get("map_lng")));
		} else {
			map.setCenter(new GLatLng(0,0),0);
			$('map').addClass('maploadingblank');
		}
		if (Cookie.get("map_zoom")) {
			map.setZoom(Number(Cookie.get("map_zoom")));
		}
		
    // set up marker mouseover tooltip div (tooltip div defined outside class)
		map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
		tooltip.style.visibility="hidden"; 
		
		
  	var random_num = (Math.round((Math.random()*5999)+1));
		var url = '/site/includes/content/gen_map_xml.php?rdm='+escape(random_num);
		
		var request = GXmlHttp.create();
		request.open('get', url);
		// setup the function to deal with the reply
		request.onreadystatechange = function(){
			if (request.readyState == 4) {
				//alert("in response: "+request.responseText);
				var xml = GXml.parse(request.responseText);
				var markers = xml.documentElement.getElementsByTagName("marker");
				
				//alert("length = "+markers.length);
				if (markers.length == 0) {
					$('map').style.display = 'none';
					return;
				}
				
	      for (var i = 0; i < markers.length; i++) {
	      	mP.marker_ref = i;
	        var searchtype = markers[i].getAttribute("searchtype");
	        var id = markers[i].getAttribute("id");
	        
	        var town = markers[i].getAttribute("location");
	        var imageurl = markers[i].getAttribute("imageurl");
	        
	        var title = markers[i].getAttribute('title');
	        var price = markers[i].getAttribute('price');
	        var summary = markers[i].getAttribute('summary');
	        var status = markers[i].getAttribute('status');
	        var numproperties = markers[i].getAttribute('properties');
	        var numavailable = markers[i].getAttribute('available');
	        
	        var point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
	                                parseFloat(markers[i].getAttribute("longitude")));
	        var marker = createMarker(point, id, title, imageurl, summary, price, status, numproperties, numavailable, town);
	        map.addOverlay(marker);
	        
	        bounds.extend(point);
	      }
	      
	      
	      // determine the zoom level from the bounds or cookie if one is set
	      if (Cookie.get("map_zoom")) {
	      	map.setZoom(Number(Cookie.get("map_zoom")));
	      } else {
		      map.setZoom(map.getBoundsZoomLevel(bounds));
				}
				
		    // determine the centre from the bounds or cookies if set
				if (Cookie.get("map_lat") && Cookie.get("map_lng")) {
					map.setCenter(new GLatLng (Cookie.get("map_lat"), Cookie.get("map_lng")));
				} else {
		      var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
		      var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
		      map.setCenter(new GLatLng(clat,clng));
	      }
	      
	      // set cookies if map is moved or zoomed
			  GEvent.addListener(map, "moveend", function() {
				  var center = map.getCenter();
				  var zoom = map.getZoom();
				  Cookie.set("map_lat", center.y, {duration: false});
				  Cookie.set("map_lng", center.x, {duration: false});
				});
			  GEvent.addListener(map, "zoomend", function() {
				  Cookie.set("map_zoom", map.getZoom(), {duration: false});
				});
				
				
				$('map').removeClass('maploading');
				$('map').removeClass('maploadingblank');
  			//$('results_filter').style.display = 'none';
	    }
		}	
		// don't wait on the XMLHttpRequest to start.
		mP.loadedSuccessfully = 1;
		request.send(null);
    
		function createMarker(point, id, title, imageurl, summary, price, status, numproperties, numavailable, area) {
		  var marker = new GMarker(point, iconHouse);
		  
		  var html = "<div class=\"map-pop\"><h2>" + title + "</h2><br /><img src='"+imageurl+"' /><div><strong>"+title+"</strong>";
		  html += "<br />Area: "+area+"<br />";
		  html += "Available: "+numavailable+"<br />&pound;"+price+"<br />"+status+"<br />";
		  html += "<a href='/developments/developments-home/"+id+"/'>more info &gt;</a></div></div>";
		  GEvent.addListener(marker, 'click', function() {
		    marker.openInfoWindowHtml(html);
		  });
		  
		  // save the info we need to use later for the list        
      gmarkers[id] = marker;
		  //marker.tooltip = '<div class="tooltip">&pound;' + price + '<br/>' + bedrooms + ' Bedrooms</div>';
		  marker.tooltip = '<div class="tooltip"><strong>'+title+'</strong><br />'+area+'<br />&pound;'+price+'<br />'+status+'</div>';
		  marker.row = id;
      
		  GEvent.addListener(marker,"mouseover", function() {
		    //mP.showTooltip(marker);
		    mP.highlightRow(marker, 'on');
		    marker.setImage("/site/images/maps/icon_small.png");
		  });        
		  GEvent.addListener(marker,"mouseout", function() {
		    //tooltip.style.visibility="hidden";
		    mP.highlightRow(marker, 'off');
		    marker.setImage("/site/images/maps/icon_small.png");
		  });
		  
		  
		  
		  return marker;
		}
		
		// we want to ref each listed item to a marker so add listener to each list now
		mP.addListeners();
		
		// we also want to add a listener to any field that should have map cookies reset on changes
		//var filter_zone = document.getElementById("filter_zone");
		//mP.addEvent(filter_zone, 'change', mP.deleteCookies, false);
		
		
	
  },
  
  
  
  
  
  
  
	  
  showTooltip: function(marker) {
	  tooltip.innerHTML = marker.tooltip;
		var point = mP.map.getCurrentMapType().getProjection().fromLatLngToPixel(mP.map.fromDivPixelToLatLng(new GPoint(0,0),true),mP.map.getZoom());
		var offset = mP.map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),mP.map.getZoom());
		var anchor = marker.getIcon().iconAnchor;
		var width = marker.getIcon().iconSize.width;
		var height = tooltip.clientHeight;
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y -height)); 
		pos.apply(tooltip);
		tooltip.style.visibility="visible";
	},
	
	deleteCookies: function() {
		Cookie.remove("map_lat");
		Cookie.remove("map_lng");
		Cookie.remove("map_zoom");
	},
	
	addListeners: function() {
		// get all div elements with class=cont in div inside results div.. eh??
		var list = $$('#results-cont div.cont div');
		// loop though list
		for (var k = 0; k < list.length; k++) {
			// get the row element
			var elem = list[k];
			
			mP.addEvent(elem, 'mouseover', mP.mymouseover, false);
			mP.addEvent(elem, 'mouseout', mP.mymouseout, false);
			mP.addEvent(elem, 'click', mP.myclick, false);
    }
	},
	
	highlightRow: function(marker, state) {
		var num = marker.row;
		var elem = document.getElementById("pr_"+num);
		if (elem && state) {
			if (state == 'on') {
				elem.style.border = "2px solid #ed1c24";
			} else {
				elem.style.border = "2px solid #ffffff";
			}
		}
	},
	
	mymouseover: function(e) {
		if (!e) var e = window.event;
		var tg = (window.event) ? e.srcElement : e.target;
		
		var list = $$('#results-cont div.cont div');
		for (var k = 0; k < list.length; k++) {
			// get the row element
			var elem = list[k];			
			var m = elem.getAttribute('num');
    	GEvent.trigger(gmarkers[m], "mouseout");
    }

		var m = tg.getAttribute('num');
		GEvent.trigger(gmarkers[m], "mouseover");
		
	},
	
	mymouseout: function(e) {
		if (!e) var e = window.event;
		var tg = (window.event) ? e.srcElement : e.target;
		/*
		if (tg.nodeName != 'DIV') return;
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		while (reltg != tg && reltg.nodeName != 'BODY')
			reltg= reltg.parentNode
		if (reltg== tg) return;
		*/
		var m = tg.getAttribute('num');
    GEvent.trigger(gmarkers[m], "mouseout");
	},
	
  // This function picks up the click and opens the corresponding info window
  myclick: function(e) {
		if (!e) var e = window.event;
		var tg = (window.event) ? e.srcElement : e.target;
		
		var m = tg.getAttribute('num');
    GEvent.trigger(gmarkers[m], "click");
    GEvent.trigger(gmarkers[m], "mouseout");
  },
  
  
  
  
  // function to add event listener, also caches events so they can be removed when the
	// page unloads to avoid memory leaks in IE
  addEvent: function(elm, evType, fn, useCapture) {
		// for W3C DOM complience
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } 
		// for IE...
		else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      //EventCache.add(elm, evType, fn);
      return r;
    } else {
			// for anyone else not IE or Moz... Safari etc
      elm['on' + evType] = fn;
    }
  },
	
	// cross-browser get target
	find_target: function(e) 	{
		var target; 	
		// for IE, target is held in window.event array
		if (window.event && window.event.srcElement) 
			target = window.event.srcElement;
		else if (e && e.target)
			target = e.target;
		if (!target)
			return null;
			
		return target;
	}
  
  
}



window.addEvent('domready', mP.init);
window.addEvent('load', mP.init);
window.addEvent('unload', GUnload);

} else {
	// browser ain't compatible with google maps
	
}


//]]>