﻿ListMapHelper = function () {
    //    this.MainMenuContainer = null;
    //    this.MainMenuItems = null;
    //    this.BottomMarginPerSubMenu = 5;
    //    this.CurrentlyOpenedSubmenu = null;
    //    this.MapTypeLinks = null;
    //    this.MapContainer = null;
    //    this.LocalSearch = null;
    //    this.Categories = null;
    //    this.MarkerRequestInProcess = false;
    //    this.LastQueriedKeywordIdx = -1;
    //    this.LastQueriedCategory = null;
    this.DefaultZoomLevel = 16;
    //    this.MapContainerDIV = null;
    this.CategoryImagePath = "/Images/CS/EnvInfo/";
    this.DefaultCategoryImage = "DefaultArrow.png";

    this.MarkerTypes = {};
    this.ICON_TYPE_HOME = -1;
    this.ICON_TYPE_DEFAULT = 0;
    this.ICON_TYPE_BLACK = 1;
    this.ICON_TYPE_BLUE = 2;
    this.ICON_TYPE_BROWN = 3;
    this.ICON_TYPE_GREEN = 4;
    this.ICON_TYPE_ORANGE = 5;
    this.ICON_TYPE_PINK = 6;
    this.ICON_TYPE_RED = 7;
    this.ICON_TYPE_VIOLET = 8;
    this.ICON_TYPE_WHITE = 9;

    this.Containers = {}
}

