// Copyright (c) 2006, Benjamin C. Wilson. All Rights Reserved.
// Google Map API for PmWiki.
// This copyright statement must accompany this script.

var linked = Array();
var levels = Array();

var VlagIcon = new GIcon();
VlagIcon.image = "/pub/img/vlagoranje.png";
VlagIcon.iconAnchor = new GPoint(2, 25);
VlagIcon.iconSize = new GSize(21, 25);
VlagIcon.infoWindowAnchor = new GPoint(2, 25);

var BabyIcon = new GIcon();
BabyIcon.image = "/pub/img/babyicon.png";
BabyIcon.iconAnchor = new GPoint(12, 12);
BabyIcon.iconSize = new GSize(25, 25);
BabyIcon.infoWindowAnchor = new GPoint(12, 12);

var miniIcon = new GIcon();
miniIcon.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png';
miniIcon.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
miniIcon.iconSize = new GSize(12, 20);
miniIcon.shadowSize = new GSize(22, 20);
miniIcon.iconAnchor = new GPoint(6, 20);
miniIcon.infoWindowAnchor = new GPoint(5, 1);

var redirectIcon = new GIcon();
redirectIcon.image='http://maps.google.com/mapfiles/kml/pal3/icon50.png';
redirectIcon.iconSize = new GSize(32, 32);
redirectIcon.iconAnchor = new GPoint(16, 16);
redirectIcon.infoWindowAnchor = new GPoint(16, 16);

var MapIcon = new GIcon();
MapIcon.iconSize = new GSize(30, 30);
MapIcon.iconAnchor = new GPoint(0, 30);
MapIcon.infoWindowAnchor = new GPoint(30, 0);


var AquaIcon = new GIcon(MapIcon);
AquaIcon.image = '/pub/img/aqua.png';





var baseIcon = new GIcon();
baseIcon.iconSize = new GSize(20, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);

var RpholidaysIcon = new GIcon(baseIcon);
RpholidaysIcon.image = '/pub/img/rpholidays.png';

var HogenIcon = new GIcon(baseIcon);
HogenIcon.image = '/pub/img/hogen.png';

var CentreIcon = new GIcon(baseIcon);
CentreIcon.image = '/pub/img/centre.png';

var LandalIcon = new GIcon(baseIcon);
LandalIcon.image = '/pub/img/landal.png';

var Ficon = new GIcon(baseIcon);
Ficon.image = "http://www.google.com/mapfiles/markerF.png";

var Ricon = new GIcon(baseIcon);
Ricon.image = "http://www.google.com/mapfiles/markerR.png";

var Oicon = new GIcon(baseIcon);
Oicon.image = "http://www.google.com/mapfiles/markerO.png";

var Vicon = new GIcon(baseIcon);
Vicon.image = "http://www.google.com/mapfiles/markerV.png";

var Kicon = new GIcon(baseIcon);
Kicon.image = "http://www.google.com/mapfiles/markerK.png";

var Cicon = new GIcon(baseIcon);
Cicon.image = "http://www.google.com/mapfiles/markerC.png";

var Dicon = new GIcon(baseIcon);
Dicon.image = "http://www.google.com/mapfiles/markerD.png";

var Hicon = new GIcon(baseIcon);
Hicon.image = "http://www.google.com/mapfiles/markerH.png";

var Sicon = new GIcon(baseIcon);
Sicon.image = "http://www.google.com/mapfiles/markerS.png";

var Picon = new GIcon(baseIcon);
//Picon.image='http://maps.google.com/mapfiles/kml/pal5/icon47.png';
Picon.image = "http://www.google.com/mapfiles/markerP.png";

var Zicon = new GIcon(baseIcon);
Zicon.image = "http://www.google.com/mapfiles/markerZ.png";

var Gicon = new GIcon(baseIcon);
Gicon.image = "http://www.google.com/mapfiles/markerG.png";

var Micon = new GIcon(baseIcon);
Micon.image = "http://www.google.com/mapfiles/markerM.png";

