﻿var landkarte = null;

var scoutLayer = null;
var projLayer = null;


//var baseURL = "http://www.erlebe-it.de/fileadmin/data/";
//var baseURL = "http://zfs.informatik.rwth-aachen.de/itklandkarte_test/";
//var baseURL = "http://zfs.informatik.rwth-aachen.de/itklandkarte/";
//var baseURL = "http://localhost:2138/";
//var baseURL = "http://localhost:80/rwth-aachen/data/";

var baseURL = "http://www.erlebe-it.de/fileadmin/data/";

var itkNamespace = "";

function ITKLandkarte() {
    var map = null;

    var showScouts = false;  //document.getElementById("chkScouts").checked;
    var showProjekte = false;  //document.getElementById("chkProjekte").checked;
    var showSchulen = false;  //document.getElementById("chkSchulen").checked;

    var scoutPushPinsAdded = false;
    var projPushPinsAdded = false;

    var htmlScoutsOk = false;
    var htmlProjekteOk = false;
    
    var regionen = null;
    var scouts = null; 
    var projekte = null;
    var schulen = null;


    
    var regionSelect = document.getElementById("regionAuswahl");
    
    initMap();
        
    function initMap() {
        map = new VEMap('itkMap');
        map.SetDashboardSize(VEDashboardSize.Small);
        map.LoadMap(new VELatLong(0, 0), 2, VEMapStyle.Road, false, VEMapMode.Mode2D, false);
        map.SetCenterAndZoom(new VELatLong(51.167, 10.45), 6);
        map.HideScalebar();

        /* Scout Layer */
        scoutLayer = new VEShapeLayer();
        map.AddShapeLayer(this.scoutLayer);

        var scoutLayerOptions = new VEClusteringOptions();
        var customScoutIcon = new VECustomIconSpecification();
        customScoutIcon.CustomHTML = '<span class="list-number-itscouts">...</span>';

        scoutLayerOptions.Icon = customScoutIcon;
        scoutLayerOptions.Callback = clusteringScoutsCallback;
        scoutLayer.SetClusteringConfiguration(VEClusteringType.Grid, scoutLayerOptions);

        /* Projekte Layer */
        projLayer = new VEShapeLayer();
        map.AddShapeLayer(this.projLayer);

        var projLayerOptions = new VEClusteringOptions();
        var customProjektIcon = new VECustomIconSpecification();
        customProjektIcon.CustomHTML = '<span class="list-number-projekte">...</span>';

        projLayerOptions.Icon = customProjektIcon;
        projLayerOptions.Callback = clusteringProjekteCallback;
        projLayer.SetClusteringConfiguration(VEClusteringType.Grid, projLayerOptions);


        // map.ClearInfoBoxStyles();
        map.AttachEvent("onchangeview", MapViewChangeHandler);

        
        document.getElementById("chkScouts").onclick = ITKLandkarte.checkboxOnClick;
        document.getElementById("chkProjekte").onclick = ITKLandkarte.checkboxOnClick;
        //document.getElementById("chkSchulen").onclick = ITKLandkarte.checkboxOnClick;

        try {
            loadRegions();
            loadScouts();
            loadProjekte();
            // loadSchulen();
        } catch (e) {
            //alert("Fehler beim Laden der Daten!");
            alert(e.message);
        }


        regionSelect.onchange = ITKLandkarte.regionSelected;

    }

    

    this.changeSelection = function() {
        showScouts = document.getElementById("chkScouts").checked;
        showProjekte = document.getElementById("chkProjekte").checked;
        // showSchulen = document.getElementById("chkSchulen").checked;

        this.updateView();
    }

    this.closeDetails = function() {
        var divDetails = document.getElementById("divDetails");
        divDetails.style.display = "none";
    }

    this.updateView = function() {
        var div = document.getElementById("list");
        clear(div);
        // if (showSchulen) {
        //    this.showSchulen();
        // }
        this.showScouts();
        this.showProjekte();
    }
    
    function isShownOnMap(latlong, rect) {
        if(latlong==null) {
            return true;
        }
        if(latlong.Latitude<=rect.TopLeftLatLong.Latitude &&
            latlong.Latitude>=rect.BottomRightLatLong.Latitude &&
            latlong.Longitude>=rect.TopLeftLatLong.Longitude &&
            latlong.Longitude<=rect.BottomRightLatLong.Longitude) {
            return true;
        }
        return false;
    }
    
    // ******************
    // ITScouts
    // ******************
    function loadScouts() {
        var xml = loadXmlDoc(baseURL + 'ItScoutService.asmx/getITScouts');
        scouts = parseXMLITScout(xml);
        // buildScoutHtml();
    }

    function buildScoutHtml() {
        for (var i = 0; i < scouts.length; i++) {
            var icon;
            if (i + 1 >= 100) {
                icon = '<span class="list-number-itscouts100">' + (i + 1) + '</span>';
            }
            else {
                icon = '<span class="list-number-itscouts">' + (i + 1) + '</span>';
            }
            var name = 'IT-Scout ' + scouts[i].Stadt;
            var mapLink = '<h5><a href="javascript:landkarte.showElement(1,' + i + ')" title="In Karte anzeigen">';
            mapLink += name + '</a></h5>';
            var htmlFrag = '<p class="detail">';
            if (scouts[i].Funktionen != '') {
                htmlFrag += '<b>Funktionen:</b> ';
                htmlFrag += scouts[i].Funktionen;
                htmlFrag += '<br/>';
            }
            if (scouts[i].Qualifikationen.length > 0) {
                htmlFrag += '<b>Qualifikationen:</b> ';
                for (var j = 0; j < scouts[i].Qualifikationen.length; j++) {
                    if (j > 0) htmlFrag += ', ';
                    htmlFrag += scouts[i].Qualifikationen[j];
                }
                htmlFrag += '<br/>';
            }
            if (scouts[i].Bereitschaften.length > 0) {
                htmlFrag += '<b>Bereitschaften:</b> ';
                for (var j = 0; j < scouts[i].Bereitschaften.length; j++) {
                    if (j > 0) htmlFrag += ', ';
                    htmlFrag += scouts[i].Bereitschaften[j];
                }
                htmlFrag += '<br/>';
            }
            htmlFrag += '</p>';
            htmlFrag += '<a href="javascript:landkarte.moreDetails(1,' + i + ')" class="list-more-link">Mehr Informationen</a>';
            scouts[i].PushPin = getPushPinScout(scouts[i], icon + name, htmlFrag, icon);
            scouts[i].HtmlList = '<div class="entry">' + icon + mapLink + htmlFrag + '</div>';
        }
        htmlScoutsOk = true;
    }


    this.showScouts = function() {
        var mapView = map.GetMapView();
        var div = document.getElementById("list");
        if (!htmlScoutsOk) {
            buildScoutHtml();
        }
        var tmp = "";
        for (var i = 0; i < scouts.length; i++) {
            if (scouts[i].PushPin != null) {
                if (!scoutPushPinsAdded && showScouts) {
                    scoutLayer.AddShape(scouts[i].PushPin);
                }
            }
            if (showScouts && isShownOnMap(scouts[i].LatLong, mapView)) {
                tmp += scouts[i].HtmlList;
            }
        }
        div.innerHTML += tmp;
        if (showScouts) {
            scoutPushPinsAdded = true;
        }
        if (showScouts) {
            scoutLayer.Show();
        } else {
            scoutLayer.Hide();
        }
    }
    
    function getPushPinScout(obj, name, html, icon) {
        if (obj.LatLong == null) {
            return null;
        }

        var pin = new VEShape(VEShapeType.Pushpin, obj.LatLong);
        pin.SetTitle(name);
        pin.SetDescription(html);
        pin.SetCustomIcon(icon);
        return pin;
    }

    function showScoutDetailsWin(num) {
        newWin = window.open("", "ITKDetails", "width=400,height=400,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no");
        newWin.focus();
        newWin.document.open();
        newWin.document.write('<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +
            '<link rel="stylesheet" type="text/css" href="styles/common.css" />' +
            '<link rel="stylesheet" type="text/css" href="styles/karte.css" />' + 
            '<title>ITK-Landkarte</title></head><body>' + 
        	'<div id="detailWin">');
        var html = '<div class="entry">';
        html += '<span class="scout-header"> IT-Scout ' + scouts[num].Stadt + '</span>';

        html += '<table border=0>';
        if (scouts[num].Funktionen != '') {
            html += '<tr><td style="vertical-align:top;"><b>Funktionen:</b></td><td>';
            html += scouts[num].Funktionen;
            html += '</td></tr>';
        }
        if (scouts[num].Qualifikationen.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Qualifikationen:</b></td><td>';
            for (var i = 0; i < scouts[num].Qualifikationen.length; i++) {
                if (i > 0) html += '<br/>';
                html += scouts[num].Qualifikationen[i];
            }
            html += '</td></tr>';
        }
        if (scouts[num].Verfuegbarkeit != '') html += '<tr><td><b>Verf&uuml;gbarkeit:</b></td><td>' + scouts[num].Verfuegbarkeit + ' km Umkreis</td></tr>';
        if (scouts[num].Bereitschaften.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Bereitschaft zu:</b></td><td>';
            for (var i = 0; i < scouts[num].Bereitschaften.length; i++) {
                if (i > 0) html += '<br/>';
                html += scouts[num].Bereitschaften[i];
            }
            html += '</td></tr>';
        }
        html += '</table></div>';
        newWin.document.write(html);
        newWin.document.write('</div><a href="javascript:window.print()">Drucken</a>&nbsp;&nbsp;&nbsp;<a href="javascript:window.close()">Schlie&szlig;en</a>' +
            '</body></html>');
        newWin.document.close();
    }


    function showScoutDetails(num) {
        var div = document.getElementById("divDetails");
        var html = '<div class="entry">';
        html += '<span class="scout-header"> IT-Scout ' + scouts[num].Stadt + '</span>';

        html += '<table border=0>';
        if (scouts[num].Funktionen != '') {
            html += '<tr><td style="vertical-align:top;"><b>Funktionen:</b></td><td>';
            html += scouts[num].Funktionen;
            html += '</td></tr>';
        }
        if (scouts[num].Qualifikationen.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Qualifikationen:</b></td><td>';
            for (var i = 0; i < scouts[num].Qualifikationen.length; i++) {
                if (i > 0) html += '<br/>';
                html += scouts[num].Qualifikationen[i];
            }
            html += '</td></tr>';
        }
        if (scouts[num].Verfuegbarkeit != '') html += '<tr><td><b>Verf&uuml;gbarkeit:</b></td><td>' + scouts[num].Verfuegbarkeit + ' km Umkreis</td></tr>';
        if (scouts[num].Bereitschaften.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Bereitschaft zu:</b></td><td>';
            for (var i = 0; i < scouts[num].Bereitschaften.length; i++) {
                if (i > 0) html += '<br/>';
                html += scouts[num].Bereitschaften[i];
            }
            html += '</td></tr>';
        }
        html += '</table></div>';
        html += '<a class="list-more-link" href="javascript:window.print()">Drucken</a><br /><a href="javascript:landkarte.closeDetails()" class="list-more-link">Schlie&szlig;en</a>';
        div.style.display = "";
        div.innerHTML = html;
    }
    
    
    // ******************
    // Projekte
    // ******************
    function loadProjekte() {
        var xml = loadXmlDoc(baseURL + 'ProjektService.asmx/getProjekte');
        projekte = parseXMLProjekte(xml);
        // buildProjHtml();
    }

    function buildProjHtml() {
        for (var i = 0; i < projekte.length; i++) {
            var icon;
            if (i + 1 >= 100) {
                icon = '<span class="list-number-projekte100">' + (i + 1) + '</span>';
            }
            else {
                icon = '<span class="list-number-projekte">' + (i + 1) + '</span>';
            }
            var mapLink = '<h5><a href="javascript:landkarte.showElement(2,' + i + ')" title="In Karte anzeigen">';
            mapLink += projekte[i].ProjName + '</a></h5>';
//            var htmlFrag = '<p class="detail">';
            var htmlFrag = '';
            if (projekte[i].Initiator != '') {
                htmlFrag += '<p class="detail">Initiator: ' + projekte[i].Initiator + '</p>';
            }
            if (projekte[i].Partner != '') {
                htmlFrag += '<p class="detail">Partner: ' + projekte[i].Partner + '</p>';
            }
            if (projekte[i].Laufzeit != '') {
                htmlFrag += '<p class="detail">Laufzeit: ' + projekte[i].Laufzeit + '</p>';
            }
            if (htmlFrag == '') {
                htmlFrag += '<p></p>';
            }
            htmlFrag += '<a href="javascript:landkarte.moreDetails(2,' + i + ')" class="list-more-link">Mehr Informationen</a>';
            projekte[i].PushPin = getPushPinProjekt(projekte[i], icon + "Projekt: " + projekte[i].ProjName, htmlFrag, icon);
            projekte[i].HtmlList = '<div class="entry">' + icon + mapLink + htmlFrag + '</div>';
        }
        htmlProjekteOk = true;
    }

    this.showProjekte = function() {
        var mapView = map.GetMapView();
        var div = document.getElementById("list");
        if (!htmlProjekteOk) {
            buildProjHtml();
        }
        var tmp = "";
        for (var i = 0; i < projekte.length; i++) {
            if (projekte[i].PushPin != null) {
                if (!projPushPinsAdded && showProjekte) {
                    projLayer.AddShape(projekte[i].PushPin);
                }
            }
            if (showProjekte && isShownOnMap(projekte[i].LatLong, mapView)) {
                tmp += projekte[i].HtmlList;
            }
        }
        div.innerHTML += tmp;
        if (showProjekte) {
            projPushPinsAdded = true;
        }
        if (showProjekte) {
            projLayer.Show();
        }
        else {
            projLayer.Hide();
        }
    }
    
    function getPushPinProjekt(obj, name, htmlFrag, icon) {
        if ( obj.LatLong == null) {
            return null;
        }

        var pin = new VEShape(VEShapeType.Pushpin, obj.LatLong);
        pin.SetTitle("Projekt: " + name);
        pin.SetDescription(htmlFrag);
        pin.SetCustomIcon(icon);
        return pin;
    }

    function showProjektDetailsWin(num) {
        newWin = window.open("", "ITKDetails", "width=400,height=400,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no");
        newWin.focus();
        newWin.document.open();
        newWin.document.write('<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +
            '<link rel="stylesheet" type="text/css" href="styles/common.css" />' +
            '<link rel="stylesheet" type="text/css" href="styles/karte.css" />' +
            '<title>ITK-Landkarte</title></head><body>' +
        	'<div id="detailWin">');
        var html = '<div class="entry">';
        html += '<span class="projekt-header">' + projekte[num].ProjName + '</span>';
        html += '<table border=0>';
        if (projekte[num].Initiator != '') html += '<tr><td><b>Initiator:</b></td><td>' + projekte[num].Initiator + '</td></tr>';
        if (projekte[num].Name != '') html += '<tr><td><b>Ansprechpartner:</b></td><td>' + projekte[num].Vorname + ' ' + projekte[num].Name + '</td></tr>';
        if (projekte[num].Email != '') html += '<tr><td><b>Email:</b></td><td><a href="mailto:' + projekte[num].Email + '">' + projekte[num].Email + '</a></td></tr>';
        if (projekte[num].Telefon != '') html += '<tr><td><b>Telefon:</b></td><td>' + projekte[num].Telefon + '</td></tr>';
        if (projekte[num].Kurzbeschreibung != '') html += '<tr><td><b>Beschreibung:</b></td><td>' + projekte[num].Kurzbeschreibung + '</td></tr>';
        if (projekte[num].Stadt != '') html += '<tr><td><b>Adresse:</b></td><td>' + projekte[num].Strasse + ' ' + projekte[num].Hausnummer + ', ' + projekte[num].PLZ + ' ' + projekte[num].Stadt + '</td></tr>';
        if (projekte[num].Partner != '') html += '<tr><td><b>Partner:</b></td><td>' + projekte[num].Partner + '</td></tr>';
        if (projekte[num].Url != '') html += '<tr><td><b>URL:</b></td><td><a target="_blank" href="' + projekte[num].Url + '">' + projekte[num].Url + '</a></td></tr>';
        if (projekte[num].Laufzeit != '') html += '<tr><td><b>Laufzeit:</b></td><td>' + projekte[num].Laufzeit + '</td></tr>';
        if (projekte[num].Region != '') html += '<tr><td><b>Region:</b></td><td>' + projekte[num].Region + '</td></tr>';
        if (projekte[num].Schwerpunkte.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Schwerpunkte:</b></td><td>';
            for (var i = 0; i < projekte[num].Schwerpunkte.length; i++) {
                if (i > 0) html += '<br/>';
                html += projekte[num].Schwerpunkte[i];
            }
            html += '</td></tr>';
        }
        if (projekte[num].Zielgruppen.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Zielgruppen:</b></td><td>';
            for (var i = 0; i < projekte[num].Zielgruppen.length; i++) {
                if (i > 0) html += '<br/>';
                html += projekte[num].Zielgruppen[i];
            }
            html += '</td></tr>';
        }
        html += '</table></div>';
        newWin.document.write(html);
        newWin.document.write('</div><a href="javascript:window.print()">Drucken</a>&nbsp;&nbsp;&nbsp;<a href="javascript:window.close()">Schlie&szlig;en</a>' +
            '</body></html>');
        newWin.document.close();
    }
    
    
    function showProjektDetails(num) {
        var div = document.getElementById("divDetails");
        var html = '<div class="entry">';
        html += '<span class="projekt-header">' + projekte[num].ProjName + '</span>';
        html += '<table border=0>';
        if (projekte[num].Initiator != '') html += '<tr><td><b>Initiator:</b></td><td>' + projekte[num].Initiator + '</td></tr>';
        if (projekte[num].Name != '') html += '<tr><td><b>Ansprechpartner:</b></td><td>' + projekte[num].Vorname + ' ' + projekte[num].Name + '</td></tr>';
        if (projekte[num].Email != '') html += '<tr><td><b>Email:</b></td><td><a href="mailto:' + projekte[num].Email + '">' + projekte[num].Email + '</a></td></tr>';
        if (projekte[num].Telefon != '') html += '<tr><td><b>Telefon:</b></td><td>' + projekte[num].Telefon + '</td></tr>';
        if (projekte[num].Kurzbeschreibung != '') html += '<tr><td><b>Beschreibung:</b></td><td>' + projekte[num].Kurzbeschreibung + '</td></tr>';
        if (projekte[num].Stadt != '') html += '<tr><td><b>Adresse:</b></td><td>' + projekte[num].Strasse + ' ' + projekte[num].Hausnummer + ', ' + projekte[num].PLZ + ' ' + projekte[num].Stadt + '</td></tr>';
        if (projekte[num].Partner != '') html += '<tr><td><b>Partner:</b></td><td>' + projekte[num].Partner + '</td></tr>';
        if (projekte[num].Url != '') html += '<tr><td><b>URL:</b></td><td><a target="_blank" href="' + projekte[num].Url + '">' + projekte[num].Url + '</a></td></tr>';
        if (projekte[num].Laufzeit != '') html += '<tr><td><b>Laufzeit:</b></td><td>' + projekte[num].Laufzeit + '</td></tr>';
        if (projekte[num].Region != '') html += '<tr><td><b>Region:</b></td><td>' + projekte[num].Region + '</td></tr>';
        if (projekte[num].Schwerpunkte.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Schwerpunkte:</b></td><td>';
            for (var i = 0; i < projekte[num].Schwerpunkte.length; i++) {
                if (i > 0) html += '<br/>';
                html += projekte[num].Schwerpunkte[i];
            }
            html += '</td></tr>';
        }
        if (projekte[num].Zielgruppen.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Zielgruppen:</b></td><td>';
            for (var i = 0; i < projekte[num].Zielgruppen.length; i++) {
                if (i > 0) html += '<br/>';
                html += projekte[num].Zielgruppen[i];
            }
            html += '</td></tr>';
        }
        html += '</table></div>';
        html += '<a class="list-more-link" href="javascript:window.print()">Drucken</a><br /><a href="javascript:landkarte.closeDetails()" class="list-more-link">Schlie&szlig;en</a>';
        div.style.display = "";
        div.innerHTML = html;
    }

    // ******************
    // Schulen
    // ******************
    function loadSchulen() {
        var xml = loadXmlDoc(baseURL + 'SchuleService.asmx/getSchulen');
        schulen = parseXMLSchulen(xml);
    }

    this.showSchulen = function() {
        var div = document.getElementById("list");

        for (var i = 0; i < schulen.length; i++) {
            var icon;
            if (i + 1 > 100) {
                icon = '<span class="list-number-schule100">' + (i + 1) + '</span>';
            }
            else {
                icon = '<span class="list-number-schule">' + (i + 1) + '</span>';
            }
            var mapLink = '<h5><a href="javascript:landkarte.showElement(3,' + i + ')" title="In Karte anzeigen">';
            mapLink += schulen[i].Name + '</a></h5>';
            var htmlFrag = '<p class="detail">';
            htmlFrag += 'Stadt:' + schulen[i].Stadt + '<br/>';
            if (schulen[i].Zielgruppen.length > 0) {
                html += 'Typ: ';
                for (var j = 0; j < schulen[i].Zielgruppen.length; j++) {
                    if (i > 0) html += ',';
                    html += schulen[i].Schwerpunkte[j];
                }
            }
            htmlFrag += '</p>';
            htmlFrag += '<a href="javascript:landkarte.moreDetails(3,' + i + ')" class="list-more-link">Mehr Informationen</a>';
            schulen[i].PushPin = addPushPinSchule(schulen[i], schulen[i].Name, htmlFrag, icon);
            schulen[i].HtmlList = '<div class="entry">' + icon + mapLink + htmlFrag + '</div>';
        }
    }

    function addPushPinSchule(obj, name, htmlFrag, icon) {
        if (obj.LatLong == null) {
            return null;
        }

        var pin = new VEShape(VEShapeType.Pushpin, obj.LatLong);
        pin.SetTitle("Schule: " + name);
        pin.SetDescription(htmlFrag);
        pin.SetCustomIcon(icon);
        map.AddShape(pin);
        return pin;
    }

    function showSchuleDetails(num) {
        var div = document.getElementById("list");
        var html = '<div class="entry">';
        html += '<table border=0>';
        html += '<tr><td><b>Name:</b></td><td>' + schulen[num].Name + '</td></tr>';
        if (schulen[num].Stadt != '') html += '<tr><td><b>Adresse:</b></td><td>' + schulen[num].Strasse + ' ' + schulen[num].Hausnummer + ', ' + schulen[num].PLZ + ' ' + schulen[num].Stadt + '</td></tr>';
        if (schulen[num].Url != '') html += '<tr><td><b>URL:</b></td><td><a target="_blank" href="' + schulen[num].Url + '">' + schulen[num].Url + '</a></td></tr>';
        if (schulen[num].Zielgruppen.length > 0) {
            html += '<tr><td style="vertical-align:top;"><b>Typ:</b></td><td>';
            for (var i = 0; i < schulen[num].Zielgruppen.length; i++) {
                if (i > 0) html += '<br/>';
                html += schulen[num].Zielgruppen[i];
            }
            html += '</td></tr>';
        }
        html += '</table></div>';
        html += '<a href="javascript:landkarte.changeSelection()" class="list-more-link">Zurück zur Liste</a>';
        div.innerHTML = html;
    }




    this.showElement = function(type, num) {
        if (type == 1 && scouts[num].LatLong != null) {// Scouts
            map.SetCenterAndZoom(scouts[num].LatLong,10);
        }
        if (type == 2 && projekte[num].LatLong != null) { // Projekte
            map.SetCenterAndZoom(projekte[num].LatLong,10);
        }
        if (type == 3 && schulen[num].LatLong != null) { // Schulen
            map.SetCenterAndZoom(schulen[num].LatLong,10);
        }
    }

    this.moreDetails = function(type, num) {
        if (type == 1) {
            showScoutDetails(num);
        }
        if (type == 2) {
            showProjektDetails(num);
        }
        if (type == 3) {
            showSchuleDetails(num);
        }
    }
    
    function loadRegions() {
        var xml=loadXmlDoc(baseURL + 'RegionenService.asmx/getAllRegions');
        regionen = parseXMLRegionen(xml);
        updateSelectRegion();
    }

    function updateSelectRegion() {
        for(var i=0; i<regionen.length; i++) {
            var opt = new Option(regionen[i].Bezeichnung, regionen[i].Id, false, false);
            regionSelect.options[regionSelect.length] = opt;
        }
    }

    function clear(element) {
        for (var i = element.childNodes.length - 1; i >= 0; i--) {
            element.removeChild(element.childNodes[i]);
        }
    }

    function loadXmlDoc(url) {
        var request = null;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            try {
                request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) { }
            }
        }

        if (request == null) {
            alert("It seems, that your browser does not support the Javascript XMLHttpRequest object, that is necessary to use this application.");
            return;
        }
        request.open('GET', url, false);
        request.send(null);
        return request.responseXML;
    }

    this.regionSelectionChanged = function() {
        var curReg = regionen[regionSelect.selectedIndex];
        if (curReg.LatLong != null) {
            map.SetCenterAndZoom(curReg.LatLong,curReg.Zoom);
        }
    }

}

