var loaded=0;
var select_tab = false;
var menu_url_tab = new Array();
var displayedMenu = new Array();
var pre_loaded = new Array();
var g_bDontHideMenu = false;
var g_sOpenCashboxCode = "";

function loadMenu(session, base_id)
{
  // Si ca arrive ca veut dire qu'on a fait : "ouvrir dans un nouvel onglet" ou "ouvrir dans une nouvelle fenetre"
  // On veut eviter ceci car ceci implique qu'en simultané une meme session peut faire deux chose en meme temps
  // Vue qu'on n'a pour le moment réfléchi a toutes les conséquences on préfére rendre ceci impossible.
  if( !parent.menu || !parent.menu.window )
  {
    this.location.href = "logout.cgi?base_id="+base_id;
  }
  else
  { 
    if( parent.menu.window.document.title == '' )
      parent.menu.window.location.href='menu.cgi?session=' + session;
    else
    {
      getLayer( 'menu' ).innerHTML = getLayer('menucontent', parent.menu.window.document ).innerHTML ;
      eval( getInputValue( 'js_to_execute', 'JS', window.parent.menu.document ));
    }
  }
}

function hideMenu()
{
  if(!g_bDontHideMenu)
  {
    shutdown(2);
  }
  else
  {
    g_bDontHideMenu = false;
  }
}

var aCallBackActions = new Array();
function bodyClickCallBackActions()
{
  if( bHandleBodyCallBackActions )
  {
    for( var i=0 ; i<aCallBackActions.length ; i++ )
      aCallBackActions[i].call();
    if( aCallBackActions.length > 0 )
      aCallBackActions = new Array();
  }
  else
    bHandleBodyCallBackActions = true;
}

function addBodyClickCallBackAction( fonc )
{
  aCallBackActions.push( fonc );
}

var bHandleBodyCallBackActions = true;
function setHandleBodyCallBackActions( bBool )
{
  bHandleBodyCallBackActions = bBool;
}

var aHighlighted = new Array();

function highlight(sMenuName, pEntry)
{
  if(aHighlighted[sMenuName])
  {
    aHighlighted[sMenuName].className = 'menuentryrow';
    aHighlighted[sMenuName] = null;
  }
  if(pEntry)
  {
    pEntry.className = 'menuhighlightedentryrow';
    aHighlighted[sMenuName] = pEntry;
  }
  
}

function shutdown(menuLevel) {
  var length = displayedMenu.length;
  for (var i=length-1; i >= menuLevel; i--)
  {
    if(displayedMenu[i])
    {
      popUp(displayedMenu[i], false, i);
    }
  }
}

function popUp(menuName,on,menu_level) {
  if (loaded) {	// to avoid stupid errors of Microsoft browsers
    if(on)
    {
      var oMenuDiv = getDOMObject(menuName);
      showLayer(menuName);
      displayedMenu[menu_level] = menuName;
      hideSelect( getLayer(menuName) );
    }
    else
    {
      highlight(menuName,null);
      if(getLayerDisplayed(menuName))
      {
        hideLayer(menuName);
        displayedMenu [menu_level] = null;
        if (menu_level <=2) showSelect();
      }
    }
  }
}

function hideSelect( detail )
{
  selectAreHidden = 1;

  var x1, y1, x2, y2;

  if( detail )
  {
    x1 = detail.offsetLeft;
    y1 = detail.offsetTop;
    x2 = x1 + detail.offsetWidth;
    y2 = y1 + detail.offsetHeight;

    if( !x1 ) x1 = parsePosition( detail.style.left );
    if( !y1 ) y1 = parsePosition( detail.style.top );
    if( !x2 ) x2 = x1 + parsePosition( detail.style.width );
    if( !y2 ) y2 = y1 + parsePosition( detail.style.height );
  }

  if( !x1 || isNaN(x1) ) x1 = 0;
  if( !x2 || isNaN(x2) ) x2 = 10000;
  if( !y1 || isNaN(y1) ) y1 = 0;
  if( !y2 || isNaN(y2) ) y2 = 10000;
  
  if (!select_tab)
    select_tab = getElementsToHide();

  for( i = 0; i < select_tab.length && i < 50; i++ )
  {
    obj = select_tab[i];
    if( !obj )
      continue;
    
    // TODO : ca ne marche pas vraiment quand on a des barres de défilement internes!
    
    // Find the element's offsetTop and offsetLeft relative to the BODY tag.
    objLeft   = obj.offsetLeft - obj.scrollLeft;
    objTop    = obj.offsetTop - obj.scrollTop;
    objParent = obj.offsetParent;
         		
    while (objParent.tagName.toUpperCase() != "BODY")
    {
      objLeft  += objParent.offsetLeft - objParent.scrollLeft;
      objTop   += objParent.offsetTop - objParent.scrollTop;
      objParent = objParent.offsetParent;
    }

    objRight  = objLeft + obj.offsetWidth;
    objBottom = objTop  + obj.offsetHeight;

    if( ( (objTop  >= y1 && objTop  <= y2) || 
          (objBottom >= y1 && objBottom <= y2) 
          ) && ( 
                (objLeft >= x1 && objLeft <= x2) || 
                (objRight >= x1 && objRight <= x2) ||
                (objLeft <= x1 && objRight >= x2) 
                ) )
    {
      if (obj.style.visibility != "hidden")
      {
        obj.style.visibility = "hidden";
      }
    }

    if( objTop > y2 && objLeft > x1)
    {
      return;
    }
  }
}

