
var markersCategorised = new Array(30);
for (i = 0; i < markersCategorised.length; i++) {
    markersCategorised[i] = [];
}

var mcMarkers = [];
var mc = null;

var styles = [{
    url: 'http://images.inetcons.it/Hotel-zoom.png',
    height: 48,
    width: 29,
    opt_anchor: [0, 0],
    opt_textColor: '#a13a41'
}];
    var gridSize = 50;
    //Options of MarkerClusterer
    var mcOptions = { gridSize: gridSize, styles: styles };

    function refreshMap() {
        mcMarkers.splice(0, mcMarkers.length);

        if (document.getElementById("chkBauernhof").checked) {
            for (var i = 0; i < markersCategorised[0].length; i++) {
                mcMarkers.push(markersCategorised[0][i]);
            }
        }
        if (document.getElementById("chkFerienhaus").checked) {
            for (var i = 0; i < markersCategorised[1].length; i++) {
                mcMarkers.push(markersCategorised[1][i]);
            }
        }
        if (document.getElementById("chkHotel1_3").checked) {
            for (var i = 0; i < markersCategorised[2].length; i++) {
                mcMarkers.push(markersCategorised[2][i]);
            }
        }
        if (document.getElementById("chkHotel4_5").checked) {
            for (var i = 0; i < markersCategorised[3].length; i++) {
                mcMarkers.push(markersCategorised[3][i]);
            }
        }
        if (document.getElementById("chkGasthof_Pension").checked) {
            for (var i = 0; i < markersCategorised[4].length; i++) {
                mcMarkers.push(markersCategorised[4][i]);
            }
        }
        if (document.getElementById("chkBed_and_Breakfast_Garni").checked) {
            for (var i = 0; i < markersCategorised[5].length; i++) {
                mcMarkers.push(markersCategorised[5][i]);
            }
        }
        if (document.getElementById("chkFerienwohnung_Appartement").checked) {
            for (var i = 0; i < markersCategorised[6].length; i++) {
                mcMarkers.push(markersCategorised[6][i]);
            }
        }
        if (document.getElementById("chkCamping").checked) {
            for (var i = 0; i < markersCategorised[7].length; i++) {
                mcMarkers.push(markersCategorised[7][i]);
            }
        }
        if (document.getElementById("chkSchutzhuette_Almhuette").checked) {
            for (var i = 0; i < markersCategorised[8].length; i++) {
                mcMarkers.push(markersCategorised[8][i]);
            }
        }
        if (mc != null)
            mc.clearMarkers();

        mc = new MarkerClusterer(map, mcMarkers, mcOptions);
    }

    function show_marker(cat) {
        var cmark;
        for (i = 0; i < markers.getLength(); i++) {
            cmark = markers.getValue(i);

            if (cmark.category == cat) {

                if (cmark.isHidden())
                    cmark.show();
                else
                    cmark.hide();
            }
        }
    }

    function getRoute() {
        var dest = document.getElementById(txtStreet).value;
        dest += ", " + document.getElementById(txtCap).value;
        dest += " " + document.getElementById(txtCity).value;
        dest += ", " + document.getElementById(txtCountry).value;
        gdir.load("from: " + dest + " to: " + company, { "locale": "de" }); //{ "locale": "en_US" }
    }


    function handleErrors() {
        if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
            alert(unknownAddress);
        else alert(errorMsg);

    }

    var map;
    var trafficInfo = null;

    function fMarkers() {
        this.markers = new Array();
        this.getLength = function() { return this.markers.length; };
        this.pushValue = function(v) { this.markers.push(v); }
        this.getValue = function(i) { return this.markers[i]; }
        this.getLastValue = function() { return this.markers[this.markers.length - 1]; }
        this.getValueById = function(ID) {
            var i;
            for (i = 0; i < this.markers.length; i++) {
                if (this.markers[i].value == ID) {
                    // alert('marker found : '+this.markers[i].value);
                    return this.markers[i];
                }
            }
            return null;
        }
        this.removeValueById = function(ID) {
            var i;
            for (i = 0; i < this.markers.length; i++) {
                if (this.markers[i].value == ID) {
                    // alert('marker found : '+this.markers[i].value);
                    this.markers.splice(i, 1);
                    //alert('changed marker removed');

                }
            }
            return null;
        }
    }


    if (GBrowserIsCompatible()) {


        map = new GMap2(document.getElementById("GoogleMap_Div"));

        var markers = new fMarkers();
        //var myEventListeners = new fListeners();

        function CreateMarker(point, icon1, InfoHTML, bDraggable, sTitle, bOpen, bForeground) {
            var marker;
            if (bForeground) {//kmm
                marker = new GMarker(point, { icon: icon1, draggable: bDraggable, title: sTitle, zIndexProcess: putForeground }); //kmm
            } else
                marker = new GMarker(point, { icon: icon1, draggable: bDraggable, title: sTitle });

            if (InfoHTML != '') {
                GEvent.addListener(marker, "click", function() { map.openInfoWindowHtml(point, InfoHTML); });
                GEvent.addListener(marker, "dragend", function() { GService.SetLatLon(this.value, this.getLatLng().y, this.getLatLng().x); RaiseEvent('PushpinMoved', this.value); });
            }

            //mxg
            if (bOpen) {
                GEvent.trigger(marker, "click");
            }

            return marker;
        }

        //kmm
        function putForeground(marker) {
            return GOverlay.getZIndex(marker.getPoint().lat()) + 1000000;
        }

        function fGetGoogleObject(result, userContext) {

            //alert('1');
            //map.setCenter(new GLatLng(result.CenterPoint.Latitude, result.CenterPoint.Longitude), result.ZoomLevel);
            //map.setCenter(new GLatLng(46.11894150610708, 11.810302734375), 8);
            //alert('2'); 

            if (result.ShowMapTypesControl) {
                map.addControl(new GMapTypeControl());
            }

            if (result.ShowZoomControl) {
                map.addControl(new GLargeMapControl());
            }

            map.addControl(new GScaleControl());
            map.setMapType(eval(result.MapType));

            if (result.Scrolling)
                map.enableScrollWheelZoom();

            var i;
            if (markers != null) {
                for (i = 0; i < markers.getLength(); i++) {
                    var cmark = markers.getValue(i);
                    if (cmark != null) {
                        map.removeOverlay(cmark);
                    }
                }
            }
            markers = new fMarkers();
            for (i = 0; i < result.Points.length; i++) {
                var myIcon_google;

                var myPoint = new GLatLng(result.Points[i].Latitude, result.Points[i].Longitude);

                myIcon_google = null;
                if (result.Points[i].IconImage != '') {
                    myIcon_google = new GIcon(G_DEFAULT_ICON);
                    markerOptions = { icon: myIcon_google };

                    myIcon_google.iconSize = new GSize(result.Points[i].IconImageWidth, result.Points[i].IconImageHeight);
                    myIcon_google.image = result.Points[i].IconImage;

                    myIcon_google.shadowSize = new GSize(result.Points[i].IconShadowWidth, result.Points[i].IconShadowHeight);
                    myIcon_google.shadow = result.Points[i].IconShadowImage;

                    myIcon_google.iconAnchor = new GPoint(15, 28);
                    myIcon_google.imageMap = [27, 0, 28, 1, 28, 2, 28, 3, 28, 4, 28, 5, 28, 6, 28, 7, 28, 8, 28, 9, 28, 10, 28, 11, 28, 12, 28, 13, 28, 14, 28, 15, 28, 16, 28, 17, 28, 18, 28, 19, 28, 20, 28, 21, 26, 22, 28, 23, 17, 24, 28, 25, 16, 26, 25, 27, 1, 27, 12, 26, 0, 25, 11, 24, 0, 23, 2, 22, 0, 21, 0, 20, 0, 19, 0, 18, 0, 17, 0, 16, 0, 15, 0, 14, 0, 13, 0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 1, 0];

                }

                var marker = CreateMarker(myPoint, myIcon_google, result.Points[i].InfoHTML, result.Points[i].Draggable, result.Points[i].ToolTip, result.Points[i].Opened, result.Points[i].Foreground); //mxg kmm
                marker.value = result.Points[i].ID;
                marker.category = result.Points[i].Category; //kmm        
                markers.pushValue(marker);

                if (!result.Clustered) {//kmm
                    map.addOverlay(markers.getLastValue());
                }
                var index = marker.category - 1;
                if (index >= 0)
                    markersCategorised[index].push(marker);
            }

            if (result.Clustered) {
                for (var i = 0; i < markersCategorised.length; i++) {
                    for (var j = 0; j < markersCategorised[i].length; j++) {
                        mcMarkers.push(markersCategorised[i][j]);
                    }
                }
                refreshMap();
            }

            if (result.AutomaticBoundaryAndZoom) {
                if (result.Clustered) {
                    RecenterAndZoom(true, mcMarkers);
                } else {
                    RecenterAndZoom(true, result);
                }
            }

        }

        function DrawGoogleMap() {

            if (GBrowserIsCompatible()) {
                map = new GMap2(document.getElementById("GoogleMap_Div"));

                gdir = new GDirections(map, document.getElementById("route"));
                GEvent.addListener(gdir, "error", handleErrors);

                geocoder = new GClientGeocoder();
                GService.GetGoogleObject(fGetGoogleObject);
            }

        }

        function fGetGoogleObjectOptimized(result, userContext) {

            if (result.RecenterMap) {
                map.setCenter(new GLatLng(result.CenterPoint.Latitude, result.CenterPoint.Longitude), result.ZoomLevel);
                GService.RecenterMapComplete();
            }

            map.setMapType(eval(result.MapType));

            if (result.ShowTraffic) {
                trafficInfo = new GTrafficOverlay();
                map.addOverlay(trafficInfo);
            }
            else {
                if (trafficInfo != null) {
                    map.removeOverlay(trafficInfo);
                    trafficInfo = null;
                }
            }

            var i;
            for (i = 0; i < result.Points.length; i++) {
                //Create icon
                var myIcon_google;

                var myPoint = new GLatLng(result.Points[i].Latitude, result.Points[i].Longitude);

                myIcon_google = null;
                if (result.Points[i].IconImage != '') {
                    myIcon_google = new GIcon(G_DEFAULT_ICON);
                    markerOptions = { icon: myIcon_google };

                    myIcon_google.iconSize = new GSize(result.Points[i].IconImageWidth, result.Points[i].IconImageHeight);
                    myIcon_google.image = result.Points[i].IconImage;
                }
            }

            if (result.AutomaticBoundaryAndZoom) {
                RecenterAndZoom(true, result);
            }
        }
    }


    function RecenterAndZoom(bRecenter, result) {
        if (bRecenter) {
            //Check if there is any visible pushpin on map.
            var cnt = 0;
            bounds = new GLatLngBounds();
            var objIgnore = document.getElementById('chkIgnoreZero');
            var bIgnore = false;
            if (objIgnore != null) {
                bIgnore = objIgnore.checked;
            }
            bIgnore = result.IgnoreZeroLatLngs;
            for (var i = 0; i < markers.getLength(); i++) {
                var ignoremarker = false;
                if (bIgnore) {
                    var point1 = markers.markers[i].getPoint();
                    if ((point1.x == 0) && (point1.y == 0)) {
                        ignoremarker = true;
                    }
                }
                if (!ignoremarker) {
                    bounds.extend(markers.markers[i].getPoint());
                    //Increment visible pushpin count
                    cnt++;
                }
            }
            var iZoomLevel = map.getBoundsZoomLevel(bounds);
            var point = bounds.getCenter();

            if (iZoomLevel > 14) {
                iZoomLevel = 14;
            }

            if (cnt <= 0) {
                //kmm
                point = new GLatLng(46.195042108660154, 11.986083984375);
                iZoomLevel = 8;
                //point = new GLatLng(result.CenterPoint.Latitude,result.CenterPoint.Longitude);
                //iZoomLevel = result.ZoomLevel;
            }

            //kmm
            map.setCenter(point, iZoomLevel);
            //map.setZoom(iZoomLevel);
            //map.setCenter(point);
        }
    }

    function endRequestHandler(sender, args) {
        //GService.GetOptimizedGoogleObject(fGetGoogleObjectOptimized);
    }

    function pageLoad() {
        if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
    }