ITKLandkarte.checkboxOnClick = function() {
    try {
        if (landkarte != null) {
            landkarte.changeSelection();
        }
    } catch (execScript) {
        alert(execScript.message);
    }
}

ITKLandkarte.regionSelected = function() {
    if (landkarte != null) {
        landkarte.regionSelectionChanged();
    }
}

ITKLandkarte.attachEventHandlers = function() {
    var load = window.onload;
    if (load != null) {
        window.onload = function() {
            load();
            landkarte = new ITKLandkarte();
            landkarte.changeSelection();
        }
    }
    else {
        window.onload = function() {
            landkarte = new ITKLandkarte();
            landkarte.changeSelection();
        }
    }
}

ITKLandkarte.attachEventHandlers();

function MapViewChangeHandler() {
    if(landkarte!=null) 
        landkarte.updateView();
}

function parseXMLITScout(xml) {
    var nodes = xml.documentElement.selectNodes("//" + itkNamespace + "ITScoutClient");
    var scouts = new Array(nodes.length);

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        scouts[i] = new ITScoutClient(node);
    }

    return scouts;
}

function parseXMLProjekte(xml) {
    var nodes = xml.documentElement.selectNodes("//" + itkNamespace + "ProjektClient");
    var projs = new Array(nodes.length);

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        projs[i] = new ProjektClient(node);
    }

    return projs;
}

