// ----------------------------------------------------------------------------------- //
//             All intellectual property rights relating to this code are owned        //
//                            by KIEV2000.com Production                               //
//   Интеллектуальная собственность на данный код принадлежит KIEV2000.com Production  //
// ----------------------------------------------------------------------------------- //
//    Illegal use, redistribution and copying is the breach of the law of Ukrainian    //
//        "On the legal software protection" and is sued according to the Law.         //
//     Нелегальное использование, распространение и воспроизведение (копирование)      //
//   является нарушением Закона Украины <О правовой охране программ для электронных    //
//            вычислительных машин и баз данных> и преследуется по Закону.             //
// ----------------------------------------------------------------------------------- //
bIE = document.all ? true : false ;
bNS = document.layers ? true : false ;
bInit = false ;
MapHintInit = false ;
MapHintObj = new Array () ;
MapOffsetX = MapOffsetY = 0 ;
MapZoomWidth = MapZoomHeight = 0 ;
MapKeyOffsetX = MapKeyOffsetY= 0 ;
MapKeyZoomWidth = MapKeyZoomHeight = 0 ;

function getpos (curr, min, max)
{
  return (curr > max) ? max : ((curr < min) ? min : curr) ;
}

function Resize () {
	var Obj;

	for (MapOffsetX = MapOffsetY = 1, Obj = document.getElementById("Map") ; Obj ; Obj = Obj.parentElement) {
		if (Obj.tagName.toLowerCase() == "body")
			break;

		MapOffsetX += Obj.offsetLeft ;
		MapOffsetY += Obj.offsetTop ;
	}
	var _left = document.getElementById('left-div');
	if (_left) {
		MapOffsetX -= _left.clientWidth + 25;
	}

	for (MapKeyOffsetX = MapKeyOffsetY = 0, Obj = document.getElementById("MapKey") ; Obj ; Obj = Obj.parentElement)
		if (Obj.tagName != "body") {
			MapKeyOffsetX += Obj.offsetLeft ;
			MapKeyOffsetY += Obj.offsetTop ;
	}
}

function SetZoomFactor (x)
{
  ZoomFactor = x ? x : 1 ;
  if (!bInit)
    return ;
  document.getElementById("MapZoom").style.display = "none" ;
  if (ZoomFactor > index_scale)
  {
    document.getElementById("MapZoom").style.pixelWidth = MapZoomWidth = MapX / (ZoomK[index_scale] / ZoomK[ZoomFactor]) ;
    document.getElementById("MapZoom").style.pixelHeight = MapZoomHeight = MapY / (ZoomK[index_scale] / ZoomK[ZoomFactor]) ;
    document.getElementById("MapZoom").style.pixelLeft =MapOffsetX ;
    document.getElementById("MapZoom").style.pixelTop = MapOffsetY ;
    document.getElementById("MapZoom").style.display = "" ;
    document.getElementById("Map").style.cursor = "" ;
  }
  else
    document.getElementById("Map").style.cursor = "hand" ;
  document.getElementById("MapKeyZoom").style.display = "none" ;
  document.getElementById("MapKeyZoom").style.pixelWidth = MapKeyZoomWidth = ZoomS[0][ZoomFactor] ;
  document.getElementById("MapKeyZoom").style.pixelHeight = MapKeyZoomHeight = ZoomS[1][ZoomFactor] ;
  document.getElementById("MapKeyZoom").style.pixelLeft = MapKeyOffsetX ;
  document.getElementById("MapKeyZoom").style.pixelTop = MapKeyOffsetY ;
  document.getElementById("MapKeyZoom").style.display = "" ;
}

function GetZoom ()
{
  var obj = document.MapScale.Zoom ;
  for (var i = 0 ; i < obj.length ; i++)
    if (obj[i].checked)
      return obj[i].value ;
}

