
var ItinMap ={

  Render:function(){
    if (GBrowserIsCompatible()) {
      this.map = new google.maps.Map2(document.getElementById("map_canvas"));
      this.map.addMapType(G_PHYSICAL_MAP);
      this.map.enableDoubleClickZoom();
      this.map.setCenter(new google.maps.LatLng(18.208100, -63.102036), 11);
      this.map.setMapType(G_PHYSICAL_MAP);//calculate the boundaries

      
      ItinMap.map = this.map;
      ItinMap.BuildSlider("#slider");
      GEvent.addListener(ItinMap.map, "zoomend", function(){ItinMap.UpdateZoom()});
      ItinMap.UpdateZoom();
      ItinMap.mm = new MarkerManager(ItinMap.map, {borderPadding:1});

      ItinMap.baseicon = new GIcon();
      ItinMap.baseicon.image = "/sites/all/modules/map/images/markers/base.png";
      ItinMap.baseicon.iconSize = new GSize(37, 37);
      ItinMap.baseicon.iconAnchor = new GPoint(10, 30);

      ItinMap.poiicon = new GIcon();
      ItinMap.poiicon.image = "/sites/all/modules/map/images/markers/poi.png";
      ItinMap.poiicon.iconSize = new GSize(37, 37);
      ItinMap.poiicon.iconAnchor = new GPoint(10, 30);

			ItinMap.regionicon = new GIcon();
      ItinMap.regionicon.image = "/sites/all/modules/map/images/markers/cluster.png";
      ItinMap.regionicon.iconSize = new GSize(40, 31);
      ItinMap.regionicon.iconAnchor = new GPoint(10, 30);

			ItinMap.readMap(0);
    }
  },
  BuildSlider:function(slider_selector){
    if ($(slider_selector).length) {
      $(slider_selector).slider({
        min: 0, max: 14, value: 4, range: false,
        change: function(e,ui) {ItinMap.map.setZoom(14 - (ui.value-1));},
        orientation: "vertical"
       });
   		ItinMap.slider_height = $(slider_selector).css("height").replace("px","");
  		ItinMap.marker_height = $("div.ui-slider-handle").css("height").replace("px","");
  		ItinMap.available_slide = ItinMap.slider_height - ItinMap.marker_height;
  		ItinMap.pixelperstop = 	ItinMap.available_slide/14;
  		ItinMap.UpdateZoom();
  		$("a#zoom-in").click(function(){ return ItinMap.zoomIn(); });
  		$("a#zoom-out").click(function(){ return ItinMap.zoomOut(); });
  		$("a#up").click(function(){ return ItinMap.panUp(); });
  		$("a#down").click(function(){ return ItinMap.panDown(); });
  		$("a#left").click(function(){ return ItinMap.panLeft(); });
  		$("a#right").click(function(){ return ItinMap.panRight(); });
  		$("a#centre").click(function(){ return ItinMap.returnToSaved(); });
  	}
  },
  triggerClick:function (i) {
      GEvent.trigger(ItinMap.markers[i], "click");
  },
  UpdateZoom:function(){
    //console.log("TopCSS: "+ItinMap.available_slide);
		$("div.ui-slider-handle").css("top", ItinMap.slider_height - (ItinMap.pixelperstop * (ItinMap.map.getZoom()+1)));
	},
	returnToSaved:function(){
		ItinMap.map.returnToSavedPosition();
		ItinMap.UpdateZoom();
		return false;
	},
	panUp:function(){
		ItinMap.map.panDirection(0, 1);
		return false;
	},
	panDown:function(){
		ItinMap.map.panDirection(0, -1);
		return false;
	},
	panLeft:function(){
		ItinMap.map.panDirection(1, 0);
		return false;
	},
	panRight:function(){
		ItinMap.map.panDirection(-1, 0);
		return false;
	},
	zoomIn:function(){
		ItinMap.map.setZoom(ItinMap.cleanZoom((ItinMap.map.getZoom()) + 1));
		ItinMap.UpdateZoom();
		return false;
	},
	zoomOut:function(){
		ItinMap.map.setZoom(ItinMap.cleanZoom((ItinMap.map.getZoom()-1)));
		ItinMap.UpdateZoom();
		return false;
	},
	cleanZoom:function(value){
		value = Math.round(value);
		if (value < 1) {
			value = 1;
		}
		if (value > 15)	{
			value = 15;
		}
		return value;
	},
	markers:new Array(),
	createMarker:function(point,name,html,icon, click,zoom){
    var marker = new GMarker(point, {icon:icon});

    var infobox_opts ={
      "content":"<a id=\"callout-close\" href=\"#\">&nbsp;</a>"  + html,
      "offsetVertical":-185,
      "height":172,
      "width":325,
      "className":"infobox"
    };
    //console.log(infobox_opts);

		if (point.y == 18.208100 && point.x == -63.102036){
				infobox_opts.content = "<a id=\"callout-close\" href=\"#\">&nbsp;</a><div class=\"hideread\">"  + html + "</div>";
		}

    var ibox = new InfoBox(point, infobox_opts);
    marker.infoBox = ibox;
    GEvent.addListener(marker, "click", function() {

		if(!zoom){
      if (ItinMap.map.infoBox) {
        ItinMap.map.removeOverlay(ItinMap.map.infoBox);
      }
      ItinMap.map.infoBox = marker.infoBox;
      ItinMap.map.addOverlay(ItinMap.map.infoBox);
      ItinMap.map.setCenter(marker.getLatLng());
      ItinMap.map.panBy(new GSize(-100, 95));
      $("#callout-close").click(function(){ItinMap.map.removeOverlay(ItinMap.map.infoBox);return false;});
      //colorbox_init();
			}
			else{
      ItinMap.map.setCenter(point, 4);
			}
      return false;
    });
    ItinMap.markers.push(marker);
    return marker;
  },
  readMap:function(itin){
    // read the markers from the XML
    GDownloadUrl("/marker.xml?itin="+itin, function (doc) {
      var gmarkersRegion = [];
      var gmarkersBase = [];
      var gmarkersPOI = [];
      var gmarkersItin = [];
      var xmlDoc = GXml.parse(doc);
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      // hide the info window, otherwise it still stays open where the removed marker used to be
      //ItinMap.map.getInfoWindow().hide();
      ItinMap.mm.clearMarkers();
      for (var i = 0; i < markers.length; i++) {
        // obtain the attribues of each marker
        var lat = parseFloat(markers[i].getAttribute("lat"));
        var lng = parseFloat(markers[i].getAttribute("lng"));
        var point = new GLatLng(lat,lng);
        var name = markers[i].getAttribute("name");
        var type = markers[i].getAttribute("catagory");
        var html = markers[i].getAttribute("html");
        var stop = markers[i].getAttribute("stopno");
        // split the markers into three arrays, with different GIcons
        if (type == 'region') {
          var marker = ItinMap.createMarker(point,name,html,ItinMap.regionicon, 0,4);
          gmarkersRegion.push(marker);
        } else if ( type == 'base') {
          var marker = ItinMap.createMarker(point,name,html,ItinMap.baseicon, 0);
          gmarkersBase.push(marker);
        } else if (type == 'poi') {  var marker = ItinMap.createMarker(point,name,html,ItinMap.poiicon, 1); gmarkersPOI.push(marker);
        } else if (type == 'itin') {
          var marker = ItinMap.createMarker(point,name,html,new GIcon(ItinMap.baseicon, "/sites/all/modules/map/images/markers/"+stop+".png"), 1);
          gmarkersItin.push(marker);
        }
      }
      ItinMap.mm.addMarkers(gmarkersRegion, 0,3);
      ItinMap.mm.addMarkers(gmarkersBase, 4, 17);
      ItinMap.mm.addMarkers(gmarkersPOI,7, 17);
      ItinMap.mm.addMarkers(gmarkersItin,7, 17);
      ItinMap.mm.refresh();
    });
  }
};

$(document).ready(function(){
  ItinMap.Render();
});
