// JavaScript Document
//Browser Support Code

var MapMe={
	add_event:function(e,event,func){if(e.addEventListener){e.addEventListener(event,func,false);}else if(e.attachEvent){e.attachEvent("on"+event,func);}},
	init:function(divId,Loc){
		this.Locations = new Array();
		this.Markers = new Array();
		Loc.index=0;
		this.Locations[0] = Loc;
		this.initLocation = Loc;
		this.DivId = divId;
		this.add_event(window, "unload", GUnload);
		//this.add_event(body,"load",this.gm_initialize);
		this.gm_initialize(this.initLocation);
		if( this.initLocation.Located==true ) this.addMarker(this.initLocation);
	},//
	gm_initialize:function(Location){
		if( GBrowserIsCompatible() ){
			var mappoint = new GLatLng(Location.Lat, Location.Lng);
			var map = new GMap2(document.getElementById(this.DivId));
			map.setCenter(mappoint, Location.Zoom);
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());
			//map.enableScrollWheelZoom();
			this.Map = map;
		}else{this.Map = false;}
	},
	addMarker:function(Location){
		var latlng = new GLatLng(Location.Lat, Location.Lng);
		var letter = String.fromCharCode("A".charCodeAt(0) + Location.index);
	    var baseIcon = new GIcon(G_DEFAULT_ICON);
	    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	    baseIcon.iconSize = new GSize(20, 34);
	    baseIcon.shadowSize = new GSize(37, 34);
	    baseIcon.iconAnchor = new GPoint(9, 34);
	    baseIcon.infoWindowAnchor = new GPoint(9, 2);
		var letteredIcon = new GIcon(baseIcon);
		letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
		markerOptions = { icon:letteredIcon };
		var marker = new GMarker(latlng,markerOptions);
		this.Map.addOverlay(marker);
		if( Location.message!='' ){
			GEvent.addListener(marker,"click",
				function(){
					if( marker.hasWindow==1 ){
						marker.hasWindow=0;
						marker.closeInfoWindow();
					}
					else{
						marker.hasWindow=1;
						marker.openInfoWindowHtml(Location.message);
					}
				});
		}
		Location.Marker = marker;
	},
	toggleMarkers:function(){
		if( this.flagMarkersShown==1 ){
			for(var i=1;i<this.Locations.length;i++){
				this.hideLocationMarker(i);
			}
			this.flagMarkersShown=0;
			//try{
				document.getElementById('togglerbutton').src='images/gmap/markerOn.png';
			//}catch(e){;}
		}else{
			for(var i=1;i<this.Locations.length;i++){
				this.showLocationMarker(i,false);
			}
			this.flagMarkersShown=1;
			//try{
				document.getElementById('togglerbutton').src='images/gmap/markerOff.png';
			//}catch(e){;}
		}
	},
	addLocation:function(NewLoc,index){NewLoc.index=index;this.Locations[index] = NewLoc;},
//	displayLocatons:function(){// to be removed
//		for(var i=0;i<this.Locations.length;i++){
//			document.write(this.Locations[i].Lat+' - '+this.Locations[i].Lng + "<br />");
//		}
//	},
	//getLocations:function(){return this.Locations;}, // to be removed
	showLocationMarker:function(index,panto){
		if(!this.Locations[index].Marker){ this.addMarker(this.Locations[index]); }
		this.Locations[index].Marker.show();
		if(panto==true) this.Map.panTo(this.Locations[index].Marker.getLatLng());
	},
	hideLocationMarker:function(index){
		if(!this.Locations[index].Marker){ this.addMarker(this.Locations[index]); }
		this.Locations[index].Marker.hide();
	},
	ShowInfoWindowOnLocationsMarker: function(Location){
		if( Location.Marker.hasWindow==1 ){
			Location.Marker.hasWindow=0;
			Location.Marker.closeInfoWindow();
		}
		else{
			Location.Marker.hasWindow=1;
			Location.Marker.openInfoWindowHtml(Location.message);
		}
	},
	savePositionInCookie: function(){
		var position = this.Map.getCenter();
		var poslat = position.lat();
		var poslng = position.lng();
		var poszoom = this.Map.getZoom();
		this.setCookie('poslat', poslat);
		this.setCookie('poslng', poslng);
		this.setCookie('poszoom', poszoom);
	},
	setCookie: function(name,value){var expires="";document.cookie=name+"="+value+expires+"; path=/maps/";}

};

//not in stable version yet

//GEvent.addListener(marker, 'mouseover', function(){MapMe.hilightMarker(this);});
//GEvent.addListener(marker, 'mouseout', function(){MapMe.dehilightMarker(this);});

