
// the map in the search panel
var GoogleMiniMap = {

  map: null,
  manager: null,
  currentWindow: null,
  loaded: false,
  markers: {},

  load: function() {
    //Prevent error message
    if (typeof (google.maps.Icon) == "undefined") return;
  
    var canvas = document.getElementById("googleMiniMapCanvas");
    if (!GoogleMapUtils.isImplemented(canvas))
      return;

    var map = GoogleMiniMap.map = new google.maps.Map2(canvas);
    var coordsEl = document.getElementById('googleMapResultsCoords');

    // enable various features on the map
    map.enableDoubleClickZoom();
    map.enableContinuousZoom();
    map.enableScrollWheelZoom();
    //map.disableDragging();

    //add controls
    map.addControl(new google.maps.SmallZoomControl());

    // set default view
    var rect = GoogleMapUtils.getMapDefaultView(coordsEl, true);
    map.setCenter(rect.getCenter());
    var zoom = map.getBoundsZoomLevel(rect)

    //Don't zoom too much
    if (zoom > 10) zoom = 10;

    map.setZoom(zoom);
    map.savePosition();

    // load markers
    GoogleMapUtils.loadMarkers(GoogleMiniMap, coordsEl, false);
    GoogleMapUtils.setMinMaxZoom(3, 15);

    // listen to events
    var handleMapClick = google.maps.Event.addListener(map, "click", GoogleMiniMap.handleMapClick);
    var handleZoom = google.maps.Event.addListener(map, "zoomend", GoogleMiniMap.handleZoom);
    var handleMove = google.maps.Event.addListener(map, "moveend", GoogleMiniMap.handleMove);
    var handleDragStart = google.maps.Event.addListener(map, "dragstart", GoogleMiniMap.handleDragStart);

    // trim the "copyright 2008 google" text by setting overflow:hidden
    var GoogleCopyRightTextDiv = document.getElementById("googleMiniMapCanvas").firstChild.nextSibling;
    GoogleCopyRightTextDiv.style.width = '220px';
    GoogleCopyRightTextDiv.style.overflow = 'hidden';
    GoogleCopyRightTextDiv.style.marginLeft = '10px';

    var doScroll = document.getElementById("hiddenDoScroll");
    if (doScroll != null && doScroll.value != '')
      GoogleMiniMap.divFloatTop("secondary-content-box", 100, 0);

    this.loaded = true;
  },

  updateMapLinks: function(rect) {
    var googleMiniMapShowAll = document.getElementById('googleMiniMapShowAll');
    var showAllLink = googleMiniMapShowAll.getElementsByTagName('a')[0];
    var mapLinkEl = document.getElementById('results-tab-map').getElementsByTagName('a')[0];
    if (/google-map-bounds=&/.test(showAllLink.href) && /google-map-zoom=&/.test(showAllLink.href)) {
      var bounds = '33.13755119234614,-29.35546875,65.36683689226321,40.25390625';
      var zoom = '4';

      mapLinkEl.href = showAllLink.href = showAllLink.href.replace('google-map-bounds=&', 'google-map-bounds=' + bounds + '&');
      mapLinkEl.href = showAllLink.href = showAllLink.href.replace('google-map-zoom=&', 'google-map-zoom=' + zoom + '&');
    }
  },

  handleMapClick: function(marker) {
    if (GoogleMiniMap.currentWindow && !marker) {
      GoogleMiniMap.currentWindow.hide();
      GoogleMiniMap.currentWindow = null;
    }
  },

  handleZoom: function(map) {
    if (GoogleMiniMap.currentWindow) {
      GoogleMiniMap.currentWindow.hide();
      GoogleMiniMap.currentWindow = null;
    }
  },

  handleMove: function(map) {
    if (GoogleMiniMap.currentWindow) {
      GoogleMiniMap.currentWindow.hide();
      GoogleMiniMap.currentWindow = null;
    }
  },

  handleDragStart: function(map) {
    if (GoogleMiniMap.currentWindow) {
      GoogleMiniMap.currentWindow.hide();
      GoogleMiniMap.currentWindow = null;
    }
  },

  handleMarkerClick: function() {
    var pos = GoogleMiniMap.getPixelPositionFromCoords(this);
    var window = GoogleMiniMap.currentWindow = new GoogleMiniMapInfoWindow(pos, 'googleMiniMapInfoWindow');
    window.show(this.VSpoint);
  },

  handleClusterClick: function() {
    var pos = GoogleMiniMap.getPixelPositionFromCoords(this);
    var window = GoogleMiniMap.currentWindow = new GoogleMiniMapInfoWindow(pos, 'googleMiniMapInfoWindow');
    window.show(this.VSpoint);
  },

  showPins: function(type) {
    var markers = this.markers[type];
    if (markers) {
      for (var i = 0; i < markers.length; i++) {
        markers[i].show();
      }
    }
    if (this.currentWindow) {
      this.currentWindow.hide();
    }
  },

  hidePins: function(type) {
    var markers = this.markers[type];
    if (markers) {
      for (var i = 0; i < markers.length; i++) {
        markers[i].hide();
      }
    }
    if (this.currentWindow) {
      this.currentWindow.hide();
    }
  },

  getPixelPositionFromCoords: function(marker) {
    var point = GoogleMiniMap.map.fromLatLngToDivPixel(marker.getLatLng());
    var origin = GoogleMiniMap.map.fromLatLngToDivPixel(GoogleMiniMap.map.fromContainerPixelToLatLng(new GPoint(0, 0)));

    var x = point.x - origin.x;
    var y = point.y - origin.y;

    return { x: x, y: y };
  },

  divFloatTop: function(obj, topOffset, topPosition) {
    var startOffsetY = topOffset;
    var startY = topPosition;
    var ns = (navigator.appName.indexOf("Netscape") != -1);
    var d = document;
    var px = document.layers ? "" : "px";
    function ml(id) {
      var el = d.getElementById ? d.getElementById(id) : d.all ? d.all[id] : d.layers[id];
      if (d.layers) el.style = el;
      el.sP = function(y) { this.style.top = y + px; };
      el.y = startY;
      return el;
    }
    window.stayTop = function() {
      var pY = ns ? pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
      pY = (pY > startOffsetY ? pY - startOffsetY : 0);
      var dY = (pY > startY) ? pY : startY;
      var offset = (dY - ftlObj.y) / 8;
      if (offset > 0.001 || offset < -0.001) {
        ftlObj.y += offset;
        ftlObj.sP(ftlObj.y);
      }
      setTimeout("stayTop()", 20);
    }
    var ftlObj = ml(obj);
    stayTop();
  }
};


