﻿var markersArray = [];
var marker = null;
var searchMarker = null;
var MarkerID = "";
var DeletedItemTemplate;
var geoFailedId = null;
var geoFailedMarkerName = null;
var geoFailedControl = null;

var markersCollected = false;
var latLngBounds;

var markerTypeArgs = null;

//var webServiceUrl = "http://localhost:55629/Data/Services/MagicMapService.asmx";
var webServiceUrl = "http://karta-magichouse.videmar.se/Data/Services/MagicMapService.asmx";

/* Swedish markers */
var markerIcon1 = "/images/googlemaps/markers/sales.png";
var markerIcon2 = "/images/googlemaps/markers/service.png";
var markerIcon3 = "/images/googlemaps/markers/installation.png";
var markerIcon4 = "/images/googlemaps/markers/show.png";

var markerIcon12 = "/images/googlemaps/markers/sales-service.png";
var markerIcon13 = "/images/googlemaps/markers/sales-installation.png";
var markerIcon14 = "/images/googlemaps/markers/sales-show.png";
var markerIcon23 = "/images/googlemaps/markers/service-installation.png";
var markerIcon24 = "/images/googlemaps/markers/service-show.png";
var markerIcon34 = "/images/googlemaps/markers/insallation-show.png";

var markerIcon123 = "/images/googlemaps/markers/sales-service-installation.png";
var markerIcon134 = "/images/googlemaps/markers/sales-installation-show.png";
var markerIcon234 = "/images/googlemaps/markers/service-installation.png";
var markerIcon124 = "/images/googlemaps/markers/sales-service-show.png";

var markerIcon1234 = "/images/googlemaps/markers/sales-service-installation-show.png";

/* Finnish markers */
var markerIcon5 = "/images/googlemaps/markers/sales.png";
var markerIcon6 = "/images/googlemaps/markers/service.png";
var markerIcon7 = "/images/googlemaps/markers/installation.png";
var markerIcon8 = "/images/googlemaps/markers/show.png";

var markerIcon56 = "/images/googlemaps/markers/sales-service.png";
var markerIcon57 = "/images/googlemaps/markers/sales-installation.png";
var markerIcon58 = "/images/googlemaps/markers/sales-show.png";
var markerIcon67 = "/images/googlemaps/markers/service-installation.png";
var markerIcon68 = "/images/googlemaps/markers/service-show.png";
var markerIcon78 = "/images/googlemaps/markers/insallation-show.png";

var markerIcon567 = "/images/googlemaps/markers/sales-service-installation.png";
var markerIcon578 = "/images/googlemaps/markers/sales-installation-show.png";
var markerIcon678 = "/images/googlemaps/markers/service-installation.png";
var markerIcon568 = "/images/googlemaps/markers/sales-service-show.png";

var markerIcon5678 = "/images/googlemaps/markers/sales-service-installation-show.png";

$.jmsajaxurl = function (options) {
    var url = options.url;
    url += "/" + options.method;
    if (options.data) {
        var data = ""; for (var i in options.data) {
            if (data != "")
                data += "&"; data += i + "=" +
                 msJSON.stringify(options.data[i]);
        }
        url += "?" + data; data = null; options.data = "{}";
    }
    return url;
};

