﻿
var map;
var clusterer;
var mapType = 0;


// this variable will collect the html which will eventualkly be placed in the side_bar
/////var sidebar_html = "";

// arrays to hold copies of the markers used by the side_bar
// because the function closure trick doesnt work there
var gmarkers = [];
var i = 0;

//http://www.visual-case.it/cgi-bin/vc/GMapsIcons.pl
var baseIcon = new GIcon();  baseIcon.iconSize=new GSize(32,32);  baseIcon.shadowSize=new GSize(56,32);  baseIcon.iconAnchor=new GPoint(16,32);  baseIcon.infoWindowAnchor=new GPoint(16,0);// 60 or 52
var unknownIcon = new GIcon(baseIcon, unknownIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var activeIcon = new GIcon(baseIcon, activeIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var closedIcon = new GIcon(baseIcon, closedIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var temporaryIcon = new GIcon(baseIcon, temporaryIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var unofficialIcon = new GIcon(baseIcon, unofficialIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var plannedIcon = new GIcon(baseIcon, plannedIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");var defaultIcon = new GIcon(baseIcon, defaultIconUrl, null, "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png");
function importanceOrder (marker,b) {
    return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
}

// A function to create the marker and set up the event window
function createMarker(point,name,html,flplugs,stt) {
    var marker;

    if (null == stt || stt == "Unknown") {
        marker = new GMarker(point, {icon:unknownIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 3;
    } 
    else if (stt == "Active") {
        marker = new GMarker(point, {icon:activeIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 10;
    }
    else if (stt == "Closed") {
        marker = new GMarker(point, {icon:closedIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 1;
    }
    else if (stt == "Temporary") {
        marker = new GMarker(point, {icon:temporaryIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 8;
    }
    else if (stt == "Unofficial") {
        marker = new GMarker(point, {icon:unofficialIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 5;
    }
    else if (stt == "Planned") {
        marker = new GMarker(point, {icon:plannedIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 4;
    }
    else {
        marker = new GMarker(point, {icon:defaultIcon, title:name, zIndexProcess:importanceOrder});
        marker.importance = 3;
    }
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml("<b>" + name + "</b><br/>" + html);
    });
    marker.plugs = flplugs;
    marker.myname = name;
    
    // save the info we need to use later for the side_bar
    gmarkers[i] = marker;

    i++;
    return marker;
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
    GEvent.trigger(gmarkers[i], "click");
}
/*
function addMarker(longitude, latitude, description) {
	var marker = new GMarker(new GLatLng(latitude, longitude));

	GEvent.addListener(marker, 'click',
		function() {
			marker.openInfoWindowHtml(description);
		}
	);

	map.addOverlay(marker);
}
*/

function init() {
    if (GBrowserIsCompatible()) {

        localPreInit();
        // maponly
	    //document.getElementById('button-sidebar-hide').onclick = function() { return changeBodyClass('sidebar-right', 'nosidebar'); };
	    //document.getElementById('button-sidebar-show').onclick = function() { return changeBodyClass('nosidebar', 'sidebar-right'); };
	    // handleResize();
	    // ReadCookie();
	    // /maponly
    	
	    map = new GMap2(document.getElementById("map"));
	    clusterer = new Clusterer( map );
	    map.addControl(new GLargeMapControl());
	    map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl()); 
   	    //map.addControl(new GOverviewMapControl(new GSize(100,100)));

	    map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom, map.getMapTypes()[mapType]);
	    map.enableContinuousZoom();
	    map.enableScrollWheelZoom();
	    //map.enableDoubleClickZoom();
    	
	    // fetch data and load markers
        var request = GXmlHttp.create();
        request.open("GET", "SitesData.aspx", true);
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                var xmlDoc = GXml.parse(request.responseText);
                // obtain the array of markers and loop through it
                var markers = xmlDoc.documentElement.getElementsByTagName("cs");

                for (var i = 0; i < markers.length; i++) {
                    var location = markers[i].getElementsByTagName("lc").item(0);
                    var siteId = markers[i].getAttribute("id");
                    
                    // obtain the attribues of each marker
                    var lat = parseFloat(location.getAttribute("lat"));
                    var lng = parseFloat(location.getAttribute("lng"));
                    var point = new GLatLng(lat,lng);
                    //var label = markers[i].getElementsByTagName("nm").item(0).text;
                    var label = markers[i].getElementsByTagName("nm")[0].childNodes[0].nodeValue;
                    var sttNode = markers[i].getElementsByTagName("stt")[0];
                    var stt = null;
                    if (null != sttNode &&  null != sttNode.childNodes[0])
                        stt = sttNode.childNodes[0].nodeValue;

                    // make the address
                    var addressnode = markers[i].getElementsByTagName("adr")[0];
                    var html = "";
                    if (null != addressnode &&  null != addressnode.childNodes[0])
                    {
                        html = addressnode.childNodes[0].nodeValue;
                    }
                    // get the available plugs sorted out
                    var flplugs = plugtype["Unknown"];
                    var plugsnode = markers[i].getElementsByTagName("plgs").item(0);
                    if (null != plugsnode)
                    {
                        var nodes = markers[i].getElementsByTagName("plg");
                        if (null != nodes)
                        {
                            for (var j = 0; j < nodes.length; j++)
                            {
                                var cp = nodes[j].getAttribute("id");
                                var count = parseInt(nodes[j].getAttribute("n"));
                                if (count > 0)
                                {
                                    flplugs = flplugs | plugtype[cp];
                                    html = html + "<br />" + "<b>" + plugtypestr[cp] + "</b> : " + count; 
                                }
                            }
                        }
                    }

                    // put a details link
                    // <dynamic>
                    html = html + "<br />" + "<a href='SiteDetail.aspx?id=" + markers[i].getAttribute("id") + "'>" + msgMoreInfo + "</a>"; 
                    // </dynamic>
                    
                    // create the marker
                    var marker = createMarker(point,label,html,flplugs, stt);
                    marker.show();
                    clusterer.AddMarker(marker, label);
                    //map.addOverlay(marker);
                    
                    checkSiteId(siteId, i);
                    
                }
                
                localPostInit();
                
                // put the assembled side_bar_html contents into the side_bar div
                /////document.getElementById("sidebar").innerHTML = sidebar_html;
            }
        }
        request.send(null);
    }
    else {
      alert(msgBrowserNotCompatible);
    }
}

