function isSet( value ) {
  return ( typeof value != 'undefined' && value != null );
}
function isNull( mixed ) {
  return ( mixed == null );
}

// Attachement d'une callback à un évènement
function addListener( objet, eventName, eventHandler ) {
  var ActiveBubbling = ( addListener.arguments.length > 3 )
    ? addListener.arguments[ 3 ] : false;
  if ( objet.addEventListener ) objet.addEventListener( eventName, eventHandler, ActiveBubbling );
  else if ( objet.attachEvent ) objet.attachEvent( 'on' + eventName, eventHandler );
  else {
    var oldHandler = null;
    eval( 'if ( objet.on' + eventName + ' ) oldHandler = objet.on' + eventName + '; objet.on' + eventName + ' = function() { if ( oldHandler != null ) oldHandler(); eventHandler() };' );
  }
}

function InsertPrintLink() {
  var oSpan = document.getElementById( 'print_link' );
  var oLink = null;
  if ( isSet( oSpan ) ) {
    oLink = document.createElement( 'a' );
    oLink.href = '#';
    oLink.onclick = function() {
      window.print();
    };
    oLink.appendChild( document.createTextNode( 'Imprimer' ) );
    oSpan.appendChild( oLink );
  }
}

function Links_addBlankTarget() {
  var oAnchors = document.getElementsByTagName( 'a' );
  for( var i=0; i<oAnchors.length; i++ ) {
    if ( isSet( oAnchors[ i ].className ) )
      if ( oAnchors[ i ].className.indexOf( 'external_link' ) != -1 ) {
        oAnchors[ i ].setAttribute( 'target', '_blank' ); // pour les compatibles DOM
        oAnchors[ i ].target = '_blank'; // pour IE
      }
  }
}

function absoluteX( domNode ) {
	var curleft = 0;
	var obj = domNode;
	if ( obj.offsetParent ) {
		while ( obj.offsetParent ) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if ( obj.x )
		curleft += obj.x;
	return curleft;
}
function absoluteY( domNode ) {
	var curtop = 0;
	var obj = domNode;
	if ( obj.offsetParent ) {
		while ( obj.offsetParent ) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if ( obj.y )
		curtop += obj.y;
	return curtop;
}


function hideMenuArea( menuTrigger ) {
  menuTrigger.__subMenu.style.display = 'none';
  clearTimeout( menuTrigger.tmo );
}
function InitMenuBehaviour() {
  var oMenuVoyage = document.getElementById( 'menu_voyage' );
  if ( isSet( oMenuVoyage ) ) {
    var posX = new Array();
    var heights = new Array();
    var oChildren = domTools.getChildNodes( oMenuVoyage );
    var oLI = domTools.filterNodesByTagName( oChildren, 'li' );
    for( var i=0; i<oLI.length; i++ ) {
      var menuTrigger = oLI[ i ].childNodes[ 0 ];
      var subMenu = oLI[ i ].childNodes[ 1 ];
      subMenu.style.display = 'none';

      posX[ i ] = absoluteX( menuTrigger );
      heights[ i ] = absoluteY( menuTrigger ) + parseInt( menuTrigger.offsetHeight, 10 );

      menuTrigger.tmo = null;
      menuTrigger.__subMenu = subMenu;
      subMenu.__parentMenu = menuTrigger;

      menuTrigger.onmouseover = function( e ) {
        if ( !isNull( this.tmo ) )
          clearTimeout( this.tmo );
        this.__subMenu.style.display = 'block';
      }
      menuTrigger.onmouseout = function( e ) {
        var tmp = this;
        this.tmo = setTimeout( function() { hideMenuArea( tmp ); }, 500 );
      }
      subMenu.onmouseover = function( e ) {
        clearTimeout( this.__parentMenu.tmo );
      }
      subMenu.onmouseout = function( e ) {
        var tmp = this.__parentMenu;
        this.__parentMenu.tmo = setTimeout( function() { hideMenuArea( tmp ); }, 500 );
      }
    }
    for( var i=0; i<oLI.length; i++ ) {
      var menuTrigger = oLI[ i ].childNodes[ 0 ];
      var subMenu = oLI[ i ].childNodes[ 1 ];
      menuTrigger.style.position = 'absolute';
      menuTrigger.style.left = parseInt( posX[ i ], 10 ) + 'px';
      subMenu.style.position = 'absolute';
      subMenu.style.left = parseInt( posX[ i ], 10 ) + 'px';
      subMenu.style.top = parseInt( heights[ i ], 10 ) + 'px';
    }
  }
}

addListener( window, 'load', InitMenuBehaviour );
addListener( window, 'load', InsertPrintLink );
addListener( window, 'load', Links_addBlankTarget );