/**/
function GoogleMiniMapInfoWindow(pos, infoWindowId) {
  this.init(pos, infoWindowId);
}

GoogleMiniMapInfoWindow.prototype = new GoogleMapInfoWindow(null, null);

GoogleMiniMapInfoWindow.prototype.show = function(cluster)
{
  this.toHtml(cluster);
  GoogleMapInfoWindow.prototype.show.apply(this, arguments);
};

GoogleMiniMapInfoWindow.prototype.getAccFromCluster = function(cluster, index) {
  return {
    url:    cluster.getElementsByTagName('url')[index].text || cluster.getElementsByTagName('url')[index].innerHTML,
    title:  cluster.getElementsByTagName('name')[index].text || cluster.getElementsByTagName('name')[index].innerHTML,
    type:  cluster.getElementsByTagName('type')[index].text || cluster.getElementsByTagName('type')[index].innerHTML
  };
};

GoogleMiniMapInfoWindow.prototype.toHtml = function(cluster) {
  var numAccs = cluster.getElementsByTagName('accommodation').length;
  var acc, li, a;
  var listEl = document.getElementById('googleMiniMapInfoWindowList');
  var isSelectcamp = (resources.isselectcamp.toLowerCase() == 'true');
  listEl.innerHTML = '';
  
  for (var i = 0; i < numAccs; i++)
  {
    acc = this.getAccFromCluster(cluster, i);
    li = document.createElement('li');
    if (i == numAccs-1)
      li.className = 'last';
    
    a = document.createElement('a');
    a.href = acc.url;
		
    switch (acc.type.toLowerCase())
    {
      case "vakantiepark":
		    a.className = 'pin-green';
        break;
      case "camping":
        a.className = isSelectcamp ? 'pin-red' : 'pin-orange';
        break;
      case "hotel":
				a.className = 'pin-brown';
        break;
      case "huis/villa":
      default:
				a.className = isSelectcamp ? 'pin-orange' : 'pin-red';
        break;
    }
    a.innerHTML = acc.title;
    
    li.appendChild(a);
    listEl.appendChild(li);
  }
};