 function xGetURLArguments()
{
  var idx = location.href.indexOf('?');
  var params = new Array();
  if (idx != -1) {
    var pairs = location.href.substring(idx+1, location.href.length).split('&');
    for (var i=0; i<pairs.length; i++) {
      nameVal = pairs[i].split('=');
      params[i] = nameVal[1];
      params[nameVal[0]] = nameVal[1].replace(/%20/g,"");
    }
  }
  return params;
}

function addDOMLoadEvent(f){if(!window.__ADLE){var n=function(){if(arguments.callee.d)return;arguments.callee.d=true;if(window.__ADLET){clearInterval(window.__ADLET);window.__ADLET=null}for(var i=0;i<window.__ADLE.length;i++){window.__ADLE[i]()}window.__ADLE=null};if(document.addEventListener)document.addEventListener("DOMContentLoaded",n,false);/*@cc_on @*//*@if (@_win32)document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");var s=document.getElementById("__ie_onload");s.onreadystatechange=function(){if(this.readyState=="complete")n()};/*@end @*/if(/WebKit/i.test(navigator.userAgent)){window.__ADLET=setInterval(function(){if(/loaded|complete/.test(document.readyState)){n()}},10)}window.onload=n;window.__ADLE=[]}window.__ADLE.push(f)}    

 var umap = new UserMap();
 var urefmap = new UserRefMap();
  var timer;
  var layers = new Array("l_1.gif", "l_13.gif", "l_7.gif", "l_12.gif", "l_5.gif", "l_11.gif", "l_10.gif", "l_6.gif", "l_4.gif", "l_3.gif");    
    umap.onstatechanged= function(state)
    {
			if (state==1) //when initialized
			{
			    
			   
			}
			else if (state==2)
		        {
				    if (typeof(document.UserMap.mapLabels)!="undefined")
		            {
		        	   var mc = xGetElementById (document.UserMap.mapCanvas);
          for(var key in document.UserMap.mapLabels)
          {
          	  mla = document.UserMap.mapLabels[key];
          	  if (typeof mla != 'object') continue;
          	  labels = mla.labels;
          var html ='<table border=0 cellcpacing=0 cellpadding=0><tr>'
          html+='<td valign=top width="16">' + createImageList (key) + '</td>';
          html +='<td valign=top>';
          for(var i=0; i < labels.length; i++)
                html+='&nbsp;<input  type="text" style="font-size:10px;border:0" id="txt-'+ key +'" value="' + labels[i].label+'"/>' ; 
		//  var  l =lindex+1 ;
          html+='</td><td valign=top><img class="labelClose" onclick="saveLabel(\''+ key +'\')" src="/img/map/save.gif" border="0" alt="Сохранить" title="Сохранить" width="12px" height="12px"/>&nbsp;<img class="labelClose" onclick="hideLabel(\''+ key +'\')" src="/img/map/i-close.gif" border="0" alt="Закрыть" title="Закрыть" width="12px" height="12px"/></td></tr></table>';
            
          	var pt = document.UserMap.geoToPix(labels[0].x, labels[0].y);
          	setLabel (mla.dom, xPageX(mc) +  pt[0] ,xPageY(mc)+ pt[1], html);                                       
          }  
		            }
		            
		        }
    }
	function layerState (lname)
	{
	
		var l = document.UserMap.findLayer (lname);		
		l.visible = !l.visible;
		document.UserMap.draw();
		
	}
    umap.onrullerchange=function(current, total)
    {
	var mc = xGetElementById(this.mapCanvas);         
	var info = xGetElementById(this.mapCanvas+"_INFO");   

	xShow(info);

	var d = total.toFixed(2);
	var d0 = current.toFixed(2);
	var du = "м";
	var d0u = "м";
	if (d / 1000 > 1){
	    d /= 1000;
	    du = "км";
	    d = d.toFixed(2);
	}
	if (d0/1000> 1){
	    d0 /= 1000;
	    d0u = "км";
	    d0 = d0.toFixed(2);
	}

	var html = "<table border=0 cellcpacing=0 cellpadding=0><tr><td valign='top'></td>";
	html += "<td class='f1'>Расстояние:&nbsp;" + d0 + "&nbsp;" + d0u;
	html += "<br>Всего:&nbsp;" + d + "&nbsp;" + du + "</td>";
	html += "<td valign='top'><img class='labelClose' src='/img/map/i-close.gif' onclick='document.UserMap.showRuller(true);' border='0' alt='Закрыть' width='12px' height='12px'></td></tr></table>";

	info.innerHTML =  html;     
	xMoveTo(info, xPageX(mc) + 2, xPageY(mc) + 2);
    }
    
    
    function replaceStr(str, find, replace){
	if (find == ""){
	    return str;
	}
	var res = "";
	while (true){
	    i = str.indexOf(find);
	    if (i >= 0){
		res += str.substr(0, i) + replace;
		str = str.substr(i + find.length);
	    }
	    else{
		break;
	    }
	}
	return res + str;
    }

    
    umap.onresults= function(res)
    {
      var txt='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><link type="text/css" rel="stylesheet" href="/plain/map.css"><title>географическая точка</title></head><body class="popup">'; 
      
      if (res==null) {alert ('Ничего не найдено!');return}
      if (res.TablesCount==0) {alert ('Ничего не найдено!');return}
      for (var t=0; t < res.TablesCount; t++)
      {
		  txt+="<div class='type'>"+res.Tables[t].TableName+"</div>";
		  for (var i=0; i < res.Tables[t].Rows.length;i++)
         	{
         		txt+='<div class="result-row">'
         		if(res.Tables[t].Rows[i][2] && res.Tables[t].Rows[i][2]!='')
         		{
         			txt+='<h1><a>' + res.Tables[t].Rows[i][2] + '</a></h1>';
         			if (res.Tables[t].Rows[i][3])
         			{
         				if (res.Tables[t].Columns[3]=='URL')
         					txt+='<div class="txt"><a href="' + res.Tables[t].Rows[i][3] + '" target="_blank">Информация</a></div>';
         				else
         					txt+='<div class="txt">' + res.Tables[t].Rows[i][3] + '</div>';
         			}
         			txt+='<div class="zoom"><a href="javascript:window.opener.document.UserMap.queryObject(\''+ res.Tables[t].Rows[i][1] +'\');">Посмотреть на карте</a></div>';
         		}
         		else
		         	{
		         		txt+='<h1><a href="javascript:void(0);"></a></h1>';
		         		txt+='<div class="txt">Нет данных</div>';		         	
		         	}
		         txt+="</div>";
         	}
         	
         		
         	
      }   	
      
      txt+='<div class="close" ><button type="button" onClick="window.close();"><div>Закрыть окно</div></button> </body></html> '; 
      h = window.open('', 'gpoint', 'height=300,width=600,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes');
      if (h)
      {
        h.document.open("text/html", "replace");
        h.document.write(txt);
	h.document.close();
      }
    }
    
    function toggle(lname, vis)
    {
	var layer = document.UserMap.findLayer(lname);
	if (layer){
    	    if(typeof(vis)=="undefined"){
		layer.visible =!layer.visible;
	    }
	    else{
		layer.visible =vis;
	    }
	}
	document.UserMap.draw();
    }
    
    

    
    
    window.onresize = function()
    {
    	window.clearTimeout(timer);        
     	timer = window.setTimeout("updateMap();", 500);
     	if (window.event)
     	{
     		window.event.cancelBubble = true;
     	}
  
    }

    function moveMap()
    {
      if (event)
        umap.move(event.srcElement.innerText);
    }
    
    function showLink (v)
    {
    	if (!v)
    	{
    		var pl =xGetElementById ('permalink');
    		pl.parentNode.removeChild(pl);
    		return;
    	}
    		var pl =xGetElementById ('permalink');
    		if (!pl)
    		{
			    pl = document.createElement('div');
			    
				pl.id = 'permalink';
			
			//	pl.style.marginLeft = '50px';
				xAppendChild (document.body, pl);
			}		
					
			var loc =  window.location.href.split ("?");					
			var lnk =loc[0]+'?params='+ document.UserMap.cx + ',\r\n' +  document.UserMap.cy +',\r\n'+ document.UserMap.zoom ;					
			html = '<div class="interactive_link">';
			html+= '<div class="close_tab"><a href="javascript:showLink(false)"><img src="/img/map/link_tab_close.gif" width="10" height="10" alt="close"></a></div>';
			html +='<div class="link_area">'+lnk+'</div>';
			html +='</div>';
			pl.innerHTML = html;

		
			var x = xPageX(document.UserMap.dom) + (xWidth(document.UserMap.dom) -xWidth(pl))/2 ;
			xLeft (pl,  x);
			xTop (pl, xPageY(document.UserMap.dom) + xHeight(document.UserMap.dom) - xHeight(pl) - 20);
			xShow(pl);
    }
    
    function navButtonClick(This){
		
		
		var tool =This.parentNode.getAttribute('tool');
	

	   
		
		switch (tool){
		 
		
			case 'PERMALINK':
				{
					showLink(true);
				}
				break;
			case 'PRINT':
			{
					var w = window.open( 'print_map.html?params='+ document.UserMap.cx + ',' +  document.UserMap.cy +','+ document.UserMap.zoom, null, "resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no;"); //"height="+(document.UserMap.height+200) +",width="+(document.UserMap.width+20) +",
	                if (w)
	                {
	              	    w.focus();
	                }
			}	
				break; 
		 	case 'REFRESH':
		 		umap.gotoState(0);
		 		break;
		 	case 'SAVEIMAGE':
		 	{
		 			var i = xGetElementById(document.UserMap.mapCanvas +'_MAPIMAGE');
		 			var src = i.src + '&save=1'	;
		 			window.open( src);
		 	}
	             break;
		    case 'ZOOMOUT':
		    case 'ZOOMIN':
		   	case 'PAN':
		   	case 'INFO':
		   	case 'RULLER':
		   	case 'LABELER':		   		
		   	case 'LINER':			   		
		   	{
		 		   var el = xGetElementById ('toolbar');
			       for(var button= 0 ; button <  el.childNodes.length; button ++)
			       {
			       	   try
			       	   {
			       	   	   // if (el.childNodes[button].getAttribute('tool')==umap.mapTool)
				       	   	el.childNodes[button].firstChild.firstChild.src = '/img/map/'+	el.childNodes[button].getAttribute('i')+'_o.gif';

			       	   }
			       	   catch (e){}
			       	   
			       }
			    umap.setupTool(tool);
			    This.firstChild.src = '/img/map/'+This.parentNode.getAttribute('i')+'_p.gif';

	    	}
			break;
		    
		    
		}
		
		//document.images[pics[itemId][0]].src = pics[itemId][2];
    }
     function updateMap(bCalcOnly){
      clientWidth = Math.floor((document.body.clientWidth - 250 - 31)*0.67);
      mapSize = clientWidth - 50;
      if (mapSize < 380){
        mapSize = 380;
      }
      buttonSize = Math.floor((mapSize - 40)/4);
      
      if (!bCalcOnly)
      {
      	  document.UserMap.setSize (mapSize, mapSize);
      	  xMoveTo(document.UserRefMap.dom, 0, 0);      	   
      	  window.clearTimeout(timer);     
      }
      else           
      	return mapSize;
    }
   function handle(delta, cx, cy)
   {
   	   if (document.UserMap.state !=0) return;
   	   	if (delta < 0 )
   	   		document.UserMap.zoom /=2;
   	   	else
   	   		document.UserMap.zoom *=2;
   	   	
   	   //	document.UserMap.cx = cx;
   	   	//document.UserMap.cy = cy;
   	   	document.UserMap.draw();
   }
   umap.mouseWheel = function (event)
   {
		var delta = 0;
		
		var xEvt = new xEvent( event);
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
                /** In Opera 9, delta differs in sign as compared to IE.
                 */
                if (window.opera)
                        delta = -delta;
        } else if (event.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -event.detail/3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta)
        {
        		var pt = document.UserMap.pixToGeo(xEvt.offsetX, xEvt.offsetY);
                handle(delta, pt[0], pt[1]);
        }
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault)
                event.preventDefault();
		event.returnValue = false;
   }
   
     
     
