﻿Tygrik.Menu = function()
{
}

Tygrik.Menu.ByName = function(oElement, sName)
{
    return oElement.getElementsByTagName(sName);
}

Tygrik.Menu.ToAjax = function(sId, sOnFire)
{
    var oElementNad = Tygrik.System.ByID(sId);
    if(oElementNad != null)
    {
        var qElements = Tygrik.Menu.ByName(oElementNad, "input");
        if(qElements != null)
        {
            var oAjax = new Tygrik.Ajax();
            var iLength = qElements.length;
            for(var iNow = 0; iNow < iLength; iNow++)
            {
                var oElement = qElements[iNow];
                var sName = Tygrik.System.GetAttributeByName(oElement, "name");
                if(sName != "My_Form")
                {
                    var sValue = oElement.value;
                    var sType = Tygrik.System.GetAttributeByName(oElement, "type");
                    if(sType == "checkbox")
                    {
                        if(!oElement.checked)
                        {
                            sValue = "Ne";
                        }
                    }
                    oAjax.Parameter(sName.substring(3), sValue);
                }
            }
            oAjax.DoPost("Tygrik-Ajax", sOnFire);
        }
    }
    return false;
}

Tygrik.Menu.OnClick = function(sId, sClass)
{
    var oElementNow = Tygrik.System.ByID(sId);
    var oElement = Tygrik.System.ByID(sId + "Plus");
    if(oElementNow != null && oElement != null)
    {
        var sDisplayNow = Tygrik.Style.GetStyleValue(oElementNow, "display");
        if(sDisplayNow == "block")
        {
           Tygrik.Style.Display(oElementNow, "none");
           Tygrik.Style.Class(oElement, "ClassDiv" + sClass + "Plus");
        }
        else
        {
           Tygrik.Style.Display(oElementNow, "block");
           Tygrik.Style.Class(oElement, "ClassDiv" + sClass + "Minus"); 
        }
    }
}
Tygrik.Menu.Window = null;
Tygrik.Menu.WindowShow = function(sTitle, sArea)
{
    if(Tygrik.Menu.Window == null)
    {
        Tygrik.Menu.Window = new Tygrik.Window();
        Tygrik.Menu.Window.Create("Window_Menu_Otazka", "", 670, 230, "WindowDefault");
        Tygrik.Menu.Window.Buttons("<a href='javascript:Tygrik.Menu.Window.Hide()' class='ClassABandXLink Class-BandXBlock Class-BandXAdminNormal Class-BandCancelEnabled' title='Zavřít'></a>");
    }
    Tygrik.Menu.Window.Title(sTitle);
    Tygrik.Menu.Window.Area(sArea);
    Tygrik.Menu.Window.Show();
}
Tygrik.Menu.Delete = function(sId, sSource, sField, sOznaceni, sUmisteni)
{
    var sArea = "Přejete si odstranit položku menu: " + sOznaceni + ". Pokud ano klikněte na tlačítko potvrdit. Pokud ne klikněte na tlačítko zrušit. <br />";
    sArea += "<div class=\"ClassDivMenuOdstranitButtons\"><span class=\"ClassSpanMenuOdstranitButtons\"><input type=\"button\" value = \"Potvrdit\" onclick = 'Tygrik.Menu.DeletePotvrzeno(\"" + sId + "\", \"" + sSource + "\", \"" + sField + "\", \"" + sOznaceni + "\", \"" + Tygrik.Change.Replace(Tygrik.Change.Replace(sUmisteni, "\\", "~~~~~~"), "~~~~~~", "\\\\") + "\")' class=\"ClassInputMenuOdstranitButtons\" /></span><span class=\"ClassSpanMenuOdstranitButtons\"><input type=\"button\" value = \"Zrušit\" onclick = \"Tygrik.Menu.Window.Hide()\" /></span></div>";
    Tygrik.Menu.WindowShow("Potvrdit odstranění " + sOznaceni, sArea);
}

