var map;
var arrows = new Array;



// === The basis of the arrow icon information ===
      var arrowIcon = new GIcon();
      arrowIcon.iconSize = new GSize(24,24);
      arrowIcon.shadowSize = new GSize(1,1);
      arrowIcon.iconAnchor = new GPoint(12,12);
      arrowIcon.infoWindowAnchor = new GPoint(0,0);

      var barrowIcon = new GIcon();
      barrowIcon.iconSize = new GSize(24,24);
      barrowIcon.shadowSize = new GSize(1,1);
      barrowIcon.iconAnchor = new GPoint(12,12);
      barrowIcon.infoWindowAnchor = new GPoint(0,0);
      
      // === Function to create a marker arrow ===
      function createMarker(point,icon) {
        var marker = new GMarker(point,icon);
        map.addOverlay(marker);
        arrows.push(marker);
      }
      
      // === Returns the bearing in degrees between two points. ===
      // North = 0, East = 90, South = 180, West = 270.
      var degreesPerRadian = 180.0 / Math.PI;
      function bearing( from, to ) {
        // See T. Vincenty, Survey Review, 23, No 176, p 88-93,1975.
        // Convert to radians.
        var lat1 = from.latRadians();
        var lon1 = from.lngRadians();
        var lat2 = to.latRadians();
        var lon2 = to.lngRadians();

        // Compute the angle.
        var angle = - Math.atan2( Math.sin( lon1 - lon2 ) * Math.cos( lat2 ), Math.cos( lat1 ) * Math.sin( lat2 ) - Math.sin( lat1 ) * Math.cos( lat2 ) * Math.cos( lon1 - lon2 ) );
        if ( angle < 0.0 )
        angle  += Math.PI * 2.0;

        // And convert result to degrees.
        angle = angle * degreesPerRadian;
        angle = angle.toFixed(1);

        return angle;
      }

// === A function to create the arrow head at the end of the polyline ===
      function arrowHead(points) {
        // == obtain the bearing between the last two points
        var p1=points[points.length-1];
        var p2=points[points.length-2];
        var dir = bearing(p2,p1);
        // == round it to a multiple of 3 and cast out 360s
        var dir = Math.round(dir/3) * 3;
        while (dir >= 360) {dir -= 360;}
        arrowIcon.image = "/img/directions/arrow_"+dir+".png";
        createMarker(p1, arrowIcon);
      }
      
      // === A function to put arrow heads at intermediate points
      function midArrows(points) {
        for (var i=1; i < points.length-1; i++) {  
          var p1=points[i-1];
          var p2=points[i+1];
          var dir = bearing(p1,p2);
          // == round it to a multiple of 3 and cast out 120s
          var dir = Math.round(dir/3) * 3;
          while (dir >= 360) {dir -= 360;}
            arrowIcon.image = "/img/directions/arrow_"+dir+".png";
          createMarker(points[i], arrowIcon);
        }
      }
      
      // === A function to put arrow heads in the middle of lines
      function midLineArrows(points, bothways) {
        bothways = ['foo']; //anyway, draw only direct arrows.
        for (var i=0; i<points.length-1; i++) {  
          var p1=points[i];
          var p2=points[i+1];
          var p3=new GLatLng((p1.lat()+p2.lat())/2,(p1.lng()+p2.lng())/2);
          var p4=new GLatLng((p3.lat()+p2.lat())/2,(p3.lng()+p2.lng())/2);

          var dir = bearing(p1,p2);
          // == round it to a multiple of 3 and cast out 120s
          var dir = Math.round(dir/3) * 3;
          var bdir = dir + 180;

          while (dir >= 360) {dir -= 360;}
          while (bdir >= 360) {bdir -= 360;}

          //skip if segment's length is smaller than X
          arrowIcon.image = "/img/directions/arrow_"+dir+".png";
          barrowIcon.image = "/img/directions/arrow_"+bdir+".png";
          
          var len = (p1.distanceFrom(p2));
          if (len > 170) {
            createMarker(p3, arrowIcon);
            if (!bothways.length) {
                createMarker(p4, barrowIcon);
            }
          }
        }
      }

    
    function remove_arrows() { 
        for (var i = 0; i < arrows.length; i++) {
            map.removeOverlay(arrows[i]);
        }
        arrows = [];
    }

	//var geocoder = new GClientGeocoder();
	var polyline;
    var polyline2;
	var polyline_straight;

