﻿var map, cgm, query, entries, jdata, ml, viewAll = false;

$(document).ready(function () {
    repos();
    mapInit();
});

function repos() {
    var legendTop = $("#map_canvas").offset().top + 6;
    var legendLeft = $("#map_canvas").offset().left + $("#map_canvas").width() - $("#layerControl").width() + 0;
    $("#layerControl").css("top", legendTop + "px").css("left", legendLeft + "px");

    var loadingTop = $("#map_canvas").offset().top + $("#map_canvas").height() / 2;
    var loadingLeft = $("#map_canvas").offset().left + $("#map_canvas").width() / 2 - $("#loading").width() / 2;
    $("#loading").css("top", loadingTop + "px").css("left", loadingLeft + "px");
}

function mapInit() {
    map = new GMap2($("#map_canvas").get(0));
    map.setCenter(new GLatLng(43.01141864227728, -107.50004296885), 6);

    var mapTypePos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 10));
    map.addControl(new GMapTypeControl(), mapTypePos);

    var mapControlPos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 50));
    map.addControl(new GLargeMapControl(), mapControlPos);

    cgm = new CRGGoogleMap(map, { maxInitZoom: 13 });
    cgm.onLayersLoadStart = function () { $("#loading").show(); };
    cgm.onLayersLoadComplete = function () { $("#loading").hide(); };
    cgm.initialize();

    if (ml != undefined) {
        cgm.addLayer(ml);
    }
}

function loadMapByEntries(autoLabel, useAlpha) {
    if (entries != undefined) {
        //alert(entries);
        jdata = { 'entryIds': entries };
        ml = new MapLayer("ByEntryId", "/Webservices/MapService.svc/GetOverlayByEntryId", jdata, { visible: true, center: false, filterMb: false, cluster: false, autoLabel: autoLabel, useAlpha: useAlpha });
        setMapLayerProperties(autoLabel);
    }
}

function loadMapByQuery() {
    if (query != undefined) {
        //alert(query);
        jdata = { 'query': query };
        ml = new MapLayer("ByEntryQuery", "/WebServices/MapService.svc/GetOverlayByEntryQuery", jdata, { visible: true, center: false, filterMb: false, cluster: false });
        setMapLayerProperties(false);
    }
}

function setMapLayerProperties(autoLabel) {
    if (ml != undefined) {
        if (mapLayerIcon.image != "") {
            ml.MarkerOptions.icon = mapLayerIcon;
        }
        if (autoLabel) {
            ml.MarkerOptions.labelOffset = new GSize(-2, -32);
        }
        ml.onClick = markerClick;
    }
}

//function popupHelpBox() {
//    var closedByUser = getCookie("ClosedByUser");
//    if (closedByUser != "true") {
//        var boxPositionLeft = $("#map_canvas").position().left;
//        var boxPositionTop = $("#map_canvas").position().top
//                            + $("#map_canvas").height() - 2 //map height including border
//                            - ($("#HelpBox").height() + 10); //HelpBox height including border
//        $("#HelpBox").css("left", boxPositionLeft).css("top", boxPositionTop);
//        $("#HelpBox").show();
//    }
//}

//function closeHelpBox() {
//    $("#HelpBox").hide();
//    setCookie("ClosedByUser", "true", null, "/");
//}


/*var jdata = { 'query': 'filter=publishedstatus=2 and kindid = 111&features=(32600)', 'exclude': entries, 'geotypes': ['Marker'] };
var pts_Camping = new MapLayer("Camping", "/Webservices/MapService.svc/GetOverlayByEntryQuery", jdata, { visible: false, center: false, filterMb: true, cluster: true, minZoom: 9, group: 'pts' });
//pts_Camping.MarkerOptions = { icon: ptsIcon_Camping };
pts_Camping.ClusterMarkerOptions = { maxZoom: 14, styles: styles[0] };
pts_Camping.onMaxResults = function () { $("#tooManyResults").show(); };
pts_Camping.onLayerLoadComplete = function () { $("#tooManyResults").hide(); };
pts_Camping.onClick = markerClick;
//cgm.addLayer(pts_Camping);

//function getEventDateQuery() {
//	var ev_today = new Date();
//	var ev_enddate = new Date();
//	ev_enddate.setDate(ev_enddate.getDate() + 365);
//	var ev_todayFormat = ev_today.format("yyyy-MM-dd");
//	var ev_enddateFormat = ev_enddate.format("yyyy-MM-dd");
//	var ev_scheduleQuery = "schedule <> " + ev_todayFormat + ".." + ev_enddateFormat;
//	return ev_scheduleQuery;
//}*/


//all layers-----------------------------------------------------------
var mapLayerQueries = mapLayers = mapLayerEntryIds = {}, jdata;

$(document).ready(function () {
    $.each(mapLayerQueries, function (key, value) {
        //alert(key + ' : ' + value);
        jdata = { 'query': value };
        mapLayers[key] = new MapLayer(key, "/WebServices/MapService.svc/GetOverlayByEntryQuery", jdata, { visible: false, center: false, cluster: false });
        mapLayers[key].MarkerOptions = { icon: mapLayerIcons[key] };
        mapLayers[key].onClick = markerClick;
        cgm.addLayer(mapLayers[key]);
    });

    $.each(mapLayerEntryIds, function (key, value) {
        //alert(key + ' : ' + value);
        cgm.showLayer(value);
    });
});

function toggleDiv(image, divId) {
    $('#' + divId).toggle();
}

function toggleLayer(layerCB) {
    var checked = layerCB.attr("checked");
    var value = layerCB.parent().attr('hiddenValue');
    if (checked) {
        cgm.showLayer(value);
    }
    else {
        cgm.hideLayer(value);
    }
}