function parseXMLSchulen(xml) {
    var nodes = xml.documentElement.selectNodes("//" + itkNamespace + "SchuleClient");
    var schulen = new Array(nodes.length);

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        schulen[i] = new SchuleClient(node);
    }

    return schulen;
}

function ITScoutClient(node) {
    this.Id = parseInt(getChildValue(node,itkNamespace + "Id"));
    this.PLZ = getChildValue(node, itkNamespace + "PLZ");
    this.Stadt = getChildValue(node, itkNamespace + "Stadt");
    this.Verfuegbarkeit = getChildValue(node, itkNamespace + "Verfuegbarkeit");
    this.Funktionen = getChildValue(node, itkNamespace + "Funktionen");
    this.Qualifikationen = getStringArray(node, itkNamespace + "Qualifikationen");
    this.Bereitschaften = getStringArray(node, itkNamespace + "Bereitschaften");
    this.LatLong = getLatLong(node); 
}

ITScoutClient.prototype.Id;
ITScoutClient.prototype.PLZ;
ITScoutClient.prototype.Stadt;
ITScoutClient.prototype.Verfuegbarkeit;
ITScoutClient.prototype.Funktionen;
ITScoutClient.prototype.Bereitschaften;
ITScoutClient.prototype.Qualifikationen;
ITScoutClient.prototype.LatLong;
ITScoutClient.prototype.PushPin;
ITScoutClient.prototype.HtmlList;