Tygrik.Menu.Edit = function(sId, sSource, sField, sOznaceni, sUmisteni)
{
    var oAjax = new Tygrik.Ajax();
    oAjax.Parameter("Face", "Code");
    oAjax.Parameter("Object", "Code__menu_cz_Edit");
    oAjax.Parameter("Method", "Window");
    oAjax.Parameter("Source", sSource);
    oAjax.Parameter("Umisteni", sUmisteni);
    oAjax.Parameter("Field", sField);
    oAjax.Parameter("Oznaceni", sOznaceni);
    oAjax.Parameter("ID", sId);
    oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace");
}

Tygrik.Menu.New = function(sId, sSource, sField, sOznaceni, sUmisteni)
{
    var oAjax = new Tygrik.Ajax();
    oAjax.Parameter("Face", "Code");
    oAjax.Parameter("Object", "Code__menu_cz_New");
    oAjax.Parameter("Method", "Window");
    oAjax.Parameter("Source", sSource);
    oAjax.Parameter("Umisteni", sUmisteni);
    oAjax.Parameter("Field", sField);
    oAjax.Parameter("Oznaceni", sOznaceni);
    oAjax.Parameter("ID", sId);
    oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace");
}

Tygrik.Menu.Posunuti = function(sId, sSource, sField, sOznaceni, sUmisteni, sMethod)
{
    var oAjax = new Tygrik.Ajax();
    oAjax.Parameter("Face", "Code");
    oAjax.Parameter("Object", "Code__menu_cz_Vymena");
    oAjax.Parameter("Method", sMethod);
    oAjax.Parameter("Source", sSource);
    oAjax.Parameter("Umisteni", sUmisteni);
    oAjax.Parameter("Field", sField);
    oAjax.Parameter("Oznaceni", sOznaceni);
    oAjax.Parameter("ID", sId);
    oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace");
}
Tygrik.Menu.DeletePotvrzeno = function(sId, sSource, sField, sOznaceni, sUmisteni)
{
    Tygrik.Menu.Window.Hide()
    var oAjax = new Tygrik.Ajax();
    oAjax.Parameter("Face", "Code");
    oAjax.Parameter("Object", "Code__menu_cz_Delete");
    oAjax.Parameter("Method", "Delete");
    oAjax.Parameter("Source", sSource);
    oAjax.Parameter("Umisteni", sUmisteni);
    oAjax.Parameter("Field", sField);
    oAjax.Parameter("Oznaceni", sOznaceni);
    oAjax.Parameter("ID", sId);
    oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace");
}

Tygrik.Menu.NewToLast = function(sResult)
{
    var qItems = sResult.split(Tygrik.Change.MarkerDo(Tygrik.MarkerItem));
    var iLength = qItems.length;
    if(iLength == 5)
    {
        var sId = qItems[0];
        var sSource = qItems[1];
        var sField = qItems[2];
        var sOznaceni = qItems[3];
        var sUmisteni = qItems[4];
        Tygrik.Menu.Last(sId, sSource, sField, sOznaceni, sUmisteni);
    }
    else
    {
        if (iLength == 2)
        {
            var sTitle = qItems[1];
            var sArea = qItems[0];
            Tygrik.Menu.WindowShow(sTitle, sArea);
        }
        else
        {
            if (Tygrik.Menu.Window != null)
            {
                Tygrik.Menu.Window.Hide();
            }
        }
        var oAjax = new Tygrik.Ajax();
        oAjax.Parameter("Face", "Code");
        oAjax.Parameter("Object", "Code__menu_cz_Menu");
        oAjax.Parameter("Method", "AdministraceMenu");
        oAjax.Parameter("Aktualizace", "Ano");
        oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace.onFire");
    }
}

Tygrik.Menu.Aktualizace = function(sResult)
{
    if(sResult != "{~{~{~False~}~}~}")
    {
        var qItems = sResult.split(Tygrik.Change.MarkerDo(Tygrik.MarkerItem));
        if (qItems.length == 2)
        {
            var sTitle = qItems[1];
            var sArea = qItems[0];
            Tygrik.Menu.WindowShow(sTitle, sArea);
        }
    }
    else
    {
        if (Tygrik.Menu.Window != null)
        {
           Tygrik.Menu.Window.Hide();
        }
    }

    var oAjax = new Tygrik.Ajax();
    oAjax.Parameter("Face", "Code");
    oAjax.Parameter("Object", "Code__menu_cz_Menu");
    oAjax.Parameter("Method", "AdministraceMenu");
    oAjax.Parameter("Aktualizace", "Ano");
    oAjax.DoPost("Tygrik-Ajax", "Tygrik.Menu.Aktualizace.onFire");
}