//marker functions-----------------------------------------------------------
function markerClick(o, ll, oll) {
    $("#loading").show();
    var crgmap = this;
    var mo = crgmap.findOverlay(o);
    markerClickOpenWindow(mo);
}

function markerClickOpenWindow(mo) {
    var parserType = 0;
    if (typeof (smallInfoWindow) != "undefined" && smallInfoWindow) {
        parserType = 1;
    }

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/WebServices/MapWebService.asmx/GetInfoWindowHTML",
        data: "{'entryId':" + mo.Id + ", 'parserType':" + parserType + ", 'viewAll':" + viewAll + "}",
        dataType: "text",
        success: function (data) { markerClickCallback(mo.GOverlay, cgm, data); },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("request:" + XMLHttpRequest + ", status: " + textStatus + ", error: " + errorThrown);
            //for (var property in XMLHttpRequest) {
            //    window.alert(property + ": " + XMLHttpRequest[property]);
            //}
        }
    });
}

function markerClickCallback(marker, crgmap, data) {
    marker.openInfoWindow(data, { maxWidth: 400 });
    $("#loading").hide();
}



//-------------------------------------------------------------------------------------
function openGeo(entryId) {
    //    if (!$("#ToggleMapDiv").is(':visible')) {
    //        $("#ToggleMapDiv").toggle('slow', function () {
    //            repos();
    //            $("#layerControl").fadeIn();
    //        });
    //    }
    //    var zoom = 10;
    var overlays = cgm.findOverlaysById(entryId);
    if (overlays.length > 0) {
        var mo = overlays.pop();
        //        if (cgm.GMap.getZoom() > zoom)
        //            zoom = cgm.GMap.getZoom();
        //        cgm.panToOverlay(mo, zoom);
        markerClickOpenWindow(mo);
    }
}

function layerClick() {
    if ($(this).attr("checked")) {
        cgm.showLayer($(this).attr("name"));
    } else {
        cgm.hideLayer($(this).attr("name"));

        var groupname = $(this).attr("class");
        if (groupname != "") {
            $("#" + groupname).removeAttr("checked");
        }
    }
}

function toggleGroup(chk, gname) {
    if ($(chk).attr("checked")) {
        cgm.showLayerGroup(gname);
        $(":checkbox." + gname).attr("checked", "true");
    } else {
        cgm.hideLayerGroup(gname);
        $(":checkbox." + gname).removeAttr("checked");
    }
}

function setupLayers() {
    //enableLayer("Places to Stay");
    enableLayerGroup("Places to Stay", "pts");
    enableLayer("Camping");
    enableLayer("Accommodation");

    enableLayer("Places to Dine");

    //enableLayer("Things to Do");
    enableLayerGroup("Things to Do", "ttd");
    enableLayer("ArtEntertainment");
    enableLayer("Cultural");
    enableLayer("Education");
    enableLayer("Golf");
    enableLayer("Guides");
    enableLayer("Park");

    enableLayer("Events");
    //enableLayer("Parks");
    enableLayer("Airports");
}

function enableLayer(name) {
    _enableLayer(name, cgm.isLayerEnabled(name));
}

function enableLayerGroup(name, gname) {
    _enableLayer(name, cgm.isLayerGroupEnabled(gname));
}

function _enableLayer(name, enable) {
    var chkbox = $("input[name='" + name + "']");

    if (!enable) {
        chkbox.attr("disabled", "disabled");
        chkbox.next().css("color", "Gray");
    }
    else {
        chkbox.removeAttr("disabled");
        chkbox.next().css("color", "Black");
    }
}

var layerControlVisible = true;
function toggleLayerControl() {
    if (layerControlVisible) {
        $("#layers").hide(); //, { direction: "right" });
        layerControlVisible = false;
        $("#layer-toggle img").attr("src", "/Images/Icons/map/sidebarArrowLeft.png");
        //alignLayerControl();
    }
    else {
        $("#layerControl").css("left", 0);
        $("#layers").show();
        layerControlVisible = true;
        $("#layer-toggle img").attr("src", "/Images/Icons/map/sidebarArrow.png");
        //alignLayerControl();
    }
}

function toggleMapSize() {
    var currentHeight = $("#map_canvas").css("height");
    if (currentHeight == "500px") {
        $(".pager").hide();
        $("#map-list-view").hide();

        var mapTop = $("#map_canvas").offset().top;
        var newHeight = $(window).height() - mapTop - 75;
        $("#map_canvas").css("height", newHeight + "px");
        $("#ToggleMapBtn").attr("src", getToggleMapIcon("collapse"));
    } else {
        $(".pager").show();
        $("#map-list-view").show();

        $("#map_canvas").css("height", "500px");
        $("#ToggleMapBtn").attr("src", getToggleMapIcon("expand"));
    }
    //alignLayerControl();
}

function updateIcons() {
    $("#ToggleMapBtn").attr("src", getToggleMapIcon("expand"));
}

function getToggleMapIcon(mode) {
    var isWyomingMapPage = location.href.indexOf("WyomingMap.aspx") != -1;
    if (!isWyomingMapPage) {
        return mode == "collapse" ? "/Images/icons/map-collapse.png" : "/Images/icons/map-expand.png";
    } else {
        return mode == "collapse" ? "/Images/icons/map2-collapse.png" : "/Images/icons/map2-expand.png";
    }
}

function setLayerProperties(layer, entryids) {
    //layer.WebServiceUrl = "/Webservices/MapService.svc/GetOverlayByEntryId";
    //layer.FilterByMapBounds = false;
    //layer.Cluster = false;
    //layer.MinZoom = 0;
    //layer.Center = true;
    //layer.Visible = true;
    //layer.Param.query = null;
    layer.Param.entryIds = entryids;
    layer.onClick = markerClick;
    cgm.addLayer(layer);
}
