$(function(){
    $('#searchLocationButton').click(function() {
        showAddress($("#addressIn").val());
    });

    $("#star-select").stars({
        inputType: "select",
        captionEl: $("#stars-cap")
    });

    $("#printlist_tooltip img[title]").tooltip();
});



function loadMarkers() {
    showLoadingBar();
    var json = { "action" : "get_all_campgrounds"};
    sendAPIRequest(json, "cacheMarkers");
}


function cacheMarkers(response) {
    var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "/pic/icon/campingplatz_marker.png";
    markerObjects = new Array();
    campgroundObjects = response["campgrounds"];

    for (var i = 0; i < campgroundObjects.length; i++) {
            var campgroundId = campgroundObjects[i]["campground_id"];
            var stars = campgroundObjects[i]["stars"];
            var nameUTF8 = campgroundObjects[i]["name_utf8"];
            var description = campgroundObjects[i]["description"];
            var hutAvailable = campgroundObjects[i]["hut_available"];
            var cabinAvailable = campgroundObjects[i]["cabin_available"];
            var xCoord = campgroundObjects[i]["x_coord"];
            var yCoord = campgroundObjects[i]["y_coord"];

            markerObjects[i] = new Object();
            markerObjects[i]["campgroundId"] = campgroundId;
            markerObjects[i]["stars"] = stars;
            markerObjects[i]["marker"] = getMarker(new GLatLng(xCoord,yCoord), {title:nameUTF8, icon:blueIcon}, description);
            markerObjects[i]["hutAvailable"] = hutAvailable;
            markerObjects[i]["cabinAvailable"] = cabinAvailable;
    }

    refreshMap();
    hideLoadingBar();
}


function getMarker(latlng, markerOptions, description) {
    var marker = new GMarker(latlng, markerOptions);
    GEvent.addListener(marker, "click", function() { map.openInfoWindowHtml(latlng, description); });
    return marker;
}


function refreshMap() {
    document.getElementById("refreshButton").disabled = true;
    markerPosition = 0;
    var hutAvailable = null;
    var cabinAvailable = null;

    if (document.getElementById("hutAvailable").checked == true) {
        hutAvailable = 1;
    }

    if (document.getElementById("cabinAvailable").checked == true) {
        cabinAvailable = 1;
    }

    if (markerCluster != null) {
        markerCluster.clearMarkers();
    }

    refreshMarkerArray(hutAvailable, cabinAvailable);
    var mcOptions = { gridSize: 30, maxZoom: 15};
    markerCluster = new MarkerClusterer(map, markerArray, mcOptions);
}


function refreshMarkerArray(hutAvailable, cabinAvailable) {
    campingNumber = 0;
    markerArray = [];

    var stars = $("#star-select").data("stars").options.value;

    // send event stat if filter used
    if (hutAvailable || cabinAvailable || stars != null) {
        var json = { "action" : "stat_add_event",
                     "event"  : "hutav-" + hutAvailable + "-cabinav-" + cabinAvailable + "-stars-" + stars};
        sendAPIRequest(json, null);
    }

    for (var i = 0; i < markerObjects.length; i++) {
            var marker = markerObjects[i]["marker"];
            var showMarker = true;

            // hut available
            if (hutAvailable != null) {
                var thisHutAvailable = markerObjects[i]["hutAvailable"];

                if (! hutAvailable == thisHutAvailable) {
                        showMarker = false;
                }
            }

            // cabin available
            if (cabinAvailable != null) {
                var thisCabinAvailable = markerObjects[i]["cabinAvailable"];

                if (! cabinAvailable == thisCabinAvailable) {
                        showMarker = false;
                }
            }

            // stars
            if (stars != null) {
                var thisStars = markerObjects[i]["stars"];

                if (stars > thisStars) {
                        showMarker = false;
                }
            }


            if (showMarker) {
                markerArray.push(marker);
                campingNumber++;
            }
    }

    document.getElementById("campingNumber").innerHTML = campingNumber;
    document.getElementById("refreshButton").disabled = false;
    saveCMapSettings();
}

function showAddress(address) {
    var json = { "action" : "stat_add_cmap_location_search",
                 "location"  : address};
    sendAPIRequest(json, null);

    if (geocoder) {
        geocoder.getLatLng("Norwegen, " + address,
            function(point) {
                if (!point) {
                    alert("Der Ort '" + address + "' wurde nicht gefunden");
                }
                else {
                    map.setCenter(point, 10);
                }
             }
        );
    }
}

function saveCMapSettings() {
    var hutAvailable = null;
    var cabinAvailable = null;

    if (document.getElementById("hutAvailable").checked == true) {
        hutAvailable = 1;
    }

    if (document.getElementById("cabinAvailable").checked == true) {
        cabinAvailable = 1;
    }

    var stars = $("#star-select").data("stars").options.value;

    var json = { "action" : "save_cmap_settings",
                 "lat"  : map.getCenter().lat(),
                 "lng"  : map.getCenter().lng(),
                 "zoom"  : map.getZoom(),
                 "hut_available"  : hutAvailable,
                 "cabin_available"  : cabinAvailable,
                 "stars"  : stars
               };
    sendAPIRequest(json, null);
}

function addSelection2Printlist() {
    var stars = $("#star-select").data("stars").options.value;
    var hutAvailable = null;
    var cabinAvailable = null;

    if (document.getElementById("hutAvailable").checked == true) {
        hutAvailable = 1;
    }

    if (document.getElementById("cabinAvailable").checked == true) {
        cabinAvailable = 1;
    }

    var json = {"action" : "add_printlist_entry"};
    var campgroundIds = [];

    for (var i = 0; i < markerObjects.length; i++) {
            var campgroundId = markerObjects[i]["campgroundId"];
            var addCampground = true;

            // hut available
            if (hutAvailable != null) {
                var thisHutAvailable = markerObjects[i]["hutAvailable"];

                if (! hutAvailable == thisHutAvailable) {
                        addCampground = false;
                }
            }

            // cabin available
            if (cabinAvailable != null) {
                var thisCabinAvailable = markerObjects[i]["cabinAvailable"];

                if (! cabinAvailable == thisCabinAvailable) {
                        addCampground = false;
                }
            }

            // stars
            if (stars != null) {
                var thisStars = markerObjects[i]["stars"];

                if (stars > thisStars) {
                        addCampground = false;
                }
            }


            if (addCampground) {
                campgroundIds.push(campgroundId);
            }
    }

    if (campgroundIds != null) {
        json["campground_id"] = campgroundIds;
    }

    showLoadingBar();
    sendAPIRequest(json, "addSelection2PrintlistResponse");
}

function addSelection2PrintlistResponse(response) {
    hideLoadingBar();
    var status = response["status"]

    if (status == 0) {
        location.href = "/camping.katalog.html";
    }
    else {
        alert(response["message"]);
    }
}