addDOMLoadEvent( function ()
 {  
          
      var mapSize = updateMap (true);    
      
      
      umap.initialize('map', mapSize, mapSize);
      urefmap.initialize(umap, 'smallmap', 161, 161, "#FF7031", '/img/map/loadingbar.gif', false);
     
      
      var request = xGetURLArguments();
      
      if (request["params"])
      {
      	  var pa = request["params"].split (',');
      	  var cx = parseFloat(pa[0]);
      	  var cy = parseFloat(pa[1]);
      	  var zoom = parseFloat(pa[2]);
      	  if (cx && cy && zoom)
      	  {
      	  	  umap.cx = cx;
      	  	  umap.cy = cy;
      	  	  umap.zoom = zoom;
      
      	  }
      }
      
      var dv = document.createElement ('div');
   	  dv.id = "user-lines";
   	   		
   	  xGetElementById(document.UserMap.mapCanvas+"_MAP").appendChild(dv);
   	   	
      xGetElementById("mapCanvas_REFMAP").style.position = "";
      /*var el = xGetElementById ('toolbar');
      for(var button= 0 ; button <  el.childNodes.length; button ++)
      {
      	  xAddEventListener(el.childNodes[button],'click',  navButtonClick);
      }*/
      umap.addCustomTool ('LABELER',umap.createLabel,'cursor-area' )      ;
      umap.addCustomTool ('LINER',umap.createLine,'cursor-area' )      ;
      
      var mc = xGetElementById ('map');
     // xAddEventListener(mc, "mousewheel", umap.mouseWheel, false);
      
      if (mc.addEventListener)
        /** DOMMouseScroll is for mozilla. */
        mc.addEventListener('DOMMouseScroll', umap.mouseWheel, false);

      	  
      umap.draw();
});
umap.createLine = function (e)
{
	if (document.UserMap.mapTool!="LINER") return;
   var xEvt = e.xEvt;
   
   var b  = (xIE4Up?1:0);  
   if (e.button == b)
   {
   	   	if (!document.UserMap.userLineJG ){
   	   		umap.initUserLines();
   	   	}
        var x=xEvt.offsetX;
        var y=xEvt.offsetY;
        var el = xEvt.target;        
        var key = new String(el.id);
       if (key.indexOf(document.UserMap.mapCanvas)==-1)
       {
         x = xLeft (el) + x;
         y = xTop (el) + y;
       }
        
       document.UserMap.userLineJG.fillEllipse(x-1, y-1, 2, 2);
       if (document.UserMap.userLineObj.prevPoint!=null)
       {
            var pt = document.UserMap.geoToPix(document.UserMap.userLineObj.prevPoint[0], document.UserMap.userLineObj.prevPoint[1])            
            document.UserMap.userLineJG.drawLine(pt[0],pt[1], x, y);
            
        }
        else
        {
            document.UserMap.userLineObj.object = new Array();  
                                        
        }  
        document.UserMap.userLineJG.paint();                                         
        document.UserMap.userLineObj.prevPoint =  document.UserMap.pixToGeo(x, y);
        document.UserMap.userLineObj.objectIndex++;                                    
        document.UserMap.userLineObj.object [document.UserMap.userLineObj.objectIndex] =  document.UserMap.pixToGeo(x, y); 
        document.UserMap.showLineLabel();
    }
    else
    {
               document.UserMap.showLineLabel();
    }
    
}
umap.initUserLines  = function()
{
		 document.UserMap.userLineJG = new jsGraphics("user-lines");
   	   	 document.UserMap.userLineObj = new Object();
   	   	 document.UserMap.userLineObj.objectIndex = -1;
   	   	 document.UserMap.userLineObj.text = '';
   	   	 
   	   	 document.UserMap.userLineJG.setColor("#0000FF");  
         document.UserMap.userLineJG.clear();
}
umap.ondrawend = function(){
	
  if (xGetElementById ('permalink'))
  	  showLink(true);
  if (!document.UserMap.userLineJG ) return;
    
    {
         document.UserMap.userLineJG.setColor("#0000FF");  
         document.UserMap.userLineJG.clear();
         //this.prevPoint = this.pixToGeo(this.prevPoint[0], this.prevPoint[1])
         var pt1, pt2;
         for (var i=1; i <= document.UserMap.userLineObj.objectIndex; i++)
         {
            
              pt1 = this.geoToPix(document.UserMap.userLineObj.object[i-1][0], document.UserMap.userLineObj.object[i-1][1]);  
              pt2 = this.geoToPix(document.UserMap.userLineObj.object[i][0], document.UserMap.userLineObj.object[i][1]);  
              document.UserMap.userLineJG.fillEllipse(pt1[0]-1, pt1[1]-1, 2, 2);
              document.UserMap.userLineJG.drawLine(pt1[0], pt1[1], pt2[0], pt2[1]); 
         }
         if (typeof(pt2)!="undefined")
            document.UserMap.userLineJG.fillEllipse(pt2[0]-1, pt2[1]-1, 2, 2);
         if (document.UserMap.userLineObj.objectIndex >=1 )document.UserMap.userLineJG.paint();
        document.UserMap.showLineLabel();
    }
}
function closeLine (key)
{
	 document.UserMap.userLineJG.clear();
	  	 document.UserMap.userLineObj = new Object();
   	   	 document.UserMap.userLineObj.objectIndex = -1;
   	   	 document.UserMap.userLineObj.text = '';
   	   	 
   	   	 document.UserMap.userLineJG.setColor("#0000FF");  
         document.UserMap.userLineJG.clear();
         
        var ml = xGetElementById(key);
	    if (ml)
	    {
	    	ml.parentNode.removeChild(ml);

	    }
	 	
}
function saveLine(key)
{
	umap.AddTempLine (document.UserMap.userLineObj.object,xGetElementById('txt-user-line-label').value, '2.2.33023' );	
	
}
umap.onlineadded = function ()
{
	closeLine('user-line-label');	
}
function createLineLabel(id){

    var info = xGetElementById(id);
    if (info) return info;
    info = document.createElement("div");
    info.id = id;//"maplabel" + (++lindex);
    info.style.position= "absolute";  
    info.style.visibility="hidden";
	info.style.textAlign='left';

    var lImage = new Image();
    lImage.src = "/img/map/i-legend_point.gif";
    lImage.style.width = "15px";
    lImage.style.height = "11px";
    lImage.style.marginTop = "-1px";  
 
    var info_text = document.createElement("div"); 
    info_text.style.border="1px solid";
    info_text.style.backgroundColor="#ffffff";
    info_text.className = "f1";
    xAppendChild (info, info_text); 
    xAppendChild (info, lImage);
    xAppendChild (document.body, info);
	var key = id;
     var html ='<table border=0 cellcpacing=0 cellpadding=0><tr>'       
          html +='<td valign=top>';
          
                html+='&nbsp;<input  type="text" style="font-size:10px;border:0" id="txt-'+ key +'" value="Линия"/>' ; 
		//  var  l =lindex+1 ;
          html+='</td><td valign=top><img class="labelClose" onclick="saveLine(\''+ key +'\')" src="/img/map/save.gif" border="0" alt="Сохранить" title="Сохранить" width="12px" height="12px"/>&nbsp;<img class="labelClose" onclick="closeLine(\''+ key +'\')" src="/img/map/i-close.gif" border="0" alt="Закрыть" title="Закрыть" width="12px" height="12px"/></td></tr></table>';
         
    info.childNodes[0].innerHTML = html;
    return info;
}
umap.showLineLabel= function ()
{
	var la = createLineLabel('user-line-label');
   if (document.UserMap.userLineObj.prevPoint!=null&&document.UserMap.userLineObj.objectIndex > 0)
   {
   	   
		var pt = document.UserMap.geoToPix(document.UserMap.userLineObj.prevPoint[0], document.UserMap.userLineObj.prevPoint[1])            
		
		key = 'user-line-label';
	
	   
         var mc = xGetElementById (document.UserMap.mapCanvas);
         var info  = la;
        
        
        var x = pt[0];
        var y = pt[1];
        	
        //if (x < xPageX(mc) || y <  xPageY(mc) )
       //    xHide(info);
        
          xMoveTo (info,x + xPageX(mc) + 5  ,y + xPageY(mc) - 30);
		  xShow(info);
        
	}
}
	
