var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);

var baseIcon = new GIcon();
baseIcon.iconSize = new GSize(16, 27);
baseIcon.iconAnchor = new GPoint(8, 27);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(19, 29);

var markers = [];

var map;
var mapdiv;
var mapCenter = new GLatLng(0, 0);
var mapcheck = false;
var zoom;

var tooltip = document.createElement('div');
tooltip.style.visibility = 'hidden';

var polyline;
var encPoly;
var encZoom;
var overlayColor;

function e(id){return document.getElementById(id)}

function backtoForm(){
	var vTop     = e('topDiv');
	var vBottom  = e('bottomDiv'); 
	vTop.style.display = 'block';
	vBottom.style.display  = 'none';	
}

function clearArray(arrName){
	for(n = arrName.length - 1; n >= 0; n--){
		delete arrName[n];
	}
	arrName.length = 0;
}

function visibleZoom(bounds){
    var mapSize = map.getSize();
    if ((mapSize.height > 230) && (mapSize.width > 260)) {
        mapSize = new GSize(mapSize.width - 30, mapSize.height - 30);
    }
    return map.getCurrentMapType().getSpanZoomLevel(mapCenter, bounds.toSpan(), mapSize);
}

function zoomin(num){
    if (map.getInfoWindow()) {
        map.closeInfoWindow();
    }
    map.setMapType(G_SATELLITE_MAP);
    map.setCenter(markers[num].point, 13);
}

function myMouseOver(id){
    if (tooltip.style.visibility == 'visible') 
        return false;
    
    var marker = markers[id].marker;
    tooltip.innerHTML = markers[id].tooltipHTML;
    
    var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GLatLng(0, 0), true), map.getZoom());
    var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(), map.getZoom());
    var anchor = marker.getIcon().iconAnchor;
    var width = marker.getIcon().iconSize.width;
    var height = tooltip.clientHeight;
    var origin = new GSize(offset.x - point.x - anchor.x + width + 5, offset.y - point.y - anchor.y);
    
    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, origin);
    pos.apply(tooltip);
    tooltip.style.visibility = 'visible';
    
    return true;
}

function myMouseOut(id){
    tooltip.style.visibility = 'hidden';
}

function myClick(id){
    if (map.getInfoWindow()) {
        map.closeInfoWindow();
    }
    
    var tempTab2 = '<tr>';
    tempTab2 += '<td style="text-align:center; font-size:11px; padding-left:8px"><img src="http://www.cleancruising.com.au/images/ports/thumb/' + markers[id].port_id + '.jpg" height="105" width="140" border="1" border-color="ccc";"><span style="font-size:80%"><a href="#" onclick="zoomin(\'' + id + '\')"> zoom in</a>&nbsp;&nbsp;<a href="#" onclick="map.returnToSavedPosition();map.setMapType(G_PHYSICAL_MAP);map.closeInfoWindow();">full map</a></span></td>';
    tempTab2 += '</tr>';
    tempTab2 += '</table></div>';
    
    markers[id].tab2 = markers[id].tabtop + tempTab2;
    
    var infoTabs = [new GInfoWindowTab('Image', markers[id].tab2), ];
    if (map.getInfoWindow()) {
        map.closeInfoWindow();
    }
	
    markers[id].infoTabs = infoTabs;
    markers[id].marker.openExtInfoWindow(map, "custom_info_window_blue", markers[id].tab2, {
        beakOffset: 3
    });
}

