
var timeoutHack;

function Map(mapBox)
 {
 this.state = 0 // 0 = map is empty, 1 = one route selected, 2 = two routes selected

 var timeout;

 this.previousCity = new Object
 this.activeCity = new Object
 
 this.mapX = 0
 this.mapY = 0

 this.mapBox = mapBox  // Map layer

 this.planeWidth = 111
 this.planeHeight = 30

 }

Map.prototype.placeCities = function(cities)
 {
 if (cities.length>0)
  {
  this.mapX = DL_GetElementLeft(this.mapBox)
  this.mapY = DL_GetElementTop(this.mapBox)
  for (i=0;i<cities.length;i++)
   {
   var city=this.buildCity(cities[i])
   this.mapBox.appendChild(city);

   if (is_admin==1)

   { 

   new Draggable(city["id"],{onStart:function () { window.status="" }, 
     onEnd:function(draggable) {

     Position.prepare()
     x = Position.positionedOffset(draggable.element)[0] - parseInt(map.mapX)
     y = Position.positionedOffset(draggable.element)[1] - parseInt(map.mapY)

     new Ajax.Request('/adm_move_business/', { method: 'post',
     parameters: 'card=' + draggable.element.getAttribute("item_id") + '&x=' + x + '&y=' + y + '&x_correction=' + draggable.element.getAttribute("x_correction") + '&y_correction=' + draggable.element.getAttribute("y_correction") + '&koeff=' + draggable.element.getAttribute("koeff") });

//     window.status=city+" "+x+" "+y
      
//       sendCoordinates(city["id"]) 

       }  });

   }

   }
  }
 }

function sendCoordinates(city)
 {
 Position.prepare()
 window.status=city+" "+Position.cumulativeOffset($(city))[0]+" "+Position.cumulativeOffset($(city))[1] 
 }

Map.prototype.cityOnmouseover = function(buttonId)
 {

 var cityObj = $(buttonId)

// alert($("card_"+buttonId).id)

// alert($("card_"+buttonId).style.position);

// new Effect.Appear("card_"+buttonId)

// alert('here')

 $(buttonId).map = map

 clearTimeout($(buttonId).map.timeout);
 $(buttonId).map.timeout = 0

 card = $("card_"+buttonId);

// $('999').style.visibility='visible';

 card.style.display="block";
 
 }

Map.prototype.cityOnclick = function(buttonId)
 {
 card = $("card_"+buttonId);
 card.style.display=(!card.style.display || card.style.display=="none")?"block":"none";
 }

Map.prototype.cityOnmouseout = function(buttonId)
 {

// alert('here')

// card = $("card_"+buttonId);

 map.out($(buttonId))

// card.style.display="none";

 }

Map.prototype.out = function(el) 
 {
// timeout = setTimeout("map.hide()",1000)

 timeoutHack=$(el).map;
 $(el).map.timeout=setTimeout("timeoutHack.hide();",30);

 }

Map.prototype.show = function(el)
 {
 $(el).map = map

 clearTimeout($(el).map.timeout);
 $(el).map.timeout = 0

 }

Map.prototype.hide = function()
 {
// timeout = setTimeout($(el).id+".style.display='none'",1000)
 cities=document.getElementsByClassName('city_pp');
 cities.each(function(city)
 {
 city.style.display="none";
 });
// $('999').style.visibility='hidden';
 }


Map.prototype.clearMap = function(mode)
 {
 kids = $A(this.mapBox.childNodes)
 var mapBox = this.mapBox
 kids.each(function(kid)
  {
  if (((mode=="planes" || mode=="all") && kid.getAttribute("plane")==1) || 
      ((mode=="routes" || mode=="all") &&  kid.getAttribute("routeBox")==1))
   {
   mapBox.removeChild(kid)
   }
  });
 return true
 }

Map.prototype.buildPlane = function(cityObj)
 {
 var plane=document.createElement("a");

 plane.setAttribute("className","plane");
 plane.setAttribute("class","plane");

 plane.setAttribute("plane",1);

 plane.style.position="absolute"

 plane.setAttribute("id",cityObj.id+"_plane")
 plane.onmouseover=new Function("map.cityOnmouseover(this.id)")

// plane.innerHTML = cityObj.innerHTML

 return plane
 }
  
Map.prototype.buildCity = function(cityObj)
 {
 var city=document.createElement("a");
 var className = (cityObj.alignment)?"city city-"+cityObj.alignment:"city"
 city.setAttribute("className",className);
 city.setAttribute("class",className);
 city.setAttribute("alignment",cityObj.alignment);
 city.setAttribute("item_id",cityObj.item_id);
 city.setAttribute("x_correction",cityObj["x_correction"]);
 city.setAttribute("y_correction",cityObj["y_correction"]);
 city.setAttribute("koeff",cityObj["koeff"]);
// city.setAttribute("href",cityObj.path);
// city.setAttribute("href","#");
 city.style.position="absolute"

 city.innerHTML = "<img src='/map/city-dot-orange-small9.gif'>";

 var width = 90
 if (cityObj.alignment=="center")
  {
  xAdd = width/2
  city.setAttribute("xLeft",cityObj.x-parseInt(this.planeWidth/2)+15)
  city.setAttribute("xRight",cityObj.x-parseInt(this.planeWidth/2)-27+this.planeWidth)
  city.setAttribute("yLeft",parseInt(cityObj.y)+6)
  city.setAttribute("yRight",parseInt(cityObj.y)-6+this.planeHeight)
  }
 else if (cityObj.alignment=="left")
  {
  xAdd = width-3
  city.setAttribute("xLeft",cityObj.x-this.planeWidth+18)
  city.setAttribute("xRight",cityObj.x-21)
  city.setAttribute("yLeft",parseInt(cityObj.y)+1)
  city.setAttribute("yRight",parseInt(cityObj.y)-9+this.planeHeight)
  }
 else
  {
  xAdd=0
  city.setAttribute("xLeft",cityObj.x-parseInt(this.planeWidth/4)+15)
  city.setAttribute("xRight",cityObj.x-parseInt(this.planeWidth/4)-27+this.planeWidth)
  city.setAttribute("yLeft",parseInt(cityObj.y))
  city.setAttribute("yRight",parseInt(cityObj.y)-parseInt(this.planeHeight/2)+3+this.planeHeight)
  }

 city.setAttribute("id",cityObj["id"])

 if (is_admin==1)
  city.ondblclick=new Function("map.cityOnclick(this.id)")
 else
  {
  city.onmouseover=new Function("map.cityOnmouseover(this.id)")
  city.onmouseout=new Function("map.cityOnmouseout(this.id)")
  }

 city.setAttribute("x",cityObj.x)
 city.setAttribute("y",cityObj.y)

 city.setAttribute("alignment",cityObj.alignment)

 city.style.left=cityObj.x+this.mapX-xAdd 
 city.style.top=cityObj.y+this.mapY

 return city
 }

Map.prototype.planeUp = function(cityId)
 {
 $(cityId+"_plane").className="plane plane_up"
 }

Map.prototype.planeDown = function(cityId)
 {
 $(cityId+"_plane").className="plane plane_down"
 }