function advanced_search_wrap() {
    var address1 = $('start_address').value;
    var address2 = $('end_address').value;

    advanced_search(address1, address2);
    ShowComments(0);
}

function advanced_search(address1, address2) {
    var icon = new GIcon();
    icon.image = "/img/target.gif";

    icon.iconsize = new GSize(16, 16);
    icon.iconAnchor = new GPoint (8, 8);
    icon.infoWindowAnchor = new GPoint (10, 8);

/*    var myAjax = new Ajax.Request('/cgi-bin/index.cgi', {
        parameters: {
            act: 'log_query',
            query: 'START: '+$('start_address').value+'; FINISH: '+$('end_address').value
        }
    });
*/

    address1 = address1+', Санкт-Петербург, Россия';
    address2 = address2+', Санкт-Петербург, Россия';

    var marker1;
    var marker2;
    var x1, x2, y1, y2;

    var my_geocoder = new GClientGeocoder();
        if (my_geocoder) {
            my_geocoder.getLatLng(address1, function(point1) {
                marker1 = new GMarker(point1, {icon: icon, draggable: false});
                map.addOverlay(marker1);
                x1=point1.x;
                y1=point1.y;
                var latlng = new GLatLng(y1, x1);
                map.panTo(latlng);
            });
            my_geocoder.getLatLng(address2, function(point2) {
                marker2 = new GMarker(point2, {icon: icon, draggable: false});
                map.addOverlay(marker2);
                x2=point2.x;
                y2=point2.y;
                draw_blue_line_params(x1, y1, x2, y2);
                search2(x1,y1,x2,y2);
            });
        }
}
	
function showAddress(address) {
    //First, log the query

/*    var myAjax = new Ajax.Request('/cgi-bin/index.cgi', {
            parameters: {
                act: 'log_query',
                query: address
            }
    });
*/

    if (address.match (/^\D{1,3}-?\d+\D?$/)) {
        address = address.replace (/^\D+-?(\d+)\D?$/, "$1");
    }

    if (address.match (/^\d+$/)) {
		search_text_mode(address);
		return false;
	}
	var my_geocoder = new GClientGeocoder();
      if (my_geocoder) {
        my_geocoder.getLatLng(
          address+', Санкт-Петербург, Россия',
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 14);
			  var icon = new GIcon();
				icon.image = "/img/target.gif";

				icon.iconsize = new GSize(16, 16);
				icon.iconAnchor = new GPoint (8, 8);
				icon.infoWindowAnchor = new GPoint (10, 8);
			 
			  //var myHtml = address;
			  //myHtml = myHtml+"<br><br><input type='button' value='Ближайшие маршруты к этой точке' OnClick='search("+point.x+","+point.y+");'>";
              
			  var marker = new GMarker(point, {icon: icon, draggable: true});
              map.addOverlay(marker);

			  GEvent.addListener(marker, "dragend", function() {
				var latlng = marker.getLatLng();
				var x = latlng.lng();
				var y = latlng.lat();
				//this_my_geocoder = new GClientGeocoder();
				my_geocoder.getLocations(latlng, function(addresses) {
					var address = addresses.Placemark[0];
					myHtml = "<div>"+address.address;
					myHtml = myHtml + "<br><input type='button' value='Ближайшие маршруты к этой точке' OnClick='search("+x+","+y+");'></div>";
					marker.openInfoWindowHtml(myHtml);
				});    
              });

              GEvent.addListener(marker, "click", function() {
				var latlng = marker.getLatLng();
				var x = latlng.lng();
				var y = latlng.lat();
				//this_my_geocoder = new GClientGeocoder();
				my_geocoder.getLocations(latlng, function(addresses) {
					var address = addresses.Placemark[0];
					myHtml = address.address;
					myHtml = myHtml + "<br><input type='button' value='Ближайшие маршруты к этой точке' OnClick='search("+x+","+y+");'>";
					marker.openInfoWindowHtml(myHtml);
				});		
              });
	      GEvent.trigger(marker, "click");
            }
          }
        );
      }
    }
	
	