function ProjektClient(node) {
    this.Id = parseInt(getChildValue(node,itkNamespace + "Id"));
    this.ProjName = getChildValue(node, itkNamespace + "ProjName");
    this.Name = getChildValue(node, itkNamespace + "Name");
    this.Vorname = getChildValue(node, itkNamespace + "Vorname");
    this.Email = getChildValue(node, itkNamespace + "Email");
    this.Telefon = getChildValue(node, itkNamespace + "Telefon");
    this.Kurzbeschreibung = getChildValue(node, itkNamespace + "Kurzbeschreibung");
    this.Url = getChildValue(node, itkNamespace + "Url");
    this.PLZ = getChildValue(node, itkNamespace + "PLZ");
    this.Stadt = getChildValue(node, itkNamespace + "Stadt");
    this.Strasse = getChildValue(node, itkNamespace + "Strasse");
    this.Hausnummer = getChildValue(node, itkNamespace + "Hausnummer");
    this.Laufzeit = getChildValue(node, itkNamespace + "Laufzeit");
    this.Partner = getChildValue(node, itkNamespace + "Partner");
    this.Region = getChildValue(node, itkNamespace + "Region");
    this.Initiator = getChildValue(node, itkNamespace + "Initiator");
    this.LatLong = getLatLong(node); 
    this.Zielgruppen = getStringArray(node, itkNamespace + "Zielgruppen");
    this.Schwerpunkte = getStringArray(node, itkNamespace + "Schwerpunkte");
}