//hilightMarker: function(marker){
//	// Make bouncable
//	if (!marker.Xa){marker.Xa = true;marker.qo(false);}
//	marker.ri = 10; // Max height
//	marker.av = -1; // Direction (- = up)
//	marker.tc();
//},
//dehilightMarker: function(marker){
//	marker.ri = 10; // Max height
//	marker.av = 1; // Direction (- = up)
//	marker.tc();
//},
//dropMarker: function(marker, height){
//	// Make bouncable
//	if (!marker.Xa){marker.Xa = true;marker.qo(false);}
//	marker.Pa = height;	// Current height
//	marker.ri = height;	// Max height
//	marker.av = 1;		// Direction (+ = down)
//	marker.tc();		// Go baby!
//}


function createMarker(latlng, number){
	var marker = new GMarker(latlng);
	marker.value = number;
	GEvent.addListener(marker,"click", function() {
		var myHtml = "<b>#" + number + "</b><br/>" + message[number -1];
		map.openInfoWindowHtml(latlng, myHtml);
	});
	return marker;
}
   
function GM_initialize(mapLat,mapLong,mapZoom,divId){
	if( GBrowserIsCompatible() ){
		mappoint = new GLatLng(mapLat, mapLong);
		var map = new GMap2(document.getElementById(divId));
		map.setCenter(mappoint, mapZoom); //
		map.addControl(new GSmallMapControl());
		map.addControl(new GOverviewMapControl());
		var marker = new GMarker(mappoint);
		map.addOverlay(marker);
		return map;
	}else{
		return false;
	}
}


function toggleGmapGroup(type) {
  for (var i = 0; i < markerGroups[type].length; i++) {
    var marker = markerGroups[type][i];
    if (marker.isHidden()) {
      marker.show();
    } else {
      marker.hide();
    }
  } 
}

function showGmapGroup(type,map,unzoom) {
  for (var i = 0; i < markerGroups[type].length; i++) {
    var marker = markerGroups[type][i];
      marker.show();
  }
  if(unzoom){
    unzoomToShowGroup(type,map);
  }
}

function unzoomToShowGroup(type,map) {
  //get max/min val
  var minLng = markerGroups[type][0].getLatLng().lng();
  var maxLng = markerGroups[type][0].getLatLng().lng();
  var minLat = markerGroups[type][0].getLatLng().lat();
  var maxLat = markerGroups[type][0].getLatLng().lat();
  for(var i = 0; i < markerGroups[type].length; i++){
    if(markerGroups[type][i].getLatLng().lng() < minLng) minLng = markerGroups[type][i].getLatLng().lng();
    if(markerGroups[type][i].getLatLng().lng() > maxLng) maxLng = markerGroups[type][i].getLatLng().lng();
    if(markerGroups[type][i].getLatLng().lat() < minLat) minLat = markerGroups[type][i].getLatLng().lat();
    if(markerGroups[type][i].getLatLng().lat() > maxLat) maxLat = markerGroups[type][i].getLatLng().lat();
  }
  var rngLat = Math.abs(maxLat - minLat);
  var rngLng = Math.abs(maxLng - minLng);
  //check if points are in visible area
  var maxZoomOut = 5;
  while(maxZoomOut>0){
    if(map.getBounds().containsLatLng(new GLatLng(minLat, minLng)) && map.getBounds().containsLatLng(new GLatLng(maxLat, maxLng))){
      return true;
    }
    else {
      //check if points can be visible by panTo (without zoomout)
  mapRngLat = Math.abs(map.getBounds().getSouthWest().lat() - map.getBounds().getNorthEast().lat());
  mapRngLng = Math.abs(map.getBounds().getSouthWest().lng() - map.getBounds().getNorthEast().lng());
  if(mapRngLat > rngLat && mapRngLng > rngLng){
    // if yes - just panTo
    newcenter = new GLatLng(minLat + (rngLat/2), minLng + (rngLng/2));
    map.panTo(newcenter);
    return true;
  }
  else {
    // if no unzoom and try to check again
        map.zoomOut();
        maxZoomOut--;
        if(maxZoomOut < 1) return false;
      }
    }
  }
}

function createPropertyMarker(point, id, address, stat, cat, price, type) {
  var marker = new GMarker(point, customIcons[type]);
  var html = "<b><a href=\"viewt.php?pid=" + id + "\">" + address + "</a></b><br />Price: " + price + "<br />Property Type: " + cat + "<br />Status: " + stat;      
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}


