// flippingBook = null;
function FlippingBook() {
  this.pages = [];
  this.zoomPages = [];
  this.printPages = [];
  this.contents = [];

  this.stageWidth = "100%";
  this.stageHeight = "100%";

  this.settings = {
    bookWidth: 826,
    bookHeight: 584,
    pagesSet: this.pages,
    zoomPagesSet: this.zoomPages,
    printPagesSet: this.printPages,
    scaleContent: true,
    preserveProportions: false,
    centerContent: true,
    hardcover: false,
    hardcoverThickness: 3,
    hardcoverEdgeColor: 0xFFFFFF,
    highlightHardcover: true,
    frameWidth: 0,
    frameColor: 0xFFFFFF,
    frameAlpha: 100,
    firstPageNumber: 1,
    autoFlipSize: 50,
    navigationFlipOffset: 30,
    flipOnClick: true,
    handOverCorner: true,
    handOverPage: true,
    alwaysOpened: false,
    staticShadowsType: "Asymmetric", // Asymmetric, Symmetric, Default
    staticShadowsDepth: 1,
    staticShadowsLightColor: 0xFFFFFF, // works for "Symmetric" shadows only
    staticShadowsDarkColor: 0x000000,
    dynamicShadowsDepth: 1,
    dynamicShadowsLightColor: 0xFFFFFF, // works for "dark" pages only
    dynamicShadowsDarkColor: 0x000000,
    moveSpeed: 2,
    closeSpeed: 3,
    gotoSpeed: 3,
    rigidPageSpeed: 5,
    flipSound: "",
    hardcoverSound: "",
    preloaderType: "Thin", // "Progress Bar", "Round", "Thin", "Dots", "Gradient Wheel", "Gear Wheel", "Line", "Animated Book", "None"
    pageBackgroundColor: 0xD8D8D8,
    loadOnDemand: true,
    allowPagesUnload: true,
    showUnderlyingPages: false,
    playOnDemand: true,
    freezeOnFlip: false,
    darkPages: false,
    smoothPages: false,
    rigidPages: false,
    flipCornerStyle: "manually",// "first page only", "each page", "manually"
    flipCornerPosition: "bottom-right",// "bottom-right","top-right","bottom-left","top-left"
    flipCornerAmount: 50,
    flipCornerAngle: 20,
    flipCornerRelease: true,
    flipCornerVibrate: true,
    flipCornerPlaySound: false,
    zoomEnabled: true,
    zoomPath: issue_content_path+"/pages/large/",
    // zoomImageWidth: 900,
    // zoomImageHeight: 1165,
    zoomImageWidth: 992,
    zoomImageHeight: 1403,
    zoomOnClick: true,
    zoomUIColor: 0x8f9ea6,
    zoomHint: "Double click for zooming.",
    zoomHintEnabled: false,
    centerBook: true,		
    useCustomCursors: false,
    dropShadowEnabled: true,
    dropShadowHideWhenFlipping: true,
    backgroundColor: 0x000000,
    backgroundImage: "/images/bookBackground.jpg",
    backgroundImagePlacement: "fit", //  "top left", "center", "fit"
    printEnabled: true,
    printTitle: "Print Pages",
    downloadURL: "",
    downloadTitle: "Download PDF",
    downloadSize: "Size: 4.7 Mb",
    downloadComplete: "Complete",
    
    extXML: ""
  };

  this.containerId = "fbContainer";
  this.forwardButtonId = "fbForwardButton";
  this.backButtonId = "fbBackButton";
  this.zoomButtonId = "fbZoomButton";
  this.printButtonId = "fbPrintButton";
  this.downloadButtonId = "fbDownloadButton";
  this.currentPagesId = "fbCurrentPages";
  this.totalPagesId = "fbTotalPages";
  this.contentsMenuId = "fbContentsMenu";		
};

FlippingBook.prototype.create = function(){
  this.settings.pagesSet = this.pages;
  this.settings.zoomPagesSet = this.zoomPages;
  this.settings.printPagesSet = this.printPages;

  if( location.hash.substr(1) != "" )
  this.settings.firstPageNumber = location.hash.substr(1);

  this.addLoadEvent( this.onWindowLoad );
  swfobject.embedSWF("/flash/FlippingBook.swf", this.containerId, this.stageWidth, this.stageHeight, "8.0.0", "js/expressInstall.swf", this.settings, {allowScriptAccess: "always", wmode: "transparent", bgcolor:  "#" + this.settings.backgroundColor.toString( 16 ) });
}

FlippingBook.prototype.getFlippingBookReference = function() {
  return this.getObjectReference( this.containerId );
}

FlippingBook.prototype.getObjectReference = function( id ) {
  return document.getElementById( id );
}

FlippingBook.prototype.flipForward = function() {
  flippingBook.getFlippingBookReference().flipForward();
}

FlippingBook.prototype.flipBack = function() {
  flippingBook.getFlippingBookReference().flipBack();
}

FlippingBook.prototype.zoomButtonClick = function() {
  if( flippingBook.getFlippingBookReference().isZoomedIn() )
  flippingBook.zoomOut();
  else
  flippingBook.zoomIn();
}

FlippingBook.prototype.zoomIn = function() {
  this.getFlippingBookReference().zoomIn();
}

FlippingBook.prototype.zoomOut = function() {
  this.getFlippingBookReference().zoomOut();
}

FlippingBook.prototype.print = function() {	
  flippingBook.getFlippingBookReference().print();
}

