function FlippingBook() {
    this.pages = [];
    this.contents = [];

    this.stageWidth = "100%";
    this.stageHeight = "100%";

    this.settings = {
            bookWidth: 640,
            bookHeight: 480,
            pagesSet: this.pages,
            scaleContent: true,
            preserveProportions: false,
            centerContent: true,
            hardcover: true,
            hardcoverThickness: 15,
            hardcoverEdgeColor: 30000,
            highlightHardcover: true,
            frameWidth: 0,
            frameColor: 000000,
            frameAlpha: 100,
            firstPageNumber: 1,
            autoFlipSize: 50,
            navigationFlipOffset: 30,
            flipOnClick: true,
            handOverCorner: true,
            handOverPage: true,
            alwaysOpened: false,
            staticShadowsType: "Asymmetric", // Asymmetric, Symmetric, Default
            staticShadowsDepth: 1,
            staticShadowsLightColor: 000000, // works for "Symmetric" shadows only
            staticShadowsDarkColor: 000000,
            dynamicShadowsDepth: 1,
            dynamicShadowsLightColor: 000000, // works for "dark" pages only
            dynamicShadowsDarkColor: 000000,
            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: 000000,
            loadOnDemand: true,
            allowPagesUnload: true,
            showUnderlyingPages: false,
            playOnDemand: true,
            freezeOnFlip: false,
            darkPages: false,
            smoothPages: false,
            rigidPages: false,
            flipCornerStyle: "manually",// "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: "pages/large/",
            zoomImageWidth: 900,
            zoomImageHeight: 1165,
            zoomOnClick: true,
            zoomUIColor: 000000,
            zoomHint: "Double click for zooming.",
            centerBook: true,
            useCustomCursors: true,
            dropShadowEnabled: true,
            dropShadowHideWhenFlipping: true,
            backgroundColor: 000000,
            backgroundImage: "img/bookBackground2.jpg",
            backgroundImagePlacement: "fit", //  "top left", "center", "fit"
            printEnabled: true,
            printTitle: "Print Me",
            downloadURL: "img/Dan_Ceresa_2010.pdf",
            downloadTitle: "Download this PDF",
            downloadSize: "1.41mb",
            downloadComplete: "Enjoy",
            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.addLoadEvent( this.onWindowLoad );
    swfobject.embedSWF("FlippingBook.swf", this.containerId, this.stageWidth, this.stageHeight, "8.0.0", "js/expressInstall.swf", this.settings, {allowScriptAccess: "always", 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;