ProjektClient.prototype.Id;
ProjektClient.prototype.ProjName;
ProjektClient.prototype.Name;
ProjektClient.prototype.Vorname;
ProjektClient.prototype.Email;
ProjektClient.prototype.Telefon;
ProjektClient.prototype.Kurzbeschreibung;
ProjektClient.prototype.Url;
ProjektClient.prototype.Laufzeit;
ProjektClient.prototype.Partner;
ProjektClient.prototype.Region;
ProjektClient.prototype.Initiator;
ProjektClient.prototype.LatLong;
ProjektClient.prototype.PLZ;
ProjektClient.prototype.Stadt;
ProjektClient.prototype.Strasse;
ProjektClient.prototype.Hausnummer;
ProjektClient.prototype.Schwerpunkte;
ProjektClient.prototype.Zielgruppen;
ProjektClient.prototype.PushPin;
ProjektClient.prototype.HtmlList;


function Region(node) {
    this.Id = parseInt(getChildValue(node,itkNamespace + "Id"));
    this.Bezeichnung = getChildValue(node, itkNamespace + "Bezeichnung");
    this.LatLong = getLatLong(node); 
    if (node.selectSingleNode("Zoom").hasChildNodes()) {
        this.Zoom = parseInt(getChildValue(node,itkNamespace + "Zoom"));
    }
        

}

