// JavaScript Document
if ((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') ||
        parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5)
    throw("FenetreGC exige le framework Prototype version >= 1.5.0");

menuWindow = Class.create();
menuWindow.prototype = {
    initialize: function(){
        this.mnuListe        = [];
        this.elementMenu     = [];
        this.elementSubMenu  = [];
        this.getMenu();
        this.menuLevels      = [];
        this.tabLayerOpened  = [];
        this.timer           = null;
    },

    getMenu: function() {
        var dtRetriever = new dataRetriever('menu://current.domain/getJSON.php?__callMethod=post&jsonTpl=./menuContent');
        var tmpData = dtRetriever.retrieve('data');
        //alert(tmpData);
        if (tmpData != false) {
            this.menu = tmpData;
            this.createTopLevelMenu();
        } else {
            alert('Error !');
        }
    },

    createTopLevelMenu: function(){
        var mnuObj = this.getLevelMenuData('');
        // mnuObj.levelPrefix => lui ajouter le menuId pour obtenir la chaîne level pour la fct getLevelMenuData
        //mnuObj.data => données du menu;

        for(var i= 0; i< mnuObj.data.length; i++){
        this.mnuListe[i] = Builder.node('div',{id:'contourMenu', className:'contourMenu'},
            [
                Builder.node('div',{
                    id:'menu_'+mnuObj.data[i].menuId,
                    className:'menu',
                    onclick: (mnuObj.data[i].url ? 'tempo('+(mnuObj.data[i].menuId-1)+')' : ''),
                    onMouseOver:((this.isAvSubMenu(mnuObj.data[i].menuId))?'createSubLevel(\''+mnuObj.data[i].menuId+'\');':'hideSubLayers()')
                },
                mnuObj.data[i].title
                )
            ]
        );
    }

    if (gc_host != 'www.absysteme.fr')
    {
        this.mnuListe[i] = Builder.node('div',{id:'menu_valeur', className:'menu_valeur'},[
            
            Builder.node('form',{
                name:'form1',
                id:'recherche_valeur',
                method:'get',
                target:'_self',
                action:'javascript:alert(\'Pour accéder au carnet d ordres et/ou passer un ordre sur cette valeur via ce module, vous devez être abonné au service Infos d Experts\');'
            },[
                ' code mnémonique : ',
                Builder.node('input',{
                    style:'background-color: #DADBDC; font-size: 10px',
                    name:'recherche',
                    type:'text'
                }),
                Builder.node('input', { name:'formulaire', type:'submit', value:'OK' })
            ]),
    
            [Builder.node('a', {href:'#', className: 'aleg', onclick: 'params = desktop.menu.openWindowOnDesktop(12);TamFnUtils.ouvreNewURL(params);', name:'legal'}, ' Avertissement légal ')],
            
            Builder.node('div', {className:'calqueJPN', id:'ResultListDep', style:'position:absolute;z-index:0;width:120px;height:20px;left:20px;top:35px'})
        ]);
    
        this.elementMenu = Builder.node('div', {id: 'menuContent' ,className:'mkenuLayer'}, this.mnuListe);
    }
    else
    {
      this.mnuListe[i] = Builder.node('div',{id:'menu_valeur', className:'menu_valeur'},[
            
            Builder.node('a', {href:'#', className: 'aleg', onclick: 'params = desktop.menu.openWindowOnDesktop(12);TamFnUtils.ouvreNewURL(params);', name:'legal'}, ' Avertissement légal '),
            
            Builder.node('div', {className:'calqueJPN', id:'ResultListDep', style:'position:absolute;z-index:0;width:120px;height:20px;left:20px;top:35px'})
        ]);
        
        this.elementMenu = Builder.node('div', {id: 'menuContent' ,className:'mkenuLayer'}, this.mnuListe);
    }
    
    $('body').appendChild(this.elementMenu);
  },

  createSubLevelMenu: function(idMenu){
    var tmpObj = $('menu_'+idMenu);
    var posParent = Position.page(tmpObj);
    var dimensions  = tmpObj.getDimensions();
    var height = dimensions.height;
    var width = dimensions.width;
    var subMnuListe = [];
    var mnuObj = this.getLevelMenuData(idMenu);

    if(this.isTopLevelMenu(idMenu))
      this.destroyOpenLayers();

    for(var i= 0; i < mnuObj.data.length; i++){
        if (mnuObj.data[i].title!='Avertissement légal')
        {
          subMnuListe[i] = Builder.node('div',{
              id:'menu_'+mnuObj.data[i].menuId,
              className:'submenu'+((this.isAvSubMenu(mnuObj.data[i].menuId))?' classSsSub':''),
              onclick:(mnuObj.data[i].url ? 'tempo('+(mnuObj.data[i].menuId-1)+')' : ''),
              onMouseOver:((this.isAvSubMenu(mnuObj.data[i].menuId))?'createSubLevel(\''+mnuObj.data[i].menuId+'\')':'void(0)')
          },[
              Builder.node('a',{
                  href:'#',
                  id:'menu_'+mnuObj.data[i].menuId+'Over',
                  className:'submenu'
              },
              mnuObj.data[i].title
              )
          ]);
        }
    }

    var elementSubMenu = Builder.node('div', {id: 'menuSubContent_'+idMenu ,className:'mkSubMnuLayer', onMouseOver:this.launchTimer('menuSubContent_'+idMenu)}, subMnuListe);

    $('body').appendChild(elementSubMenu);

    this.tabLayerOpened.push('menuSubContent_'+idMenu);

    //$(this.elementMenu).appendChild(this.elementSubMenu);
    if(this.isTopLevelMenu(idMenu)){
      var left  = parseInt(posParent[0]);
      var top   = parseInt(posParent[1])+parseInt(height);
    }else{
      var left  = parseInt(posParent[0])+parseInt(width)+2;
      var top   = parseInt(posParent[1]);
    }
    if (document.layers) {
            elementSubMenu.style.left = left;
            elementSubMenu.style.top = top;
        } else {
            elementSubMenu.style.left = left + "px";
            elementSubMenu.style.top = top + "px";
        }
    },
  /* **
    format level : 0,1,....,n (ex. menuTop : ''; premier sousMenu : '1')
  ** */
    getLevelMenuData: function(level){
        var menuLevel = [];
        var menuParentId = 0;

        if (level == '') level = '0';
        else level += ',0';

        level = level.split(',');

        if (level.length > 1) menuParentId = level[level.length-2];

        //transformation du niveau
        wrkLevel = '[' + level.toString().replace(/,/g, '][') + ']';
        new Function('eval(\'menuLevel = this.menuLevels' + wrkLevel + '\');').bind(this);
        if (menuLevel.length == 0) {
            var F = this.menu.items;
            menuLevel = F.findAll(
                function (item) {
                    return item.menuParent == menuParentId;
                }
            );
            new Function('eval(\'this.menuLevels' + wrkLevel + ' = menuLevel\');').bind(this);
        }

    var trash = level.pop();
    return {
            levelPrefix: level,
            data: menuLevel
          };
  },

  isAvSubMenu: function(levelPrefix){
    var subMenu = this.getLevelMenuData(levelPrefix);
        return (subMenu.data.length > 0);
    },

  isTopLevelMenu: function(mnuId){
    var F = this.menu.items;
    menu = F.findAll(
                      function (item) {
                        return item.menuId == mnuId;
                      }
                                    );

    return (menu[0].menuParent == 0);
    },

    destroyOpenLayers: function(){
     for (i=this.tabLayerOpened.length-1; i >= 0; i--){
       $('body').removeChild($(this.tabLayerOpened[i]));
   }
     this.tabLayerOpened = [];
     clearTimeout(this.timer);
  },

    launchTimer: function(element){
     this.timer  = window.setTimeout('hideSubLayers()',3000);
     return true;
  },
  stopTimer: function(){
    return true;
  },
    eraseTimer: function(){
     return true;
  },
    openWindowOnDesktop: function(idmenu) {
    return this.options = Object.extend(
                                             {
                                                    resizable:      false,
                                                    showEffect:     Element.show,
                                                    hideEffect:     Effect.SwitchOff,
                                                    draggable:      false
                                          },
                                          this.menu.items[idmenu] || {}
                                        );
  }
}

