﻿//*******************************************************************
// Google Map JavaScript Classes.
//
//*******************************************************************
//	This file contains utility classes to show Google maps.
//*******************************************************************

function MapManager(me, canvas, mapSettings, initOnDemand)
{
	var undefined;

    // Initialise this
    this.me = me;
	this.maps=[];
	this.markers=[];
	this.mapSettings = mapSettings;
	this.canvas = canvas;
	
	this.initOnDemand = (initOnDemand == undefined)? false:initOnDemand;
	
	// Initialise canvas(es) if required
	if (this.initOnDemand) return;
	if (isNaN(parseFloat(mapSettings.lat))) return;
    if (GBrowserIsCompatible()) 
    {
        var m=1;
        var elem = document.getElementById(canvas + m);
        while (elem)
        {
            this.initCanvas(m, elem);
            m++;
            elem = document.getElementById(canvas + m);
        }
    }
}

MapManager.prototype.initCanvas = function(id, elem) 
{
    var undefined;
    if (elem==undefined) var elem = document.getElementById(this.canvas + id);
    
    // Create map, set centre
    this.maps[id] = new GMap2(elem);
    this.maps[id].setCenter(new GLatLng(this.mapSettings.lat, this.mapSettings.lon), this.mapSettings.zoom);
     
    this.maps[id].setMapType(G_HYBRID_MAP);

    // Add controls and marker, if required
    var zControl = "";
    if (this.mapSettings.zControl)
    {   
        try { zControl = eval("new " + this.mapSettings.zControl + "()"); } catch(ex){}
    }
    if (zControl) this.maps[id].addControl(zControl);
		    
    var typeControl = "";
    if (this.mapSettings.typeControl)
    {   
        try { typeControl = eval("new " + this.mapSettings.typeControl + "()"); } catch(ex){}
    }
    if (typeControl) this.maps[id].addControl(typeControl);

    var marker = "";
    if (this.mapSettings.overlay)
    {
        if (this.mapSettings.overlay.lat)
        {
            try { marker = new GLatLng(this.mapSettings.overlay.lat, this.mapSettings.overlay.lon); } catch(ex){}
        }
    }
    if (marker) this.maps[id].addOverlay(new GMarker(marker));

}

MapManager.prototype.checkInit = function(tabMgr) 
{   
    var undefined;
    if (tabMgr == undefined) return;

    if (!this.initOnDemand) return;

	if (GBrowserIsCompatible())
	{
        var selTab = tabMgr.currentTabIndex;
        var content = tabMgr.getContentPanels()[selTab];
        var p = content.innerHTML.indexOf(this.canvas);
        if (content.innerHTML.indexOf(this.canvas)>=0)
        {
            // Determine which canvas is to be initialised
            var m=1;
            while (m<10)
            {
                if (content.innerHTML.indexOf(this.canvas+m)>=0)
                {
                    // Canvas found. Initialise map if neccessary.
                    if (!this.maps[m])
                    {
                        setTimeout(this.me + ".initCanvas(" + m + ")",1000);
                    }
                    return;
                }
                m++;
            }
        }
	} 
}


// Pop Up. **********************************************************
MapManager.prototype.popUp = function () 
{
    var props = "menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=no,copyhistory=no,width=850,height=650,top=10%,left=10%";
    
    var url = "/map.htm?lat={lat}&lon={lon}&zoom={zoom}&mlat={mlat}&mlon={mlon}";
//    var url = "/Site/map.htm?lat={lat}&lon={lon}&zoom={zoom}&mlat={mlat}&mlon={mlon}";
    url = url.replace("{lat}", this.mapSettings.lat)
                .replace("{lon}", this.mapSettings.lon)
                .replace("{zoom}", this.mapSettings.zoom)
                .replace("{mlat}", this.mapSettings.overlay.lat)
                .replace("{mlon}", this.mapSettings.overlay.lon);

	top["CCHmap"] = window.open(url, "CCHMap", props);
	top["CCHmap"].focus();
}