function MapMouseMove ()
{
  if (!bInit)
    return ;
  if (ZoomFactor > index_scale)
  {
    if (event.ctrlKey) // Debug
      return ;
    _scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
    document.getElementById("MapZoom").style.pixelLeft = getpos (event.x + document.body.scrollLeft - MapZoomWidth, MapOffsetX, MapOffsetX + MapX - MapZoomWidth) ;
    document.getElementById("MapZoom").style.pixelTop = getpos (event.y + _scrollTop - MapZoomHeight, MapOffsetY, MapOffsetY + MapY - MapZoomHeight) ;
  }
  else if (MapHintInit)
  {
    if (event.ctrlKey || event.shiftKey)
      return ;

    var x = event.offsetX ;
    var y = event.offsetY ;
    var z = new Array () ;
    var i = FindFirstHint (x - 8) ;
    var j ;
    var TR, TD, HTML ;

    if (i != -1)
      for ( ; (i < ObjInfo.length) && (ObjInfo[i][1] < (x + 8)) ; i++)
        if ((y - 8 < ObjInfo[i][2]) && (ObjInfo[i][2] < y + 8) && ObjInfo[i][3].length)
          z[z.length] = i ;

    if (z.length)
    {
      z.sort (IntSortFunc) ;

      for (i = j = 0 ; i < z.length ; )
      {
        if ((j >= MapHintObj.length) || (z[i] < MapHintObj[j]))
        {
          TR = document.getElementById("MapHint").insertRow () ;
          TR.idx = z[i] ;
          TD = TR.insertCell () ;
          HTML = "" ;
//            HTML="<IMG SRC='sm_mag.gif' WIDTH=11 HEIGHT=11>";
          if (!ObjInfo[z[i]][0])
            HTML += "<IMG SRC='sm_inf.gif' WIDTH=11 HEIGHT=11>" ;
          HTML += ObjInfo[z[i]][3] ;
          TD.innerHTML = HTML ;
          TD.onmouseover = new Function ("HintMouseOver()") ;
          TD.onmouseout = new Function ("HintMouseOut()") ;
          TD.onmousedown = new Function ("HintMouseDown()") ;
          TD.onselectstart = new Function ("_SelectStart()") ;
          i++ ;
        }
        else if (z[i] > MapHintObj[j])
        {
          for (var row = 0 ; row < document.getElementById("MapHint").rows.length ; row++)
            if (document.getElementById("MapHint").rows(row).idx == MapHintObj[j])
            {
              document.getElementById("MapHint").deleteRow (row) ;
              break ;
            }
          j++ ;
        }
        else
        {
          // Nothing to do
          i++ ;
          j++ ;
        }
      }

      for ( ; j < MapHintObj.length ; j++)
        for (i = 0 ; i < document.getElementById("MapHint").rows.length ; i++)
          if (document.getElementById("MapHint").rows (i).idx == MapHintObj[j])
          {
            document.getElementById("MapHint").deleteRow (i) ;
            break ;
          }

      MapHintObj = z ;

      x += MapOffsetX + 15 ;
      y += MapOffsetY + 15 ;

      if (Math.abs (x - document.getElementById("MapHint").style.pixelLeft) > 5)
        document.getElementById("MapHint").style.pixelLeft = x ;
      if (Math.abs (y - document.getElementById("MapHint").style.pixelTop) > 5)
        document.getElementById("MapHint").style.pixelTop = y ;
      document.getElementById("MapHint").style.display = "" ;

      if ((document.getElementById("MapHint").style.pixelTop + document.getElementById("MapHint").clientHeight) > 355)
      {
        if ((i = (document.getElementById("MapHint").style.pixelLeft + document.getElementById("MapHint").clientWidth) - (MapOffsetX + MapX)) > 0)
          document.getElementById("MapHint").style.left = x - i ;
      }
      else
      {
        if((i = (document.getElementById("MapHint").style.pixelLeft + document.getElementById("MapHint").clientWidth) - (MapOffsetX + HintLimitX)) > 0)
          document.getElementById("MapHint").style.left = x - i ;
      }
    }
    else
    {
      document.getElementById("MapHint").style.display = "none" ;
      while (document.getElementById("MapHint").rows.length)
        document.getElementById("MapHint").deleteRow (0) ;
      MapHintObj = new Array () ;
    }
  }
}

function MapClick()
{
  var x = event.x + document.body.scrollLeft - MapOffsetX ;
  var y = event.y + document.body.scrollTop - MapOffsetY ;
  if (ZoomFactor > index_scale)
  {
    x = getpos (x, MapZoomWidth, MapX) - MapZoomWidth / 2 ;
    y = getpos (y, MapZoomHeight, MapY) - MapZoomHeight / 2 ;
 //    x = getpos (x, MapZoomWidth, MapX) ;
  //  y = getpos (y, MapZoomHeight, MapY) ;
    
  }
  document.forms["MapEngine"].cmd.value = "RECENTER_FIX_SCL" ;
  document.forms["MapEngine"].cmd_param.value = GetZoom () ;
  document.forms["MapEngine"].uamap_x.value = x ;
  document.forms["MapEngine"].uamap_y.value = y ;
  document.forms["MapEngine"].submit () ;
}

