/**
 * JsHttpRequest: JavaScript "AJAX" data loader
 * Minimized version: see debug directory for the complete one.
 *
 * @license LGPL
 * @author Dmitry Koterov, http://en.dklab.ru/lib/JsHttpRequest/
 * @version 5.x $Id$

<script src="../bitrix/tools/msw/JsHttpRequest/lib/JsHttpRequest/JsHttpRequest.js"></script>
<script  type="text/javascript">
*/

<!---
// Глобальные переменные 
   var pl,map,counter,geoResult,flagroute,ispnt1,ispnt2;

  var minihelp ='1. Наберите название улицы и через пробел номер дома. Нажмите кнопку найти<br>'+
                '2. Нажмите кнопку <img border=2 src="/bitrix/images/icons/route-button.png"> в панели инструментов.<br>' +
                '3. Поставьте на карте точку отправления и точку назначения.<br>' +
                'Кратчайший маршрут и его протяженность будут рассчитаны автоматически.<br>' +
                'Уточнить положение точек, можно премещая их по карте при помощи мышки.<br><br>'+
                'Увеличить масштаб можно двойным кликом или выбрав <img border=2 src="/bitrix/images/icons/icon-zoom.png"><br>'+
                'Перемещение по карте осуществляется при нажатой кнопке <img border=2 src="/bitrix/images/icons/icon-hand.png">';
  var searchcontrol;
  var searchpoint;
  var toolBar;
  var flagmove=0;

  function FindRoute ()
      {

                     document.getElementById("leftcoll").innerHTML = '<strong><blink>Идёт расчёт маршрута ....</blink></strong>'; 
                     document.getElementById("ansbeg").innerHTML = ""; 
                     document.getElementById("ansend").innerHTML = ""; 

         JsHttpRequest.query(
  

              'FindRoute_backend.php', // backend
            {
                // pass a text value 
                'pnt1': document.getElementById("pnt1").value,  
                'pnt2': document.getElementById("pnt2").value
            },
            // Function is called when an answer arrives. 
            function(result, errors) {
             
                // Write errors to the debug div.
//                document.getElementById("debug").innerHTML = errors; 
                // Write the answer.
                if (result) {


                    $strout = '<div align=center><strong>Расчётная длина маршрута  <br><font size="+1"> '+YMaps.humanDistance(result[0]["str"])+ ' </font> <hr><br><br><br> Перреместиться</strong></div>';

                   $i=0;
                   $j=0;
                   $npoint=pl.getNumPoints();
                   $maxi = result[0]["i"];
                 map.removeOverlay(pl);
                  while($npoint>=0) pl.removePoint($npoint--);

                   while($i++<$maxi) {
//                   $strout = $strout+'<br> '+result[$i]["lng"]+' '+result[$i]["lat"];
//                    $strout = $strout+result[$i]["lng"]+' '+result[$i]["lat"]+strlen(result[$i]["nameobj"])+'<br> ';
                    pl.addPoint(new YMaps.GeoPoint(result[$i]["lng"],result[$i]["lat"]));
                                    }
                  pl.setStyle('example#CustomLine');
                  map.addOverlay(pl);


                if (ispnt1==0)
                  {
                     var point1 = new YMaps.GeoPoint(result[1]["lng"],result[1]["lat"]);
                     var placemark1 = new YMaps.Placemark(point1,{draggable: true});
                     placemark1.setIconContent("1");
                     ispnt1=1;
                     counter=3;
                     map.addOverlay(placemark1);
                   YMaps.Events.observe(placemark1, placemark1.Events.DragEnd, function (mEvent) {
                     placemark1.setIconContent("1");
                     document.posl.pnt1.value=mEvent.getGeoPoint();
                     FindRoute();
                     });

                   }

                if (ispnt2==0)
                  {
                     var point2 = new YMaps.GeoPoint(result[$maxi]["lng"],result[$maxi]["lat"]);
                     var placemark2 = new YMaps.Placemark(point2,{draggable: true});
                     placemark2.setIconContent("2");
                     ispnt2=1;
                     counter=3;
                     map.addOverlay(placemark2);
                   YMaps.Events.observe(placemark2, placemark2.Events.DragEnd, function (mEvent) {
                     placemark2.setIconContent("2");
                     document.posl.pnt2.value=mEvent.getGeoPoint();
                     FindRoute();
                     });

                   }


                  document.getElementById("head").innerHTML = '          <font size="+1">Маршрут</font>';

                  document.getElementById("leftcoll").innerHTML = $strout;
                  document.getElementById("ansbeg").innerHTML = '<form><input type="button" name="btt" value="к точке №1" onClick="gotoPoint('+document.getElementById("pnt1").value+')">';
                  document.getElementById("ansend").innerHTML = '<form><input type="button" name="btt" value="к точке №2" onClick="gotoPoint('+document.getElementById("pnt2").value+')">';



                }
            },
            false  // do not disable caching
        );
      }

   function RouteMap () {
            
            map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(37.62139020000851, 54.20232919060981), 13);
            map.addControl(new YMaps.TypeControl());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.MiniMap());

            searchcontrol= (new YMaps.SearchControl({noPlacemark:true}));
            YMaps.Events.observe(searchcontrol, searchcontrol.Events.Select, 
                                 function (Scontrol,Gresult) {
                                                               var point = new YMaps.GeoPoint();
                                                               point=Gresult.getCoordPoint();
                                map.setCenter(point, 16);
                                                               searchpoint=point;
    this.getMap().openBalloon(point, Gresult.text+'<br> <form><input type="button" name="addpoint" value="Поставить маршрутную точку" onClick="addRoutePoint (map,searchpoint)"></form> ' , {hasCloseButton:true, maxWidth:270,margin:250});
//       this.getMap().openBalloon(point, Gresult.text , {hasCloseButton:true, maxWidth:250,margin:250});
                                                                   });

            map.addControl(searchcontrol);
  
            toolBar = new YMaps.ToolBar();
            toolBar.removeAll();

            var handButton = new YMaps.ToolBarRadioButton('MY_GROUP', { icon: "/bitrix/images/icons/icon-hand.png", hint: "Переместить карту"},{selected:'true'});
