  var gmap;
  var global_marker;
  var global_marker_X;
  var global_marker_Y;
  var global_marker_ID;
  var bounds_X=37.23252;
  var bounds_X_dif=0.70417;
  var bounds_Y=55.95388;
  var bounds_Y_dif=0.46932;
  var navi_width=91;
  var navi_height=107;
  var map_width=600;
  var map_height=450;
  var yand_dir_div;

  function onLoad(){
    street_form.street.focus();
  };

  function mainMapMove(evt){
    alert(evt.x+' '+evt.y);
  };

  function rnd6(x){
    x=''+x;
    nn= x.split('.');
    r='';
    if (nn[0]) r=nn[0];
    if (nn[1]) r=r+'.'+nn[1].substr(0,6);
    return r;
  };

  function rnd5(x){
    x=''+x;
    nn= x.split('.');
    r='';
    if (nn[0]) r=nn[0];
    if (nn[1]) r=r+nn[1].substr(0,5);
    return r;
  };

  function two(n){
    if(n<0)n=0;
    n=''+n;
    if (n.length=1) n='0'+n;
    return n;
  };


function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

  function navi_click(mouseEvent){
    n=document.getElementById("navi");
	if (!mouseEvent) mouseEvent = window.event;
	var sourceElement = (mouseEvent.target)?mouseEvent.target:mouseEvent.srcElement;
	var x = mouseEvent.clientX - sourceElement.offsetLeft;
	var y = mouseEvent.clientY - sourceElement.offsetTop;
    x=x-findPosX(n)-2;
    y=y-findPosY(n)-1;

    lX= x * bounds_X_dif / navi_width + bounds_X;
    lY= bounds_Y - y * bounds_Y_dif / navi_height;

    get_link.style.visibility='hidden';
    address.innerHTML='&nbsp;';
    gmap.centerAndZoom(new GPoint(lX, lY), 0);
  };

  function moveNaviPoint(X,Y){
    // Базовые значения скопированы с главной страницы, в строке описания элемента navi_point: left и top
    if ((X<0)||(X>navi_width)||(Y<0)||(Y>navi_height)){
      navi_point.style.visibility='hidden';
      return false;
    };

    navi_point.style.left=507+X;
    navi_point.style.top=Y;
    navi_point.style.visibility='visible';
    };

  function hideMap(){
    map_container.style.visibility='hidden';
    navi_point.style.visibility='hidden';
    address.innerHTML='&nbsp;';
    footer.style.visibility='hidden';
    get_link.style.visibility='hidden';

    map_container.style.position='absolute';
    if (document.getElementById("map_yadir"))
      map_yadir.style.display="block";
  };


  function showMapAddress(X, Y, Z, nn){
    street=street_name.innerHTML;
    address.innerHTML='<br>Дом по адресу <b><font color=#FF0000>'+street+', '+nn+'</font></b> находится в центре карты:';
    address.style.visibility='visible';
    showMap(X, Y, Z, nn);
  };

  function dec2deg(dec){
    var sdec=dec+'';
    var n=sdec.split('.');
    n=n[0];
    if (n.length<2) n='0'+n;
    var r=n+'* '; // Google, зараза, не позволяет в TITLE маркеру поставить значек градусов &deg; :(

    dec=dec-n;
    dec=dec*60;
    sdec=dec+'';
    n=sdec.split('.');
    n=n[0];
    if (n.length<2) n='0'+n;
    r=r+n+"' ";

    dec=dec-n;
    dec=dec*60;
    sdec=dec+'';
    n=sdec.split('.');
    n=n[0];
    if (n.length<2) n='0'+n;
    r=r+n+'" ';

    return r;
  };

  function showMarker(lat, lan, id){
    var point = new GPoint(lan, lat)
    global_marker_X=point.x;
    global_marker_Y=point.y;
    global_marker_ID=id;
    var marker_title=' '+dec2deg(global_marker_Y)+' СШ'+" \n "+dec2deg(global_marker_X)+' ВД';

    global_marker=new GMarker(point, { title: marker_title });
    gmap.addOverlay(global_marker);
  };


  function onMapMoveEnd(){
    center=gmap.getCenterLatLng();
    get_link.style.visibility='hidden';
    X = Math.round((center.x-bounds_X)*navi_width/bounds_X_dif)-1;
    Y = Math.round((bounds_Y-center.y)*navi_height/bounds_Y_dif)-1;
    moveNaviPoint(X,Y);
    // Сохраняем координаты и машстба в кукисах
    save_cookie_coords();
  };


  function onMapClick(marker, point){
    if (marker){ // Если кликнули по маркету, то убираем его
      gmap.removeOverlay(marker);
      global_marker=null;
    }else{
      if (global_marker){ // Если маркер уже есть на карте, то убираем его
        gmap.removeOverlay(global_marker);
      };
      // На место клика ставим маркер
      showMarker(point.y, point.x, 0)
    };
  };

  function showMap(X, Y, Z, nn){
    map_container.style.position='relative';
    map_container.style.visibility='visible';
    footer.style.visibility='visible';
	if (document.getElementById("map_yadir"))
      map_yadir.style.display="none";
    if(!gmap){
      gmap = new GMap(document.getElementById("map"));
      gmap.setMapType(G_HYBRID_MAP);
      gmap.addControl(new GLargeMapControl());
      GEvent.addListener(gmap, "moveend", onMapMoveEnd);
      GEvent.addListener(gmap, "click", onMapClick);
    };

    gmap.centerAndZoom(new GPoint(Y, X), Z);
  };

  function clear_page(){
    document.cookie="map_coord=; expires=Sun,31-Dec-2010; path=/map/";
	document.location='/map/'
  };

  function save_cookie_coords(){
    var center=gmap.getCenterLatLng();
    var zoom=gmap.getZoomLevel();
    var cook=rnd5(center.y)+rnd5(center.x)+two(zoom);
//    alert(cook);
    document.cookie="map_coord="+cook+"; expires=Sun,31-Dec-2010; path=/map/";
  };

  function getLink(){
    var center=gmap.getCenterLatLng();
    var zoom=gmap.getZoomLevel();
    var url='http://www.mtsoft.ru/map/'+rnd5(center.y)+rnd5(center.x)+two(zoom)+'/';

    var marker_url='';
    if (global_marker){
      marker_url=rnd5(global_marker_Y)+rnd5(global_marker_X)+two(global_marker_ID);
      url=url+marker_url+'/';

      // Если это длинная ссылка, то расширяем
      get_link.style.width=450;
      get_link.style.left=75;
    }else{
      // Если это короткая ссылка, то сужаем
      get_link.style.width=350;
      get_link.style.left=125;
    };

    link_form.get_link_text.value=url;

    get_link.style.visibility='visible';
  };

  function showFullScreen(){
    window.open('about:blank', 'fullscreen');
    var center=gmap.getCenterLatLng();
    var zoom=gmap.getZoomLevel();
    full_screen_form.X.value=center.x;
    full_screen_form.Y.value=center.y;
    full_screen_form.Z.value=zoom;
    full_screen_form.submit();
  };

  function sample(t){
    street_form.street.value=t;
    search_street(street_form);
    return false;
  };


  function loadXMLDoc(url) {
      // для Mozilla, Safari, Opera:
      if (window.XMLHttpRequest) {
          req = new XMLHttpRequest();
          req.onreadystatechange = fill_srch_result;
          req.open("GET", url, true);
          req.send(null);
      }
      // для IE:
      else if (window.ActiveXObject) {
          req = new ActiveXObject("Microsoft.XMLHTTP");
          if (req) {
              req.onreadystatechange = fill_srch_result;
              req.open("GET", url, true);
              req.send();
          }
      }
  }

  function load(url){
    if (typeof window.ActiveXObject != 'undefined' ) {  // Это IE
      xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
      xmlDoc.onreadystatechange = fill_srch_result ;


    }
    else {
      xmlDoc = new XMLHttpRequest();     // Это FireFox
      xmlDoc.onload =  fill_srch_result;
    };
    xmlDoc.open( "GET", url, true );
    xmlDoc.send( null );
  };

  function fill_srch_result(){
    if ( xmlDoc.readyState != 4 ) return ;
    target=document.getElementById ('srch_result');

    if(!target) return '';

//    alert(xmlDoc.responseText);

    srch_result.style.visibility='visible';

    target.innerHTML= xmlDoc.responseText;
  };

  function search_street(f){
    if (f.street.value.length<3){
      alert ('Введите не меньше 3-х букв!');
      return false;
    };

//    hideMap();
    rnd=rand(1000000);
    url='/map/?r='+rnd+'&street='+encodeURIComponent(f.street.value);

//    alert(url);

    load(url);
    address.innerHTML='&nbsp;';

    return false;
  };

  function search_numbers(str_id){
    rnd=rand(1000000);
    url='/map/?street_id='+str_id+'&r='+rnd;
    load(url);

    return false;
  };


  function show_yad_map(){
    var center=gmap.getCenterLatLng();
    var zoom=gmap.getZoomLevel();
	var cX=13772/0.218975;
	var cY=37285/0.333750;
	var dX=center.x-37.497678;
	var dY=center.y-55.666772;
	var mapX=Math.round(dX*cX);
	var mapY=Math.round(dY*cY);
	var url='http://maps.yandex.ru/map.xml?mapID=1&size=1&scale=9&mapX='+mapX+'&mapY='+mapY+'&act=5&mapWidth=960';
	w=window.open(url, 'yandex_map');
	w.focus();
	return false;
  };

  now = new Date();
  seed = now.getTime();
  function rand(range) {
    seed = ((seed % 4652353) * 492113) + 1;
    return(seed % range);
  }