function MapMouseOver ()
{
  if (bInit && (ZoomFactor > index_scale))
    document.getElementById("MapZoom").style.display = "" ;
}

function MapMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapZoom"))
    return ;
  document.getElementById("MapZoom").style.display = "none" ;
  document.getElementById("MapHint").style.display = "none" ;
}

function MapZoomMouseMove ()
{
  MapMouseMove () ;
}

function MapZoomMouseOut ()
{
  if (event.toElement && (event.toElement.name == "Map"))
    return ;
  document.getElementById("MapZoom").style.display = "none" ;
}

function MapZoomClick ()
{
  MapClick () ;
}

function MapKeyMouseMove ()
{
  document.getElementById("MapKeyZoom").style.pixelLeft = getpos (event.x + document.body.scrollLeft - MapKeyZoomWidth, MapKeyOffsetX, MapKeyOffsetX + MapKeyX - MapKeyZoomWidth) ;
  document.getElementById("MapKeyZoom").style.pixelTop = getpos (event.y + document.body.scrollTop - MapKeyZoomHeight, MapKeyOffsetY, MapKeyOffsetY + MapKeyY - MapKeyZoomHeight) ;
}

function MapKeyClick ()
{
  var x = event.x + document.body.scrollLeft - MapKeyOffsetX ;
  var y = event.y + document.body.scrollTop - MapKeyOffsetY ;
  document.forms["MapEngine"].cmd.value = "KEY_RECENTER_FIX_SCL" ;
  document.forms["MapEngine"].cmd_param.value = GetZoom () ;
  document.forms["MapEngine"].key_uamap_x.value = x - MapKeyZoomWidth / 2 ;
  document.forms["MapEngine"].key_uamap_y.value = y - MapKeyZoomHeight / 2 ;
  document.forms["MapEngine"].submit () ;
}

function MapKeyMouseOver ()
{
  if (bInit)
    document.getElementById("MapKeyZoom").style.display = "" ;
}

function MapKeyMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapKeyZoom"))
    return ;
  document.getElementById("MapKeyZoom").style.display = "none" ;
}

function MapKeyZoomMouseMove ()
{
  MapKeyMouseMove () ;
}

function MapKeyZoomMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapKey"))
    return ;
  document.getElementById("MapKeyZoom").style.display = "none" ;
}

function MapKeyZoomClick ()
{
  MapKeyClick () ;
}

function MapSetZoom ()
{
  document.forms["MapEngine"].cmd.value = "SET_ZOOM_SIZE" ;
  document.forms["MapEngine"].cmd_param.value = GetZoom () ;
  document.forms["MapEngine"].submit () ;
}

function MapShowObj ()
{
  document.forms["MapEngine"].cmd.value = "REDRAW" ;
  document.forms["MapEngine"].cmd_param.value = "" ;
  document.forms["MapEngine"].submit () ;
}

function SetMapObj ()
{
  var obj = document.getElementsByTagName("INPUT") ;
  for (var i = 0 ; i < obj.length ; i++)
    if ((obj[i].type == 'checkbox') && (obj[i].id.substring (0,6) == "mapobj") && !obj[i].disabled)
      obj[i].checked = document.forms["MapEngine"].MapObjMain.checked;
}

function CheckMapObj ()
{
  var obj = document.getElementsByTagName("INPUT") ;
  var check = 0 ;
  var notcheck = 0 ;
  for (var i = 0 ; i < obj.length ; i++)
    if ((obj[i].type == 'checkbox') && (obj[i].id.substring (0,6) == "mapobj") && !obj[i].disabled)
    {
      if (obj[i].checked)
        check++ ;
      else 
        notcheck++ ;
      if (check && notcheck)
      {
        document.forms["MapEngine"].MapObjMain.checked = true ;
        document.forms["MapEngine"].MapObjMain.indeterminate = true ;
        return ;
      }
    }
  document.forms["MapEngine"].MapObjMain.indeterminate = false ;
  document.forms["MapEngine"].MapObjMain.checked = check ? true : false ;
}

function MapNavigate (x)
{
  document.forms["MapEngine"].cmd.value = "fixed_mov" ;
  document.forms["MapEngine"].cmd_param.value = x ;
  document.forms["MapEngine"].submit () ;
}

function MapReset ()
{
  window.location = "index.asp" ;
}