function createMarker(xml){
    this.id = markers.length;
    markers.push(this);
    this.latitude = parseFloat(xml.getAttribute("latitude"));
    this.longitude = parseFloat(xml.getAttribute("longitude"));
    this.day_of_cruise = parseInt(xml.getAttribute("day_of_cruise"));
    this.port_id = xml.getAttribute("port_id");
    this.port_name = xml.getAttribute("port_name");
    this.country = xml.getAttribute("country");
    
    this.tooltipHTML = '<div class="tooltip">Day ' + this.day_of_cruise + '<br>' + this.port_name + '</div>';
    
        
    var tabtop = '<div><table border="0" cellspacing="0" cellpadding="2" width="160">';
    tabtop += '<tr>';
    tabtop += '<td class="iwindow-days"><strong>Day ' + this.day_of_cruise + ' - ' + this.port_name + '</strong></td>';
    tabtop += '</tr>';
    
    var tab2;
    
    var tab1 = tabtop;
    tab2 = tabtop + tab2;
    this.tabtop = tabtop;
    this.tab1 = tab1;
    this.tab2 = tab2;
    
    var point = new GLatLng(this.latitude, this.longitude);
    var icon = new GIcon(baseIcon);
    if (this.day_of_cruise == 1) {
        icon.image = 'http://www.cleancruising.com.au/images/gadgets/startgreen.png';
    }else{
        icon.image = 'http://www.cleancruising.com.au/images/gadgets/smallgreen.png';
    }
    this.point = point;
    this.marker = new GMarker(point, icon);
    
    var infoTabs = [new GInfoWindowTab('Image', this.tab2), ];
    
    this.infoTabs = infoTabs;
    
    GEvent.addListener(this.marker, 'mouseover', new Function('myMouseOver(' + this.id + ')'));
    GEvent.addListener(this.marker, 'mouseout', new Function('myMouseOut(' + this.id + ')'));
    GEvent.addListener(this.marker, "click", new Function('myClick(' + this.id + ')'));
}

function crunchPoly(){
    if (map.getPane(polyline)) {
        map.removeOverlay(polyline);
    }
    var overlayColor;
    var overlayThickness;
    if (map.getCurrentMapType() == G_SATELLITE_MAP) {
        overlayColor = '#07B3C1';
        overlayThickness = 2;
    }
    else {
        overlayColor = '#000000';
        overlayThickness = 4;
    }    
    var polyline = new GPolyline.fromEncoded({
        color: overlayColor,
        weight: 2,
        opacity: 0.99,
        points: encPoly,
        levels: encZoom,
        zoomFactor: 2,
        numLevels: 18
    });    
    map.addOverlay(polyline);    
}


function showMarkers(){
    for (var i = markers.length - 1; i > -1; i--) {
				
        map.addOverlay(markers[i].marker);
    }
    map.savePosition();
}

function initMap(){
    mapdiv = e("map");
    map = new GMap2(mapdiv);
    var mt = map.getMapTypes();
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    
    map.setCenter(mapCenter, 4);
    map.removeMapType(G_HYBRID_MAP);
    map.addMapType(G_PHYSICAL_MAP);
    map.setMapType(G_PHYSICAL_MAP);
	/*map.addMapType(G_SATELLITE_3D_MAP);
	map.addControl(new GHierarchicalMapTypeControl());
	map.getEarthInstance(getEarthInstanceCB);*/
    drawPoly();
    
    map.enableDoubleClickZoom();
    map.enableContinuousZoom();
    
    GEvent.addListener(map, "maptypechanged", new Function('crunchPoly();'));
	    
    mapcheck = true;
    
    map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
    
    if (markers.length == 0) {
        loadMarkers();
    }
}

/*var ge;
function getEarthInstanceCB(object) {
  ge = object;
}*/

