// ----------------------------------------------------------------------------------- //
//             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 () ;
ZoomK = new Array (0, 8, 4, 2, 1, 0.5, 0.3, 0.2, 0.1, 0.05) ;
MapKeyX = 100 ;
MapKeyY = 98 ;
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 = Map ; Obj ; Obj = Obj.parentElement)
    if (Obj.tagName != "TR")
    {
      MapOffsetX += Obj.offsetLeft ;
      MapOffsetY += Obj.offsetTop ;
    }
  for (MapKeyOffsetX = MapKeyOffsetY = 0, Obj = MapKey ; Obj ; Obj = Obj.parentElement)
    if (Obj.tagName != "TR")
    {
      MapKeyOffsetX += Obj.offsetLeft ;
      MapKeyOffsetY += Obj.offsetTop ;
    }
}

function SetZoomFactor (x)
{
  ZoomFactor = x ? x : 1 ;
  if (!bInit)
    return ;
  MapZoom.style.display = "none" ;
  if (ZoomFactor > index_scale)
  {
    MapZoom.style.pixelWidth = MapZoomWidth = MapX / (ZoomK[index_scale] / ZoomK[ZoomFactor]) ;
    MapZoom.style.pixelHeight = MapZoomHeight = MapY / (ZoomK[index_scale] / ZoomK[ZoomFactor]) ;
    MapZoom.style.pixelLeft =MapOffsetX ;
    MapZoom.style.pixelTop = MapOffsetY ;
    MapZoom.style.display = "" ;
    Map.style.cursor = "" ;
  }
  else
    Map.style.cursor = "hand" ;
  MapKeyZoom.style.display = "none" ;
  MapKeyZoom.style.pixelWidth = MapKeyZoomWidth = ZoomS[0][ZoomFactor] ;
  MapKeyZoom.style.pixelHeight = MapKeyZoomHeight = ZoomS[1][ZoomFactor] ;
  MapKeyZoom.style.pixelLeft = MapKeyOffsetX ;
  MapKeyZoom.style.pixelTop = MapKeyOffsetY ;
  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 ;
    MapZoom.style.pixelLeft = getpos (event.x + document.body.scrollLeft - MapZoomWidth, MapOffsetX, MapOffsetX + MapX - MapZoomWidth) ;
    MapZoom.style.pixelTop = getpos (event.y + document.body.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 = 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.className = "hintmap_td" ;
          TD.style.color = "maroon" ;
          TD.style.backgroundColor = "#FCFFBF" ;
          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 < MapHint.rows.length ; row++)
            if (MapHint.rows(row).idx == MapHintObj[j])
            {
              MapHint.deleteRow (row) ;
              break ;
            }
          j++ ;
        }
        else
        {
          // Nothing to do
          i++ ;
          j++ ;
        }
      }

      for ( ; j < MapHintObj.length ; j++)
        for (i = 0 ; i < MapHint.rows.length ; i++)
          if (MapHint.rows (i).idx == MapHintObj[j])
          {
            MapHint.deleteRow (i) ;
            break ;
          }

      MapHintObj = z ;

      x += MapOffsetX + 15 ;
      y += MapOffsetY + 15 ;

      if (Math.abs (x - MapHint.style.pixelLeft) > 5)
        MapHint.style.pixelLeft = x ;
      if (Math.abs (y - MapHint.style.pixelTop) > 5)
        MapHint.style.pixelTop = y ;
      MapHint.style.display = "" ;

/*      if ((MapHint.style.pixelTop + MapHint.clientHeight) > 355)
      {
        if ((i = (MapHint.style.pixelLeft + MapHint.clientWidth) - (MapOffsetX + MapX)) > 0)
          MapHint.style.left = x - i ;
      }
      else
      {
        if((i = (MapHint.style.pixelLeft + MapHint.clientWidth) - (MapOffsetX + HintLimitX)) > 0)
          MapHint.style.left = x - i ;
      }*/
    }
    else
    {
      MapHint.style.display = "none" ;
      while (MapHint.rows.length)
        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 ;
  }
  MapEngine.cmd.value = "RECENTER_FIX_SCL" ;
  MapEngine.cmd_param.value = GetZoom () ;
  MapEngine.uamap_x.value = x ;
  MapEngine.uamap_y.value = y ;
  MapEngine.submit () ;
}

function MapMouseOver ()
{
  if (bInit && (ZoomFactor > index_scale))
    MapZoom.style.display = "" ;
}

function MapMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapZoom"))
    return ;
  MapZoom.style.display = "none" ;
  MapHint.style.display = "none" ;
}

function MapZoomMouseMove ()
{
  MapMouseMove () ;
}

function MapZoomMouseOut ()
{
  if (event.toElement && (event.toElement.name == "Map"))
    return ;
  MapZoom.style.display = "none" ;
}

function MapZoomClick ()
{
  MapClick () ;
}