FlippingBook.prototype.downloadFile = function() {	
  if( flippingBook.settings.downloadURL )
  flippingBook.getFlippingBookReference().downloadFile();
}

FlippingBook.prototype.onWindowLoad = function(){	
  var forwardButton = flippingBook.getObjectReference( flippingBook.forwardButtonId );
  if( forwardButton ){
    forwardButton.style.cursor = "pointer";
    forwardButton.onclick = flippingBook.flipForward;
  }

  var backButton = flippingBook.getObjectReference( flippingBook.backButtonId );
  if( backButton ){
    backButton.style.cursor = "pointer";
    backButton.onclick = flippingBook.flipBack;
  }

  var zoomButton = flippingBook.getObjectReference( flippingBook.zoomButtonId );
  if( zoomButton ){
    zoomButton.style.cursor = "pointer";
    zoomButton.onclick = flippingBook.zoomButtonClick;
  }

  var printButton = flippingBook.getObjectReference( flippingBook.printButtonId );
  if( printButton ){
    printButton.style.cursor = "pointer";
    printButton.onclick = flippingBook.print;
  }

  var downloadButton = flippingBook.getObjectReference( flippingBook.downloadButtonId );
  if( downloadButton ){
    downloadButton.style.cursor = "pointer";
    downloadButton.onclick = flippingBook.downloadFile;
  }

  flippingBook.buildContentsMenu();
}

FlippingBook.prototype.onPutPage = function( leftPageNumber, rightPageNumber ){
  this.updatePagination( leftPageNumber, rightPageNumber );
  this.updateContentsMenu( leftPageNumber, rightPageNumber );
}

FlippingBook.prototype.updatePagination = function( leftPageNumber, rightPageNumber ){
  var leftPageExists = ( leftPageNumber != undefined );
  var rightPageExists = ( rightPageNumber != undefined );

  var pageNumberString = leftPageNumber + "-" + rightPageNumber;
  if( !leftPageExists )
  pageNumberString = rightPageNumber;	
  if( !rightPageExists )
  pageNumberString = leftPageNumber;

  this.getObjectReference( this.currentPagesId ).innerHTML = pageNumberString;
  this.getObjectReference( this.totalPagesId ).innerHTML = " / " + this.getFlippingBookReference().totalPages();	
}

FlippingBook.prototype.buildContentsMenu = function(){
  var contentsSelect = this.getObjectReference( this.contentsMenuId );

  if( contentsSelect ){
    for( var i = 0; i < this.contents.length; i++ )
    contentsSelect.options[i] = new Option(this.contents[i][0], this.contents[i][1]);

    contentsSelect.onchange = this.onContentsChange;
  }
}

FlippingBook.prototype.onContentsChange = function(){
  var contentsSelect = flippingBook.getObjectReference( flippingBook.contentsMenuId );
  var pageNumber = contentsSelect.options[contentsSelect.selectedIndex].value;

  if( pageNumber )
  flippingBook.getFlippingBookReference().flipGotoPage( pageNumber );
}

FlippingBook.prototype.updateContentsMenu = function( leftPageNumber, rightPageNumber ){
  var contentsSelect = flippingBook.getObjectReference( flippingBook.contentsMenuId );

  if( contentsSelect ){
    for( var i = 0; i < this.contents.length - 1; i++ ){
      var minPage = contentsSelect.options[i].value;
      var maxPage = contentsSelect.options[i+1].value;
      var leftOK = false;
      var rightOK = false;

      if( leftPageNumber )
      leftOK = ( Number( leftPageNumber ) >=  minPage && Number( leftPageNumber ) <= maxPage );
      else
      leftOK = true;

      if( rightPageNumber )
      rightOK = ( Number( rightPageNumber ) >=  minPage && Number( rightPageNumber ) <= maxPage );
      else
      rightOK = true;

      if( leftOK && rightOK )	
      break;
    }	
    contentsSelect.selectedIndex = i;
  }
}

FlippingBook.prototype.getWindowHeight = function() {
  var windowHeight = 0;

  if (typeof(window.innerHeight) == 'number' ) {
    windowHeight=window.innerHeight;
  }
  else {
    if (document.documentElement &&	document.documentElement.clientHeight) {
      windowHeight = document.documentElement.clientHeight;
    }
    else {
      if (document.body&&document.body.clientHeight) {
        windowHeight=document.body.clientHeight;
      }
    }
  }

  return windowHeight;
}

FlippingBook.prototype.addLoadEvent = function ( fn ) {
  if (typeof window.addEventListener != "undefined") {
    window.addEventListener("load", fn, false);
  }
  else if (typeof document.addEventListener != "undefined") {
    document.addEventListener("load", fn, false);
  }
  else if (typeof window.attachEvent != "undefined") {
    window.attachEvent("onload", fn);
  }
  else if (typeof window.onload == "function") {
    var fnOld = window.onload;
    window.onload = function() {
      fnOld();
      fn();
    };
  }
  else {
    window.onload = fn;
  }
}

FlippingBook.prototype.handleWheel = function ( delta ){
  this.getFlippingBookReference().onWheelScroll( delta );
}

flippingBook = new FlippingBook();


function wheel(event){
  var delta = 0;
  if (!event) event = window.event;
  if (event.wheelDelta) {
    delta = event.wheelDelta/120; 
    if (window.opera) delta = -delta;
  } else if (event.detail) {
    delta = -event.detail/3;
  }
  if (delta)
  flippingBook.handleWheel(delta);
  if (event.preventDefault)
  event.preventDefault();
  event.returnValue = false;
}

if (window.addEventListener)
window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;