Tygrik.Menu.Aktualizace.onFire = function(sResult)
{
    var qItems = sResult.split(Tygrik.Change.MarkerDo(Tygrik.MarkerItem));
    if (qItems.length == 2)
    {
        var sId = qItems[0];
        var sArea = qItems[1];
        var oElement = Tygrik.System.ByID(sId);
        if (oElement != null)
        {
            oElement.innerHTML = sArea;
        }
    }
}

Tygrik.Menu.InArray = function(qArray, oObj)
{
    var iLength = qArray.length;
    for(var iNow = 0; iNow < iLength; iNow++)
    {
        if(qArray[iNow] == oObj)
        {
            return iNow;
        }
    }
    return -1;
}
Tygrik.Menu.parseInt = function(oObj, bVsechnyCisla)
{
    var sTyp = typeof(oObj);
    switch (sTyp)
    {
        case "number":
            return oObj;
            break;
        case "boolean":
            return ((oObj)? 1 : 0);
            break;
        case "string":
                if(bVsechnyCisla)
                {
                    var iLength = oObj.length;
                    var iRad = 0;
                    var qNumString = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
                    var qNumInt = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
                    var iReturn = 0;
                    for (var iNow = 0; iNow < iLength; iNow++)
                    {
                        var sCharNow = oObj[iNow];
                        var iIndexArray = Tygrik.Menu.InArray(qNumString, sCharNow);
                        if (iIndexArray >= 0)
                        {
                            var iCharNow = qNumInt[iIndexArray];
                            if (iRad == 0)
                            {
                                iReturn = iCharNow;
                                iRad++;
                            }
                            else
                            {
                                iReturn += iCharNow * iRad * 10;
                            }
                        }
                    }
                    return iReturn;
                }
                else
                {
                    var iReturn = parseInt(oObj);
                    return ((oObj == NaN)? 0 : oObj);
                }
            break;
        default:
            return 0;
    }
    
}

Tygrik.Menu.GetUrovenFromId = function(sId)
{
    var sUroven = "0";
    var iIndex = sId.lastIndexOf("_");
    if (iIndex != -1)
    {
        sUroven = sId.substr(iIndex + 1);
    }
    return Tygrik.Change.String2Int(sUroven);
}

Tygrik.Menu.qGlobalMenuOpened = function()
{
    var qOpened = new Array();
    var qOpenedNow = new Array();
    this.Add = function(oMenu)
    {
        if(Tygrik.Menu.InArray(qOpened, oMenu) == -1)
        {
            qOpened[qOpened.length] = oMenu;
        }
    }
    var AddNow = function(oMenu)
    {
        qOpenedNow[qOpenedNow.length] = oMenu;
    }
    this.CloseLevels = function(iUroven, oMenu)
    {
        qOpenedNow = new Array();
        var iLength = qOpened.length;
        for (var iNow = 0; iNow < iLength; iNow++)
        {
            var oMenuNow = qOpened[iNow];
            if(oMenuNow != null)
            {
                var iUrovenNow = Tygrik.Menu.GetUrovenFromId(oMenuNow.id);
                if (oMenuNow != oMenu && (iUroven <= 0 || iUrovenNow >= iUroven))
                {
                    Tygrik.Style.ZIndex(oMenuNow, 1100);
                    Tygrik.Style.Visibility(oMenuNow, false);
                    Tygrik.Style.SetPosition(oMenuNow, new Tygrik.Style.Pos());
                    
                }
                else
                {
                    AddNow(oMenuNow);
                }
            }
        }
        qOpened = qOpenedNow;
    }
    this.OnOver = function(oMenu)
    {
        var iLength = qOpened.length;
        var oLast = qOpened[iLength - 1];
        var iUroven = 0;
        if(oLast != null && oMenu == oLast)
        {
            iUroven = Tygrik.Menu.GetUrovenFromId(oLast.id);
        }
        else
        {
            if(oMenu != null)
            {
                iUroven = Tygrik.Menu.GetUrovenFromId(oLast.id);
            }
        }
        this.CloseLevels(iUroven, oMenu);
    }
}

