/**
 * @author KMM Timing
 *
 *  This Javascript is partly based on code provided by the
 *  Blackpool Community Church Javascript Team
 *  http://www.commchurch.freeserve.co.uk/
 *  http://econym.googlepages.com/index.htm
 *
 */
var map; // The GMap2 object
var mgr; // The MarkerManager object
var encodedPolylinehm; // Halvmaraton
var encodedPolylineml; // Millopp
var encodedPolylinekl; // Kortlopp
var allMarkers = []; // Stores all markers in an array

// Show an overlay and check the corresponding checkbox
function show(category){
    map.addOverlay(eval("encodedPolyline" + category));
    document.getElementById(category + "CheckBox").checked = true;
    
    var markers = [];
    for (var i = 0; i < allMarkers.length; i++) {
        if (allMarkers[i].category == category) {
            markers.push(allMarkers[i]);
        }
    }
    mgr.addMarkers(markers, 13);
    mgr.refresh();
}

// Hide an overlay and uncheck the corresponding checkbox
function hide(category){
    map.removeOverlay(eval("encodedPolyline" + category));
    document.getElementById(category + "CheckBox").checked = false;
    
    for (var i = 0; i < allMarkers.length; i++) {
        if (allMarkers[i].category == category) {
            mgr.removeMarker(allMarkers[i]);
        }
    }
    
}

// Toggle an overlay
function boxclick(box, category){
    if (box.checked) {
        show(category);
    }
    else {
        hide(category);
    }
}

// Create the icon for a marker
function getIcon(iconId, category){
    var icon = new GIcon(G_DEFAULT_ICON);
    
    if (category == "ovr") {
        icon.image = "http://www.google.com/mapfiles/marker" + iconId + ".png";
    }
    else if (category == "vatska") {
        icon.image = "http://www.prinsensminne.se/maps/markers/vatska.png";
        icon.iconAnchor = new GPoint(8, 26);
        //icon.infoWindowAnchor = new GPoint(8, 26);
        icon.iconSize = new GSize(15, 26);
        icon.shadowSize = new GSize(25, 26);
    }
    else {
        icon.image = "http://www.prinsensminne.se/maps/markers/" + category + iconId + ".png";
        icon.iconAnchor = new GPoint(8, 26);
        //icon.infoWindowAnchor = new GPoint(8, 26);
        icon.iconSize = new GSize(15, 26);
        icon.shadowSize = new GSize(25, 26);
    }
    return icon;
}

// Create a marker
function createMarker(name, point, category, iconId){

    var marker = new GMarker(point, {
        title: name,
        icon: getIcon(iconId, category)
    });
    
    marker.category = category;
    //GEvent.addListener(marker, "click", function() {
    //    marker.openInfoWindowHtml(html);
    //});
    
    return marker;
}