$(document).ready(function () {
    latLngBounds = new google.maps.LatLngBounds();
    DeletedItemTemplate = $("#deletedMarkerContents .Template").eq(0).detach();

    myLatlng = new google.maps.LatLng(startLat, startLong);
    var myOptions = {
        zoom: startZoom,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    $(".FilterLayers").live("click", function () {
        filterLayers();
    });

    $("#txtSearch").live("keyup", function () {

        if ($(this).val().length > 1)
            doSearch($(this).val());
        else {
            $("#SearchResult").html("");
            $("#SearchResult").hide(0);
        }
    });

    $("#searchDatabase").live("click", function () {
        $("#SearchResult").html("");
        if ($("#txtSearch").val().length > 1)
            doSearch($("#txtSearch").val());
    });

    $('#drpFilterRegions').change(function () {
        filterLayers();
    });

    if (showDirectly == true) {
        $(".ShowMap").hide();
        $(".CanvasWrapper").show(0);
        $(".CanvasBg").show(0);
        drawMap(null);
    }

    $(".ShowMap").live("click", function () {
        $(".CanvasWrapper").show(500, function () {
            $(".CanvasBg").show(0);
            drawMap(null);
        });
    });

    $(".Banner").live("click", function () {
        window.location = listLink;
    });

    $("#closeMap").live("click", function () {
        $(".CanvasWrapper").hide(500);
        $(".CanvasBg").hide(0);
    });

    $("#closeDetails").live("click", function () {
        $(".MarkerDetails").hide(500);
    });

    $(".CanvasBg").live("click", function () {
        $(".CanvasWrapper").hide(500);
        $(".CanvasBg").hide(0);
    });

    $(".DatabaseMarkerItem").live("click", function () {
        $("#SearchResult").hide(0);
        MarkerID = $(this).attr("id").replace("search_", "");
        openMarkerDetails(MarkerID, true);
    });

    $(document).click(function () {
        $("#SearchResult").hide(0);
    });

    $('.propertyItemCategory').hide(0);

    $("#txtSearch").val('');
    addMapWatermark();

    if (defaultMarker != 0) {
        $(".CanvasWrapper").show(500, function () {
            $(".CanvasBg").show(0);

            if (markersCollected == false) {
                getMarkerItems();
            }
            else {
                google.maps.event.trigger(map, 'resize');
                map.setZoom(map.getZoom());
            }
        });
    }

    $(".ShowMapLink").live("click", function () {
        MarkerID = $(this).attr("class").replace("ShowMapLink ShowID_", "");
        $(".CanvasWrapper").show(500, function () {
            $(".CanvasBg").show(0);
            drawMap(MarkerID);
            //openMarkerDetails(MarkerID, true);
        });
    });
});

function drawMap(MarkerID) {
    if (markersCollected == false) {
        getMarkerItems(MarkerID);
    }
    else {
        google.maps.event.trigger(map, 'resize');
        map.setZoom(map.getZoom());

        if (MarkerID != null) {
            openMarkerDetails(MarkerID, true);
        }
    }
}

function getMarkerItems() {
    markersCollected = true;

    var url = $.jmsajaxurl({
        url: webServiceUrl,
        method: "GetMarkerItems",
        data: { LanguageID: languageId }
    });

    $.ajax({
        cache: false,
        dataType: "jsonp",
        success: function (data) { drawJsonMarkers(data, true, MarkerID); },
        url: url + "&format=json"
    });
}

function drawJsonMarkers(data, setBounds, MarkerID) {
    if (setBounds == false) {
        clearOverlays();
    }

    if (data != null) {

        $(data.d).each(function (index, value) {

            var latInt = parseFloat(value.Latitude);
            var longInt = parseFloat(value.Longitude);
            var myLatlng = new google.maps.LatLng(latInt, longInt);

            latLngBounds.extend(myLatlng);

            var name = 'Inget namn';
            if (value.Organisation != null)
                name = value.Organisation;

            placeMarkerFromJson(myLatlng, name, value.ID, markerIcon1);
        });
    }

    google.maps.event.trigger(map, 'resize');

    if (setBounds == true && MarkerID == 0) {
        map.setZoom(map.getZoom());
        map.fitBounds(latLngBounds);
    }
    else if (MarkerID != 0) {
        openMarkerDetails(MarkerID, true);
    }

}

function placeMarkerFromJson(location, name, markerListId, customImage) {
    marker = new google.maps.Marker({
        position: location,
        title: name,
        icon: customImage,
        map: map
    });

    google.maps.event.addListener(marker, 'click', function () {
        map.panTo(this.position);
        openMarkerDetails(markerListId, false);
    });

    markersArray.push(marker);
}

function openMarkerDetails(markerId, setZoom) {
    var url = $.jmsajaxurl({
        url: webServiceUrl,
        method: "OpenMarkerDetails",
        data: { MarkerId: markerId }
    });

    $.ajax({
        cache: false,
        dataType: "jsonp",
        success: function (data) { markerDetailsSucceeded(data.d, true); },
        url: url + "&format=json"
    });
}

function markerDetailsSucceeded(data, setZoom) {

    $("#markerListName").val("");
    $("#InfoWebsiteEmail").hide(0);
    $(".propertyItemCategory").hide(0);
    $(".propertyItemContent.Website").html("");
    $(".propertyItemContent.Email").html("");

    $('.inputItem').each(function (index2) {
        $(this).text("");
    });

    if (data != null) {
        $("#hdnMarkerListId").val(data.ID);

        MarkerID = data.ID;

        //Input values

        if (data.Organisation != null) {
            $("#InfoOrganisation").show(0);
            $("#txtOrganisation").text(data.Organisation);
        }
        else {
            $("#InfoOrganisation").hide(0);
        }

        if (data.Adress != null) {
            $("#InfoAdress").show(0);
            $("#txtAdress").text(data.Adress);
        }
        else {
            $("#InfoAdress").hide(0);
        }

        if (data.PostalCode != null) {
            $("#InfoPostalCode").show(0);
            $("#txtPostalCode").text(data.PostalCode);
        }
        else {
            $("#InfoPostalCode").hide(0);
        }

        if (data.RegionName != null) {
            $("#InfoRegionName").show(0);
            $("#txtRegionName").text(data.RegionName);
        }
        else {
            $("#InfoRegionName").hide(0);
        }

        if (data.Phone != null) {
            $("#InfoPhone").show(0);
            $("#txtPhone").text(data.Phone);
        }
        else {
            $("#InfoPhone").hide(0);
        }

        if (data.Website == null && data.Email == null) {
            $("#InfoWebsiteEmail").hide(0);
        }
        else {
            $("#InfoWebsiteEmail").show(0);
        }

        if (data.Website != null) {
            $(".propertyItemContent.Website").show(0);
            $(".propertyItemContent.Website").html("<a target=\"_blank\" href=\"" + data.Website + "\">" + data.Website + "</a>");
        }
        else {
            $(".propertyItemContent.Website").hide(0);
        }

        if (data.Email != null) {
            $(".propertyItemContent.Email").show(0);
            $(".propertyItemContent.Email").html("<a href=\"mailto:" + data.Email + "\">" + data.Email + "</a>");
        }
        else {
            $(".propertyItemContent.Email").hide(0);
        }

        if (data.AreaName != null) {
            $("#areaNameHeader").show(0);
            $("#areaNameHeader").html(data.AreaName);
        }
        else {
            $("#areaNameHeader").hide(0);
        }

        if (data.Description != null) {
            $("#InfoDescription").show(0);
            $("#txtDescription").html(data.Description);
        }
        else {
            $("#InfoDescription").hide(0);
        }
        /* tinyMCE.get("txtDescription").setContent(result.Description); */

        //Categories
        $(data.Marker2MarkerTypes).each(function (index, value) {
            var label = ".Categories .MarkerType" + data.MarkerTypeId;
            var labelFound = false;

            $(".hdnCategoryId").each(function (index2, value2) {
                if ($(this).val() == value.MarkerTypeId) {
                    $(label).show(0);
                    labelFound = true;
                }
            });

            if (labelFound == false) {
                $(label).hide(0);
            }
        });

        if (setZoom) {
            var location = new google.maps.LatLng(data.Latitude, data.Longitude);
            map.setCenter(location);
            map.setZoom(16);
        }

        //Show details
        $(".MarkerDetails").show("fast");
    }
}

function epicfail(error) {
    alert(error);
}

function clearOverlays() {
    if (markersArray) {
        for (i in markersArray) {
            markersArray[i].setMap(null);
        }
    }
}

function filterLayers() {
    $("#SearchResult").html("");

    clearOverlays();

    var regionId = "0";

    if ($("#drpFilterRegions").val() != "0") {
        regionId = $("#drpFilterRegions").val();
    }

    var args = '{';
    args += '"LanguageId" : "' + languageId + '",';
    args += '"RegionID" : "' + regionId + '"';
    args += '}';

    var markerCounter = 0;
    markerTypeArgs = "{";
    $('input:checked.FilterLayers').each(function (index) {
        var markerTypeId = $(this).parent().find("input:hidden.hdnMarkerTypeId").val();

        markerTypeArgs += "\"" + markerCounter + "\" : \"" + markerTypeId + "\",";
        markerCounter++;
    });
    if (markerCounter > 0) {
        markerTypeArgs = markerTypeArgs.slice(0, -1);
    }
    markerTypeArgs += "}";

    var url = $.jmsajaxurl({
        url: webServiceUrl,
        method: "FilterMarkerItems",
        data: { Args: args, MarkerTypeArgs: markerTypeArgs }
    });

    $.ajax({
        cache: false,
        dataType: "jsonp",
        success: function (data) { drawJsonMarkers(data, true, null); },
        url: url + "&format=json"
    });
}

function doSearch(searchValue) {

    var regionId = "0";

    if ($("#drpFilterRegions").val() != "0") {
        regionId = $("#drpFilterRegions").val();
    }

    var args = '{';
    args += '"searchValue" : "' + searchValue + '",';
    args += '"LanguageId" : "' + languageId + '",';
    args += '"RegionID" : "' + regionId + '"';
    args += '}';

    var markerCounter = 0;
    markerTypeArgs = "{";
    $('input:checked.FilterLayers').each(function (index) {
        var markerTypeId = $(this).parent().find("input:hidden.hdnMarkerTypeId").val();

        markerTypeArgs += "\"" + markerCounter + "\" : \"" + markerTypeId + "\",";
        markerCounter++;
    });
    if (markerCounter > 0) {
        markerTypeArgs = markerTypeArgs.slice(0, -1);
    }
    markerTypeArgs += "}";

    var url = $.jmsajaxurl({
        url: webServiceUrl,
        method: "SearchMarkers",
        data: { Args: args, MarkerTypeArgs: markerTypeArgs }
    });

    $.ajax({
        cache: false,
        dataType: "jsonp",
        success: function (data) { printSearchResult(data, true); },
        url: url + "&format=json"
    });

    //    $.ajax({
    //        type: "POST",
    //        url: webServiceUrl + "SearchMarkers",
    //        data: "{ 'args': '" + args + "', 'markerTypeArgs': '" + markerTypeArgs + "' }",
    //        contentType: "application/json; charset=utf-8",
    //        dataType: "json",
    //        success: function (msg) { printSearchResult(msg.d); },
    //        error: epicfail
    //    });
}

function printSearchResult(data) {
    if (data != null) {
        var htmlToPrint = "";
        if (data.d.length > 0) {
            $.each(data.d, function (index, value) {
                htmlToPrint += "<div id=\"search_" + value.ID + "\" class=\"SearchItem DatabaseMarkerItem\"><span class=\"Name\">" + value.Organisation + "</span><br/><span class=\"PostalCode\">" + value.PostalCode + "</span><span class=\"RegionName\">" + value.RegionName + "</span></div>";
            });
            $("#SearchResult").html(htmlToPrint);
            $("#SearchResult").show(500);
        }
        else {
            $("#SearchResult").html("");
            $("#SearchResult").hide(0);
        }

    }
    else {
        $("#SearchResult").html("");
        $("#SearchResult").hide(0);
    }
}

function getMarkerImage(markerVariant) {
    switch (markerVariant) {
        case "markerIcon1":
            return markerIcon1;
            break;
        case "markerIcon2":
            return markerIcon2;
            break;
        case "markerIcon3":
            return markerIcon3;
            break;
        case "markerIcon4":
            return markerIcon4;
            break;
        case "markerIcon12":
            return markerIcon12;
            break;
        case "markerIcon13":
            return markerIcon13;
            break;
        case "markerIcon14":
            return markerIcon14;
            break;
        case "markerIcon23":
            return markerIcon23;
            break;
        case "markerIcon24":
            return markerIcon24;
            break;
        case "markerIcon34":
            return markerIcon34;
            break;
        case "markerIcon123":
            return markerIcon123;
            break;
        case "markerIcon134":
            return markerIcon134;
            break;
        case "markerIcon234":
            return markerIcon234;
            break;
        case "markerIcon134":
            return markerIcon134;
            break;
        case "markerIcon124":
            return markerIcon124;
            break;
        case "markerIcon1234":
            return markerIcon1234;
            break;
        //Finnish    
        case "markerIcon5":
            return markerIcon5;
            break;
        case "markerIcon6":
            return markerIcon6;
            break;
        case "markerIcon7":
            return markerIcon7;
            break;
        case "markerIcon8":
            return markerIcon8;
            break;
        case "markerIcon56":
            return markerIcon56;
            break;
        case "markerIcon57":
            return markerIcon57;
            break;
        case "markerIcon58":
            return markerIcon58;
            break;
        case "markerIcon67":
            return markerIcon67;
            break;
        case "markerIcon68":
            return markerIcon68;
            break;
        case "markerIcon78":
            return markerIcon78;
            break;
        case "markerIcon567":
            return markerIcon567;
            break;
        case "markerIcon578":
            return markerIcon578;
            break;
        case "markerIcon678":
            return markerIcon678;
            break;
        case "markerIcon5678":
            return markerIcon5678;
            break;
        default:
            return markerIcon1;
            break;
    }
}

function addMapWatermark() {
    $('#txtSearch').watermark(waterMarkSearch, { className: 'InputWatermark' });
}