/*
* ExtInfoWindow Class, v1.1
*  Copyright (c) 2007, Joe Monahan (http://www.seejoecode.com) - congrats and thx Joe
*/
function ExtInfoWindow(a,b,c,d){this.html_=c;this.marker_=a;this.infoWindowId_=b;this.options_=d==null?{}:d;this.ajaxUrl_=this.options_.ajaxUrl==null?null:this.options_.ajaxUrl;this.callback_=this.options_.ajaxCallback==null?null:this.options_.ajaxCallback;this.borderSize_=this.options_.beakOffset==null?0:this.options_.beakOffset;this.paddingX_=this.options_.paddingX==null?0+this.borderSize_:this.options_.paddingX+this.borderSize_;this.paddingY_=this.options_.paddingY==null?0+this.borderSize_:this.options_.paddingY+this.borderSize_;this.map_=null;this.container_=document.createElement('div');this.container_.style.position='relative';this.container_.style.display='none';this.contentDiv_=document.createElement('div');this.contentDiv_.id=this.infoWindowId_+'_contents';this.contentDiv_.innerHTML=this.html_;this.contentDiv_.style.display='block';this.contentDiv_.style.visibility='hidden';this.wrapperDiv_=document.createElement('div')};
ExtInfoWindow.prototype=new GOverlay();
ExtInfoWindow.prototype.initialize=function(a){this.map_=a;this.defaultStyles={containerWidth:this.map_.getSize().width/2,borderSize:1};this.wrapperParts={tl:{t:0,l:0,w:0,h:0,domElement:null},t:{t:0,l:0,w:0,h:0,domElement:null},tr:{t:0,l:0,w:0,h:0,domElement:null},l:{t:0,l:0,w:0,h:0,domElement:null},r:{t:0,l:0,w:0,h:0,domElement:null},bl:{t:0,l:0,w:0,h:0,domElement:null},b:{t:0,l:0,w:0,h:0,domElement:null},br:{t:0,l:0,w:0,h:0,domElement:null},beak:{t:0,l:0,w:0,h:0,domElement:null},close:{t:0,l:0,w:0,h:0,domElement:null}};for(var i in this.wrapperParts){var b=document.createElement('div');b.id=this.infoWindowId_+'_'+i;b.style.visibility='hidden';document.body.appendChild(b);b=document.getElementById(this.infoWindowId_+'_'+i);var c=eval('this.wrapperParts.'+i);c.w=parseInt(this.getStyle_(b,'width'));c.h=parseInt(this.getStyle_(b,'height'));document.body.removeChild(b)}for(var i in this.wrapperParts){if(i=='close'){this.wrapperDiv_.appendChild(this.contentDiv_)}var d=null;if(this.wrapperParts[i].domElement==null){d=document.createElement('div');this.wrapperDiv_.appendChild(d)}else{d=this.wrapperParts[i].domElement}d.id=this.infoWindowId_+'_'+i;d.style.position='absolute';d.style.width=this.wrapperParts[i].w+'px';d.style.height=this.wrapperParts[i].h+'px';d.style.top=this.wrapperParts[i].t+'px';d.style.left=this.wrapperParts[i].l+'px';this.wrapperParts[i].domElement=d}this.map_.getPane(G_MAP_FLOAT_PANE).appendChild(this.container_);this.container_.id=this.infoWindowId_;var e=this.getStyle_(document.getElementById(this.infoWindowId_),'width');this.container_.style.width=(e==null?this.defaultStyles.containerWidth:e);this.map_.getContainer().appendChild(this.contentDiv_);this.contentWidth=this.getDimensions_(this.container_).width;this.contentDiv_.style.width=this.contentWidth+'px';this.contentDiv_.style.position='absolute';this.container_.appendChild(this.wrapperDiv_);GEvent.bindDom(this.container_,'mousedown',this,this.onClick_);GEvent.trigger(this.map_,'extinfowindowopen');if(this.ajaxUrl_!=null){this.ajaxRequest_(this.ajaxUrl_)}};
ExtInfoWindow.prototype.onClick_=function(e){if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&document.all){window.event.cancelBubble=true;window.event.returnValue=false}else{e.preventDefault();e.stopPropagation()}};
ExtInfoWindow.prototype.remove=function(){if(this.map_.getExtInfoWindow()!=null){GEvent.trigger(this.map_,'extinfowindowbeforeclose');GEvent.clearInstanceListeners(this.container_);if(this.container_.outerHTML){this.container_.outerHTML=''}if(this.container_.parentNode){this.container_.parentNode.removeChild(this.container_)}this.container_=null;GEvent.trigger(this.map_,'extinfowindowclose');this.map_.setExtInfoWindow_(null)}};
ExtInfoWindow.prototype.copy=function(){return new ExtInfoWindow(this.marker_,this.infoWindowId_,this.html_,this.options_)};
ExtInfoWindow.prototype.redraw=function(a){if(!a||this.container_==null)return;var b=this.contentDiv_.offsetHeight;this.contentDiv_.style.height=b+'px';this.contentDiv_.style.left=this.wrapperParts.l.w+'px';this.contentDiv_.style.top=this.wrapperParts.tl.h+'px';this.contentDiv_.style.visibility='visible';this.wrapperParts.tl.t=0;this.wrapperParts.tl.l=0;this.wrapperParts.t.l=this.wrapperParts.tl.w;this.wrapperParts.t.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.tl.w-this.wrapperParts.tr.w;this.wrapperParts.t.h=this.wrapperParts.tl.h;this.wrapperParts.tr.l=this.wrapperParts.t.w+this.wrapperParts.tl.w;this.wrapperParts.l.t=this.wrapperParts.tl.h;this.wrapperParts.l.h=b;this.wrapperParts.r.l=this.contentWidth+this.wrapperParts.l.w;this.wrapperParts.r.t=this.wrapperParts.tr.h;this.wrapperParts.r.h=b;this.wrapperParts.bl.t=b+this.wrapperParts.tl.h;this.wrapperParts.b.l=this.wrapperParts.bl.w;this.wrapperParts.b.t=b+this.wrapperParts.tl.h;this.wrapperParts.b.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.bl.w-this.wrapperParts.br.w;this.wrapperParts.b.h=this.wrapperParts.bl.h;this.wrapperParts.br.l=this.wrapperParts.b.w+this.wrapperParts.bl.w;this.wrapperParts.br.t=b+this.wrapperParts.tr.h;this.wrapperParts.close.l=this.wrapperParts.tr.l+this.wrapperParts.tr.w-this.wrapperParts.close.w-this.borderSize_;this.wrapperParts.close.t=this.borderSize_;this.wrapperParts.beak.l=this.borderSize_+(this.contentWidth/2)-(this.wrapperParts.beak.w/2);this.wrapperParts.beak.t=this.wrapperParts.bl.t+this.wrapperParts.bl.h-this.borderSize_;for(var i in this.wrapperParts){if(i=='close'){this.wrapperDiv_.insertBefore(this.contentDiv_,this.wrapperParts[i].domElement)}var c=null;if(this.wrapperParts[i].domElement==null){c=document.createElement('div');this.wrapperDiv_.appendChild(c)}else{c=this.wrapperParts[i].domElement}c.id=this.infoWindowId_+'_'+i;c.style.position='absolute';c.style.width=this.wrapperParts[i].w+'px';c.style.height=this.wrapperParts[i].h+'px';c.style.top=this.wrapperParts[i].t+'px';c.style.left=this.wrapperParts[i].l+'px';this.wrapperParts[i].domElement=c}var d=this.marker_;var e=this.map_;GEvent.addDomListener(this.wrapperParts.close.domElement,'click',function(){e.closeExtInfoWindow()});var f=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());this.container_.style.position='absolute';var g=this.marker_.getIcon();this.container_.style.left=(f.x-(this.contentWidth/2)-g.iconAnchor.x+g.infoWindowAnchor.x)+'px';this.container_.style.top=(f.y-this.wrapperParts.bl.h-b-this.wrapperParts.tl.h-this.wrapperParts.beak.h-g.iconAnchor.y+g.infoWindowAnchor.y+this.borderSize_)+'px';this.container_.style.display='block';if(this.map_.getExtInfoWindow()!=null){this.repositionMap_()}};
ExtInfoWindow.prototype.resize=function(){var a=this.contentDiv_.cloneNode(true);a.id=this.infoWindowId_+'_tempContents';a.style.visibility='hidden';a.style.height='auto';document.body.appendChild(a);a=document.getElementById(this.infoWindowId_+'_tempContents');var b=a.offsetHeight;document.body.removeChild(a);this.contentDiv_.style.height=b+'px';var c=this.contentDiv_.offsetWidth;var d=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var e=this.wrapperParts.t.domElement.offsetHeight+this.wrapperParts.l.domElement.offsetHeight+this.wrapperParts.b.domElement.offsetHeight;var f=this.wrapperParts.t.domElement.offsetTop;this.wrapperParts.l.domElement.style.height=b+'px';this.wrapperParts.r.domElement.style.height=b+'px';var g=this.wrapperParts.b.domElement.offsetTop-b;this.wrapperParts.l.domElement.style.top=g+'px';this.wrapperParts.r.domElement.style.top=g+'px';this.contentDiv_.style.top=g+'px';windowTHeight=parseInt(this.wrapperParts.t.domElement.style.height);g-=windowTHeight;this.wrapperParts.close.domElement.style.top=g+this.borderSize_+'px';this.wrapperParts.tl.domElement.style.top=g+'px';this.wrapperParts.t.domElement.style.top=g+'px';this.wrapperParts.tr.domElement.style.top=g+'px';this.repositionMap_()};
ExtInfoWindow.prototype.repositionMap_=function(){var a=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getNorthEast());var b=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getSouthWest());var c=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var d=0;var e=0;var f=this.paddingX_;var g=this.paddingY_;var h=this.marker_.getIcon().infoWindowAnchor;var i=this.marker_.getIcon().iconAnchor;var j=this.wrapperParts.t.domElement;var k=this.wrapperParts.l.domElement;var l=this.wrapperParts.b.domElement;var m=this.wrapperParts.r.domElement;var n=this.wrapperParts.beak.domElement;var o=c.y-(-h.y+i.y+this.getDimensions_(n).height+this.getDimensions_(l).height+this.getDimensions_(k).height+this.getDimensions_(j).height+this.paddingY_);if(o<a.y){e=a.y-o}else{var p=c.y+this.paddingY_;if(p>=b.y){e=-(p-b.y)}}var q=Math.round(c.x+this.getDimensions_(this.container_).width/2+this.getDimensions_(m).width+this.paddingX_+h.x-i.x);if(q>a.x){d=-(q-a.x)}else{var r=-(Math.round((this.getDimensions_(this.container_).width/2-this.marker_.getIcon().iconSize.width/2)+this.getDimensions_(k).width+this.borderSize_+this.paddingX_)-c.x-h.x+i.x);if(r<b.x){d=b.x-r}}if(d!=0||e!=0&&this.map_.getExtInfoWindow()!=null){this.map_.panBy(new GSize(d,e))}};
ExtInfoWindow.prototype.ajaxRequest_=function(d){var e=this.map_;var f=this.callback_;GDownloadUrl(d,function(a,b){var c=document.getElementById(e.getExtInfoWindow().infoWindowId_+'_contents');if(a==null||b==-1){c.innerHTML='<span class="error">ERROR: The Ajax request failed to get HTML content from "'+d+'"</span>'}else{c.innerHTML=a}if(f!=null){f()}e.getExtInfoWindow().resize();GEvent.trigger(e,'extinfowindowupdate')})};
ExtInfoWindow.prototype.getDimensions_=function(a){var b=this.getStyle_(a,'display');if(b!='none'&&b!=null){return{width:a.offsetWidth,height:a.offsetHeight}}var c=a.style;var d=c.visibility;var e=c.position;var f=c.display;c.visibility='hidden';c.position='absolute';c.display='block';var g=a.clientWidth;var h=a.clientHeight;c.display=f;c.position=e;c.visibility=d;return{width:g,height:h}};
ExtInfoWindow.prototype.getStyle_=function(a,b){var c=false;b=this.camelize_(b);var d=a.style[b];if(!d){if(document.defaultView&&document.defaultView.getComputedStyle){var e=document.defaultView.getComputedStyle(a,null);d=e?e[b]:null}else if(a.currentStyle){d=a.currentStyle[b]}}if((d=='auto')&&(b=='width'||b=='height')&&(this.getStyle_(a,'display')!='none')){if(b=='width'){d=a.offsetWidth}else{d=a.offsetHeight}}if(window.opera&&['left','top','right','bottom'].include(b)){if(this.getStyle_(a,'position')=='static')d='auto'}return(d=='auto')?null:d};
ExtInfoWindow.prototype.camelize_=function(a){var b=a.split('-'),len=b.length;if(len==1)return b[0];var c=a.charAt(0)=='-'?b[0].charAt(0).toUpperCase()+b[0].substring(1):b[0];for(var i=1;i<len;i++){c+=b[i].charAt(0).toUpperCase()+b[i].substring(1)}return c};GMap.prototype.ExtInfoWindowInstance_=null;GMap.prototype.ClickListener_=null;GMap.prototype.InfoWindowListener_=null;
GMarker.prototype.openExtInfoWindow=function(b,c,d,e){if(b==null){throw'Error in GMarker.openExtInfoWindow: map cannot be null';return false}if(c==null||c==''){throw'Error in GMarker.openExtInfoWindow: must specify a cssId';return false}b.closeInfoWindow();if(b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}if(b.getExtInfoWindow()==null){b.setExtInfoWindow_(new ExtInfoWindow(this,c,d,e));if(b.ClickListener_==null){b.ClickListener_=GEvent.addListener(b,'click',function(a){if(!a&&b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}})}if(b.InfoWindowListener_==null){b.InfoWindowListener_=GEvent.addListener(b,'infowindowopen',function(a){if(b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}})}b.addOverlay(b.getExtInfoWindow())}};
GMarker.prototype.closeExtInfoWindow=function(a){a.closeExtInfoWindow()};
GMap2.prototype.getExtInfoWindow=function(){return this.ExtInfoWindowInstance_};
GMap2.prototype.setExtInfoWindow_=function(a){this.ExtInfoWindowInstance_=a}
GMap2.prototype.closeExtInfoWindow=function(){this.ExtInfoWindowInstance_.remove()};
