﻿var map;
var gmarkers = [];
var markers;
var gicons = [];
var progressBar;
var maxNum;
var j;
var selection = [];
var selectionIndex = 0;

function LoadMap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("myMap"));
        //map.addControl(new GLargeMapControl());
        map.addControl(new GOverviewMapControl());
        map.enableDoubleClickZoom();
        map.enableScrollWheelZoom();
        map.setCenter(new GLatLng(37.43506718024053, 24.918365478515625), 11);

        options = new GMapUIOptions(new GSize(824, 450));
        options.maptypes.physical = false;
        options.maptypes.satellite = false;
        options.maptypes.hybrid = false;

        map.setUI(options);

        var logo = new GScreenOverlay("images/site/syrostoday_logo_letters.png", new GScreenPoint(640, 365), new GScreenPoint(0, 0), new GScreenSize(118, 70));
        map.addOverlay(logo);

/*
        var parkingHybridLayer = new Array();
        parkingHybridLayer[0] = G_SATELLITE_MAP.getTileLayers()[0];
        parkingHybridLayer[1] = new GTileLayer(new GCopyrightCollection(''), 11, 19);
        parkingHybridLayer[1].getTileUrl = CustomGetTileUrl;
        parkingHybridLayer[1].getCopyright = function(a, b) { return "syrostoday.gr"; };
        parkingHybridLayer[1].getOpacity = function() { return 1; }; //of the non transparent part cave
        parkingHybridLayer[1].isPng = function() { return true; };
        var parkingSatMap = new GMapType(parkingHybridLayer, G_SATELLITE_MAP.getProjection(), 'Parking', { errorMessage: "Σφάλμα φόρτωσης περιοχής του χάρτη." });
        map.addMapType(parkingSatMap);

        GEvent.addListener(map, "maptypechanged", function() {
            if (map.getCurrentMapType() == parkingSatMap) {
                map.setCenter(new GLatLng(37.441950340392516, 24.94317054748535), 15);
            }
        });
*/
        progressBar = new ProgressbarControl(map, { width: 200, loadstring: 'Παρακαλώ περιμένετε...' });

        var request = GXmlHttp.create();
        request.open("GET", "Maps.ashx", false);
        request.send(null);
        var xmlDoc = request.responseXML;

        markers = xmlDoc.documentElement.getElementsByTagName("marker");
    }
    else {
        alert("Λυπούμαστε, η έκδοση χαρτών δεν είναι συμβατή με το πρόγραμμα προβολής ιστοσελίδων που χρησιμοποιείτε.");
    }
}

function analyzeMarker() {       
    var lat = parseFloat(markers[j].getAttribute("lat"));
    var lng = parseFloat(markers[j].getAttribute("lng"));
    var point = new GLatLng(lat, lng);
    var address = markers[j].getAttribute("address");
    var name = markers[j].getAttribute("name");
    var html = "<b>" + name + "</b><p>" + address + "</p>";
    var category = markers[j].getAttribute("category");
    var pin = markers[j].getAttribute("pin");

    var marker = createMarker(point, name, html, category, pin);
    map.addOverlay(marker);        
    
    progressBar.updateLoader(1);

    selectionIndex = selectionIndex + 1;    
    if (selectionIndex < maxNum) {
        j = selection[selectionIndex];       
        setTimeout('analyzeMarker()', 0.5);
    } else {
        progressBar.remove();
        selectionIndex = 0;
    }

    if (maxNum == 1) {
        map.panTo(marker.getLatLng());
    }
}


function createMarker(point, name, html, category, pin) {
    var marker;
    if (pin == "")
        marker = new GMarker(point, gicons[category]);
    else
        marker = new GMarker(point, new GIcon(baseIcon, "images/pins/" + pin));
    marker.mycategory = category;
    marker.myname = name;
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    gmarkers.push(marker);

    return marker;
}

function showMarker(name) {
    for (var i = 0; i < gmarkers.length; i++) {
        gmarkers[i].hide();
        gmarkers[i].closeInfoWindow(); 
    }
    
    for (var i = 0; i < markers.length; i++) {
        if (markers[i].getAttribute("name") == name) {
            j = i;
            maxNum = 1;
            analyzeMarker();            
            break;
        }       
    }
}

function show(category) {
    var counter = 0;
    selection = [];
    selectionIndex = 0;
    
    for (var m = 0; m < markers.length; m++) {
        var cat = markers[m].getAttribute("category");
        if (cat == category) {
            counter++;
            selection.push(m);         
        }
    }
            
    progressBar.start(counter);    
    maxNum = counter;

    j = selection[0];    
    setTimeout('analyzeMarker()', 0.5);                  
}

function hide(category) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].mycategory == category) {
            gmarkers[i].hide();
        }
    }
    map.closeInfoWindow();
}

function boxclick(box, category) {
    if (box.checked) {
        show(category);
    } else {
        hide(category);
    }
}

function TileToQuadKey(x, y, zoom) {
    var quad = "";
    for (var i = zoom; i > 0; i--) {
        var mask = 1 << (i - 1);
        var cell = 0;
        if ((x & mask) != 0)
            cell++;
        if ((y & mask) != 0)
            cell += 2;
        quad += cell;
    }
    return quad;
}


function CustomGetTileUrl(a, b) {
    var w = ((a.x + a.y) % 2) + 1;
    var f = "http://maps" + w + ".syrostoday.gr/parking/" + TileToQuadKey(a.x, a.y, b) + ".png";
    return f;
}

