var siteHeader =
{
  flashContainerId: "flashHeader",
  noFlashContainerId: "noFlashHeader",
  flashId: "flashSiteHeader",
  initialList: null,
  initialBookId: null,
  flashMode: false,

  boot: function ( initialList, initialBookId )
  {
    window.addEvent("domready", siteHeader.initialize );
    window.addEvent("beforeunload", siteHeader.fixRaceCondition.bind( siteHeader ) );
    siteHeader.setIninitialList( initialList );
    siteHeader.setIninitialBook( initialBookId );
  },

  bootNoMenu: function ()
  {
    window.addEvent("domready", siteHeader.initNoMenu.bind( siteHeader ) );
  },

  initialize: function ()
  {
    var cookieValue = Cookie.get('headerMode');
    var majorVersion = swfobject.getFlashPlayerVersion().major;
    if ( majorVersion < 9 ) {
      siteHeader.setNoFlashState();
      cookieValue = 'html';
    }
    switch ( cookieValue ) {
      case "html":  siteHeader.initNoFlashHeader(); break;
      case "flash": siteHeader.initFlashHeader(); break;
      default:      siteHeader.initFlashHeader(); break;
    }
  },

  setNoFlashState: function () {
    $('siteHeaderSwitch').setStyle( 'display', 'none' );
    $('noFlashMessage').setStyle( 'display', 'block' );
  },

  setCookie: function ()
  {
    var mode = ( this.flashMode ) ? "flash" : "html";
    Cookie.set('headerMode', mode, {duration: 10, path: "/"});
  },

  initNoMenu: function ()
  {
    var child;
    while ( child = $(this.flashContainerId).lastChild ) {
      $(this.flashContainerId).removeChild( child );
    }
    $('middle').removeEvent('mouseover', this.flashMouseOutDetection.bindWithEvent( this ) );
    $(this.flashContainerId).setStyle( "display", "none" );
    $('IZITopmenu').setStyle( "display", "none" );
    $(this.noFlashContainerId).setStyle( "display", "block" );
    this.flashMode = false;
  },

  initNoFlashHeader: function ()
  {
    var child;
    $('middle').removeEvent('mouseover', this.flashMouseOutDetection.bindWithEvent( this ) );
    $(this.flashContainerId).setStyle( "display", "none" );
    $(this.noFlashContainerId).setStyle( "display", "block" );
    IZI.menu.init();
    this.flashMode = false;
  },

  initFlashHeader: function ()
  {
    $(this.noFlashContainerId).setStyle( "display", "none" );
    $(this.flashContainerId).setStyle( "display", "block" );
    var size = $(this.flashContainerId).getCoordinates();

    var params = {};
		var flashvars = {};
		var attributes = {};

		params.bgcolor = "#ffffff";
		params.base = "/skins/geus/swf/";
    flashvars.configuration = "/menu/xml/";

    var fromList = swfobject.getQueryParamValue("from");
		if ( fromList ) flashvars.initialList = fromList;
		else if ( this.initialList ) flashvars.initialList = this.initialList;
		if ( this.initialBookId ) flashvars.initialBookId = this.initialBookId;

    swfobject.embedSWF("/skins/geus/swf/header.swf", this.flashId, size.width, size.height, "9.0.28", "/lib/js/swfobject/expressInstall.swf", flashvars, params, attributes );

		$('middle').addEvent('mouseover', this.flashMouseOutDetection.bindWithEvent( this ) );
		this.flashMode = true;

		this.fixRaceCondition();
  },

  switchHeader: function ()
  {
    if ( this.flashMode ) {
      this.initNoFlashHeader();
    } else {
      this.initFlashHeader();
    }
    this.setCookie();
  },

  flashMouseOutDetection: function ()
  {
    var swf = this.getFlashObject();
    if ( swf.JSmouseOutEvent ) {
      swf.JSmouseOutEvent();
    }
  },

  setIninitialList: function ( url )
  {
    this.initialList = url;
  },

  setIninitialBook: function ( id )
  {
    this.initialBookId = id;
  },

  getFlashObject: function ()
  {
    var swf = document.getElementById(this.flashId);
    return (swf) ? swf : false;
  },

  showBookById: function ( id )
  {
    var swf = this.getFlashObject()
    if ( swf.showBookById ) {
      swf.showBookById( id );
    }
  },

  loadList: function ( url )
  {
    var swf = this.getFlashObject()
    if ( swf.loadList ) {
      swf.loadList( url );
    }
  },

  fixRaceCondition: function ( e )
  {
    var backup = window.__flash__removeCallback;
    window.__flash__removeCallback = function (instance, name) { try {backup(instance, name)} catch (x){} };
  }
};
