var scrwidth;
var map;
var cityselector;
var isFlying;
var groupall,group;
var panopids=[5,6,8,10,12,13,17,25,26,44,47,48,49,51,52];

// preload images
	 preload([
	        '/img/ajaxloading1.gif'
	        ]);
	function preload(images) {
	    if (typeof document.body == "undefined") return;
	    try {
	        var div = document.createElement("div");
	        var s = div.style;
	            s.position = "absolute";
	        s.top = s.left = 0;
	        s.visibility = "hidden";
	        document.body.appendChild(div);
	        div.innerHTML = "<img src=\"" + images.join("\" /><img src=\"") + "\" />";
	        var lastImg = div.lastChild;
	        lastImg.onload = function() { document.body.removeChild(document.body.lastChild); };
	     }
	     catch(e) {
	        // Error. Do nothing.
	    }
	}


$(document).ready(function(){

        scrwidth=$(window).width();
        $('#RatekYMaps').css('width',scrwidth);
});

function initratekmap(){
$.fancybox.init();
$('#maploading').hide();
$('#mapprotect').slideUp('slow'); $('#mapscover').animate({'height':'620px','width':scrwidth},800,function(){  $('#mapprotect').css('z-index',0); });


// $(document).ready(function(){

        groupall=new YMaps.GeoObjectCollection(); // создаем группу ВСЕХ городов

//        scrwidth=$(window).width();
//        $('#RatekYMaps').css('width',scrwidth);
        // Создание обработчика для события window.onLoad
        YMaps.jQuery(function () {
            // Создание экземпляра карты и его привязка к созданному контейнеру
            map = new YMaps.Map(YMaps.jQuery("#RatekYMaps")[0]);

            // Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(86.179122, 54.668171), 4);

            // Добавление элементов управления
            map.addControl(new YMaps.TypeControl(),new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Point(300, 5)));
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.MiniMap());
            map.addControl(new YMaps.ScaleLine());
            map.enableScrollZoom();

            YMaps.Styles.add("ratekmark", {
                iconStyle : {
                    href : "http://rateksib.ru/img/city2.png",
                    size : new YMaps.Point(19,20),
                    offset: new YMaps.Point(-9,-19)
                }
            });


            YMaps.Styles.add("constructor#33CC00c81Polygon", { polygonStyle: {strokeColor: "33CC00c8",strokeWidth: 1,fill: true,fillColor: "33CC00c8",outline: true} });
            map.addOverlay(new YMaps.Polygon([new YMaps.GeoPoint(91.387474,53.718657),new YMaps.GeoPoint(91.387571,53.718339),new YMaps.GeoPoint(91.388708,53.718428),new YMaps.GeoPoint(91.388675,53.718587),new YMaps.GeoPoint(91.387806,53.718526),new YMaps.GeoPoint(91.387756,53.718681)],{style: "constructor#33CC00c81Polygon",hasHint:0,hasBalloon:0}));

            // Создание группы объектов и добавление ее на карту
            group = new YMaps.GeoObjectCollection();
            var groupsmall = new YMaps.GeoObjectCollection();

            groupsmall.add(createPlacemark(new YMaps.GeoPoint(82.912378,55.018266), 'Терминал - Центр', 'УЛ. ФАБРИЧНАЯ, 23в', '(383) 362-15-15',12,true,'price_novosibirsk_6309451.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(82.775106,55.031161), 'Терминал - Восток', 'УЛ. КЛУБНАЯ, 114', '(383) 362-15-15',12,true,'price_novosibirsk_6309451.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(82.804599,54.962003), 'Терминал - Запад', 'УЛ. ТОЛМАЧЕВСКАЯ 33/2', '(383) 362-15-15',12,true,'price_novosibirsk_6309451.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(83.108825,54.859948), 'Терминал - Юг', 'УЛ. ИНЖЕНЕРНАЯ 5/1', '(383) 362-15-15',12,true,'price_novosibirsk_6309451.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(60.632212, 56.770416), 'Терминал - Запад', 'УЛ. ПОХОДНАЯ, 81', '(343) 270-60-25',5,true,'price_ekaterinburg_6309637.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(37.706693,55.702226), 'Терминал - Юго-Восток', 'УЛ. ЮЖНОПОРТОВАЯ, 38', '(495) 661-71-74, 266-81-79',10,true,'price_moskva_6304532.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(30.347692,59.902679), 'Терминал - Склад', 'УЛ.ТОСИНА 75 (ЗАЕЗД С ЛИГОВСКИЙ ПРОСПЕКТ 240)', '(812) 922-18-48, 8-911-946-58-56',47,true,'price_sankt-peterburg_6304533.xls'));
            groupsmall.add(createPlacemark(new YMaps.GeoPoint(73.421969,55.010033), 'Терминал - Восток', 'УЛ. ЧЕЛЮСКИНЦЕВ 4-Я, ДОМ 4', '(3812) 28-43-52',13,true,'price_omsk_6309477.xls'));

	     var url = '/ajax/get_mapcities.php';

	     $.get(
			url,
			null,
			function (result) {
				if (result.type == 'error') {
					alert(error);
					return(false);
				}
				else {
					$(result.cities).each(function() {
                                             var isbigcity=($(this).attr('id')==12 ||$(this).attr('id')==5 || $(this).attr('id')==47 || $(this).attr('id')==10|| $(this).attr('id')==13)?true:false; 
                                             group.add(createPlacemark(new YMaps.GeoPoint($(this).attr('lon'), $(this).attr('lat')), $(this).attr('name'), $(this).attr('addr'), $(this).attr('phones'),$(this).attr('id'),isbigcity,$(this).attr('price'),$(this).attr('images')));
					});
				}
                            citiesloadhandler();
			},
			"json"
		);

	     citiesloadhandler=function(){ // инициализируем карту после загрузки городов ajax'ом
	                 map.addOverlay(group); // добавили слой только с основными офисами

	                 group.forEach(function (smobj, objIndex, grp) { // добавляем крупные города в общий список
	                       groupall.add(smobj);
	                 });
	                 groupsmall.forEach(function (smobj, objIndex, grp) { // добавляем мелкие города в общий список
	                       groupall.add(smobj);
	                 });

	                 // Создание управляющего элемента "Путеводитель по офисам"
	                 map.addControl(new OfficeNavigator(group));

	                 // сортируем селектор городов по алфавиту
	                 for(var c=document.getElementById('cityselector'),b=c.options,a=0;a<b.length;)
	                 	if(b[a+1]&&b[a].text>b[a+1].text){c.insertBefore(b[a+1],b[a]);a=a>=1?a-1:a+1}else a++;
	                 b[0].selected=true;
	     }


// в зависимости от масштаба, либо убираем допофисы, либо наоборот добавляем их на карту.
applyzoom=function() {
     if ((map.getZoom() > 9) && !groupsmall.getMap()) {
          map.addOverlay(groupsmall);
          groupsmall.forEach(function (smobj, objIndex, grp) {
                  smobj.setIconContent("<b>"+smobj.name+"</b>");
          });
          group.forEach(function (smobj, objIndex, grp) {
                  smobj.setIconContent("<b>"+smobj.name+"</b>");
          });
     } else if ((map.getZoom() <= 9)&& groupsmall.getMap()) {
          map.removeOverlay(groupsmall);
          group.forEach(function (smobj, objIndex, grp) {
                  smobj.setIconContent(null);
          });
     }
}


selectbypid=function(pid)
{
  group.forEach(function (smobj1, objIndex1, grp1) {
      if(smobj1.pid==pid) $('#cityselector').val(objIndex1);
  }); // END group-foreach
  return;
}

YMaps.Events.observe(map, map.Events.Update, applyzoom);

YMaps.Events.observe(map, map.Events.BalloonOpen, function () {
                $("a.cityimages").fancybox({'hideOnOverlayClick':true});
                if (map.getZoom() > 11 || map.getZoom()<10) $(".showall").show();
                else $(".showall").hide();
           });

});

        movetooffice = function(objlist,coords)
        {
                        var objcoords=new YMaps.GeoPoint.fromString(coords);
                        if (!isFlying) {
                            isFlying = 1;
if(objlist!=groupall)  // если боковой селектор
                            map.panTo(objcoords, {
                                flying: 1,
                                callback: function () {
                                    isFlying = 0;
                                    map.setZoom(10,{smooth:true,position:objcoords,callback:function(){
                                          objlist.forEach(function (smobj, objIndex, grp) { // ищем балун по координатам и открываем его
                                            if(smobj.getGeoPoint().toString()==coords) smobj.openBalloon();
                                          }); // END objlist-foreach
                                    }}); // END setzoom
                                } // END callback(panto)
                            }); //END Panto
else // если нажали на адресе
{
                                    // Создание объекта геокодера
                                    var geocoder = new YMaps.Geocoder(objcoords,{results: 1});
                                    // По завершению геокодирования инициализируем карту первым результатом
                                    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
                                        isFlying = 0;
                                        zoom=10;
                                        if (geocoder.length()) {
                                          geocoderResult = geocoder.get(0); // Первый результат геокодирования
                                          map.setBounds(geocoderResult.getBounds());

                                          map.setZoom(geocoderResult.getBounds().getMapZoom(map),{smooth:true,position:objcoords,callback:function(){
                                                objlist.forEach(function (smobj, objIndex, grp) { // ищем балун по координатам и открываем его
                                                   if(smobj.getGeoPoint().toString()==coords)
                                                       {
                                                          smobj.openBalloon();
                                                          selectbypid(smobj.pid);
                                                       }
                                                }); // END objlist-foreach
                                          }}); //END setZoom

                                       }
                                    }); // END geocoder-observe
}

                        } //END if(!isFlying)
                        return false;
        } // END movetooffice


        // Функия создания метки
        function createPlacemark (geoPoint, name, addr,phone,pid,showall,price,images) {
            var placemark = new YMaps.Placemark(geoPoint, {style: "ratekmark"});
            placemark.nameOrig = name;
            if(name.indexOf(' - ') == -1) name=name+' - офис';
            placemark.name = name;
            if($.inArray(parseInt(pid),panopids)!= -1) pano=" <a href='javascript:void(0);' class='menu' style='color:#006B77;text-decoration:underline' onclick='window.open(&quot;http://maps.yandex.ru/?ll="+geoPoint.getX()+","+geoPoint.getY()+"&spn=0.011795,0.004087&l=map,stv&ol=stv&oll="+geoPoint.getX()+","+geoPoint.getY()+"&quot;,&quot;_blank&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,copyhistory=0,top=0,left=0,width=1024,height=768;&quot;);'>Показать панораму</a>";
            else 
              {
               pano="";
               if(typeof(images)!='undefined' && images.length>0)
                 {
                   pano=" <a href='javascript:void(0)' class='menu' style='color:#006B77;text-decoration:underline' onclick='$(this).next().click();'>смотреть фото</a>";
                   $(images).each(function() {
                          pano=pano+"<a style='display:none' class='cityimages' rel='cityimages' href='http://rateksib.ru/upload/"+this+"'>фото1</a>";
                   });
                 }
              }
            placemark.addr = addr;
            placemark.pid = pid;
            placemark.description = "<b>Адрес:</b> <a href='javascript:void(0);' onclick='map.closeBalloon();movetooffice(groupall,&quot;"+geoPoint+"&quot;);'>"+addr+"</a>"+pano+"<br /><b>Тел.:</b> "+phone+"<div style='margin-bottom:5px;margin-top:5px;'><a href='/?mode=tarif'>Расчет тарифов</a> <a href='/price/"+price+"'>Скачать прайс-лист</a></div><a href='/?mode=contacts&pid="+pid+"' class='menu' style='color:#006B77'><u>Подробнее о филиале</u></a>"+ ((typeof showall != 'undefined' && showall)?'<div class="showall" style="display:none; height:16px;"><a href="javascript:void(0)" onclick="map.setZoom(10,{smooth:true,position:new YMaps.GeoPoint('+geoPoint+')}); map.closeBalloon();selectbypid('+pid+')" class="menu" style="color:#006B77"><u>Все отделения в этом городе</u></a><img src="/img/city_smoll.gif" border=0 style="margin-bottom:-4px;margin-left: 3px;" /></div>':'');
            return placemark;
        }


        // Управляющий элемент "Путеводитель по офисам", реализиует интерфейс YMaps.IControl
        function OfficeNavigator (offices) {

            // Добавление панельки на карту
            this.onAddToMap = function (map, position) {
                    this.container = YMaps.jQuery("<select id='cityselector' style='border: solid 3px #58A3A9;'><option value='-1'>    - Россия -    </option></select>")
                    this.map = map;
                    this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(5, 5));

                    // Выставление необходимых CSS-свойств панели
                    this.container.css({
                        position: "absolute",
                        zIndex: YMaps.ZIndex.CONTROL,
                        background: '#fff',
                        listStyle: 'none',
                        padding: '2px',
                        margin: 0
                    });
                    
                    // Заполнение панельки городами
                    this._generateList();
                    
                    // Применение позиции к управляющему элементу
                    this.position.apply(this.container);
                    
                    // Добавление панельки на карту
                    this.container.appendTo(this.map.getContainer());
            } // END onAddToMap

            // Удаление селектора городов с карты
            this.onRemoveFromMap = function () {
                this.container.remove();
                this.container = this.map = null;
            };

            // Пока "летим" игнорируем клики по ссылкам
            this.isFlying = 0;

            // Формирование выпадающего списка офисов
            this._generateList = function () {
                var _this = this;
                // Для каждого города создаем опцию и добавляем ее в селектор
                offices.forEach(function (obj,oidx) {
                    var optn = YMaps.jQuery("<option value='"+oidx+"'>" + obj.nameOrig + "</option>"); //создаем опцию для селектора
                    optn.appendTo(_this.container); // добавляем опцию-город в селектор городов
                });
                cityselector=this.container; // cityselector (ссылка на селектор) понадобится для сортировки по алфавиту и др.
                this.container.change( function(){if(this.value<0) {map.closeBalloon();map.setCenter(new YMaps.GeoPoint(86.179122, 54.668171), 4);return false;} movetooffice(offices, ""+offices.get(this.value).getGeoPoint()+"");} ); //обработчик изменения селектора города
            }; // END generateList
        } // END OfficeNavigator


// }); //END document.ready()

}; //initratekmap