function geocode_text(coords) {
      var point = new GLatLng(coords);
      var myHtml="xxx";
      geocoder.getLocations(coords, function(addresses) {
              address = addresses.Placemark[0];
              myHtml = address.address;
	          myHtml = myHtml+"<br><br><input type='button' value='Ближайшие маршруты к этой точке' ";
              myHtml = myHtml+"OnClick='search(document.getElementById(\"find_x\").value,document.getElementById(\"find_y\").value);'><br/>";
	      map.openInfoWindow (coords, myHtml);
      });
}

    function load(reis) {
//	  if (reis == 0) {
    document.getElementById("find_x").value=0;
	document.getElementById("find_y").value=0;
    document.getElementById("find_x1").value=0;
    document.getElementById("find_y1").value=0;
	document.getElementById("find_x2").value=0;
    document.getElementById("find_y2").value=0;
//    }
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.enableDoubleClickZoom();
/* Create navigation elements, navigation line */
var map_ctrl=new GSmallMapControl();

/* add navigation elements */
map.addControl(map_ctrl);

map.addControl(new ExtMapTypeControl({showTraffic: true, showTrafficKey: true}));
map.enableScrollWheelZoom();

var icon = new GIcon();
icon.image = "/img/target.gif";

icon.iconsize = new GSize(16, 16);
icon.iconAnchor = new GPoint (8, 8);
icon.infoWindowAnchor = new GPoint (10, 8);

map.setCenter(new GLatLng(59.95, 30.33), 12);

var publisher_id = 'pub-9800551931396380';

var adsManagerOptions = {
  maxAdsOnMap : 2,
  style: G_ADSMANAGER_STYLE_ADUNIT,
  // The channel field is optional - replace this field with a channel number 
  // for Google AdSense tracking
  channel: '5401933543'
};

adsManager = new GAdsManager(map, publisher_id, adsManagerOptions);
adsManager.enable();

var marker1;
var marker2;

GEvent.addListener(map, 'click', function(overlay, point) {
  if(point){
  		if (document.getElementById("find_x1").value == 0) {  //first marker
			marker1 = new GMarker(point, {icon: icon, draggable: false});

//		GEvent.addListener(marker1, "dragstart", function() {
//			          map.closeInfoWindow();
//	          });

//		GEvent.addListener(marker1, "dragend", function() {
//                        var coords = marker1.getLatLng();
//			  geocode_text(coords);
//			  var newpoint = new GLatLng(coords);

//			document.getElementById("find_x2").value = document.getElementById("find_x1").value;
//			document.getElementById("find_y2").value = document.getElementById("find_y1").value;
//			  document.getElementById("find_x1").value=coords.x;
//			  document.getElementById("find_y1").value=coords.y;
//			  document.getElementById("find_x").value=coords.x;
//			  document.getElementById("find_y").value=coords.y;
//				draw_blue_line();

//			  var //debug=document.getElementById("find_x").value+"\n"+document.getElementById("find_x1").value+"\n"+document.getElementById("find_x2").value;
			  //alert (debug);
//	          });

        map.addOverlay(marker1);
	    document.getElementById("find_x").value=point.x;
	    document.getElementById("find_y").value=point.y;
        }
		if ((document.getElementById("find_x1").value > 0) && (document.getElementById("find_x2").value == 0)) { //second marker
            marker2 = new GMarker(point, {icon: icon, draggable: false});
            map.addOverlay(marker2);
	    	document.getElementById("find_x").value=point.x;
		    document.getElementById("find_y").value=point.y;
        }
		if (document.getElementById("find_x2").value > 0) {  //third+ markers
            map.removeOverlay(marker1);
            marker1 = marker2;
            map.addOverlay(marker1);
            marker2 = new GMarker(point, {icon: icon, draggable: false});
            map.addOverlay(marker2);
		    document.getElementById("find_x").value=point.x;
	    	document.getElementById("find_y").value=point.y;
        }
		if (document.getElementById("find_x1").value == 0) {
		    document.getElementById("find_x1").value = document.getElementById("find_x").value;
		    document.getElementById("find_y1").value = document.getElementById("find_y").value;
	}
		else {
	    		document.getElementById("find_x2").value = document.getElementById("find_x1").value;
		        document.getElementById("find_y2").value = document.getElementById("find_y1").value;
		        document.getElementById("find_x1").value = document.getElementById("find_x").value;
		        document.getElementById("find_y1").value = document.getElementById("find_y").value;
				draw_blue_line();
	}

		var myHtml="blah";

		var geocoder = new GClientGeocoder();
		geocoder.getLocations(point, function(addresses) {
          if(addresses.Status.code != 200) {
		  alert("reverse geocoder failed to find an address for " + point.toUrlValue());
		  }
		else {
		  address = addresses.Placemark[0];
		  myHtml = address.address;
		  myHtml = myHtml+"<br><input type='button' value='Ближайшие маршруты к этой точке' OnClick='search(document.getElementById(\"find_x\").value,document.getElementById(\"find_y\").value);'>";

		  if (document.getElementById("find_x2").value > 0) {
		  	myHtml=myHtml+"&nbsp;<input type='button' value='Найти оптимальный путь' OnClick='search2(document.getElementById(\"find_x1\").value,document.getElementById(\"find_y1\").value,document.getElementById(\"find_x2\").value,document.getElementById(\"find_y2\").value);'>";
            //myHtml=myHtml+"&nbsp;<input type='button' value='ПЦ' OnClick='search3(document.getElementById(\"find_x1\").value,document.getElementById(\"find_y1\").value,document.getElementById(\"find_x2\").value,document.getElementById(\"find_y2\").value);'>";
		  }
		  else {
		  	myHtml=myHtml+"<br/>\n<br/>\n";
		  }
		  map.openInfoWindow (
		  	point,
			myHtml);
		}
		});
	}
});

//===CUT===


GDownloadUrl("/cgi-bin/index.fcgi?act=route&reis="+reis, function(data) {
	var pn = new Array;
    var rpn = new Array;
	var xml = GXml.parse(data);

	var markers = xml.documentElement.getElementsByTagName("marker");
	for (var i = 0; i < markers.length; i++) {
	    var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
	    pn[i]=latlng;
    }

    var reverse_markers = xml.documentElement.getElementsByTagName("reverse_marker");
    for (var i = 0; i < reverse_markers.length; i++) {
        var latlng = new GLatLng(parseFloat(reverse_markers[i].getAttribute("lat")), parseFloat(reverse_markers[i].getAttribute("lng")));
        rpn[i]=latlng;
    }

 polyline = new GPolyline(pn, "#ff0055", 4);
 reverse_polyline = new GPolyline(rpn, "#ff0000", 4);

 polyline2 = polyline;
 map.addOverlay(polyline);
 map.addOverlay(polyline2);
 map.addOverlay(reverse_polyline);

});

if (reis > 0) {
	load_route(reis,1);
}

//===CUT===

}

    var hash = window.location.hash;
    if (hash.length > 1) {
            hash=hash.replace(/\#/, "");
            var values = hash.split(";");
            if (values.length == 2) {
            //    alert ('START:'+values[0]+'; FINISH:'+values[1]);
                if (values[0].length > 0) {
                    advanced_search(values[0], values[1]); 
                }
                else {
                    $('text2search').value=values[1];
                    showAddress(values[1]);
                }
            }
            else {
            //    alert ('DEST:'+values[0]);
                $('text2search').value=values[0];
                showAddress(values[0]);
            }
        }
}

      function GetWidth()
      {
              var x = 0;
              if (self.innerHeight)
              {
                      x = self.innerWidth;
              }
              else if (document.documentElement && document.documentElement.clientHeight)
              {
                      x = document.documentElement.clientWidth;
              }
              else if (document.body)
              {
                      x = document.body.clientWidth;
              }
              return x;
      }

      function GetHeight()
      {
              var y = 0;
              if (self.innerHeight)
              {
                      y = self.innerHeight;
              }
              else if (document.documentElement && document.documentElement.clientHeight)
              {
                      y = document.documentElement.clientHeight;
              }
              else if (document.body)
              {
                      y = document.body.clientHeight;
              }
              return y;
      }

    function ShowAdvancedSearchForm() {
    if ($('comments').style.display != "block") {
        $('comments_title').innerHTML="&nbsp;Расширенный поиск маршрута";
        $('comments').style.left = (GetWidth()/2)-300;
        $('comments').style.top = (GetHeight()/2)-200;

        GDownloadUrl("/cgi-bin/index.fcgi?act=advanced_search_form", function(data) {
                $('comments_content').innerHTML=data;
                //new Autocomplete('start_address', { serviceUrl:'/cgi/streets.cgi' });
                //new Autocomplete('end_address', { serviceUrl:'/cgi/streets.cgi' });
                $('comments').style.display = "block";
            });
        }

    else {
        $('comments').style.display = "none";
    }
    }

    function ShowSearchRes(id) {
        if (id == 0) {
            $('search_body').innerHTML='';
            $('search').style.visibility='hidden';
        }
    }

	function ShowComments(id, route) {
	if ($('comments').style.display != "block") {
		$('comments').style.display = "block";
		$('comments_title').innerHTML="&nbsp;Маршрутное такси К-"+route+": отзывы посетителей";
		
		$('comments').style.left = (GetWidth()/2)-300;
		$('comments').style.top = (GetHeight()/2)-200;
		
		GDownloadUrl("/cgi-bin/index.fcgi?act=comments&reis="+id, function(data) {
				$('comments_content').innerHTML=data;
				//$('comments_content').style.overflow="scroll";
			});
		}
	else {
		$('comments').style.display = "none";
	}
	}

	function add_taxi_comment() {
		$("from_name").disabled=true;
        $("textarea").disabled=true;
		$("sendbutton").disabled=true;
		
		var msg=$("textarea").value;
		var from_name=$("from_name").value;
		var taxi_id=$("taxi_id").value;
		
		var myAjax = new Ajax.Request('/cgi-bin/index.fcgi', {
			parameters: {
				act: 'add_taxi_comment', 
				from_name: from_name,
				taxi_id: taxi_id,
				msg: msg
			},
		onSuccess: function() {
			ShowComments(0);
            $('current_comments_number'+taxi_id).value++;
            $('comments_counter'+taxi_id).innerHTML=$('current_comments_number'+taxi_id).value;
		}
		});
	}
	
	function load_route(reis,move) {

	$('comment').style.visibility = "visible";
	GDownloadUrl("/cgi-bin/index.fcgi?act=route&reis="+reis, function(data) {
    var pn = new Array;
    var rpn = new Array;
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    var reverse_markers = xml.documentElement.getElementsByTagName("reverse_marker");

    remove_arrows();
	map.removeOverlay(polyline);
    map.removeOverlay(polyline2);
    map.removeOverlay(reverse_polyline);

	for (var i = 0; i < markers.length; i++) {
		var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
		pn[i]=latlng;
	}

    for (var i = 0; i < reverse_markers.length; i++) {
        var latlng = new GLatLng(parseFloat(reverse_markers[i].getAttribute("lat")), parseFloat(reverse_markers[i].getAttribute("lng")));
        rpn[i]=latlng;
    }

	polyline = new GPolyline(pn, "#ff0055", 4, 0.5);
    reverse_polyline = new GPolyline(rpn, "#ff0000", 4, 0.5);

	map.addOverlay(polyline);
    map.addOverlay(reverse_polyline);
    //add arrows

    midLineArrows(rpn,rpn);
    midLineArrows(pn,rpn);

	if (move) {
		map.panTo(pn[1]);
	}
});
	
	GDownloadUrl("/cgi-bin/index.fcgi?act=info&reis="+reis, function(data) {
		$('info').innerHTML=data;
		$('comment').style.visibility = "hidden";
	});
	$('comment').style.visibility = "hidden";
}

    function load_route2(reis,reis2,move) {

        $('comment').style.visibility = "visible";
        GDownloadUrl("/cgi-bin/index.fcgi?act=route&reis="+reis+"&reis2="+reis2, function(data) {
            var pn = new Array;
            var xml = GXml.parse(data);
            var markers = xml.documentElement.getElementsByTagName("marker");

            remove_arrows();
            map.removeOverlay(polyline);
            map.removeOverlay(polyline2);
            map.removeOverlay(reverse_polyline);

            for (var i = 0; i < markers.length; i++) {
                var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
                pn[i]=latlng;
            }
            polyline = new GPolyline(pn, "#ff0055", 4, 0.5);
            map.addOverlay(polyline);
        var pn2 = new Array;
        var markers2 = xml.documentElement.getElementsByTagName("marker2");

        for (var j = 0; j < markers2.length; j++) {
            var latlng2 = new GLatLng(parseFloat(markers2[j].getAttribute("lat")), parseFloat(markers2[j].getAttribute("lng")));
            pn2[j]=latlng2;
        }
        polyline2 = new GPolyline(pn2, "#00aa00", 4, 0.7);

        map.addOverlay(polyline2);
        });
   
		$('info').innerHTML='';
		
        GDownloadUrl("/cgi-bin/index.fcgi?act=info&reis="+reis+"&hl=red", function(data) {
            $('info').innerHTML+=data;
        });

        GDownloadUrl("/cgi-bin/index.fcgi?act=info&reis="+reis2+"&hl=green", function(data) {
            $('info').innerHTML+=data;
        });

        $('comment').style.visibility = "hidden";
    }

	function search (x, y) {
		$('comment').style.visibility = "visible";
		GDownloadUrl("/cgi-bin/index.fcgi?act=search&type=1&x="+x+"&y="+y, function(data) {
		var xml = GXml.parse(data);
		var results = xml.documentElement.getElementsByTagName("result");

		$('search_body').innerHTML=out_search_results(results);

		$('comment').style.visibility = "hidden";
        $('search').style.visibility = "visible";
		map.closeInfoWindow();
		load_route(results[0].getAttribute("id"),0);
		});
	}

	function search2 (x1, y1, x2, y2) {
		$('comment').style.visibility = "visible";
		GDownloadUrl("/cgi-bin/index.fcgi?act=search&type=2&x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2, function(data) {
		var xml = GXml.parse(data);
		var results = xml.documentElement.getElementsByTagName("result");

		$('search_body').innerHTML=out_search_results(results);
        load_route(results[0].getAttribute("id"),0);
        });

        GDownloadUrl("/cgi-bin/index.fcgi?act=search&type=3&x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2, function(data) {
            $('search_body').innerHTML+="<hr/><b>Возможно, удастся совершить маршрут с пересадкой:</b><br/><br/>\n";
            var xml = GXml.parse(data);
            var results = xml.documentElement.getElementsByTagName("result");
            $('search_body').innerHTML+=out_search_results_tranzit(results);

		$('comment').style.visibility = "hidden";
        $('search').style.visibility = "visible";
		map.closeInfoWindow();
		});
	}

    function search3 (x1, y1, x2, y2) {
// поиск с пересадками
        $('comment').style.visibility = "visible";
        GDownloadUrl("/cgi-bin/index.fcgi?act=search&type=3&x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2, function(data) {
            var xml = GXml.parse(data);
            var results = xml.documentElement.getElementsByTagName("result");
            $('search_body').innerHTML=out_search_results_tranzit(results);

            $('comment').style.visibility = "hidden";
            $('search').style.visibility = "visible";
            map.closeInfoWindow();
            });
    }
