function SampleBalloonLayout() {
    this.element = YMaps.jQuery(
        "<div class=\"tooltip\"><div class=\"bg-bullon-top\"><div class=\"close\"></div></div><div class=\"bg-bullon\"></div><div class=\"bg-bullon-bottom\"></div></div>");
 
    this.close = this.element.find(".close");
    this.content = this.element.find(".bg-bullon");
 
    // Добавляет макет на страницу
    this.onAddToParent = function (parentNode) {
        YMaps.jQuery(parentNode).append(this.element);
    };
    
    // Отключает кнопку закрытия балуна
    this.disableClose = function(){
        this.close.unbind("click").css("display", "none");
    };

    // Включает кнопку закрытия балуна
    this.enableClose = function(callback){
        this.close.bind("click", callback).css("display", "");
        return false;
    };
 
    // Удаляет макет со страницы
    this.onRemoveFromParent = function () {
        this.element.remove();
    };
 
    // Устанавливает содержимое балуна
    this.setContent = function (content) {
        content.onAddToParent(this.content[0]);
    };
                
    // Обновляет балун
    this.update = function() {
        this.element.css("margin-top", "0px");
    };
};

var Map = function(mapId) {
    var img = $('#'+mapId).get(0);
    var map = new YMaps.Map(img);
    var sampleBalloonTemplate = new YMaps.LayoutTemplate(SampleBalloonLayout);

     
    /**
     * Класс собственного стиля метки
     */
    var PlacemarkStyle = (function(){var s;
        s = new YMaps.Style();
        s.iconStyle = new YMaps.IconStyle();

        /* Картинка собственной метки */
        s.iconStyle.href = "/static/img/map_label.png";
        s.iconStyle.size = new YMaps.Point(18, 25);
        s.iconStyle.offset = new YMaps.Point(-9, -22);

        /* Стиль для тени собственной метки */
        //s.iconStyle.shadow = new YMaps.IconShadowStyle();
        //s.iconStyle.shadow.href = "/i/maps/icons/photo-shadow.png";
        //s.iconStyle.shadow.size = new YMaps.Point(18, 29);
        //s.iconStyle.shadow.offset = new YMaps.Point(-9, -29);

        s.balloonStyle = {template: sampleBalloonTemplate};

        return s;
    })();

    /* Добавить инструменты */
    map.addControl(new YMaps.TypeControl());
    map.addControl(new YMaps.ToolBar());
    map.addControl(new YMaps.Zoom());
    map.addControl(new YMaps.MiniMap());
    map.addControl(new YMaps.ScaleLine());

    return {
        setCenter: function(lon, lat,zoom) {
            zoom = zoom || 2;
            map.setCenter(new YMaps.GeoPoint(lon, lat), zoom);
        },
        addPlacemark: function(lon, lat, obj)
        {
            var placemark = new YMaps.Placemark(new YMaps.GeoPoint(lon, lat),
                {
                    style    : PlacemarkStyle,
                    hideIcon : true,
                    zIndexActive: 100000,
                }
            );

            var pTemplate = '{{ img }}<h4>{{ title }}</h4>{{ work_type }}{{ product }}';

            var pImg   = (obj.pic) ? '<img src="' + obj.pic + '" width="202" height="136" alt="'+placemark.name + '" />' : '';
            var pTitle = (obj.active && obj.url) ? '<a href="'+obj.url+'">'+unescapeHtml(obj.title)+'</a>' : unescapeHtml(obj.title) || '';
            var pWType = (obj.work_type) ? '<p><span>Тип работ:</span> ' + unescapeHtml(obj.work_type).replace('<p>','').replace('</p>','')  + '</p>' : '';
            var pProd  = (obj.product) ? '<p><span>Оборудование:</span> ' + unescapeHtml(obj.product).replace('<p>','').replace('</p>','')  +'</p>' : '';

            //placemark.description = '<img width="202" height="136" alt="" src="img/biox-img.jpg"><h4><a href="#">БиОКС-100 в поселке Невель</a></h4><p><span>Тип работ:</span> поставка, установка</p><p><span>Оборудование:</span> <a href="#">БИОКС 100</a></p>';
            placemark.description = pTemplate
                .replace('{{ img }}', pImg)
                .replace('{{ title }}', pTitle)
                .replace('{{ work_type }}', pWType)
                .replace('{{ product }}', pProd)
            ;
            
            map.addOverlay(placemark);
            
            YMaps.Events.observe(placemark, map.Events.Click, function (placemark, mEvent) {
            	placemark.openBalloon();
            });
        }
    }
}