function parseXMLRegionen(xml) {
    var nodes = xml.documentElement.selectNodes("//" + itkNamespace + "RegionenClient");
    var regs = new Array(nodes.length);

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        regs[i] = new Region(node);
    }

    return regs;
}

Region.prototype.Id;
Region.prototype.Bezeichnung;
Region.prototype.LatLong;
Region.prototype.Zoom;


function SchuleClient(node) {
    this.Id = parseInt(getChildValue(node,itkNamespace + "Id"));
    this.Name = getChildValue(node, itkNamespace + "Name");
    this.Url = getChildValue(node, itkNamespace + "Url");
    this.PLZ = getChildValue(node, itkNamespace + "PLZ");
    this.Stadt = getChildValue(node, itkNamespace + "Stadt");
    this.Strasse = getChildValue(node, itkNamespace + "Strasse");
    this.Hausnummer = getChildValue(node, itkNamespace + "Hausnummer");
    this.LatLong = getLatLong(node);  
    this.Zielgruppen = getStringArray(node, itkNamespace + "Zielgruppen");
}


SchuleClient.prototype.Id;
SchuleClient.prototype.Name;
SchuleClient.prototype.Url; 
SchuleClient.prototype.PLZ;
SchuleClient.prototype.Stadt;
SchuleClient.prototype.Strasse;
SchuleClient.prototype.Hausnummer;
SchuleClient.prototype.Region;
SchuleClient.prototype.LatLong;
SchuleClient.prototype.Zielgruppen;
SchuleClient.prototype.PushPin;
SchuleClient.prototype.HtmlList;