ListMapHelper.prototype = {
    RegisterMapContainer: function (sectionContainer, mapContainer, address) {
        if (mapContainer) {
            if (!listMapHelper.Containers[mapContainer.id]) {
                listMapHelper.Containers[mapContainer.id] = {};
                if (google.maps.Geocoder) {
                    listMapHelper.Containers[mapContainer.id].GeoCoder = new google.maps.Geocoder();
                }
                else {
                    listMapHelper.Containers[mapContainer.id].GeoCoder = new GClientGeocoder();
                }
                if (google && google.maps && google.maps.Map) {
                    var myOptions = { zoom: listMapHelper.DefaultZoomLevel, mapTypeId: google.maps.MapTypeId.ROADMAP }

                    listMapHelper.Containers[mapContainer.id].Map = new google.maps.Map(mapContainer, myOptions);
                }
                else {
                    listMapHelper.Containers[mapContainer.id].Map = new GMap2(mapContainer);
                }
                listMapHelper.Containers[mapContainer.id].InitialAddress = address;
                listMapHelper.Containers[mapContainer.id].SectionContainer = sectionContainer;

                if (window.GMapTypeControl)
                    listMapHelper.Containers[mapContainer.id].Map.addControl(new GMapTypeControl());

                if (window.GLargeMapControl)
                    listMapHelper.Containers[mapContainer.id].Map.addControl(new GLargeMapControl());

                listMapHelper.RetrieveAddress(mapContainer.id, address);
                listMapHelper.BindCategorySelection(mapContainer.id);
            }
        }
    },

    BindCategorySelection: function (key) {
        var container = listMapHelper.Containers[key];
        if (container) {
            var envInfo = $j(".EnvironmentInfo", container.SectionContainer);

            if (envInfo.attr("Bound") != "true") {
                envInfo.attr("Bound", "true");

                var items = $j(".EnvInfoItem", envInfo);
                items.click(function () {
                    listMapHelper._HandleCategoryClick($j(this));
                });
            }
        }
    },

    _HandleCategoryClick: function (jCatItem) {
        if (jCatItem && (jCatItem.length > 0)) {
            if (jCatItem.attr("Selected") == "true") {
                var defaultImage = listMapHelper.CategoryImagePath + listMapHelper.DefaultCategoryImage;

                jCatItem.attr("Selected", "false")
                        .css({
                            "background-image": "url('" + defaultImage + "')",
                            "background-position": "0px 1px"
                        });

                listMapHelper._HideMarkers(jCatItem);
            }
            else {
                var currentActiveImage = listMapHelper.CategoryImagePath + jCatItem.attr("ActiveImg") + ".png";
                var markerImage = listMapHelper.CategoryImagePath + jCatItem.attr("ActiveImg") + "Large.png";

                jCatItem.attr("Selected", "true")
                        .css({
                            "background-image": "url('" + currentActiveImage + "')",
                            "background-position": "0px 2px"
                        });

                listMapHelper._ShowMarkers(jCatItem, markerImage);
            }
        }
    },

    GetMapContainer: function (item) {
        var mapContainer = $j(".MapContainerDIV", $j(item).parents(".MapOverlay"));

        if (mapContainer.length > 0) {
            return listMapHelper.Containers[mapContainer.attr("id")];
        }
    },

    _ShowMarkers: function (jCatItem, overrideImagePath) {
        if (jCatItem && (jCatItem.length > 0)) {
            var container = listMapHelper.GetMapContainer(jCatItem);

            if (container) {
                if (mapHelper.LocalSearch == null)
                    mapHelper.LocalSearch = new GlocalSearch();

                var category = jCatItem.attr("CategoryKey");
                var markerKey = "Marker_" + category;

                // Overwriting marker.
                // [MB]
                mapHelper.MarkerTypes[markerKey] = mapHelper.CreateCustomMarker(overrideImagePath, 11, 11);
                mapHelper.Categories[category].MarkerType = markerKey;

                mapHelper.ExternalContainer = container.Map;
                mapHelper.CustomClick(category);
            }

            return false;
        }
    },

    _HideMarkers: function (jCatItem) {
        if (jCatItem && (jCatItem.length > 0)) {
            var container = listMapHelper.GetMapContainer(jCatItem);

            if (container) {
                mapHelper.ExternalContainer = container.Map;

                var category = jCatItem.attr("CategoryKey");
                mapHelper.Categories[category].ShouldBeDisplayed = false;
                mapHelper.RemoveResultsFromMap(category);
            }
        }
    },

    RetrieveAddress: function (mapKey, address) {
        if (listMapHelper.Containers[mapKey]) {
            var container = listMapHelper.Containers[mapKey];
            var geocoder = container.GeoCoder;

            if (geocoder) {
                var geoCodeFunc = (geocoder.getLatLng) ? geocoder.getLatLng : geocoder.geocode;

                geoCodeFunc({ 'address': address }, function (point) {
                    if (!point) {
                        alert(address + " not found");
                    } else {
                        mapHelper.MarkerTypes["Home"] = mapHelper.CreateCustomMarker(listMapHelper.CategoryImagePath + "HomeItem.png", 30, 28);

                        mapHelper.ExternalContainer = container.Map;
                        mapHelper.SetMarker(point, null, mapHelper.MarkerTypes["Home"]);

                        var center = null;
                        if (google.maps.Map) {
                            var lat = 0;
                            var lang = 0;

                            if (point.first) {
                                lat = point.first().geometry.location.lat();
                                lang = point.first().geometry.location.lng();
                            }
                            else if ((point.length > 0) && (point[0].geometry) && (point[0].geometry.location)) {
                                if (point[0].geometry.location.lat) {
                                    lat = point[0].geometry.location.lat();
                                    lang = point[0].geometry.location.lng();
                                }
                                else {
                                    lat = point[0].geometry.location.za;
                                    lang = point[0].geometry.location.Ba;
                                }
                            }

                            center = new google.maps.LatLng(lat, lang);
                        }
                        else {
                            center = point;
                        }

                        listMapHelper.Containers[mapKey].Map.setCenter(center, listMapHelper.DefaultZoomLevel);
                    }
                });
            }
        }
    },

    ResetMap: function (mapKey) {
        var container = listMapHelper.Containers[mapKey];
        if (container) {
            var section = container.SectionContainer;

            var defaultImage = listMapHelper.CategoryImagePath + listMapHelper.DefaultCategoryImage;

            $j(".MapContainerDIV", section).html("");
            $j(".EnvInfoItem", section).attr("Selected", "false").css({
                "background-image": "url('" + defaultImage + "')",
                "background-position": "0px 1px"
            });

            // Cleaning up variables.
            // [MB]
            container.GeoCoder = null;
            container.Map = null;
            container.InitialAddress = null;
            container.SectionContainer = null;
            listMapHelper.Containers[mapKey] = null;
        }
    }
}

var listMapHelper = new ListMapHelper();