//]]>

function out_search_results(results) {
		var res="";
		for (var i = 0; i < results.length; i++) {
			var id = results[i].getAttribute("id");
			var num = results[i].getAttribute("number");
			var dist = results[i].getAttribute("distance");
			res+= "<b><a href=\"/k-"+num+".html\" ";
			if (navigator.appName != "Microsoft Internet Explorer") {
				res+= "OnClick=\"load_route("+id+",0); return false;\"";
			}
			res+= ">К-"+num;
			res+= "</a></b>&nbsp;"+dist+" km<br>\n";
		}
		return (res);
}

function out_search_results_tranzit(results) {
        var res="";
        for (var i = 0; i < results.length; i+=2) {
            var id = results[i].getAttribute("id");
            var id2 = results[i+1].getAttribute("id");
            var num = results[i].getAttribute("number");
            var num2 = results[i+1].getAttribute("number");
            var dist = results[i].getAttribute("distance");
            res+= "<b><a href=\"/k-"+num+".html\" ";
            if (navigator.appName != "Microsoft Internet Explorer") {
                res+= "OnClick=\"load_route2("+id+","+id2+",0); return false;\"";
            }
            res+= "><font color=\"red\">К-"+num;
            res+= "</font> + <font color=\"green\">К-"+num2;
            res+= "</font></b></a><br>\n";
        }
        return (res);
}