function getStringArray(node, name) {
    var child = node.selectSingleNode(name);
    var res = new Array();
    if (child != null) {
        var j = 0;
        for (var i = 0; i < child.childNodes.length; i++) {
            if (child.childNodes[i].nodeName == "string") {
                res[j] = child.childNodes[i].firstChild.nodeValue;
                j++;
            }
        }
    }
    return res;
}

function getChildValue(node, name) {
    var child = node.selectSingleNode(name);
    if (child != null) {
        if(child.firstChild !=null) {
            if (child.firstChild.nodeValue != null) {
                return child.firstChild.nodeValue;
            }
        }
    }
    return '';
}

function getLatLong(node) {
    var res=null;
    var lat = node.selectSingleNode(itkNamespace + "Latitude");
    if(lat!=null) {
        if(lat.firstChild!=null) {
            if(lat.firstChild.nodeValue!=null) {
                res=new VELatLong(parseFloat(lat.firstChild.nodeValue),
									  parseFloat(node.selectSingleNode(itkNamespace + "Longitude").firstChild.nodeValue));
            }
		}
    }
    return res;
}


function clusteringScoutsCallback(clusters) {
    for (var i = 0; i < clusters.length; ++i) {
        var cluster = clusters[i];
        var clusterShape = cluster.GetClusterShape();
        clusterShape.SetTitle("Mehrere IT-Scouts an diesem Ort");
        var desc = '<div class="clustershape">';
        for (var j = 0; j < cluster.Shapes.length; j++) {
            desc += '<p style="padding-top:10px;"><b>' + cluster.Shapes[j].GetTitle() + '</b>';
            desc += cluster.Shapes[j].GetDescription();
            desc += '</p>';
        }
        desc += '</div>';
        clusterShape.SetDescription(desc);
    }
}

function clusteringProjekteCallback(clusters) {
    for (var i = 0; i < clusters.length; ++i) {
        var cluster = clusters[i];
        var clusterShape = cluster.GetClusterShape();
        clusterShape.SetTitle("Mehrere Projekte an diesem Ort");
        var desc = '<div class="clustershape">';
        for (var j = 0; j < cluster.Shapes.length; j++) {
            desc += '<p style="padding-top:10px;"><b>' + cluster.Shapes[j].GetTitle() + '</b>';
            desc += cluster.Shapes[j].GetDescription();
            desc += '</p>';
        }
        desc += '</div>';
        clusterShape.SetDescription(desc);
    }
}