function load(){
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.setMapType(G_SATELLITE_MAP);
        map.setCenter(new GLatLng(56.65758, 12.79535), 12);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        
        mgr = new MarkerManager(map)
        
        var encodedPointshm = "ywzxI_oimA~@lGnCdJfD~Fn@h@v@nA\\`BP~CXjCfArG`Gj`@dCxHrAnHfDvKfF`SdE}BVXNp@d@vAf@v@z@bDp@lAfA~CbCnA`AExDaC`BU|BU~@]hA[nCiCx@oAvDq@Vh@TjBi@dDe@t@a@bAKxKJvDTfDl@`FIfBNnDYnFW^ClBRfANdI\\z@R`Ch@lCZ`ALh@\\`@pAdGKzAXdAP|Ef@fCp@bCjAvDjArBrAr@rAz@bAPfCJhACJcA|@iA`BOj@cAp@uA^gB|AyCt@[jBa@bA]b@RRzADpBKnBGxE@zM`@tBlAl@xAXXd@n@tCDd@I`BDtAMnARhBRtACh@t@|@XdAIt@HjAMxAAz@_AtGUt@MhAq@pAo@r@gIyGgDwBcIqCg@DEhB?tGMzJ[AyBiAyD{B}EuDq@HeAo@sAdAmBrBcKjKmEjE}@d@}ADWdGMbFUrJEtFiAlQcArSmAfRUzEEbFL|CnB`Jl@jApBrDlClEzCjFbKdOtCzEnJfO~D~GjAtCbArE`BnGvCpNv@`D~@jCzApBxA~AfEpN`@`CMfCQZX\\dAj@l@Lx@kB\\uAAcCGmB?cBw@oAEaCV{Ce@yCVcATQv@d@VCX_AV?p@]Zg@IyBJgDGc@Je@U}@yA}@yAu@[y@y@o@k@{A{@y@mAqAY_ASgCCwBYy@q@i@w@gAi@?a@Ko@k@{@eAw@wAm@aBa@qBOwA@}ATcBBiDAqH_@wBMoDH_Gc@eFg@wBm@gAu@aAY_A?iLc@{CcA_FFs@Ps@Bk@Tu@PQxByI\\k@@[XSl@cAB{@d@}AP_@h@]\\g@HgCIuCBaBRe@t@iC`A}ErCoK|@kCt@oCrAgCpAsBvAwA~@mBfAmC`BkD\\iBUuBa@sAw@i@w@USc@Bc@~@gBLiATu@~@uG@}@LwAIkAHu@YeAu@}@Bi@SuASiBLoAEuAH_BEg@o@uCYe@yAYmAm@a@uBA{MFyEJoBEqBS{Ac@ScA\\kB`@u@Z}AxC_@hB}AvCaBN}@hAKbAkABiCK_AQsA{@sAs@kAsB}B{Hg@gCQ}EYeAJ}AqAcG[a@i@kBk@mCScC]y@OeISgABmBVa@XkFOoDHiBm@cFUeDKwDJyK`@cAd@u@h@eDUkBWi@wDp@y@nAoChCiAZ_A\\{BT_BT}D`CaADcCoAgA_Dq@mA{@cDg@w@e@wAYoAu@cCc@kAe@[m@gBa@gBk@eAy@{Gk@sGNoAEsA@sBQaCQw@WSqBo@sAeAyA_AYeAC_@d@qDJ}AG}B[kBs@qAi@EaCcEm@_B{AmFgAoB[{@YgBc@cAg@q@@]VMJg@Oy@_@aAWuBMuASuA]}@O_AG_CFoBlB_UN_G`@cH`@sEPwC~AqLFeBq@kB";
        var encodedLevelshm = "PBDAAEA@B@DBBAHEA?AAAADGBC?B?DADCHCB@CD@ACABBACAFAAB?ABCBACA?HC?DA@FBCC?BAE@@BIAB@AECABE@C@AB?ACAEA@@B@@HAEADBG@@GA?BBBGA??DBH?A@C@@BAIBBE@?BB?@EB@@@DB@CDCAD@ALAD??BCABEACADBABEAAAGB?BAAB?DA@ADAB@BC@AF@CAB?BABDAC@ADC@H@@B@ACAA@BA?B@DA@D?AAE@C@BC?@BGACABEAA@CA@EABACA?CA@@IACACEA@BAGB@@EBACCBG@AC?EBHAABCAABAACAEABBADA@CC@BCAHCAD?B?CBGDAAAA??BAB@AH@CA@B@E@B?E@C@BAEBBC@B@BB@EAAC@A??A@GABB@C?ACBP";
        
        var encodedPointsml = "ywzxI_oimA~@lGnCdJfD~Fn@h@v@nA\\`BP~CXjCfArG`Gj`@dCxHrAnHfDvKfF`SdE}BVXNp@d@vAf@v@z@bDp@lAfA~CbCnA`AExDaC`BU|BU~@]hA[nCiCx@oAvDq@Vh@TjBi@dDe@t@a@bAKxKJvDTfDl@`FIfBNnDYnFW^ClBRfANdI\\z@R`CYPe@R]n@]^i@^@\\XfAd@~AXp@T`AAr@q@r@oBrAuD|B{@`@[XEVlBvHz@`Ff@xDl@hCV|A^~APjAhAfFd@hCd@xBZtAPZn@c@~@[v@]d@g@\\o@^}@lCeIb@aAZmAX{@fBsEsA{@sAs@kAsB}B{Hg@gCQ}EYeAJ}AqAcG[a@i@kBk@mCScC]y@OeISgABmBVa@XkFOoDHiBm@cFUeDKwDJyK`@cAd@u@h@eDUkBWi@wDp@y@nAoChCiAZ_A\\{BT_BT}D`CaADcCoAgA_Dq@mA{@eDg@u@e@wAYoAu@cCc@kAe@[m@gBa@gBk@eAy@{Gk@sGNoAEsA@sBQaCQw@WSqBo@sAeAyA_AYeAC_@d@qDJ}AG}B[kBs@qAi@EaCcEm@_B{AmFgAoB[{@YgBc@cAg@q@@]VMJg@Oy@_@aAWuBMuASuA]}@O_AG_CFoBlB_UN_G`@cH`@sEPwC~AqLFeBq@kB";
        var encodedLevelsml = "PBDAAEA@B@DBBAHEA?AAAADGBC?B?DADCHCB@CD@ADABBACABAE?AA?D@A?@BF@A@BAFA@B@??@??A@K@?B@D?@@?@G?DBEAABCAABAAFACABBACA@DC@BCHCDAD?B?CBGDAAAA??BAB@AH@CA@B@E@B?E@C@BAEBBC@B@BB@EAAC@A??A@GABB@C?ACBP";
        
        var encodedPointskl = "ywzxI_oimA~@lGnCdJfD~Fn@h@v@nA\\`BP~CXjCfArG`Gj`@dCxHrAnHfDvKfF`SdE}BDWm@oBc@kAe@[m@gBa@gBk@eAy@{Gk@sGNoAEsA@sBQaCQw@YSoBo@sAeAyA_AYeAC_@f@qDH}AG}B[kBs@qAi@EaCcEm@_B{AmFgAoB[{@YgBc@cAg@q@@]VMJg@Oy@_@aAWuBMuASuA]}@O_AG_CFoBlB_UN_G`@cH`@sEPwC~AqLFeBq@kB";
        var encodedLevelskl = "PBDAAEA@B@DBBAJAE?BA@AD@CB@AFACB?E@C@BAEBBC@B@BB@EAAC@A??A@GABB@C?ACBP";
        
        
        encodedPolylinehm = new GPolyline.fromEncoded({
            color: "#FF0000",
            weight: 6,
            points: encodedPointshm,
            levels: encodedLevelshm,
            zoomFactor: 2,
            numLevels: 18
        });
        
        encodedPolylineml = new GPolyline.fromEncoded({
            color: "#0000FF",
            weight: 6,
            points: encodedPointsml,
            levels: encodedLevelsml,
            zoomFactor: 2,
            numLevels: 18
        });
        
        encodedPolylinekl = new GPolyline.fromEncoded({
            color: "#00FF00",
            weight: 6,
            points: encodedPointskl,
            levels: encodedLevelskl,
            zoomFactor: 2,
            numLevels: 18
        });
        
        GDownloadUrl("http://www.prinsensminne.se/maps/markers.xml", function(doc){
            var xmlDoc = GXml.parse(doc);
            var markers = xmlDoc.documentElement.getElementsByTagName("marker");
            
            for (var i = 0; i < markers.length; i++) {
                // obtain the attribues of each marker
                var name = markers[i].getAttribute("name");
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var point = new GLatLng(lat, lng);
                var category = markers[i].getAttribute("category");
                var iconId = markers[i].getAttribute("iconId");
                // create the marker
                var marker = createMarker(name, point, category, iconId);
                allMarkers.push(marker);
            }
            
            var markers = [];
            for (var i = 0; i < allMarkers.length; i++) {
                if (allMarkers[i].category == "ovr") {
                    markers.push(allMarkers[i]);
                }
            }
            mgr.addMarkers(markers, 12);
            
            var markers = [];
            for (var i = 0; i < allMarkers.length; i++) {
                if (allMarkers[i].category == "vatska") {
                    markers.push(allMarkers[i]);
                }
            }
            mgr.addMarkers(markers, 13);
            mgr.refresh();
            
            show("hm");
            hide("ml");
            hide("kl");
        });
    }
}