function setGmaMapCenter(map, type, zoom,lat,lon) {
  if (!zoom) zoom = map.getBoundsZoomLevel(bounds);
  var clat = (lat==null)
    ? (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2
    : lat;
  var clon = (lon==null)
    ? (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2
    : lon;
  map.setCenter(new GLatLng(clat,clon), zoom, type);
}
// This function picks up the click and opens the corresponding info window
function makeMarkerIcon(ba,ov) {
  var label = {'url':overlay[ov], 'anchor':new GLatLng(4,4), 'size':new GSize(12,12)};
  var icon = new GIcon(G_DEFAULT_ICON, background[ba], label);
  return icon;
}
function addGmaPoint(map,lat,lon,name,msg,icon,zoom,level) {
  var point = new GLatLng(lat,lon); 
  var marker = new GMarker(point,{icon:icon,title:name});
  //var marker = new GMarker(point,icon);
  //var marker = new GMarker(point);
  // TODO: Put Iconic stuff here.
  // http://www.econym.demon.co.uk/googlemaps/examples/label.htm
  //icon = makeMarkerIcon(icon);
  //var marker = new GMarker(point,icon);
  bounds.extend(point);

  // The info window version with the 'to here' form open
  if (msg) {
    name = (name) ? '<h3>'+name+'</h3>\n' : '';
      if ( zoom ) {
      //zoom_msg='<br/><a href="javascript:map.setZoom('+zoom+');map.panTo(point)">Zoom in</a>';
        GEvent.addListener(marker, 'dblclick', function() {  if ( zoom ) {map.setZoom(zoom);}; map.panTo(point) });
      }
      msg = name + msg ;
      var k=i;
      GEvent.addListener(marker, 'click', function() {  map.panTo(point);marker.openInfoWindowHtml(msg);  });
      //GEvent.addListener(marker, 'mouseover', function() {GmaHighlight("mapP"+k);});
  }
  points[i] = point;
  markers[i] = marker;
  htmls[i] = msg;
  levels[i]= level;
  i++;
  return marker;
}
function makeGmalink(map, k,zoom) { 
pos=findPos(document.getElementById("map"));
window.scrollTo(pos[0],pos[1]);
    if ( zoom ) { map.setZoom(zoom); }
    GmaHighlight("mapP"+k);
    map.panTo(points[k]);
    markers[k].openInfoWindowHtml(htmls[k]); 
}

//function makeGmalink(map, k,zoom,anchor) { 
    //window.scrollTo(0,document.getElementById("map").offsetTop);
    //if ( zoom ) { map.setZoom(zoom); }
    //if ( anchor) { GmaHighlight(anchor); }
    //map.panTo(points[k]);
    //markers[k].openInfoWindowHtml(htmls[k]); 
//}


function doGmaOverlay(map) { 
mm=new GMarkerManager(map);
for (k in markers) mm.addMarker(markers[k],levels[k]); 
mm.refresh;
}

function GmaJump(anchor) {
 e=document.getElementsByName(anchor);
 //there should only by one; what the heck take the first one
 window.setTimeout(function() { _GmaHighlight(e[0]); }, 500);
 p=e[0].parentNode;
 if ( p )  {
  pos=findPos(p);
window.scrollTo(pos[0],pos[1]-30);
  }
 //_GmaHighlight(e[0]);

}
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function GmaHighlight(anchor) {
 e=document.getElementsByName(anchor);
 if ( e[0] ) {
 _GmaHighlight(e[0]);
 }
}

function _GmaHighlichtClean(){
 f=getElementsByClassName(document, "*", "maplinkhighlight");
 for(var i=0;i<f.length;i++){jscss('remove',f[i],'maplinkhighlight')}
}

function _GmaHighlight(e) {
 _GmaHighlichtClean();
 //there should only by one; what the heck take the first one
 p=e.parentNode;
 //jscss('add',e,'maplinkhighlight');
 jscss('add',p,'maplinkhighlight');
}


function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}

function jscss(a,o,c1,c2)
{
  switch (a){
    case 'swap':
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1): o.className.r
eplace(c1,c2);
    break;
    case 'add':
      if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}