Tygrik.Menu.OnOver = function()
{
    Tygrik.Menu.OnOverMenu(null);
}
Tygrik.Menu.OnOverMenu = function(oMenu)
{
    Tygrik.Menu.GlobalMenuOpened.OnOver(oMenu);
}
Tygrik.Menu.ClassName = function(oElement)
{
    return oElement.className;
}
Tygrik.Menu.GlobalMenuOpened = new Tygrik.Menu.qGlobalMenuOpened();

Tygrik.Menu.MenuOver = function(oEv)
{
    //Tygrik.Menu.OnOverMenu(null);
    var iUroven = Tygrik.Menu.parseInt(Tygrik.Menu.ClassName(Tygrik.Mouse.EventElement(oEv))) + 1;
    Tygrik.Menu.GlobalMenuOpened.CloseLevels(iUroven, null);
    oEv.cancelBubble = true;
}
Tygrik.Menu.IsHidden = function(oElement)
{
    return (Tygrik.Style.GetStyleValue(oElement, "visibility") == "hidden");
}
Tygrik.Menu.MenuOpen = function(sName, oEv, parleft, partop)
{
   var oMenu = Tygrik.System.ByID("My_Menu_" + sName);
   if (oMenu != null)
   {
      if (Tygrik.Menu.IsHidden(oMenu))
      {
          Tygrik.Menu.GlobalMenuOpened.Add(oMenu);
          Tygrik.Menu.OnOverMenu(oMenu);
          var eve = oEv.target;
          if (eve == null)
          {
             eve = oEv.srcElement;
          }

          var oPos = new Tygrik.Style.Pos();
          Tygrik.Style.GetPosition(eve, oPos);
    
          oPos.x = oPos.x + parleft;
          oPos.y = oPos.y + partop;
          var iUrovenNow = Tygrik.Menu.GetUrovenFromId(oMenu.id);
          // posunuti pod prvek
          if(iUrovenNow <= 1)
          {
            oPos.y = oPos.y + Tygrik.Style.SizeHeight(eve);
          }
          else
          {
            oPos.x = oPos.x + Tygrik.Style.SizeWidth(eve);
          }

          Tygrik.Style.SetPosition(oMenu, oPos);

          Tygrik.Style.ZIndex(oMenu, 1100);
          Tygrik.Style.Visibility(oMenu, true);
      }
   }
   oEv.cancelBubble = true;
}

Tygrik.Menu.MenuOpenFixed = function(sName, oEv, parleft, partop)
{
   Tygrik.Menu.OnOver();

   var oMenu = Tygrik.System.ByID("My_Menu_" + sName);
   if (oMenu != null)
   {
      var eve = oEv.target;
      if (eve == null)
      {
         eve = oEv.srcElement;
      }

      var oPos = new Tygrik.Style.Pos();
      Tygrik.Style.GetPosition(eve, oPos);

      oPos.x = oPos.x + parleft;
      oPos.y = oPos.y + partop;

      // posunuti pod prvek
      oPos.y = oPos.y + Tygrik.Style.SizeHeight(eve);

      Tygrik.Style.SetPosition(oMenu, oPos);

      var movleft = 0;
      var movtop = 0;
      var obj = eve;
      while (obj != null)
      {
         if (obj.scrollLeft != undefined && obj.scrollTop != undefined)
         {
            movleft += obj.scrollLeft;
            movtop += obj.scrollTop;
         }
         obj = obj.parentNode;
      }

      if (NavigatorIsIE60Old())
      {
         oMenu.style.top = (movtop + 15) + "px";
      }
      else
      {
         oMenu.style.top = (movtop + 22) + "px";
      }

      Tygrik.Style.ZIndex(oMenu, 1100);
      Tygrik.Style.Visibility(oMenu, true);

      sGlobalMenuOpened = sName;
   }

   oEv.cancelBubble = true;
}

