﻿$(document).ready(function() {
    var jsGMap = $('#activityMap').jsGMap({ width: 952, height: 568, key: "ABQIAAAAG3kYBPbezSTBp2fn_M44ZBQuddl80utwth5h5UowCLpJf_v5YxQYPlmh_5AhsGUeCF19aXR-ehpPFQ" });
    jsGMap.loadWayPoints("/layouts/hjertestarter.dk/jsGoogleMap/mapdata.aspx");

    $(".btnSearch").click(function() {

        if ($("#activityMap .resultAsList").css("display") != "none") {
            $("#activityMap .resultAsList").animate({ top: 539, height: 29 }, 300, function() {
                $("#activityMap .resultAsList .button").height(29);
                $(this).animate({ opacity: 0 }, 300, function() { $(this).hide(); });
            });
        }

        search($(".txtSearchQueryAddress").val(), 1);
        //var searchResults = jsGMap.searchGeocoder($(".txtSearchQueryAddress").val(), results);
    });

    function search(address, page) {

        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/WebService/AdresseService.asmx/Find",
            data: "{address: '" + address + "', page: " + page + "}",
            dataType: "json",
            success: function(data) {
                var streets = [];
                if (data.d.Streets) {
                    $.each(data.d.Streets, function(i, street) {
                        streets.push(street);
                    });
                }

                $(".searchHandlers").html("");
                $(".searchResults").html("");
                $("#activityMap .searchBackground").height($("#activityMap .search").height());

                if (streets.length == 0) {
                    //          $(".searchResults").html("<div class='text'>Der kan ikke findes nogen adresse ud fra de oplysninger, der er indtastet. Prøv igen.</div>");
                    //          $("#activityMap .searchBackground").height($("#activityMap .search").height());
                    searchGoogle($(".txtSearchQueryAddress").val(), 1, data.d.PageSize);
                    //   var searchResults = jsGMap.searchGeocoder(, results);
                    return;
                }

                if (streets.length == 1 && data.d.Page == 1) {

                    if (streets[0].LatLng) {
                        jsGMap.showNearest(streets[0].LatLng);
                    } else {

                        $.ajax({
                            type: "POST",
                            contentType: "application/json; charset=utf-8",
                            url: "/WebService/AdresseService.asmx/GetLatLng",
                            data: "{streetName: '" + streets[0].StreetName + "', postCodeIdentifier: '" + streets[0].PostCodeIdentifier + "'}",
                            dataType: "json",
                            success: function(data) {
                                jsGMap.showNearest(data.d);
                            }
                        });
                    }
                } else {
                    $(".searchResults").html("<div class='text'><strong  style='padding-left: 20px; font-weight: normal;'>Mener du:</strong></div>");
                    var searchResults = $(".searchResults div");
                    $.each(streets, function(i, street) {
                        searchResults.append($('<div>').addClass('searchResult').append(
              $('<a>').css('cursor', 'pointer').text(street.StreetName + ", " + street.PostCodeIdentifier + " " + street.DistrictName).click(function() {
                  $(".txtSearchQueryAddress").val(street.StreetName + ", " + street.PostCodeIdentifier + " " + street.DistrictName)
                  $(".searchResults").html("");
                  $(".searchHandlers").html("");
                  $("#activityMap .searchBackground").height($("#activityMap .search").height());
                  $.ajax({
                      type: "POST",
                      contentType: "application/json; charset=utf-8",
                      url: "/WebService/AdresseService.asmx/GetLatLng",
                      data: "{streetName: '" + street.StreetName + "', postCodeIdentifier: '" + street.PostCodeIdentifier + "'}",
                      dataType: "json",
                      success: function(data) {
                          jsGMap.showNearest(data.d);
                      }
                  });
              })));
                    });

                    if (data.d.TotalPages > 1) {

                        $('.searchHandlers').append($('<div>').addClass('searchTopSpacer'));

                        $('.searchHandlers')
                        .append($('<div>').addClass('searchPageText').text('Side ' + data.d.Page + ' af ' + data.d.TotalPages + '.'))
                        .append($('<div>').addClass('searchResText').text(data.d.TotalCount + ' resultater.'));

                        if (data.d.Page == data.d.TotalPages) {
                            $('.searchHandlers').append($('<a>').addClass('nextDisabledButton').text('Næste'));
                        }
                        else {
                            $('.searchHandlers').append($('<a>').attr('href', '#').addClass('nextButton').text('Næste').click(function() {
                                if (data.d.Page < data.d.TotalPages) {
                                    search(address, data.d.Page + 1);
                                }
                            }));
                        }

                        if (data.d.Page == 1) {
                            $('.searchHandlers').append($('<a>').addClass('prevDisabledButton').text('Forrige'));
                        }
                        else {
                            $('.searchHandlers').append($('<a>').attr('href', '#').addClass('prevButton').text('Forrige').click(function() {
                                if (data.d.Page > 1) {
                                    search(address, data.d.Page - 1);
                                }
                            }));
                        }
                        $('.searchHandlers').append($('<div>').addClass('searchBottomSpacer'));
                    }

                    $("#activityMap .searchBackground").height($("#activityMap .search").height());
                }
            }
        });
    }

    $("#activityMap .searchBackground").height($("#activityMap .search").height());

    function searchGoogle(address, page, pagesize) {



        jsGMap.searchGeocoder(address, results);
        function results(response) {

            if (!response || response.Status.code != 200) {
            } else {
                var placemarks = [];
                $.each(response.Placemark, function(i, placemark) {
                    if (placemark.AddressDetails.Country != undefined)
                        if (placemark.AddressDetails.Country.CountryNameCode == "DK")
                        placemarks.push(placemark);
                });

                $(".searchResults").html("");
                $(".searchHandlers").html("");
                $('.searchHandlers').append($('<div>').addClass('searchTopSpacer'));


                if (placemarks.length == 0) {
                    $(".searchResults").html("<div class='textInfo'>Der kan ikke findes nogen adresse ud fra de oplysninger, der er indtastet. Prøv igen.</div>");
                    $("#activityMap .searchBackground").height($("#activityMap .search").height());
                    return;
                }

                if (placemarks.length <= 1) {
                    jsGMap.showNearest(placemarks[0]);
                } else {
                    var pages = Math.ceil(placemarks.length / pagesize);
                    var total = placemarks.length;
                    var placemarksholder = [];

                    for (var i = 0; i < 7; i++) {
                        var u = i + ((page - 1) * pagesize);
                        if (placemarks[u]) {
                            placemarksholder.push(placemarks[u]);
                        }

                    }
                    placemarks = placemarksholder;


                    $('.searchHandlers')
                        .append($('<div>').addClass('searchPageText').text('Side ' + page + ' af ' + pages + '.'))
                        .append($('<div>').addClass('searchResText').text(total + ' resultater.'));

                    if (page == pages) {
                        $('.searchHandlers').append($('<a>').addClass('nextDisabledButton').text('Næste'));
                    }
                    else {
                        $('.searchHandlers').append($('<a>').attr('href', '#').addClass('nextButton').text('Næste').click(function() {
                        if (page < pages) {
                                searchGoogle(address, page + 1, pagesize);
                            }
                        }));
                    }

                    if (page == 1) {
                        $('.searchHandlers').append($('<a>').addClass('prevDisabledButton').text('Forrige'));
                    }
                    else {
                        $('.searchHandlers').append($('<a>').attr('href', '#').addClass('prevButton').text('Forrige').click(function() {
                            if (page > 1) {
                                searchGoogle(address, page - 1, pagesize);
                            }
                        }));
                    }
                    $('.searchHandlers').append($('<div>').addClass('searchBottomSpacer'));

                    $(".searchResults").html("<div class='text'><strong  style='padding-left: 20px; font-weight: normal;'>Mener du:</strong></div>");
                    
                    var searchResults = $(".searchResults div");
                    $.each(placemarks, function(i, placemark) {
                        searchResults.append(String.format("<div class=\"searchResult searchResult{0}\"><a href=\"#\">{1}</a>", i + 1, placemark.address.replace("", "").replace(" Municipality", "").replace(", Danmark", "").replace(", Denmark", "")));
                        $(".searchResult" + (i + 1)).click(function() {
                            $(".searchResults").html("");
                            $(".searchHandlers").html("");
                            $(".txtSearchQueryAddress").val(placemark.address.replace("", "").replace(" Municipality", "").replace(", Danmark", "").replace(", Denmark", ""))
                            $("#activityMap .searchBackground").height($("#activityMap .search").height()); jsGMap.showNearest(placemark);
                        });
                    });
                    $("#activityMap .searchBackground").height($("#activityMap .search").height());
                }
            }
        }
    }



    String.format = function(text) {
        if (arguments.length <= 1) {
            return text;
        }
        var tokenCount = arguments.length - 2;
        for (var token = 0; token <= tokenCount; token++) {
            text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token + 1]);
        }
        return text;
    };

    $(".search .openclose").live("click", function() {
        //  var $this = $(this).animate({ opacity: 0 }, 200);
        var sc = $(".searchContent")
        if (sc.css("display") == "none") {

            sc.css({ display: "block" });
            var h = sc.height();
            sc.css("height", 0);
            $(".searchContent").animate({ height: h }, 200, function() { sc.css("height", "auto"); $(".search .openclose span").text("Luk"); });

            $("#activityMap .searchBackground").animate({ height: $("#activityMap .search").outerHeight() + h - 2 }, 200);
        } else {
            $("#activityMap .searchBackground").animate({ height: $("#activityMap .search").outerHeight() - $(".searchContent").height() - 2 }, 200);
            $(".searchContent").animate({ height: 0 }, 200, function() { sc.css({ "height": "auto", display: "none" }); $(".search .openclose span").text("Fold ud"); });
        }
        return false;
    });

    $(".infoHeaderMenu a").live("click", function() {
        $(".infoContent .infoContentContent").hide();
        $(".infoContent " + $(this).attr("href")).show();
        $(".info .infoHeaderMenu li").removeClass("active");
        $(".info .infoHeaderMenu li div").hide()
        $(this).siblings("div").css({ width: $(this).parents("li").width() }).show();
        $(this).parents("li").addClass("active");
        return false;
    });

    $(".infoHeaderMenu a").live("mouseover", function() {
        $(this).parents("li").addClass("hover");
    });

    $(".infoHeaderMenu a").live("mouseout", function() {
        $(this).parents("li").removeClass("hover");
    });
});