function MapKeyMouseMove ()
{
  MapKeyZoom.style.pixelLeft = getpos (event.x + document.body.scrollLeft - MapKeyZoomWidth, MapKeyOffsetX, MapKeyOffsetX + MapKeyX - MapKeyZoomWidth) ;
  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 ;
  MapEngine.cmd.value = "KEY_RECENTER_FIX_SCL" ;
  MapEngine.cmd_param.value = GetZoom () ;
  MapEngine.key_uamap_x.value = x - MapKeyZoomWidth / 2 ;
  MapEngine.key_uamap_y.value = y - MapKeyZoomHeight / 2 ;
  MapEngine.submit () ;
}

function MapKeyMouseOver ()
{
  if (bInit)
    MapKeyZoom.style.display = "" ;
}

function MapKeyMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapKeyZoom"))
    return ;
  MapKeyZoom.style.display = "none" ;
}

function MapKeyZoomMouseMove ()
{
  MapKeyMouseMove () ;
}

function MapKeyZoomMouseOut ()
{
  if (event.toElement && (event.toElement.id == "MapKey"))
    return ;
  MapKeyZoom.style.display = "none" ;
}

function MapKeyZoomClick ()
{
  MapKeyClick () ;
}

function MapSetZoom ()
{
  MapEngine.cmd.value = "SET_ZOOM_SIZE" ;
  MapEngine.cmd_param.value = GetZoom () ;
  MapEngine.submit () ;
}

function MapShowObj ()
{
  MapEngine.cmd.value = "REDRAW" ;
  MapEngine.cmd_param.value = "" ;
  MapEngine.submit () ;
}

function SetMapObj ()
{
  var obj = document.all.tags ("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 = MapEngine.MapObjMain.checked;
}

function CheckMapObj ()
{
  var obj = document.all.tags ("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)
      {
        MapEngine.MapObjMain.checked = true ;
        MapEngine.MapObjMain.indeterminate = true ;
        return ;
      }
    }
  MapEngine.MapObjMain.indeterminate = false ;
  MapEngine.MapObjMain.checked = check ? true : false ;
}

function MapNavigate (x)
{
  document.MapEngine.cmd.value = "fixed_mov" ;
  document.MapEngine.cmd_param.value = x ;
  document.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")
    {
      src.style.color = "maroon" ;
      src.style.backgroundColor = "#FCFFBF" ;
      break ;
    }
}

function HintMouseDown ()
{
  alert ("Скоро будет !") ;
  event.returnValue = 0 ;
  return false ;
}

function HintReset ()
{
  while (MapHint.rows.length)
    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 = MapHint.rows (0).cells (0) ;
    TD.innerHTML = "Hints Ready" ;
    TD.className = "hintmap_td" ;
    TD.style.color = "maroon" ;
    TD.style.backgroundColor = "#FCFFBF" ;
    TD.onmouseover = new Function ("HintReset()") ;

    MapHintInit = true ;
  }
}

function DoFind ()
{
  var frm = document.MapFind ;
  var FindType = frm.FindType.options[frm.FindType.selectedIndex].value ;
  MapEngineSimple.cmd.value = "lsearch" ;
  if (FindType == "strt")
  {
    EditCheckStr (frm.FindNText) ;
    EditCheckStr (frm.FindN) ;
    if (!frm.FindNText.value)
    {
      alert ("Не указана строка поиска!")  ;
      frm.FindNText.focus () ;
      return ;
    }
    MapEngineSimple.cmd_param.value = FindType + "!!" + frm.FindNText.value ;
    if (frm.FindN.value.length)
      MapEngineSimple.cmd_param.value += "$address!!" + frm.FindN.value ;
  }
  else
  {
    EditCheckStr (frm.FindText) ;
    if (!frm.FindText.value)
    {
      alert ("Не указана строка поиска!") ;
      frm.FindText.focus () ;
      return ;
    }
    MapEngineSimple.cmd_param.value = FindType + "!!" + frm.FindText.value ;
  }
  MapEngineSimple.submit () ;
}

function DoFind2 ()
{
  if (event.keyCode == 13)
  {
    event.returnValue = false ;
    DoFind () ;
  }
}

function OnChangeFindType ()
{
  var frm = document.MapFind ;
  if (frm.FindType.options[frm.FindType.selectedIndex].value == "strt")
  {
    Find.style.display = "none" ;
    FindN.style.display = "" ;
  }
  else
  {
    Find.style.display = "" ;
    FindN.style.display = "none" ;
  }
}

function MapSetScrMode (ScrWidth)
{
  var dt = new Date () ;
  dt.setYear (dt.getYear () + 1) ;
  document.cookie = "SCR=" + ScrWidth + ";expires=" + dt.toGMTString () + ";path=/" ;
  MapEngine.cmd.value = "set_mapsize" ;
  MapEngine.cmd_param.value = (ScrWidth == 1024) ? 2 : 1 ;
  MapEngine.submit () ;
}

function MapSetLang (Lang)
{
  var dt = new Date () ;
  dt.setYear (dt.getYear () + 1) ;
  document.cookie = "LNG=" + Lang + ";expires=" + dt.toGMTString () + ";path=/" ;
  MapEngine.l.value = Lang ;
  MapEngine.cmd.value="redraw";
  MapEngine.submit();
}