function showSelect()
{
    if( selectAreHidden == 1 )
    {
        if (select_tab == null) {
            select_tab = getElementsToShow();
        }

        for( i = 0; i < select_tab.length && i < 50; i++ )
        {
            obj = select_tab[i];
            if (! obj || ! obj.offsetParent)
                continue;
    
    		if (obj.style.visibility != "")
            {
                obj.style.visibility = "";
            }
    	}
        selectAreHidden = 0;
    }
}

function menu_change(name)
{
  if (pre_loaded[name]) 
	  showOnlyLayer(name)
  else 
//	  window.location.href=menu_url_tab[name];
    goHref(menu_url_tab[name]);
}


// Display toolbar

function getMenuWindow()
{
  var pMainWindow = findParentWindow('app', window);
  if(pMainWindow)
  {
    var pMenu = pMainWindow.parent.menu;
    if( pMenu && pMenu.aShowSortbarImages )
      return pMenu;
  }
  return null;
}

var bDisplayedColumnsButtonVisible = false;
function toggleDisplayedColumnsButton(force)
{
    if (force != null) bDisplayedColumnsButtonVisible = !force;

//    alert("toggleDisplayedColumnsButton("+force+")");

    var pImage = getDOMObject('pDisplayedColumnsButton');
    var pMenu = getMenuWindow();

    if( pMenu == undefined || !pImage)
        return;

    if ( bDisplayedColumnsButtonVisible )
    {
        bDisplayedColumnsButtonVisible = false;
        pImage.src = pMenu.aDisplayedColumnsImages[1].src;
    }
    else
    {
        bDisplayedColumnsButtonVisible = true;
        pImage.src = pMenu.aDisplayedColumnsImages[0].src;
    }
}

var bSortOrderButtonVisible = false;
function toggleSortOrderButton(force)
{
    if (force != null) bSortOrderButtonVisible = !force;

//    alert("toggleSortOrderButton("+force+")");

    var pImage = getDOMObject('pSortOrderButton');
    var pMenu = getMenuWindow();

    if( pMenu == undefined || !pImage)
        return;

    if ( bSortOrderButtonVisible )
    {
        bSortOrderButtonVisible = false;
        pImage.src = pMenu.aSortOrderImages[1].src;
    }
    else
    {
        bSortOrderButtonVisible = true;
        pImage.src = pMenu.aSortOrderImages[0].src;
    }
}

var bSortbarButtonVisible = false;
function toggleSortbarButton(force)
{
    if (force != null) bSortbarButtonVisible = !force;

//    alert("toggleSortbarButton("+force+")");

    var pImage = getDOMObject('pSortbarButton');
    var pMenu = getMenuWindow();

    if( pMenu == undefined || !pImage)
    {
        bSortbarButtonVisible = true;
        showSortbar(true);
        bSortbarButtonVisible = false;
        return;
    }

    if ( bSortbarButtonVisible )
    {
        bSortbarButtonVisible = false;
        pImage.src = pMenu.aShowSortbarImages[1].src;
    }
    else
    {
        bSortbarButtonVisible = true;
        pImage.src = pMenu.aShowSortbarImages[0].src;
    }
}