function HintMouseOver ()
{
  for (var src = event.srcElement ; src ; src = src.parentElement)
    if (src.tagName == "TD")
    {
      src.style.color = "yellow" ;
      src.style.backgroundColor = "black" ;
      src.style.cursor = "default" ;
      break ;
    }
}

function HintMouseOut ()
{
  for (src = event.srcElement ; src ; src = src.parentElement)
    if (src.tagName == "TD")
    {
      break ;
    }
}

function HintMouseDown ()
{
  alert ("Скоро будет !") ;
  event.returnValue = 0 ;
  return false ;
}

function HintReset ()
{
  while (document.getElementById("MapHint").rows.length)
    document.getElementById("MapHint").deleteRow (0) ;
}

function _SelectStart ()
{
  event.returnValue = 0 ;
  return false ;
}

function ObjInfoSortFunc (var1, var2)
{
  return var1[1] - var2[1] ;
}

function IntSortFunc (var1, var2)
{
  return var1 - var2 ;
}

function FindFirstHint (x)
{
  for (var i = 0 ; i < ObjInfo.length ; i++)
    if (ObjInfo[i][1] > x)
      return i ;
  return -1 ;
}

function load_hints ()
{
  if (typeof (ObjInfo) != "undefined")
  {
    ObjInfo.sort (ObjInfoSortFunc) ;

    TD = document.getElementById("MapHint").rows (0).cells (0) ;
    TD.innerHTML = "Hints Ready" ;
    TD.className = "hintmap_td" ;
    TD.onmouseover = new Function ("HintReset()") ;

    MapHintInit = true ;
  }
}

function DoFind ()
{
  var frm = document.forms["MapFind"] ;
  var FindType = frm.FindType.options[frm.FindType.selectedIndex].value ;
  document.forms["MapEngineSimple"].cmd.value = "lsearch" ;
  if (FindType == "strt")
  {
    EditCheckStr (frm.FindNText) ;
    EditCheckStr (frm.FindN) ;
    if (!frm.FindNText.value)
    {
      alert ("Не указана строка поиска!")  ;
      frm.FindNText.focus () ;
      return ;
    }
    document.forms["MapEngineSimple"].cmd_param.value = FindType + "!!" + frm.FindNText.value ;
    if (document.getElementById("FindN"))
	{
		if (document.getElementById("FindNText"))
		      document.forms["MapEngineSimple"].cmd_param.value += "$address!!" + document.getElementById("FindN").value ;
		else
		if (document.getElementById("FindText"))
		      document.forms["MapEngineSimple"].cmd_param.value += "$address!!" + document.getElementById("FindText").value ;
	}
  }
  else
  {
    EditCheckStr (frm.FindText) ;
    if (!frm.FindText.value)
    {
      alert ("Не указана строка поиска!") ;
      frm.FindText.focus () ;
      return ;
    }
    document.forms["MapEngineSimple"].cmd_param.value = FindType + "!!" + frm.FindText.value ;
  }
  document.forms["MapEngineSimple"].submit () ;
}

function DoFind2 ()
{
  if (event.keyCode == 13)
  {
    event.returnValue = false ;
    DoFind () ;
  }
}

function OnChangeFindType ()
{
  var frm = document.forms["MapFind"] ;
  if (frm.FindType.options[frm.FindType.selectedIndex].value == "strt")
  {
    document.getElementById("Find").style.display = "none" ;
    document.getElementById("FindN").style.display = "" ;
  }
  else
  {
    document.getElementById("Find").style.display = "" ;
    document.getElementById("FindN").style.display = "none" ;
  }
}

function MapSetScrMode (ScrWidth)
{
  var dt = new Date () ;
  dt.setYear (dt.getYear () + 1) ;
  document.cookie = "SCR=" + ScrWidth + ";expires=" + dt.toGMTString () + ";path=/" ;
  document.forms["MapEngine"].cmd.value = "set_mapsize" ;
  document.forms["MapEngine"].cmd_param.value = (ScrWidth == 1024) ? 2 : 1 ;
  document.forms["MapEngine"].submit () ;
}

function MapSetLang (Lang)
{
  var dt = new Date () ;
  dt.setYear (dt.getYear () + 1) ;
  document.cookie = "LNG=" + Lang + ";expires=" + dt.toGMTString () + ";path=/" ;
  document.forms["MapEngine"].l.value = Lang ;
  document.forms["MapEngine"].cmd.value="redraw";
  document.forms["MapEngine"].submit();
}

