// http://www.svennerberg.com/2009/06/dynamically-toggle-markers-in-google-maps/
/* Prototyping the show/hide/isHidden methods of GMarker */

// the hide() method saves the markers current position and then
// positions the marker outside the map
GMarker.prototype.hide = function() {
    if (this.getPoint().lat() < 90) {
        try {
            this.savePoint = this.getPoint();
            this.setPoint(new GLatLng(90, 0));
        } catch (e) { }
    }
}
// the show() method puts the marker back in the original position
GMarker.prototype.show = function() {
    if (this.getPoint().lat() == 90) {
        if (this.savePoint) {
            try {
                this.setPoint(this.savePoint);
                this.savePoint = null;
            } catch (e) { }
        }
    }
}

// the isHidden() method checks if the marker is put outside the map and if it does
// returns true
GMarker.prototype.isHidden = function() {
     if (this.getPoint().lat() == 90) {
        return true;
    } else {
        return false;
    }
}

function addRandomMarkers(numMarkers, map, mgr, markers) {
    // Add markers to the map at random locations
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();

    for (var i = 0; i < numMarkers; i++) {
        var latlng = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
        var marker = new GMarker(latlng);
        markers.push(marker);
    }
    mgr.addMarkers(markers, 1);
    mgr.refresh();
}

// Jquery
;(function($) {
    $.fn.accommodationMaps = function(regio_id, latitude, longitude, zoomlevel) {
        var map;
        var mgr;
        var markers = new Array();

        window.onunload = function() { GUnload(); }

        function addMarkers(list) {
            var strList = '';
            list.each(function(){strList = strList +  "," + this.value});
            strList = strList.substr(1, strList.length - 1);

            var newList = null;

            $.getJSON('/regio/ajax-accommodations/' + regio_id + '/' + strList + '/?', {}, function(data){
                markers = new Array();
                $("#accommodatieslider div").remove();
                $("#topbar-leftarrow").after(data.sliderString);

                if(data.coords.length > 5) {
                    $("#topbar-rightarrow-disabled").hide();
                    $("#topbar-rightarrow").show();
                } else {
                    $("#topbar-rightarrow").hide();
                    $("#topbar-rightarrow-disabled").show();
                }
                $(data.coords).each(function() {
                    var latlng = new GLatLng(this.latitude, this.longitude, this.zoom_level);
                    var marker = new GMarker(latlng);
                    marker.bindInfoWindowHtml(this.infoString, {maxWidth:225});
                    markers.push(marker);
                });

                mgr.clearMarkers();
                mgr.refresh();
                mgr.addMarkers(markers, 1);

                if(markers.length != 1) {
                    $("p.aantalAccommodaties").html(markers.length + ' hotels gevonden');
                } else {
                    $("p.aantalAccommodaties").html('1 hotel gevonden');
                }

                mgr.refresh();
            });
        }

        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map_canvas"));
            map.setCenter(new GLatLng(latitude, longitude), zoomlevel);
            map.setUIToDefault();
            map.disableScrollWheelZoom();
            mgr = new MarkerManager(map, 1);
            addMarkers($("#themaform :checked"));
        }

        $("#themaform input[type=checkbox]").click(function(event){addMarkers($("#themaform :checked")); return true});
    }
})(jQuery);

;(function($) {
    $.fn.rondreizenMaps = function(latitude, longitude, zoomlevel, markers) {
        var map;
        var mgr;
        var positions = new Array();
        var line = new Array();
        var dir = new Array();
        var afstand = new Array();

        window.onunload = function() { GUnload(); }

        if (GBrowserIsCompatible()) {

            map = new GMap2(document.getElementById("map_canvas"));

            // Map initialiseren.
            map.setCenter(new GLatLng(latitude, longitude), zoomlevel);
            map.setUIToDefault();
            map.disableScrollWheelZoom();

            // Markers toevoegen.
            mgr = new MarkerManager(map, 1);
            mgr.addMarkers(markers.reverse(), 1);
            mgr.refresh();
        }
    }
})(jQuery);

;(function($) {
    $.fn.hotelMaps = function(latitude, longitude, zoomlevel) {
        var map;
        var mgr;
        var markers = new Array();

        window.onunload = function() { GUnload(); }

        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map_canvas"));
            var latlng = new GLatLng(latitude, longitude);
            map.setCenter(latlng, zoomlevel);
            map.setUIToDefault();
            map.disableScrollWheelZoom();

            mgr = new MarkerManager(map, 1);

            var marker = new GMarker(latlng);
            markers.push(marker);
            mgr.addMarkers(markers, 1);
            mgr.refresh();
        }
    }
})(jQuery);

;(function($) {
    $.fn.rondreisMaps = function(latitude, longitude, zoomlevel, markers) {
        var map;
        var mgr;
        var positions = new Array();
        var line = new Array();
        var dir = new Array();
        var afstand = new Array();

        window.onunload = function() { GUnload(); }

        if (GBrowserIsCompatible()) {

            map = new GMap2(document.getElementById("map_canvas"));

            // Map initialiseren.
            map.setCenter(new GLatLng(latitude, longitude), zoomlevel);
            map.setUIToDefault();
            map.disableScrollWheelZoom();

            // Posities markers in array gooien.
            for (var i in markers) {
                positions[i] = markers[i].getLatLng();
            }

            for (var i in positions) {
                if (i != (positions.length-1)) {
                    dir[i] = new GDirections();
                    var pos = new Array(positions[i], positions[parseInt(i)+1]);
                    dir[i].loadFromWaypoints(pos, {getPolyline: true});

                    // Zodra dir geladen is polyline route tekenen.
                    GEvent.addListener(dir[i], "load", function(event) {
                        line[i] = this.getPolyline();

                        var tmp = this;
                        GEvent.addListener(line[i], "mouseover", function() {
                            var tooltip_text = '<strong>Afstand:</strong> '+parseInt(this.getLength()/1000)+' km<br /><strong>Reistijd:</strong> '+tmp.getDuration().html;
                            this.overlay = new MapTooltip(this, tooltip_text);
                            map.addOverlay(this.overlay);
                        });

                        GEvent.addListener(line[i], "mouseout", function() {
                            map.removeOverlay(this.overlay);
                        });

                        map.addOverlay(line[i]);
                    });
                }
            }
            
            // Markers toevoegen.
            mgr = new MarkerManager(map, 1);
            mgr.addMarkers(markers.reverse(), 1);
            mgr.refresh();
        }
    }
})(jQuery);