var bViewsButtonVisible = false;
function toggleViewsButton(force)
{
    if (force != null) bViewsButtonVisible = !force;

//    alert("toggleViewsButton("+force+")");

    var pImage = getDOMObject('pViewsButton');
    var pMenu = getMenuWindow();

    if( pMenu == undefined || !pImage)
        return;

    if ( bViewsButtonVisible )
    {
        bViewsButtonVisible = false;
        pImage.src = pMenu.aViewsImages[1].src;
    }
    else
    {
        bViewsButtonVisible = true;
        pImage.src = pMenu.aViewsImages[0].src;
    }
}

var bExportButtonVisible = false;
function toggleExportButton(force)
{
    if (force != null) bExportButtonVisible = !force;

//    alert("toggleExportButton("+force+")");

    var pImage = getDOMObject('pExportButton');
    var pMenu = getMenuWindow();

    if( pMenu == undefined || !pImage)
        return;

    if ( bExportButtonVisible )
    {
        bExportButtonVisible = false;
        pImage.src = pMenu.aExportImages[1].src;
    }
    else
    {
        bExportButtonVisible = true;
        pImage.src = pMenu.aExportImages[0].src;
    }
}

function showDisplayedColumnsPopup()
{
    if ( bDisplayedColumnsButtonVisible )
    {
        popup( g_sDisplayedColumnsPopupURL, 'Popup', 'menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no,titlebar=no,location=no,width=490,height=280,screenX=0,screenY=0,left=0,top=0' );
    }
}

function showSortOrderPopup()
{
    if ( bSortOrderButtonVisible )
    {
        popup( g_sSortOrderPopupURL, 'Popup', 'menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no,titlebar=no,location=no,width=400,height=230,screenX=0,screenY=0,left=0,top=0' );
    }
}

var bSortbarsVisible = false;
function showSortbar(force)
{
    if ( bSortbarButtonVisible )
    {
        if ( force != null ) bSortbarsVisible = !force;

        if ( bSortbarsVisible )
            hideLayer( 'list_sortbar', null, true );
        else
            showLayer( 'list_sortbar', null, true );

        bSortbarsVisible = !bSortbarsVisible;
    }
}

function updateViewCodeValue( sViewCode )
{
    setInputValue( 'current_view_code', sViewCode, 'search_form' );
    if ( sViewCode != '' )
    {
        submitActionForm('REFRESH', 'search_form');
    }
}

function showViewsPopup()
{
    if ( bViewsButtonVisible )
    {
        var sViewCode = modal( g_sViewsPopupURL, 'Popup', 'menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no,titlebar=no,location=no,width=700,height=250,screenX=0,screenY=0,left=0,top=0' );
        if ( sViewCode != null )
        {
            updateViewCodeValue( sViewCode );
        }
    }
}

function showExportListPopup()
{
    if ( bExportButtonVisible )
    {
        modal( g_sExportPopupURL, 'Popup', 'menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no,titlebar=no,location=no,width=320,height=230,screenX=0,screenY=0,left=0,top=0' );
    }
}

function showCashBoxPopup()
{
  modal( g_sCashBoxPopupURL, 'Popup', 'menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no,titlebar=no,location=no,width=320,height=230,screenX=0,screenY=0,left=0,top=0' );
  updateCashBoxButton();
}

function openCashBox(sCashBoxCode)
{
  try
  {
    var sOpenedCashBox = remoteCall( 'custom::remote::cash_box',
                                'openCashBox',
                                sCashBoxCode);
  }
  catch(pEx)
  {
    if(pEx.showUser)
      pEx.showUser();
    else
      throw pEx;
  }
}

function closeCashBox()
{
  try
  {
    var sOpenedCashBox = remoteCall( 'custom::remote::cash_box',
                                'closeCashBox');
  }
  catch(pEx)
  {
    if(pEx.showUser)
      pEx.showUser();
    else
      throw pEx;
  }
}

function updateCashBoxButton()
{
  var pButton = getDOMObject('pCashBoxButton');
  if( pButton )
  {
    try
    {
      var aInfos = remoteCall( 'custom::remote::cash_box',
                                  'getButtonCashBoxInfos');
      pButton.title = aInfos['sTitle'];
      pButton.src=aInfos['sSrc'];
      g_sOpenCashboxCode=aInfos['sCashboxCode'];
    }
    catch(pEx)
    {
      if(pEx.showUser)
        pEx.showUser();
      else
        throw pEx;
    }
  }
}

function getOpenedCashboxCode()
{
  return g_sOpenCashboxCode;
}

