/**
 * Skrypt obslugi TreeMenu na potrzeby CoreSHOP
 * Copyright: Przedsiebiorstwo Informatyczne CORE
 */

/* sciezka do obrazow dla menuJS. Musi byc zakonczona znakiem '/' */
var treeMenuImagePath = '/design/gfx/lay/menu/';

// funkcja wywolywalna, zmieniajaca status wezla (z otwartego na zamkniety i na odwrot
// strId - wartosc atrybutu id="" elementu, ktory chcemy otworzyc/zamknac
// strParentId - wartosc atrybutu id="" elementu UL przechowujacego cale menu
function changeMenuById(strId, strParentId) {
    var id = null;

    id = document.getElementById(strId);

    if (id != null) {
        changeChildrens(id, strParentId);
        changeParents(id, strParentId);
    };
};

// funkcja zmieniajaca stan "rodzicow" danej galezi
// jezeli na starcie wymuszamy otwarcie podgalezi, to musimy
// rowniez otworzyc wszystkie galezie nadrzedne
// to realizuje ta funkcja
// id - obiekt dokumentu DOM, pobrany z podanej w poprzedniej funkcji
// zmiennej strId
function changeParents( id, strParentId )
{
  var currentId = id;
  var liNode = id;

  while( currentId.id != strParentId )
  {
    currentId = currentId.parentNode;
    if( currentId.tagName == "UL" && currentId.id != 'treemenu' )
    {
      currentId.style.display = 'block';
			if( currentId.parentNode.tagName == "LI" )
      {
				currentId.parentNode.style.backgroundImage = 'url(' + treeMenuImagePath + 'open.gif)'
			}			
    }
  }
}

// funkcja zmienia styl obrazka i decyduje czy pokazac elementy podrzedne,
// czy tez je schowac
function changeChildrens( id, strMainId )
{
  for( var i = 0; i < id.childNodes.length; i++ )
  {
    if( id.childNodes[i].tagName == "UL" )
    {
      if( id.childNodes[i].style.display == "none" )
      {
        collapseAllChildrensMain(strMainId);
				id.style.backgroundImage = 'url(' + treeMenuImagePath + 'open.gif)';
        id.childNodes[i].style.display = "block";
      }
      else
      {
        id.childNodes[i].style.display = "none";
      }
    } 
  }
}

// funkcja zamykajaca wszystkie elementy. Jako parametr
// powinna dostac nazwe UL trzymajacego liste
function collapseAllChildrensMain(strParentId) {
    var id = document.getElementById(strParentId);
    collapseAllChildrens(id);
}

// funkcja rekurencyjna "zamykajaca" wezly od podanego w glab
function collapseAllChildrens(id) {
    for (var i = 0; i < id.childNodes.length; i++) {
        if (id.childNodes[i].tagName == "UL") {
            //id.style.backgroundImage = 'url(' + treeMenuImagePath + 'closed.gif)';
            id.childNodes[i].style.display = "none";
        }

        if (id.childNodes[i].childNodes.length > 0) {
            collapseAllChildrens(id.childNodes[i]);
        }
    }
}
