// Menu' Dogane - v. 11/12/2009

/*** Configurazione */

var _idmenu = "kMenu01";





/*** Main */

var _items = new Array();
var _currentMenu = null;
_addEventListener_( window, "load", _initMenu_ );





/*** Funzioni globali */

// I css non sono abilitati (le voci del menu' sono allineate a sinistra)?
function _isLeftAlign_() {
 return ( Math.abs( _getAttribute_( _items[0], "offsetLeft" ) - _getAttribute_( _items[_items.length - 1], "offsetLeft" ) ) < 8 )? true : false;
}

// Il menu' si visualizza interamente su una riga?
function _isTopAlign_() {
 return ( Math.abs( _getAttribute_( _items[0], "offsetTop" ) - _getAttribute_( _items[_items.length - 1], "offsetTop" ) ) < 8 )? true : false;
}

// Nasconde i popup
function _closeMenu_() {
 if( _isTopAlign_() && ( null !== _currentMenu ) ) {
  _currentMenu.style.visibility = "hidden";
  _currentMenu.style.display = "none";
  _currentMenu = null;
 }

 return;
}

// Gestione del comportamento delle voci del menu'
function _actMenu_( _menuId, _actuatorId ) {
 var _menu = _getElementById_( _menuId );
 var _actuator = _getElementById_( _actuatorId );

 if ( ( null == _menu ) || ( null == _actuator ) )
  return;

 _actuator.showMenu = function() {
                       _menu.style.width = "200px";
                       _menu.style.left = this.offsetLeft + "px";
                       _menu.style.top = ( this.offsetTop + this.offsetHeight + 6 ) + "px";
                       _menu.style.visibility = "visible";
                       _menu.style.display = "block";
                       _currentMenu = _menu;
                       return;
                      }

 _actuator.onfocus = function() {
                      if( _isTopAlign_() ) {
                       if ( null !== _currentMenu ) {
                        if( _currentMenu.id === _menu.id ) {
                         _currentMenu.style.visibility = "hidden";
                         _currentMenu.style.display = "none";
                         _currentMenu = null;
                         return;
                        }
                        else {
                         _currentMenu.style.visibility = "hidden";
                         _currentMenu.style.display = "none";
                         _currentMenu = null;
                        }
                       }

                       this.showMenu();
                      }
                      else if( ( ! _isLeftAlign_() ) && ( null !== _currentMenu ) ) {
                       _currentMenu.style.visibility = "hidden";
                       _currentMenu.style.display = "none";
                       _currentMenu = null;
                      }

                      return;
                     }

 _actuator.onclick = function() {
                      if( _userAgent_().indexOf( "Safari" ) !== -1 ) {
                       this.blur();

                       if( _isTopAlign_() ) {
                        _actuator.onfocus();
                        return false;
                       }
                       else
                        return;
                      }

                      else if( _userAgent_().indexOf( "Chrome" ) !== -1 ) {
                       _actuator.onfocus();
                       return _isTopAlign_() ? false : true;
                      }

                      else {
                       this.blur();
                       return ( _isTopAlign_() )? false : true;
                      }
                     }

 return;
}

// Inizializza il menu' ed attiva gli eventi di gestione
function _initMenu_ () {

 // Controlla se esiste il menu' nella pagina prima di attivare la gestione
 if( ! _getElementById_( _idmenu ) )
  return;

 // Assegnazione di id agli elementi del menu'
 for( _lis = _getElementsByTagName_( _idmenu, "li" ), _count1 = 0; _count1 < _lis.length; _count1++ ) {
  _lis[_count1].id = ( _lis[_count1].id && ( _lis[_count1].id.indexOf( "menuli_" ) != -1 ) ) ? _lis[_count1].id : "menuli_" + _count1;

  for( _as = _getElementsByTagName_( _lis[_count1].id, "a" ), _count2 = 0; _count2 < _as.length; _count2++ )
   _as[_count2].id = ( _as[_count2].id && ( _as[_count2].id.indexOf( "menua_" ) != -1 ) ) ? _as[_count2].id : "menua_" + _count1 + "_" + _count2;
 }

 // Ricerca degli attuatori del menu' con id della forma menua_N_0
 for( _as = _getElementsByTagName_( _idmenu, "a" ), _count = 0; _count < _as.length; _count++ )
  if( _as[_count].id.match( new RegExp( /menua_\d+_0/ ) ) ) {
   _items[_items.length] = _as[_count].id;

   // Trova il popup relativo all'attuatore e gli assegna un id
   _split = _as[_count].id.split( /_/ );
   _ols = _getElementsByTagName_( "menuli_" + _split[1], "ol" );

   if( _ols.length )
    _ols[0].id = _as[_count].id + "_ol";
  }

 // Attivazione degli eventi sugli attuatori del menu'
 for( _count = 0; _count < _items.length; _count++ ) {
  _getElementById_( _items[_count] ).style.position = "relative";
  _actMenu_( _items[_count] + "_ol", _items[_count] );
 }

 // Gestione della chiusura dei popup sui click nella pagina
 _addEventListener_( _getElementById_( "contenuti" ), "click", _closeMenu_ );
 _addEventListener_( _getElementById_( "piede" ), "click", _closeMenu_ );

 // Chiusura di un popup su focus senza popup (Home)
 _addEventListener_( _getElementById_( "menua_0_0" ), "focus", _closeMenu_ );

 // Chiusura di un popup sul ridimensionamento della finestra
 _addEventListener_( window, "resize", _closeMenu_ );

 return;
}





/*** Funzioni cross-browser */

// document.getElementById( id ) cross-browser
function _getElementById_( _id ) {
 if( document.getElementById ) {
  if( document.getElementById( _id ) )
   return document.getElementById( _id );
 }
 else if( document.all ) {
  if( document.all[_id] )
   return document.all[_id];
 }
 else
  return null;
}

// elem.getElementsByTagName( tag ) cross-browser
function _getElementsByTagName_( _elemid, _tag ) {
 if( _getElementById_( _elemid ).getElementsByTagName ) {
  if( _getElementById_( _elemid ).getElementsByTagName( _tag ) )
   return _getElementById_( _elemid ).getElementsByTagName( _tag );
 }
 else if( _getElementById_( _elemid ).all.tags ) {
  if( _getElementById_( _elemid ).all.tags( _tag ) )
   return _getElementById_( _elemid ).all.tags( _tag );
 }
 else
  return new Array();
}

// elem.getAttribute( attr ) cross-browser
function _getAttribute_( _elemid, _attr ) {
 try {
  return eval( "document.all[_elemid]." + _attr );
 }
 catch( _e ) {
  try {
   return eval( "_getElementById_( _elemid )." + _attr );
  }
  catch( _e ) {
   return null;
  }
 }
}

// elem.addEventListener( event, listener, false ) cross-browser
function _addEventListener_( _elem, _event, _listener ) {
 if( _elem.addEventListener )
  _elem.addEventListener( _event, _listener, false ); 
 else if( _elem.attachEvent )
  _elem.attachEvent( "on" + _event, _listener );
 else
  eval( "_elem.on" + _event + " = _listener;" );

 return;
}

function _userAgent_() {
 return navigator ? ( navigator.userAgent ? navigator.userAgent : null ) : null;
}