function search_text_mode (text) {
	$('comment').style.visibility = "visible";
	GDownloadUrl("/cgi-bin/index.fcgi?act=search_text_mode&text="+text, function(data) {
		$('search_body').innerHTML=data;
		$('comment').style.visibility = "hidden";
        $('search').style.visibility = "visible";
	});
}

function draw_blue_line() {
	if (polyline_straight) {
        	map.removeOverlay(polyline_straight);
	}
	if (document.getElementById("find_x2").value>0) {
		var start_finish = new Array;
	        start_finish[0] = new GLatLng(document.getElementById("find_y1").value, document.getElementById("find_x1").value);
        	start_finish[1] = new GLatLng(document.getElementById("find_y2").value, document.getElementById("find_x2").value);
			polyline_straight = new GPolyline(start_finish, "#0000ff", 3);
        	map.addOverlay(polyline_straight);
	}
}

function draw_blue_line_params(x1, y1, x2, y2) {
    if (polyline_straight) {
            map.removeOverlay(polyline_straight);
    }
    var start_finish = new Array;
        start_finish[0] = new GLatLng(y1, x1);
        start_finish[1] = new GLatLng(y2, x2);
        polyline_straight = new GPolyline(start_finish, "#0000ff", 3);
        map.addOverlay(polyline_straight);
}


