        YMaps.jQuery(function () {
            var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
 
            map.setCenter(new YMaps.GeoPoint(37.616306, 55.676051), 14);
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.TypeControl());
            map.enableScrollZoom();
 
            // Создание стиля
            var style = new YMaps.Style("default#greenPoint");
            style.polygonStyle = new YMaps.PolygonStyle();
            style.polygonStyle.fillColor = "ff0000ff";
            style.lineStyle = new YMaps.LineStyle();
            style.lineStyle.strokeColor = "ff0000ff";
            style.lineStyle.strokeWidth = 3;
            YMaps.Styles.add("style#Example", style);
 
 
            var placemark = new YMaps.Placemark(new YMaps.GeoPoint(37.61714,55.677598), {style: "default#shopIcon"});
                placemark.name = "22Shop";
                placemark.description = 'Последний вагон из центра, выход из стеклянных дверей налево,<br> ' +
                                        'идти от метро налево к 10-ти этажному зданию с вывеской<br> ' +
                                        '"Автосервис Вольво", далее все время прямо до вывески<br> ' +
                                        '"Офисно-складской терминал" (5-7 мин).<br> ' +
                                        'На проходной спросить пункт выдачи 22Shop.';
 
            var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(37.61641,55.677391), {style: "default#attentionIcon"});
                placemark2.name = "Шлагбаум";
 
            var placemark3 = new YMaps.Placemark(new YMaps.GeoPoint(37.612934,55.673899), {style: "default#buildingsIcon"});
                placemark3.name = "9и-этажное здание";
 
            map.addOverlay(placemark);
            map.addOverlay(placemark2);
            map.addOverlay(placemark3);
 
 
            // Создание ломанной со стрелочкам
            var polyline1 = new PolylineWithArrows([
                new YMaps.GeoPoint(37.621599,55.668443),new YMaps.GeoPoint(37.613402,55.66854),new YMaps.GeoPoint(37.611922,55.668807),
                new YMaps.GeoPoint(37.609467,55.669947),new YMaps.GeoPoint(37.608673,55.671729),new YMaps.GeoPoint(37.6123,55.673812),
                new YMaps.GeoPoint(37.616119,55.677632),new YMaps.GeoPoint(37.617879,55.677681)
            ], {style: "style#Example"});
 
            var polyline2 = new PolylineWithArrows([
                new YMaps.GeoPoint(37.62497,55.678675),new YMaps.GeoPoint(37.626344,55.673728),new YMaps.GeoPoint(37.62585,55.670623),
                new YMaps.GeoPoint(37.621999,55.666231),new YMaps.GeoPoint(37.621602,55.668443)
            ], {style: "style#Example"});
 
            var polyline3 = new PolylineWithArrows([
                new YMaps.GeoPoint(37.621389,55.664952),new YMaps.GeoPoint(37.624189,55.668312),new YMaps.GeoPoint(37.624725,55.668798),
                new YMaps.GeoPoint(37.626135,55.6706),new YMaps.GeoPoint(37.62739,55.672541)
            ], {style: "style#Example"});
 
            var polyline4 = new PolylineWithArrows([
                new YMaps.GeoPoint(37.629886,55.665644),new YMaps.GeoPoint(37.627397,55.672581),new YMaps.GeoPoint(37.626699,55.672641),
                new YMaps.GeoPoint(37.626163,55.672465)
            ], {style: "style#Example"});
 
 
            // Добавление ломанной на карту
            map.addOverlay(polyline1);
            map.addOverlay(polyline2);
            map.addOverlay(polyline3);
            map.addOverlay(polyline4);
        })
 
        // Реализует наследование прототипа без исполнения конструктора родителя
        // Подробнее о наследовании: http://javascript.ru/tutorial/object/inheritance
        function extend (child, parent) {
            var c = function () {};
            c.prototype = parent.prototype;
            c.prototype.constructor = parent;
            return child.prototype = new c();
        };
 
        // Ломанная со стрелочками
        // Наследуемся от YMaps.Polyline
        function PolylineWithArrows (points, options)
        {
            YMaps.Polyline.call(this, points, options); // Вызов родительского конструктора
 
            var arrows = new YMaps.GeoObjectCollection(this.getComputedStyle()), // Группа, в которой содержатся стрелочки
                listener; // Слушатель событий ломанной
 
            this.onAddToMap = function (map, mapContainer) // Вызывается при добавлении объекта на карту
            {
                YMaps.Polyline.prototype.onAddToMap.call(this, map);
                listener = YMaps.Events.observe(this, this.Events.PositionChange, function () { this.updateArrows(); }, this); // При изменении позиции точки ломанной перерисовываем стрелочки
                map.addOverlay(arrows); // Добавлении группы со стрелочками на карту
                this.updateArrows(); // Добавление стрелочек на ломанную
            }
 
            this.onRemoveFromMap = function () // Вызывается при удалении объекта с карты
            {
                this.getMap().removeOverlay(arrows); // Удаление стрелочек с карты
                YMaps.Polyline.prototype.onRemoveFromMap.call(this); // Удаление ломанной с карты
                listener.cleanup(); // Удаление обработчика событий
            }
 
            this.onMapUpdate = function () // Вызывается при обновлении карты
            {
                YMaps.Polyline.prototype.onMapUpdate.call(this); // Обновление ломанной на карте
                this.updateArrows(); // Перерисовка стрелочек
            }
 
            // Добавляет стрелочки для ломанной
            this.updateArrows = function ()
            {
                var lineWidth = this.getComputedStyle().lineStyle.strokeWidth, // Толщина ломанной
                    arrowWidth = lineWidth * 10; // Длина стрелочки
 
 
                arrows.removeAll(); // Удаление стрелочек, если они были
 
                for (var i = 0, prev, current, points = this.getPoints(); i < points.length; i++)
                {
                    current = this.getMap().converter.coordinatesToLocalPixels(points[i]); // Пиксельные кординаты
                    if (prev)
                    {
                        var vector = current.diff(prev), // Вектор
                            length = Math.sqrt(vector.getX() * vector.getX() + vector.getY() * vector.getY()), // Длина вектора
                            normal = vector.scale(1 / length); // Единичный вектор
 
                        if (length > arrowWidth) // Если длина вектора больше стрелочки в 2 раза, то рисуем стрелочку
                        {
                            // Середина отрезка
                            var middle = current.diff(prev.neg()).neg().scale(1/2);
 
                                // Отступ от сердины
                                offsetMiddle = normal.scale(-arrowWidth / 2),
 
                                // Перпендикуляры к сегменту ломанной
                                arrowPart1 = new YMaps.Point(0 - offsetMiddle.getY(), offsetMiddle.getX()).scale(0.4),
                                arrowPart2 = new YMaps.Point(offsetMiddle.getY(), 0 - offsetMiddle.getX()).scale(0.4),
 
                                // Точки для рисования стрелочки
                                arrowPoint1 = middle.diff(offsetMiddle).diff(arrowPart1.neg()),
                                arrowPoint2 = middle.diff(offsetMiddle).diff(arrowPart2.neg());
 
                            // Добавляем стрелочку
                            arrows.add(new YMaps.Polygon([
                                this.getMap().converter.localPixelsToCoordinates(middle),
                                this.getMap().converter.localPixelsToCoordinates(arrowPoint1),
                                this.getMap().converter.localPixelsToCoordinates(arrowPoint2)
                            ]));
                        }
                    }
                    prev = current;
                }
            };
        }
 
        var ptp = extend(PolylineWithArrows, YMaps.Polyline);