//          YMaps.Events.observe(handButton, handButton.Events.Select, function () {this.getMap().enableRuler();}, toolBar);
//          YMaps.Events.observe(handButton, handButton.Events.Deselect, function () { this.getMap().disableRuler();}, toolBar);
            toolBar.add(handButton);
 
            var zoomButton = new YMaps.ToolBarRadioButton('MY_GROUP', { icon: "/bitrix/images/icons/icon-zoom.png", hint: "Увеличить"});
            YMaps.Events.observe(zoomButton, zoomButton.Events.Select, function () {this.getMap().enableMagnifier();}, toolBar);
            YMaps.Events.observe(zoomButton, zoomButton.Events.Deselect, function () {this.getMap().disableMagnifier();}, toolBar);
            toolBar.add(zoomButton);

/* Отключили измерение расстояний по прямым
            var rulerButton = new YMaps.ToolBarRadioButton('MY_GROUP', { icon: "/bitrix/images/icons/icon-ruler.png", hint: "Линейка"});
            YMaps.Events.observe(rulerButton, rulerButton.Events.Select, function () {this.getMap().enableRuler();}, toolBar);
            YMaps.Events.observe(rulerButton, rulerButton.Events.Deselect, function () { this.getMap().disableRuler();}, toolBar);
            toolBar.add(rulerButton);
*/


            var routeButton = new YMaps.ToolBarRadioButton('MY_GROUP',{icon: "/bitrix/images/icons/route-button.png", hint: 'Проложить маршрут' });
            YMaps.Events.observe(routeButton, routeButton.Events.Select,function () {this.getMap().addCursor(YMaps.Cursor.ARROW); 
                                                                        flagroute=1;
                                                                         if (counter>1)
                                                                         { 
                                                                        map.removeAllOverlays();
                                                                        map.removeAllOverlays();
                                                                        counter=0;
                                                                        ispnt1=0;
                                                                        ispnt2=0;
                                                                        document.getElementById("leftcoll").innerHTML = minihelp; 
                                                                        document.getElementById("ansbeg").innerHTML = ""; 
                                                                        document.getElementById("ansend").innerHTML = ""; 
                                                                         }
                                                                        }, toolBar);
            YMaps.Events.observe(routeButton, routeButton.Events.Deselect, function () {  this.getMap().removeCursor(YMaps.Cursor.ARROW);flagroute=0;}, toolBar);
            toolBar.add(routeButton);

            var clearButton = new YMaps.ToolBarButton({caption: "Очистить", hint: 'Удалить все метки' });
            YMaps.Events.observe(clearButton, clearButton.Events.Click,function () {
                                                                        flagroute=1;
                                                                        map.removeAllOverlays();
                                                                        map.removeAllOverlays();
                                                                        counter=0;
                                                                        ispnt1=0;
                                                                        ispnt2=0;
                                                                        document.getElementById("leftcoll").innerHTML = minihelp; 
                                                                        document.getElementById("ansbeg").innerHTML = ""; 
                                                                        document.getElementById("ansend").innerHTML = ""; 
                                                                        }, toolBar);
            toolBar.add(clearButton);

            map.addControl(toolBar);




             }
            function gotoPoint(lng, lat)
              {
              
//map.openBalloon(new YMaps.GeoPoint(lng, lat), '', {hasCloseButton:true, maxWidth:50,margin:250})
                  map.panTo(new YMaps.GeoPoint(lng, lat),{flying:true});

               }
            function onMapClick(map, mEvent) {
                if(flagroute==1) {
                var point = new YMaps.GeoPoint();
                point=mEvent.getGeoPoint();
                addRoutePoint(map,point); 
                 }
                }        

  
            function addRoutePoint(map, point) {
            //    alert("Щелк!"+point);
                map.closeBalloon();
                counter++;
                var placemark = new YMaps.Placemark(point,{draggable: true});
                
                if (counter==1) 
                   {
                     document.posl.pnt1.value=point;
                     placemark.setIconContent("1");
                     ispnt1=1;
                     map.addOverlay(placemark);
                    document.getElementById("leftcoll").innerHTML = "Укажите конечную точку маршрута.<hr><br><br><br><br><strong> Переместься </strong>";
                    document.getElementById("ansbeg").innerHTML = '<form><input type="button" name="btt" value="к точке №1" onClick="gotoPoint('+document.getElementById("pnt1").value+')">';
 
                     YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (mEvent) {
                     placemark.setIconContent("1");
                     document.posl.pnt1.value=mEvent.getGeoPoint();
                     if (counter>1) FindRoute();        
                     });
 
                    }
                 if (counter==2) 
                   {
                     ispnt2=1;
                     document.posl.pnt2.value=point;
                     placemark.setIconContent("2");
                     map.addOverlay(placemark);
                     FindRoute();


                     YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (mEvent) {
                     placemark.setIconContent("2");
                     document.posl.pnt2.value=mEvent.getGeoPoint();

                     FindRoute();
                     });

                    }
                 if (counter>2  && searchpoint!=0)
                     if( confirm("Маршрутные точки установлены! Очистить и установить новую точку?")) 
                          { 

                                                                        map.removeAllOverlays();
                                                                        map.removeAllOverlays();
                                                                        counter=0;
                                                                        ispnt1=0;
                                                                        ispnt2=0;
                                                                        document.getElementById("leftcoll").innerHTML = minihelp; 
                                                                        document.getElementById("ansbeg").innerHTML = ""; 
                                                                        document.getElementById("ansend").innerHTML = ""; 
                                                                        addRoutePoint (map,searchpoint);
                          } 
                 searchpoint=0;        
                 }

//</script>
