/**
 * Модуль для работы с картой Google
 *
 * @author mista_k
 */
(function () {

    // TODO!!! Нужно будет получить свой уникальный ключ
    var key = "abcdefg";
    // TODO!!! Нужно указать полный путь до папки с картинками маркеров
    var baseUrl = "i/";


    /**
     * Карта Google
     * @param root      корневой DOMElement, в котором будет рисоваться карта
     * @param model     массив маркеров
     */
    VIBIRAI.Map = function (root, model) {

        var map;

        function drawMap (map, data) {

            var i, bounds = new google.maps.LatLngBounds();

            for (i = 0; i < data.length; i++) {
                bounds.extend(new google.maps.LatLng(data[i].lat, data[i].lng));
            }

            map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

            // создаем базовый объект маркета
            var baseIcon = new google.maps.Icon(google.maps.DEFAULT_ICON);
            baseIcon.iconSize = new google.maps.Size(35, 37);
            baseIcon.shadowSize = google.maps.Size(48, 37);
            baseIcon.iconAnchor = new google.maps.Point(14, 36);
            baseIcon.image = baseUrl + "map-marker.png";
            baseIcon.shadow = baseUrl + "map-marker-shadow.png";
            baseIcon.transparent = baseUrl + "map-marker-mask.png";
            baseIcon.imageMap = [0,0,33,0,33,30,0,30];

            for (i = 0; i < data.length; i++) {
                (function (s) {
                    var icon, marker;
                    icon = new google.maps.Icon(baseIcon);
                    icon.image = s.icon || icon.image;
                    marker = new google.maps.Marker(new google.maps.LatLng(s.lat, s.lng), icon);
                    map.addOverlay(marker);
                    /*
                    // обрабатываем клики по маркеру
                    google.maps.Event.addListener(marker, "click", function() {

                    });
                    */
                })(data[i]);
            }
        };


        // загружаем карту, если это необходимо, и рисуем маркеры
        try {
            if (typeof google === "undefined") {
                $(document).one("mapLoaded", function () {
                    map = new google.maps.Map2(root);
                    map.addControl(new google.maps.SmallZoomControl());
                    $("body").bind("unload", google.maps.Unload);
                    drawMap(map, model);
                });
                VIBIRAI.Map.loader();
            } else {
                drawMap(map, model);
            }
        } catch (exc) {};
    };

    /**
     * Загрузчик компонент Google
     */
    VIBIRAI.Map.loader = function () {
        var script = document.createElement("script");
        script.src = "http://www.google.com/jsapi?key=" + key + "&callback=VIBIRAI.Map.callback";
        script.type = "text/javascript";
        document.getElementsByTagName("head")[0].appendChild(script);
    };
    
    VIBIRAI.Map.callback = function () {
        google.load("maps", "2", {
            "callback": function () {
                $(document).trigger("mapLoaded");
            },
            // опциональный параметр, задающий язык карты
            "language": "ru"
        });
    };
})();







// инициализируем карту тестовыми данными
$(function () {
    // центр в Челябинске
    var center = {lat: 55.16, lng: 61.4};
    
    (function (mapHolder) {
        var markers = [], i;
        if (mapHolder) {
            // случайно несколько маркеров около заданного центра
            for (i = 0; i < 10; i++) {
                markers.push({
                    lat: center.lat + (Math.random() - 0.5) / 30,
                    lng: center.lng + (Math.random() - 0.5) / 15
                });
            }
            markers.push(center);
            VIBIRAI.Map(mapHolder, markers);
        }
    }($("#search-result-map-object").get(0)));
    
    
    // карта с одним маркером
    (function (mapHolder) {
        if (mapHolder) {
            VIBIRAI.Map(mapHolder, [center]);
        }
    }($("#company-map-object").get(0)));
    
});

