﻿/// <reference path="jquery.min.js" />
/// <reference path="jquery-ui.min.js" />
/// <reference path="flippingbook.js" />
/// <reference path="flowplayer-3.1.2.min.js" />
/// <reference path="json2.js" />
/// <reference path="drawing.js" />



var prefix = "/ebook/";

var minH = 50;
var maxH = 85;
var shadowH = 25;
var minW = 0;
var maxW = 0;
var aniSpeed = 200;
var menuGapH = 3;

var bookW = 922;
var bookH = 600;
var bookRatio = bookW / bookH;
var pageW = 700;
var pageH = 913;
var pageRatio = pageW / pageH;
var zoomPageW = 1185;  // width of one page
var zoomPageH = 1500;
var indexPageW = 0;
var indexPageH = 0;
var singleZoomPageW = 0;
var singleZoomPageH = 0;
var downloadFile = "";
var fileSize = 0;
var pdfUrl2 = "";
var pdfSize2 = "";
var imageExt = ".jpg";

var oBook;
var pageSize = 20;
var TOCPageSize = 30;
var arrPage = [];
var arrStaticPage = [];
var arrChapter = [];
var arrMemo = [];
var arrBookmark = [];

var pageStart = 1;
var pageTotal = 196;
var bookID = 1;
var leadZero = 4;

var pageZoom = false;
var chapterHit = false;

var lastPage = 1;
var prevPage = 0;
var lastTimeStamp;
var lastPageMode;
var maxMemoID = 1;

var penOn = false;

var isTouch = false;
var supportFlash = true;
var isiPhone = false;
var isAndroid = false;

var flippingBook; // = new flippingBook;

$(document).ready(function() {
    //bookID = Number(getQueryVariable("book"));
    bookID = Number($("#lblBookID").text());
    if (bookID == 0) {
        return false;
    }
    if (bookID == null || isNaN(bookID) || bookID <= 0) bookID = 1;

    $("#btnDoublePage").addClass("ui-state-active");

    setCurrentPage(1);
    loadBook(bookID);

    $(".button, .button2").hover(
        function() { $(this).addClass('ui-state-hover'); },
        function() { $(this).removeClass('ui-state-hover'); }
    );

    //bindButton();
    enableWheelEvent();
    createDialog();

    if (bookID != 0) {
        $(window).resize(function() {
            //resize(false);
            setPageSize();
            sizeContent();
            updateNavigator(getCurrentPage());
            if (penOn) {
                drawCanvas();
            };
        });
    };

    //    showCanvas();
    //    draw();
});

function setPageSize() {
    var wo = $(window).width();
    var left = $("#navigation-table").position().left;
    $("#navigation-panel").width(w);
    var w = wo - left * 2 - 100;
    var wn = minH / indexPageH * indexPageW + 4;
    pageSize = Math.round(w / wn);

    if (IsSinglePage) {
        bindSinglePageScroll();
        if (getPageType() == "zoom") {
            gotoPage(getCurrentPage());
        }
    }
};


function getBook(width, height) {
    if (supportFlash) {

        var w = width / 2;
        for (i = 0; i < arrPage.length; i++) {
            var url = prefix + "pages/" + bookID + "/" + arrPage[i];
            var url2 = prefix + "pages/" + bookID + "/zoom/" + arrStaticPage[i];
            if (hasExtension(arrPage[i], ".swf")) {
                //url += "?w=" + w + "%26h=" + height;
                //url += "?h=" + zoomPageH + "%26w=" + zoomPageW;
                url2 = "none";
                //url2 = "?h=" + zoomPageH + "%26w=" + zoomPageW;
            }
            flippingBook.pages.push(url);
            flippingBook.zoomPages.push(url2);
            flippingBook.printPages.push(prefix + "pages/" + bookID + "/zoom/" + arrStaticPage[i]);
        };

        //flippingBook.settings.zoomPath = "pages/" + bookID + "/zoom/";

        // define custom book settings here
        flippingBook.stageWidth = "100%";
        flippingBook.stageHeight = "100%";

        flippingBook.settings.bookWidth = width;
        flippingBook.settings.bookHeight = height;
        flippingBook.settings.pageBackgroundColor = "0xffffff"; /*0x5b7414;*/
        //flippingBook.settings.zoomUIColor = 0xe5e5e5;
        flippingBook.settings.useCustomCursors = false;
        flippingBook.settings.bookToStageScaling = "0.95",
    flippingBook.settings.dropShadowEnabled = true;
        flippingBook.settings.smoothPages = oBook.Smooth;
        flippingBook.settings.scaleContent = true;
        flippingBook.settings.darkPages = false;
        flippingBook.settings.preloaderType = "Thin", // "Progress Bar", "Round", "Thin", "Dots", "Gradient Wheel", "Gear Wheel", "Line", "Animated Book", "None"
    flippingBook.settings.freezeOnFlip = false;
        flippingBook.settings.preserveProportions = false;

        flippingBook.settings.zoomImageWidth = zoomPageW;
        flippingBook.settings.zoomImageHeight = zoomPageH;
        flippingBook.settings.downloadURL = downloadFile + ".pdf";
        flippingBook.settings.downloadTitle = "PDF Version";
        flippingBook.settings.downloadSize = fileSize;
        flippingBook.settings.flipSound = prefix + "sounds/02.mp3";
        flippingBook.settings.flipCornerStyle = "first page only";
        flippingBook.settings.flipCornerPosition = "top-right";
        flippingBook.settings.zoomHintEnabled = false;

    } else {
        // not support Flash
        switchSinglePage();
        $("#btnDoublePage").addClass("ui-state-disabled").unbind("click").hover(
		        function() { $(this).removeClass('ui-state-hover'); },
		        function() { $(this).removeClass('ui-state-hover'); }
            );
    };

    // loading theme
    var theme = $("#lblTheme").text();

    if (theme != "") {
        //$("head").append("<link href='" + prefix + "theme/" + theme + "/StyleSheet.css' id='themeCss' rel='stylesheet' type='text/css' />");
        $("#themeCss").attr("href", prefix + "theme/" + theme + "/StyleSheet.css");
        $("#themeCss2").attr("href", prefix + "theme/" + theme + "/jquery-ui-1.7.2.custom.css");
        if (supportFlash) flippingBook.settings.backgroundImage = prefix + "theme/" + theme + "/images/background.jpg";

    }
    else {
        //$("head").append("<link href='" + prefix + "theme/clean/StyleSheet.css' id='themeCss' rel='stylesheet' type='text/css' />");
        $("#themeCss").attr("href", prefix + "theme/clean/StyleSheet.css");
        $("#themeCss2").attr("href", prefix + "css/hm-theme/jquery-ui-1.7.2.custom.css");
        if (supportFlash) flippingBook.settings.backgroundImage = "";

        // set flip book background
        if (oBook.BGImageUrl != "") {
            if (supportFlash) flippingBook.settings.backgroundImage = prefix + "image_lib/" + oBook.BGImageUrl;
            //alert(flippingBook.settings.backgroundImage);
        }

    };
    if (supportFlash) {
        //flippingBook.settings.backgroundImage = prefix + "css/theme/chinese/images/background.jpg";
        //flippingBook.settings.backgroundImage = "";
        flippingBook.settings.backgroundImagePlacement = "top left"; // "top left", "center", "fit"
        flippingBook.settings.backgroundColor = "0xe5e5e5";


        // default settings can be found in the flippingbook.js file
        flippingBook.create();
    };
};

function setOption() {
    if (!oBook.EnableBookmark) {
        $("#btnBookmark").hide();
    };
    if (!oBook.EnableMemo) {
        $("#btnAddMemo").hide();
        $("#btnAddMemo2").hide();
        $("#btnGetMemo").hide();
    };
    if (!oBook.EnableTheme) {
        $("#btnTheme").hide();
    };
    if (!oBook.EnablePen) {
        $("#btnPen").hide();
    };
    if (!oBook.EnableSearch) {
        $("#btnSearch").hide();
    };
    if (!oBook.EnablePrint) {
        $("#btnPrint").hide();
    };
    if (!oBook.EnableEmail) {
        $("#btnEmail").hide();
    };
    if (!oBook.EnableFacebook) {
        $("#btnFacebook").hide();
    };
    if (!oBook.EnableOtherShare) {
        $("#btnOtherShare").hide();
    };
    if (!oBook.EnableEmail && !oBook.EnableFacebook && !oBook.EnablOtherShare) {
        $("#btnShare").hide();
    };
};

function rightstr(s, c) {
    L = s.lastIndexOf(c);
    L = L + 1;
    return s.slice(L);
};

function hasExtension(src, c) {
    var idx = src.lastIndexOf(c);
    if (idx != -1) {
        return true;
    }
    else {
        return false;
    };
};

function bindButton() {
    $("#btnForward").click(function() {
        gotoNext();
    });
    $("#btnBack").click(function() {
        gotoPrev();
    });
    $("#btnSeekFirst").click(function() {
        gotoPage(1);
    });
    $("#btnSeekEnd").click(function() {
        gotoPage(pageTotal);
    });
    if (oBook.EnablePrint) {
        $("#btnPrint").click(function() {
            flippingBook.getFlippingBookReference().print();
        });
    };
    $("#btnDownload").click(function() {
        //        if (flippingBook.settings.downloadURL)
        //            flippingBook.getFlippingBookReference().downloadFile();
        if ($("#btnDownload").hasClass("ui-state-active")) {
            $("#btnDownload").removeClass("ui-state-active");
            $("#download-control").hide();
        }
        else {
            $("#btnDownload").addClass("ui-state-active");
            var pos = $("#btnDownload").offset();
            var h = $("#btnDownload").height();
            $("#download-control").css({ "top": (pos.top + h + menuGapH) + "px", "left": pos.left + "px" }).fadeIn();
        };
    });
    $("#download-control").mouseleave(function(e) {
        $("#btnDownload").removeClass("ui-state-active");
        $("#download-control").fadeOut("fast");
    });

    $("#btnZoom").click(function() {
        zoomPage();
    });

    $("#btnBook").click(function() {
        showMenu(this, "#fbMenu1");
    });
    $("#fbMenu1").mouseleave(function(e) {
        hideMenu("#btnBook", "#fbMenu1");
    });
    $("#fbMenu1 div").hover(
	                    function() { $(this).addClass('ui-state-hover'); },
	                    function() { $(this).removeClass('ui-state-hover'); }
                    );

    $("#btnHelp").click(function() {
        disableWheelEvent();
        $("#help-control").show();
    });
    $("#btnCloseHelp").click(function() {
        enableWheelEvent();
        $("#help-control").hide();
    });

    $("#btnBookInfo").click(function() {
        showMenu(this, "#info-control");
    });
    $("#info-control").mouseleave(function() {
        hideMenu("#btnBookInfo", "#info-control");
        hideMenu("#btnBook", "#fbMenu1");
    });

    $("#btnChapter").click(function() {
        showMenu(this, "#chapter-control");
    });
    $("#chapter-control").mouseleave(function(e) {
        hideMenu("#btnChapter", "#chapter-control");
        hideMenu("#btnButton", "#fbMenu1");
    });

    $("#btnMedia").click(function() {
        if ($("#btnMedia").hasClass("ui-state-active")) {
            $("#btnMedia").removeClass("ui-state-active");
            $("#media-control").hide();
        }
        else {
            $("#btnMedia").addClass("ui-state-active");
            var p = getCurrentPage();
            $("#media-control div").hide();
            $("#media-control div[page=" + p + "]").show();
            if (!IsSinglePage() && p < pageTotal && p % 2 == 0) {
                $("#media-control div[page=" + (p + 1) + "]").show();
            }
            var pos = $("#btnMedia").offset();
            var h = $("#btnMedia").height();
            $("#media-control").css({ "top": (pos.top + h + menuGapH) + "px", "left": pos.left + "px" }).fadeIn();
        };
    });
    $("#media-control").mouseleave(function(e) {
        hideMenu("#btnMedia", "#media-control");
    });

    if (oBook.EnableSearch) {
        $("#btnSearch").click(function() {
            if ($("#btnSearch").hasClass("ui-state-active")) {
                $("#btnSearch").removeClass("ui-state-active");
                $("#search-bar").hide();
            }
            else {
                $("#btnSearch").addClass("ui-state-active");
                var pos = $("#btnSearch").offset();
                var h = $("#btnSearch").height();
                $("#search-bar").css({ "top": (pos.top + h + menuGapH) + "px", "left": pos.left + "px" }).fadeIn();
                $("#txtSearch").focus().blur(function() {
                    $("#btnSearch").removeClass("ui-state-active");
                    $("#search-bar").fadeOut("fast");
                });
            };
        });
        $("#txtSearch").keypress(function(e) {
            if (e.which == 13)
                SearchContent();
        });
        $("#btnSearchResult").click(function() {
            SearchContent();
        });
        $("#btnCloseResult").click(function() {
            $("#result-control").hide();
            enableWheelEvent();
        });
    };

    $("#btnTOC").click(function() {
        setupTOC();
    });
    $("#btnCloseTOC").click(function() {
        enableWheelEvent();
        $("#toc-control").hide();
    });
    $("#btnRelated").click(function() {
        loadRelated();
    });
    $("#btnCloseRelated").click(function() {
        $("#related-control").hide();
        enableWheelEvent();
    });
    $("#btnSinglePage").click(function() {
        switchSinglePage();
    });
    $("#btnDoublePage").click(function() {
        switchDoublePage();
    });
    $("#btnShare").click(function() {
        showMenu(this, "#share-control");
    });
    $("#share-control").mouseleave(function() {
        hideMenu("#btnShare", this);
    });
    if (oBook.EnableEmail) {
        $("#btnEmail").click(function() {
            hideMenu("#btnShare", "#share-control");
            $("#email-dialog").dialog("open");
            $("#txtFriendName").val("");
            $("#txtFriendEmail1").val("");
            $("#email-message").text("");
        });
    };
    if (oBook.EnableFacebook) {
        $("#btnFacebook").click(function() {
            hideMenu("#btnShare", "#share-control");
            fbs_click();
        });
    };

    $("#single-prev").mouseover(function() {
        $(this).stop().fadeTo("normal", 1);
    }).mouseout(function() {
        $(this).stop().fadeTo("normal", 0.2);
    }).click(function() {
        gotoPrev();
    }).fadeTo("fast", 0.2);

    $("#single-next").mouseover(function() {
        $(this).stop().fadeTo("normal", 1);
    }).mouseout(function() {
        $(this).stop().fadeTo("normal", 0.2);
    }).click(function() {
        gotoNext();
    }).fadeTo("fast", 0.2);

    $("#single-page").dblclick(function() {
        zoomPage();
    });

    $("#btnClosePlayer").click(function() {
        enableWheelEvent();
        $("#player-control").hide();
        $f().stop();
    });

    $("#txtCurrentPage").blur(function() {
        gotoPage(getCurrentPage());
    }).keypress(function(e) {
        if (e.which == 13)  // when Enter is pressed
            gotoPage(getCurrentPage());
    });

    if (oBook.EnableEmail || oBook.EnableFacebook || oBook.EnablOtherShare) {
        $("#share-control div").hover(
            function() { $(this).addClass('ui-state-hover'); },
            function() { $(this).removeClass('ui-state-hover'); }
        );
    };

    if (oBook.EnableBookmark) {
        $("#btnBookmark").click(function() {
            showMenu(this, "#fbMenu5");
            $("#fbMenu5 div").hover(
	                    function() { $(this).addClass('ui-state-hover'); },
	                    function() { $(this).removeClass('ui-state-hover'); }
                    );
        });
        $("#fbMenu5").mouseleave(function() {
            hideMenu("#btnBookmark", "#fbMenu5");
        });
        $("#btnAddBookmark").click(function() {
            hideMenu("#btnBookmark", "#fbMenu5");
            $("#addBookmark-dialog").dialog("open");
            $("#addBookmark-message").text("");
            $("#txtBookmarkDesc").val("");
            var p = getCurrentPage();
            $("#optBookmarkLeft").attr("value", p).attr("checked", true);
            if (p == 1 || p == pageTotal || IsSinglePage()) {
                $("#optBookmarkRight").hide();
                $("#lblBookmarkRight").hide()
                $("#lblBookmarkLeft").text("This Page")
            }
            else {
                $("#optBookmarkRight").show();
                $("#lblBookmarkRight").show()
                $("#optBookmarkRight").attr("value", p + 1).val(p + 1);
                $("#lblBookmarkLeft").text("Left Page")
                $("#lblBookmarkRight").text("Right Page")
            };
        });
        $("#btnGetBookmark").click(function() {
            hideMenu("#btnBookmark", "#fbMenu5");
            getBookmark();
        });
        $("#btnCloseBookmark").click(function() {
            $("#bookmark-control").hide();
            enableWheelEvent();
        });
    };

    // memo
    if (oBook.EnableMemo) {
        $("#btnAddMemo, #btnAddMemo2").click(function() {
            addMemo(getCurrentPage());
        });
        $("#btnCloseMemo").click(function() {
            $("#memo-control").hide();
            enableWheelEvent();
        });
        $("#btnGetMemo").click(function() {
            hideMenu("#btnBook", "#fbMenu1");
            listMemo();
        });
    };

    // theme
    if (oBook.EnableTheme) {
        $("#btnTheme").click(function() {
            loadTheme();
            disableWheelEvent();
        });
        $("#btnCloseTheme").click(function() {
            $("#theme-control").hide();
            enableWheelEvent();
        });
    };

    //Pen
    if (oBook.EnablePen) {
        $("#btnPen").click(function() {
            penOn = !penOn;
            if (penOn) {
                turnPenOn();
            } else {
                turnPenOff();
                switchSinglePage();
            };
        });
    };
};

function showMenu(e, menu) {
    if ($(e).hasClass("ui-state-active")) {
        $(e).removeClass("ui-state-active");
        $(menu).hide();
    }
    else {
        $(e).addClass("ui-state-active");
        chapterHit = false;
        var pos = $(e).offset();
        var h = $(e).height();
        $(menu).css({ "top": (pos.top + h + menuGapH) + "px", "left": pos.left + "px", "z-index": 3000 }).fadeIn();
    };
    if (menu != "#fbMenu1") hideMenu("#btnBook", "#fbMenu1");
    if (menu != "#fbMenu5") hideMenu("#btnBookmark", "#fbMenu5");
    if (menu != "#share-control") hideMenu("#btnShare", "#share-control");
};

function hideMenu(e, menu) {
    $(e).removeClass("ui-state-active");
    $(menu).fadeOut("fast");
};


function bindSinglePageScroll() {
    if (penOn) {
        $("#container-single-page").unbind("mousemove");
    } else {
        $("#container-single-page").mousemove(function(e) {
            var h = $(this).height() + $("#navigation-table").position().top;
            var ho = $("#single-page img").height() - h;
            var y = (e.clientY - $("#control-panel").height());
            h = h * 2 / 3;
            //$("#fbMenu3").text("h: " + h + ", ho: " + ho + ", y: " + y).css("color", "#000");

            var w = $(this).width();
            var wo = $("#container-single-page-wrapper").width() - w;
            var x = e.clientX; // * 2 / 3 - (w / 6);
            w = w * 2 / 3;

            var top = y * ho / h - h / 4;
            var left = x * wo / w; // -w / 4;
            //$("#fbMenu3").text("w: " + w + ", wo: " + wo + ", x: " + x + ", left: " + left).css("color", "#000");
            $(this).scrollTop(top).scrollLeft(left);
        });
    };

    var w = $("#container-single-page").width() - $("#single-prev").width() - $("#single-next").width() - 30;
    if (w < zoomPageW) {
        singleZoomPageW = w;
        singleZoomPageH = singleZoomPageW / pageRatio;
    }
    else {
        singleZoomPageW = 0;
        singleZoomPageH = 0;
    }
    //$("#fbMenu3").text("w: " + singleZoomPageW + ", h: " + singleZoomPageH + ", wo: " + w +", w1:"+zoomPageW).css("color", "#000");

};

function switchSinglePage() {
    $("#btnSinglePage").addClass("ui-state-active");
    $("#btnDoublePage").removeClass("ui-state-active");
    $("#container-double-page").hide();

    $("#container-single-page").show();
    //pageZoom = false;
    $("#single-page").width(pageW).height($("#container").height());
    $("#container-single-page-wrapper").width(pageW + 60).height(pageH);
    gotoPage(getCurrentPage());

    $("#btnPrint").addClass("ui-state-disabled").hover(
		        function() { $(this).removeClass('ui-state-hover'); },
		        function() { $(this).removeClass('ui-state-hover'); }
            );
    //    $("#btnDownload").addClass("ui-state-disabled").hover(
    //		        function() { $(this).removeClass('ui-state-hover'); },
    //		        function() { $(this).removeClass('ui-state-hover'); }
    //            );

    bindSinglePageScroll();
    addPageView(getCurrentPage());
};

function switchDoublePage() {
    $("#btnZoom").removeClass("ui-state-active");
    pageZoom = false;
    $("#btnSinglePage").removeClass("ui-state-active");
    $("#btnDoublePage").addClass("ui-state-active");
    $("#container-single-page").hide();
    $("#container-double-page").show();
    flippingBook.settings.firstPageNumber = Number($("#txtCurrentPage").val());
    flippingBook.create();

    $("#btnPrint").removeClass("ui-state-disabled").addClass("ui-state-default").hover(
		        function() { $(this).addClass('ui-state-hover'); },
		        function() { $(this).removeClass('ui-state-hover'); }
            );
    //    $("#btnDownload").removeClass("ui-state-disabled").addClass("ui-state-default").hover(
    //		        function() { $(this).addClass('ui-state-hover'); },
    //		        function() { $(this).removeClass('ui-state-hover'); }
    //            );

    //enableWheelEvent();
    if (penOn) {
        turnPenOff();
    };
    addPageView(getCurrentPage());
};

function enableWheelEvent() {
    // Enable events for catching the ebook component turning page
    if (window.addEventListener)
        window.addEventListener('DOMMouseScroll', wheel, false);
    window.onmousewheel = document.onmousewheel = wheel;
};

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) {
        if (IsSinglePage()) {
            if (delta > 0) gotoPrev();
            if (delta < 0) gotoNext();
        }
        else {
            flippingBook.handleWheel(delta);
        }
    }
    if (event.preventDefault)
        event.preventDefault();
    event.returnValue = false;
};

function disableWheelEvent() {
    // Disable events for catching the ebook component turning page
    if (window.addEventListener)
        window.removeEventListener('DOMMouseScroll', wheel, false);
    window.onmousewheel = document.onmousewheel = null;
};

function turnPenOn() {
    $("#pen-dialog").dialog("open");
    switchSinglePage();
    drawCanvas();
    bindCanvas();
};

function turnPenOff() {
    $("#pen-dialog").dialog("close");
    $("#pen-canvas").hide();
    unbindCanvas();
};

function showMedia(url) {
    $("#player-control").fadeIn("fast");
    $f("player", prefix + "swf/flowplayer-3.1.2.swf",
        {

            // playlist with two entries 
            //            playlist: [
            //                "http://www.innowil.com/video/skyandice-150.flv",
            //                "http://www.innowil.com/video/flowplayer-700.flv"
            //            ],

            clip: {
                url: url,
                onBeforeStart: function(clip) {
                    // get current clip's dimensions ... 
                    var w = parseInt(clip.metaData.width, 10);
                    var h = parseInt(clip.metaData.height, 10) + 24;
                    var top = ($(window).height() - h) / 2;
                    var left = ($(window).width() - w) / 2;
                    $(this.getParent()).css({ left: left + "px", top: top + "px", height: h + "px", width: w + "px" });
                }
            }

            // show playlist buttons in controlbar 
            //            plugins: {
            //                controls: {
            //                    playlist: true
            //                }
            //            }
        });

    //        $f("player").getCommonClip().onStart(function() {
    //            alert("hi");
    //            var clip = $f("player").getClip();
    //            alert(clip.height);
    //            $("#player").animate({ height: clip.height });
    //            $("#player").animate({ width: clip.width });
    //        });
    var pos = $("#btnMedia").offset();
    $("#player").css({ "top": pos.top + "px", "left": pos.left + "px", width: $("#btnMedia").width() + "px", height: $("#btnMedia").height() + "px" });
    var w = 640;
    var h = 400;
    var top = ($(window).height() - h) / 2;
    var left = ($(window).width() - w) / 2;
    $("#player").css({ left: left + "px", top: top + "px", height: h + "px", width: w + "px" });

};

function gotoPage(p) {
    if (p < 1) p = 1;
    if (p > pageTotal) p = pageTotal;
    if (IsSinglePage()) {
        loadImage($("#single-page"), prefix + "page.ashx?book=" + bookID + "&url=" + arrStaticPage[p - 1] + "&type=" + getPageType());
    }
    else {
        if (p % 2 == 1 && p != 1) p--;
        flippingBook.getFlippingBookReference().flipGotoPage(p);
        //$("#container-double-page").flipGotoPage(p);
    }
    setCurrentPage(p);

    var pn2 = Number($("#navigation-pageno").val());
    var pn1 = Math.floor((p - 1) / pageSize) + 1;
    //$("#fbMenu3").text(pn1 + ", " + pn2 + ": " + $("#navigation-pageno").val());
    if (pn1 != pn2) {
        loadNavigator(pn1);
    }
};

function gotoNext() {
    // Update Navigation Pager
    var p1 = getCurrentPage() + 1;
    var p2 = Number($("#navigation-table td:last .pagenum").text());
    if (p1 > p2 && p1 <= pageTotal) {
        loadNavigator(Math.floor((p1 - 1) / pageSize) + 1);
    }

    if (IsSinglePage()) {
        var p = Number($("#txtCurrentPage").val()) + 1;
        if (p <= pageTotal) {
            loadImage($("#single-page"), prefix + "page.ashx?book=" + bookID + "&url=" + arrStaticPage[p - 1] + "&type=" + getPageType());
            setCurrentPage(p);
        }
    }
    else {
        flippingBook.getFlippingBookReference().flipForward();
    }
};

function gotoPrev() {
    // Update Navigation Pager
    var p1 = getCurrentPage() - 1;
    if (!IsSinglePage()) {
        p1 -= 1;
    }
    var p2 = Number($("#navigation-table td:last .pagenum").text());
    if (p1 < p2 && p1 >= 1) {
        loadNavigator(Math.floor((p1 - 1) / pageSize) + 1);
    }

    if (IsSinglePage()) {
        var p = Number($("#txtCurrentPage").val()) - 1;
        if (p >= 1) {
            loadImage($("#single-page"), prefix + "page.ashx?book=" + bookID + "&url=" + arrStaticPage[p - 1] + "&type=" + getPageType());
            setCurrentPage(p);
        }
    }
    else {
        flippingBook.getFlippingBookReference().flipBack();
    }
};

function getPageType() {
    return (pageZoom ? "zoom" : "single");
};

function IsSinglePage() {
    return $("#btnSinglePage").hasClass("ui-state-active");
};

function zoomPage() {
    if (IsSinglePage()) {
        pageZoom = !pageZoom; // toggle Zoom
        gotoPage(getCurrentPage());
        if (pageZoom)
            $("#btnZoom").addClass("ui-state-active");
        else
            $("#btnZoom").removeClass("ui-state-active");
    }
    else {
        if (flippingBook.getFlippingBookReference().isZoomedIn()) {
            flippingBook.zoomOut();
            //$("#btnZoom").removeClass("ui-state-active");
        }
        else {
            flippingBook.zoomIn();
            //$("#btnZoom").addClass("ui-state-active");
        }
    }
};

function setCurrentPage(p) {
    $("#txtCurrentPage").val((p < 1 ? "" : p));
    addPageView(p);
    if (lastTimeStamp == null) {
        addBookView(true);
    };
    lastTimeStamp = (new Date()).valueOf();
    $("#navigation-table div.selected").removeClass("selected");
    $("#navigation-table .pagenum[page=" + p + "]").parent().addClass("selected");

    // Check the page has extra media
    if ($("#media-control div[page=" + p + "]").length > 0) {
        $("#btnMedia").show();
    }
    else {
        // For Double Page, the adjant page also incorporate
        if (!IsSinglePage() && p < pageTotal && p % 2 == 0 && $("#media-control div[page=" + (p + 1) + "]").length > 0) {
            $("#btnMedia").show();
        }
        else {
            $("#btnMedia").hide();
        };

        //        if (p == 3 || p == 2) {
        //            $("#memo1").show();
        //        }
        //        else {
        //            $("#memo1").hide();
        //        };
    };
    getMemo(p);
    if (penOn) drawCanvas();
};

function getCurrentPage() {
    return Number($("#txtCurrentPage").val());
};

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
};

function getNumber(p) {
    var po = String(p).length;
    var n = "";
    for (var i = 0; i < (leadZero - po); i++)
        n += "0";
    return n + p;
};

function bindNavigator() {
    //$("#navigation-panel .pagenum").hide();

    $("#navigation-panel div.page").click(function() {
        var pageNum = Number($("span.pagenum", this).attr("page"));
        gotoPage(pageNum);
    }).mouseenter(function() {
        if (oBook.EnableAnimation) {
            $("img.page", this).stop(true).animate({ height: maxH }, aniSpeed);
            $("div.bookmark", this).stop(true).animate({ top: "15px" }, aniSpeed);
            $(this).parents("td").find(".pagenum").stop(true).animate({ fontSize: "12px" }, aniSpeed);
        } else {
            $("img.page", this).css({ height: maxH });
            $("div.bookmark", this).css({ top: "15px" });
            $(this).parents("td").find(".pagenum").css({ fontSize: "12px" });
        };
    }).mouseleave(function() {
        if (oBook.EnableAnimation) {
            $("img.page", this).stop(true).animate({ height: minH }, aniSpeed);
            $("div.bookmark", this).stop(true).animate({ top: "10px" }, aniSpeed);
            $(this).parents("td").find(".pagenum").stop(true).animate({ fontSize: "8px" }, aniSpeed);
        } else {
            $("img.page", this).css({ height: minH });
            $("div.bookmark", this).css({ top: "10px" });
            $(this).parents("td").find(".pagenum").css({ fontSize: "8px" });
        };
    });

    $("#navigation-prev").click(function() {
        var p = Number($("#navigation-pageno").val());
        if (p > 1) p--;
        loadNavigator(p);
    });
    $("#navigation-next").click(function() {
        var p = Number($("#navigation-pageno").val());
        var n = Math.ceil(pageTotal / pageSize);
        if (p < n) p++;
        loadNavigator(p);
    });
};

function bindIndex() {
    $(".toc-button").click(function() {
        var pageNum = Number($(".pagenum", this).attr("page"));
        gotoPage(pageNum);
        $("#toc-control").hide();
        enableWheelEvent();
    });
};

//function bindBookmark() {
//    $(".bookmark-item").click(function() {
//        var pageNum = Number($(".pagenum", this).attr("page"));
//        gotoPage(pageNum);
//        $("#bookmark-control").hide();
//        enableWheelEvent();
//    });
//}

var loadingPage = false;

function loadImage(e, url) {
    $("#single-loading").show();

    loadingPage = true;
    window.setTimeout(function() {
        if (loadingPage) {
            $("#single-loading").show();
        }
    }, 400);

    //    if (getPageType() == "zoom") {
    //        url += "&w=" + singleZoomPageW + "&h=" + singleZoomPageH;
    //    };

    var img = new Image();
    $(img).load(function() {
        $(this).hide(); //css({ "display": "none" });
        $(e).append(this);
        loadingPage = false;
        var h = $(this).height();
        var w = $(this).width();
        $("#container-single-page-wrapper").height(h).width(w + 60);
        $("#single-page").width(w);
        $("#single-loading").hide();
        $(this).parent().find("img:first").fadeOut("fast").remove();
        $(this).fadeIn("fast");
    }).attr("src", url);
};

function loadBook(id) {
    var param = JSON.stringify({ BookID: id });
    $.ajax({
        type: "POST",
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/LoadBookDetail",
        success: function(data) {
            var book = data.d;

            bookW = book.BookWidth;
            bookH = book.BookHeight;
            bookRatio = bookW / bookH;
            pageW = book.SingleWidth;
            pageH = book.SingleHeight;
            zoomPageW = book.ZoomWidth;
            zoomPageH = book.ZoomHeight;
            indexPageW = book.IndexWidth;
            indexPageH = book.IndexHeight;
            pageStart = book.PageStart - 1;
            pageTotal = book.PageCount;
            $("#fbTotalPages").text("/ " + pageTotal);
            document.title = book.Title;
            downloadFile = book.Url;
            fileSize = book.FileSize;
            pdfUrl2 = book.PdfUrl2;
            pdfSize2 = book.PdfSize2;
            //leadZero = String(pageTotal).length;

            oBook = jQuery.extend(true, {}, book);
            setOption();
            bindButton();

            setPageSize();

            //Bookmark
            arrBookmark = book.Bookmarks;

            arrPage = book.Pages;
            arrStaticPage = book.StaticPages;
            loadNavigator(1);

            // get the image format from file extension
            var filename = String(arrStaticPage[0]);
            imageExt = filename.substring(filename.length - 4);

            //resize(true);
            loadBrowserSettings();
            getBook(bookW, bookH);
            sizeContent();

            // Load Downloads
            $("#download-control").append("<div class=\"ui-corner-all\"><a href=\"" + prefix + "download.ashx?id=" + book.BookID + "\" target=\"_blank\">Download PDF Version (" + fileSize + ")</a></div>");
            if (pdfUrl2 != "") {
                $("#download-control").append("<div class=\"ui-corner-all\"><a href=\"" + prefix + "download.ashx?id=" + book.BookID + "&version=2\" target=\"_blank\">Download PDF Version with Flash (" + pdfSize2 + ")</a></div>");
            }

            //
            // Add Chapter
            //
            arrChapter = book.Chapters;
            $("#chapter-control div").remove();
            for (i = 0; i < arrChapter.length; i++) {
                var chapter = arrChapter[i];
                $("#chapter-control").append("<div page='" + chapter.Page + "' >" + chapter.Chapter + "</div>");
            }
            $("#chapter-control div").click(function() {
                var p = Number($(this).attr("page"));
                $(this).parent().hide();
                $("#btnChapter").removeClass("ui-state-active");
                gotoPage(p);
            }).hover(
	                    function() { $(this).addClass('ui-state-hover'); },
	                    function() { $(this).removeClass('ui-state-hover'); }
                    );
            if (arrChapter.length == 0) {
                $("#chapter-control").append("<div style=\"cursor:default;\">No Chapter Info</div>");
            };

            //
            // Add Media
            //
            arrMedia = book.Media;
            $("#media-control div").remove();
            for (i = 0; i < arrMedia.length; i++) {
                var medium = arrMedia[i];
                $("#media-control").append("<div page=\"" + medium.PageNo + "\" class=\"ui-corner-all\" href=\"" + medium.Url + "\">" + medium.Snippet + "</div>");
            }
            $("#media-control div").click(function() {
                var p = Number($(this).attr("page"));
                var url = $(this).attr("href");
                showMedia(url);
                $(this).parent().hide();
                $("#btnMedia").removeClass("ui-state-active")
                //gotoPage(p);
            }).hover(
                function() { $(this).addClass('ui-state-hover'); },
                function() { $(this).removeClass('ui-state-hover'); }
            );

            //Memo
            arrMemo = book.Memos;
            for (i = 0; i < arrMemo.length; i++) {
                if (arrMemo[i].MemoID > maxMemoID) {
                    maxMemoID = arrMemo[i].MemoID;
                }
            };
        },
        error: function(xhr) {
            if (xhr.responseText != "") {
                var err = eval("(" + xhr.responseText + ")");
                alert("Error (Load Book): " + err.Message);
            } else {
                alert("Error (Load Book): " + xhr);
            };
        }
    });

    //    // Load Chapters
    //    $.ajax({
    //        type: "POST",
    //        dataType: "json",
    //        data: param,
    //        contentType: "application/json; charset=utf-8",
    //        url: "WebService.asmx/GetChapters",
    //        success: function(data) {
    //            arrChapter = data.d;
    //            $("#chapter-control div").remove();
    //            for (i = 0; i < arrChapter.length; i++) {
    //                var chapter = arrChapter[i];
    //                $("#chapter-control").append("<div page=\"" + chapter.Page + "\" class=\"ui-corner-all\">" + chapter.Chapter + "</div>");
    //            }
    //            $("#chapter-control div").click(function() {
    //                var p = Number($(this).attr("page"));
    //                $(this).parent().hide();
    //                $("#btnChapter").removeClass("ui-state-active");
    //                gotoPage(p);
    //            }).hover(
    //	                    function() { $(this).addClass('ui-state-hover'); },
    //	                    function() { $(this).removeClass('ui-state-hover'); }
    //                    );
    //            if (arrChapter.length == 0) {
    //                $("#chapter-control").append("<div style=\"cursor:default;\">No Chapter Info</div>");
    //            };
    //        }
    //    });

    //    // Load Media
    //    $.ajax({
    //        type: "POST",
    //        dataType: "json",
    //        data: param,
    //        contentType: "application/json; charset=utf-8",
    //        url: "WebService.asmx/GetMedia",
    //        success: function(data) {
    //            arrMedia = data.d;
    //            $("#media-control div").remove();
    //            for (i = 0; i < arrMedia.length; i++) {
    //                var medium = arrMedia[i];
    //                $("#media-control").append("<div page=\"" + medium.PageNo + "\" class=\"ui-corner-all\" href=\"" + medium.Url + "\">" + medium.Snippet + "</div>");
    //            }
    //            $("#media-control div").click(function() {
    //                var p = Number($(this).attr("page"));
    //                var url = $(this).attr("href");
    //                showMedia(url);
    //                $(this).parent().hide();
    //                $("#btnMedia").removeClass("ui-state-active")
    //                //gotoPage(p);
    //            }).hover(
    //	                    function() { $(this).addClass('ui-state-hover'); },
    //	                    function() { $(this).removeClass('ui-state-hover'); }
    //                    );
    //        }
    //    });


};

function updateNavigator(page) {
    var index = Math.floor((page - 1) / pageSize) + 1;
    //alert("page: " + page + ", pageSize: " + pageSize + ", index: " + index);
    loadNavigator(index);
};

function loadNavigator(index) {
    $("#navigation-pageno").val(index);

    $("#navigation-table tr:first td").remove();

    var p = (Number($("#navigation-pageno").val()) - 1) * pageSize;
    if (index > 1) {
        $("#navigation-table tr:first").append("<td valign=\"bottom\"><div id=\"navigation-prev\"><span id=\"btnNavigationPrev\" /></div></td>");
    };
    for (i = 0; i < pageSize; i++) {
        if (p + i + 1 > pageTotal) break;
        var p1 = p + i + 1 - pageStart;
        var e1 = $("<td valign=\"bottom\"><div style='position:relative;' class='page'><span class=\"pagenum\" page=\"" + (p + i + 1) + "\">" + (p1 < 1 ? "&nbsp;" : p1) + "</span></div></td>");
        var url = prefix + "page3.ashx?book=" + bookID + "&zoom=index2&url=" + arrStaticPage[p + i];
        $("div", e1).append("<img class='page' style=\"height:" + minH + "px\" src=\"" + url + "\" />");
        for (j = 0; j < arrBookmark.length; j++) {
            //if (i == 0) alert(arrBookmark[j].PageNo + ", " + p);
            if (arrBookmark[j].PageNo == (p + i + 1)) {
                $("div", e1).append("<div class='bookmark'><img src='" + prefix + "images/bookmark2.png' /></div>");
                break;
            };
        };
        //loadImage(e1, arr[i], { "height": minH + "px" });
        var x = $("#navigation-table tr:first").append(e1);
        //alert($(x).text());
        //$("#thumbnail-table tr.shadow").append("<td class=\"shadow\"></td>");
    }
    if (index < Math.ceil(pageTotal / pageSize)) {
        $("#navigation-table tr:first").append("<td valign=\"bottom\"><div id=\"navigation-next\"><span id=\"btnNavigationNext\" /></div></td>");
    };
    setCurrentPage(getCurrentPage());
    bindNavigator();

    var n = Math.ceil(pageTotal / pageSize);
    $("#navigation-pager li").remove();
    if (n == 1) {
        $("#navigation-pager").hide();
    }
    else {
        $("#navigation-pager").show();
        var p = Number($("#navigation-pageno").val());
        for (i = 1; i <= n; i++) {
            if (p == i) {
                $("#navigation-pager ul").append("<li class=\"selected\"><span class=\"pager-node\" value=\"" + i + "\"></span></li>");
            }
            else {
                $("#navigation-pager ul").append("<li><span class=\"pager-node\" value=\"" + i + "\"></span></li>");
            }
        };
        $("#navigation-pager li:not(.selected)").click(function() {
            loadNavigator(Number($("span", this).attr("value")));
        });
        var w1 = $("#navigation-panel").width();
        var w2 = $("#navigation-pager").width();
        $("#navigation-pager").css({ left: (w1 - w2) / 2 });
    }
};

function setupTOC() {
    $("#toc-control").fadeIn();

    var wo = $(".toc-container").width();
    var ho = $(".toc-container").height();
    //alert(wo + ", " + ho);
    var w1 = $("#toc-pager").width();
    $("#toc-pager").css({ left: (wo - w1) / 2 });
    var wn = Math.floor(wo / (indexPageW + 20));
    var hn = Math.floor(ho / (indexPageH + 30));
    TOCPageSize = hn * wn;
    var index = Math.floor((getCurrentPage() - 1) / TOCPageSize) + 1;
    disableWheelEvent();
    loadTOC(index);
};

function loadTOC(index) {
    $("#toc-pageno").val(index);
    $(".toc-container ul li").remove();

    //var param = JSON.stringify({ BookID: bookID, PageNo: index, PageSize: TOCPageSize, IsSinglePage: IsSinglePage() });
    var p = (index - 1) * TOCPageSize;
    var url = "";
    var caption = "";
    var p1 = 0;

    for (var i = 0; i < TOCPageSize; i++) {
        p1 = p + i + 1;
        if (p1 > pageTotal) break;
        caption = "";
        if (IsSinglePage()) {
            url = prefix + "page3.ashx?book=" + bookID + "&zoom=index2&url=" + arrStaticPage[p + i];
            caption = p1 - pageStart;
            if (p1 > pageStart) {
                caption = p1 - pageStart;
            };
            if (p1 >= pageTotal) break;
        }
        else {
            if (p1 == 1) {
                url = prefix + "page3.ashx?book=" + bookID + "&zoom=index&url=page_" + getNumber(p1) + imageExt;
                if (p1 >= pageStart) {
                    caption = p1 - pageStart;
                };
            };
            if (p1 % 2 == 0) {
                url = prefix + "page3.ashx?book=" + bookID + "&zoom=index&url=page_" + getNumber(p1) + imageExt;
                if (p1 > pageStart) {
                    caption = (p1 - pageStart) + " - ";
                };
                i++;
                p1++;
                if (p1 >= pageStart && p1 <= pageTotal) {
                    caption += (p1 - pageStart);
                }
                else {
                    if (p1 > pageTotal) {
                        caption = pageTotal - pageStart;
                    };
                };
            };
        };
        if (url != "") {
            $(".toc-container .toc-list").append("<li class=\"toc-button ui-corner-all\"><img src=\"" + url + "\" /><div class=\"pagenum\" page=\"" + p1 + "\">" + caption + "</div></li>");
        };
    };
    bindIndex();


    var n = Math.ceil(pageTotal / TOCPageSize);
    var p = Number($("#toc-pageno").val());
    $("#toc-pager li").remove();
    if (n == 1) {
        $("#toc-pager").hide();
    }
    else {
        $("#toc-pager").show();
        for (i = 1; i <= n; i++) {
            if (p == i) {
                $("#toc-pager ul").append("<li class=\"selected\"><span class=\"pager-node\" value=\"" + i + "\"></span></li>");
            }
            else {
                $("#toc-pager ul").append("<li><span class=\"pager-node\" value=\"" + i + "\"></span></li>");
            }
        };
        $("#toc-pager li:not(.selected)").click(function() {
            loadTOC(Number($("span", this).attr("value")));
        });
    }
};

function loadRelated() {
    disableWheelEvent();
    $("#related-container div.related-item").remove();
    $("#related-container div.result-not-found").remove();
    $("#related-control").show();
    $("#related-loading").show();

    var param = JSON.stringify({ BookID: bookID });
    //alert(param);
    $.ajax({
        type: "POST",
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/GetRelated",
        success: function(data) {
            var arrResult = data.d;
            $("#related-loading").hide();

            for (i = 0; i < arrResult.length; i++) {
                var result = arrResult[i];
                var src = prefix + result.Url;
                $("#related-container").append("<div class=\"related-item ui-state-default ui-corner-all\"><img src=\"" + src + "\" class=\"imageFrame\" value=\"" + result.PageNo + "\" /><p>" + result.Snippet + "</p></div>");
                //$("#thumbnail-table tr.shadow").append("<td class=\"shadow\"></td>");
            };
            if (arrResult.length == 0) {
                if ($("#related-container div")) {
                    $("#related-container").append("<div class=\"result-not-found ui-state-default ui-corner-all\"><center>No Result Found</center></div>");
                };
            };

            $(".related-item").hover(
                function() { $(this).addClass("ui-state-hover"); },
                function() { $(this).removeClass("ui-state-hover"); }
            ).click(function() {
                $("#related-container").hide();
                var p = $("img", this).attr("value");
                window.location.href = p;
                //enableWheelEvent();
            });
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

function sendEmail() {
    // validate the name and address textbox
    var msg = "";
    if ($("#txtFriendName").val() == "")
        msg = msg + "- Please enter the name of your friend\n";
    if ($("#txtFriendEmail1").val() == "")
        msg = msg + "- Please enter the email of your friend\n";
    if ($("#txtSenderName").val() == "")
        msg = msg + "- Please enter your name\n";
    if ($("#txtSenderEmail").val() == "")
        msg = msg + "- Please enter your email\n";
    if (msg != "") {
        $("#email-message").text("");
        alert(msg);
        return;
    }


    var p = {};
    p.FriendName = $("#txtFriendName").val();
    p.FriendEmail = $("#txtFriendEmail1").val();
    p.SenderName = $("#txtSenderName").val();
    p.SenderEmail = $("#txtSenderEmail").val();
    p.EmailLink = window.location.href;
    p.BookID = Number($("#lblBookID").text());
    var param = JSON.stringify(p);
    //alert(param);
    $.ajax({
        type: "POST",
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/SendLink",
        success: function(data) {
            var msg = data.d;
            if (msg == "") {
                $("#email-dialog").dialog("close");
                $("#message-box").text("Email has been sent!");
                $("#message-dialog").dialog("open");
            }
            else {
                $("#email-message").show().text(msg);
            }
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};


function SearchContent() {
    //$(".result-item").click(function() {});
    $("#result-container .result-item, #result-container .result-not-found").remove();
    $("#search-bar").fadeOut("fast");
    $("#btnSearch").removeClass("ui-state-active");
    $("#result-control").show();
    $("#result-loading").show();
    disableWheelEvent();

    getSearchResult(1);
};

function getSearchResult(searchPage) {
    var param = JSON.stringify({ BookID: bookID, SearchText: $("#txtSearch").val() });
    //alert(param);
    $.ajax({
        type: "POST",
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/SearchContent",
        success: function(data) {
            var arrResult = data.d;

            if (arrResult.length > 100) {
                $("#result-number").text("More than 100 pages are matched. Only 100 pages are shown.");
            }
            else {
                $("#result-number").text(arrResult.length + " pages are matched");
            };

            for (i = 0; i < arrResult.length; i++) {
                var result = arrResult[i];
                var src = prefix + "pages/" + bookID + "/index2/" + result.Url;
                $("#result-container").append("<div class=\"result-item ui-state-default ui-corner-all\" value=\"" + result.Hits + "\"><img src=\"" + src + "\" class=\"imageFrame\" value=\"" + result.PageNo + "\" /><p>(Page " + (result.PageNo - pageStart) + ") " + result.Snippet + "</p><p class=\"footnote\">" + result.Hits + " match" + (result.Hits == 1 ? "" : "es") + " in this page.</p></div>");
                //$("#thumbnail-table tr.shadow").append("<td class=\"shadow\"></td>");
            };

            if (arrResult.length == 0) {  // no more search
                if ($("#result-container div")) {
                    $("#result-container").append("<div class=\"result-not-found ui-state-default ui-corner-all\"><center>No Book Found</center></div>");
                }
            }
            else {
                $(".result-item").hover(
                        function() { $(this).addClass("ui-state-hover"); },
                        function() { $(this).removeClass("ui-state-hover"); }
                    ).click(function() {
                        var p = Number($("img", this).attr("value"));
                        $("#result-control").hide();
                        gotoPage(p);
                        enableWheelEvent();
                    });
            }
            $("#result-loading").hide();
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

function createDialog() {
    $("#email-dialog").dialog({
        bgiframe: true,
        modal: true,
        width: 400,
        resizable: false,
        autoOpen: false,
        overlay: { opacity: 0.9, background: 'black' },
        buttons: {
            Cancel: function() {
                $("#email-dialog").dialog("close");
            },
            Ok: function() {
                $("#email-message").text("Sending email...");
                sendEmail();
            }
        }
    });

    $("#message-dialog").dialog({
        bgiframe: true,
        modal: true,
        autoOpen: false,
        resizeble: false,
        buttons: {
            Ok: function() {
                $("#message-dialog").dialog("close");
            }
        }
    });

    $("#addBookmark-dialog").dialog({
        bgiframe: true,
        modal: true,
        autoOpen: false,
        resizable: false,
        width: 400,
        buttons: {
            Cancel: function() {
                $("#addBookmark-dialog").dialog("close");
            },
            Add: function() {
                $("#addBookmark-message").text("Adding bookmark. Please wait...");
                var p = Number($("input:radio[name=optBookmark]:checked").val());
                addBookmark(p);
            }
        }
    });

    $("#pen-dialog").dialog({
        bgiframe: true,
        modal: false,
        autoOpen: false,
        resizable: false,
        width: 400,
        position: [10, 60]
    });
};

function closeWindow() {
    addPageView();
    addBookView(false);
};

function addBookView(IsOpen) {
    var param = {};
    param.BookID = bookID;
    param.SessionID = $("#lblSessionID").text();
    param.BookOpen = IsOpen;
    //alert(JSON.stringify(param));
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(param),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/AddBookView",
        //                success: function(data) {
        //                    alert("success");
        //                },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

function addPageView(p) {
    //    if (lastPage == 0) {
    //        lastTimeStamp = (new Date()).valueOf();
    //    };
    if (!IsSinglePage() && (p % 2 == 1 && p != 1)) {
        //alert("hi");
        p--;
    }

    var tmpPage = lastPage;
    var tmpPageMode = lastPageMode;
    if (lastPage != p || lastPageMode != IsSinglePage()) {
        lastPage = p;
        lastPageMode = IsSinglePage();
        if (!isNaN(lastTimeStamp)) {
            var duration = (new Date()).valueOf() - lastTimeStamp;
            var p2 = 0;
            if (!tmpPageMode && tmpPage != 1 && tmpPage != pageTotal) {
                p2 = tmpPage + 1;
            };
            //alert("Page " + tmpPage + ": " + duration);
            var param = {};
            param.BookID = bookID;
            param.SessionID = $("#lblSessionID").text();
            param.PageNo = tmpPage;
            param.PageNo2 = p2;
            param.PrevPageNo = 0;
            param.Duration = duration;
            param.IsSinglePage = tmpPageMode;
            //alert(JSON.stringify(param));
            //            $.post(prefix + "WebService.asmx/AddPageView", param);
            $.ajax({
                type: "POST",
                dataType: "json",
                data: JSON.stringify(param),
                contentType: "application/json; charset=utf-8",
                url: prefix + "WebService.asmx/AddPageView",
                //                success: function(data) {
                //                    alert("success");
                //                },
                error: function(xhr) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert("Error: " + err.Message);
                }
            });
        };
    };
};

function addBookmark(page) {
    var param = {};
    param.BookID = bookID;
    param.PageNo = page;
    param.Description = $("#txtBookmarkDesc").val();
    var added = false;
    for (i = 0; i < arrBookmark.length; i++) {
        if (arrBookmark[i].PageNo == page) {
            arrBookmark.splice(i, 1, param);
            added = true;
            break;
        };
        if (arrBookmark[i].PageNo > page) {
            arrBookmark.splice(i, 0, param);
            added = true;
            break;
        };
    };
    if (!added) arrBookmark.push(param);
    updateNavigator(page);
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(param),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/AddBookmark",
        success: function(data) {

            $("#boxEffect").css({ "left": $("#addBookmark-dialog").offset().left, "top": $("#addBookmark-dialog").offset().top, "width": $("#addBookmark-dialog").width(), "height": $("#addBookmark-dialog").height(), opacity: 1 }).addClass("ui-widget-content");
            $("#addBookmark-dialog").dialog("close");
            $("#boxEffect").animate({ left: $("#btnBookmark").offset().left, top: $("#btnBookmark").offset().top, width: $("#btnBookmark").width(), height: $("#btnBookmark").height(), opacity: 0 }, 500);
            //alert("Bookmark is added");
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            //alert("Error: " + err.Message);
            $("#addBookmark-message").text(err.Message);
        }
    });
};

function getBookmark() {
    disableWheelEvent();
    $("#bookmark-container div.bookmark-item").remove();
    $("#bookmark-control").show();
    $("#bookmark-container").show();
    $("#bookmark-loading").text("Loading...").show();


    var bookmark;
    for (i = 0; i < arrBookmark.length; i++) {
        bookmark = arrBookmark[i];
        var p = bookmark.PageNo;
        url = prefix + "page3.ashx?book=" + bookID + "&zoom=index2&url=" + arrStaticPage[p - 1];
        caption = "&lt;Page " + (p - pageStart) + "&gt;";
        if (p < pageStart) caption = "";
        if (url != "") {
            $("#bookmark-container").append("<div class='bookmark-item ui-widget-default ui-corner-all' page='" + p + "'><span class='ui-icon ui-icon-close smallbuttonright'></span><img src=\"" + url + "\" class='imageFrame' /><p align='left'>" + caption + "<br/>" + bookmark.Description + "</p></div>");
        };
    };
    if (arrBookmark.length == 0) {
        $("#bookmark-loading").text("No Bookmark Found");
    }
    else {
        $("#bookmark-loading").hide();
    };
    //bindBookmark();
    $(".bookmark-item").click(function() {
        $("#bookmark-control").hide();
        var p = Number($(this).attr("page"));
        gotoPage(p);
        enableWheelEvent();
    });
    $(".bookmark-item span.smallbuttonright").click(function() {
        if (confirm("Are you sure to delete this bookmark?")) {
            $(this).parent().remove();
            var page = Number($(this).parents(".bookmark-item").attr("page"));
            for (i = 0; i < arrBookmark.length; i++) {
                if (arrBookmark[i].PageNo == page) {
                    arrBookmark.splice(i, 1);
                    break;
                };
            };
            var param = { BookID: bookID, PageNo: page };
            $.ajax({
                type: "POST",
                dataType: "json",
                data: JSON.stringify(param),
                contentType: "application/json; charset=utf-8",
                url: prefix + "WebService.asmx/DeleteBookmark",
                //                        success: function(data) {
                //                            var id = data.d;
                //                        },
                error: function(xhr) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert("Error: " + err.Message);
                }
            });
        };
        //return false;
    });


};


function addMemo(page) {
    if (IsSinglePage() && page != 1 && page % 2 == 1) page--;
    var width = 200;
    var height = 180;
    var top = parseInt(Math.random() * ($(window).height() - height));
    var left = parseInt(Math.random() * ($(window).width() - width));
    var id = ++maxMemoID;
    var memo = { MemoID: id, BookID: bookID, PageNo: page, Top: top, Left: left, Width: width, Height: height, Content: "" };
    //alert(JSON.stringify(memo));
    var added = false;
    for (i = 0; i < arrMemo.length; i++) {
        var p = arrMemo[i].PageNo;
        if ((arrMemo[i].PageNo == page && arrMemo[i].MemoID > id) || arrMemo[i].PageNo > page) {
            arrMemo.splice(i, 0, memo);
            added = true;
            break;
        };
    }
    if (!added) arrMemo.push(memo);
    //arrMemo.push(memo);
    $("#boxEffect").css({ top: $("#btnAddMemo").offset().top, left: $("#btnAddMemo").offset().left, width: $("#btnAddMemo").width(), height: $("#btnAddMemo").height() }).removeClass("ui-widget-content").show();
    $("#boxEffect").animate({ top: memo.Top, left: memo.Left, width: memo.Width, height: memo.Height });
    showMemo(memo, true);
    $("#boxEffect").animate({ opacity: 0 });
    $("#memo" + memo.MemoID).append("<div class='loading' style='position:absolute;'></div>");
    //$("#memo" + param.MemoID).addClass("loading");
    //arrMemo.push(param);
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(memo),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/AddMemo",
        success: function(data) {
            var memo = data.d;
            $("#memo" + memo.MemoID + " div.loading").remove();
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

function showMemo(memo, isNew) {
    var id = "memo" + memo.MemoID;
    var title = "<div class='title'><span class='ui-icon ui-icon-close smallbuttonright memo-close-button'></span><span class='ui-icon ui-icon-disk smallbutton memo-save-button'></span><span class='ui-icon ui-icon-pencil smallbutton memo-edit-button'></span></div>"
    var content;
    if (isNew) {
        content = "<textarea>" + memo.Content + "</textarea>";
    }
    else {
        content = "<div class='content'>" + memo.Content + "</div>";
    }
    //$("#container").append("<div id='" + id + "' style='position:absolute;' class='memo' value='" + memo.MemoID + "'>" + title + "<div class='content'>" + memo.Content + "</div></div>");
    $("#container").append("<div id='" + id + "' style='position:absolute;' class='memo' value='" + memo.MemoID + "'>" + title + content + "</div>");
    id = "#" + id;
    $(id).css({ "top": memo.Top + "px", "left": memo.Left + "px", "width": memo.Width, "height": memo.Height });
    //$(id).resizable();
    $(id).draggable({
        stop: function(e, ui) {
            var page = getCurrentPage();
            if (IsSinglePage() && page != 1 && page % 2 == 1) page--;
            var param = { MemoID: Number($(this).attr("value")), BookID: bookID, PageNo: page, Top: $(this).position().top, Left: $(this).position().left, Width: $(this).width(), Height: $(this).height(), Content: $("div.content", this).html() };
            for (i = 0; i < arrMemo.length; i++) {
                if (arrMemo[i].MemoID == param.MemoID) {
                    arrMemo[i].Left = param.Left;
                    arrMemo[i].Top = param.Top;
                    break;
                };
            };
            $.ajax({
                type: "POST",
                dataType: "json",
                data: JSON.stringify(param),
                contentType: "application/json; charset=utf-8",
                url: prefix + "WebService.asmx/AddMemo",
                success: function(data) {
                    //var memo = data.d;
                },
                error: function(xhr) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert("Error: " + err.Message);
                }
            });
        }
    }).resizable({
        resize: function(e, ui) {
            var p = $(this).css("paddingRight");
            var padding = Number(p.substring(0, p.length - 2));
            $("textarea", this).css({ height: $(this).height() - 25, width: $(this).width() - padding });
        },
        stop: function(e, ui) {
            var page = getCurrentPage();
            if (IsSinglePage() && page != 1 && page % 2 == 1) page--;
            var content;
            if ($("textarea", this).val() == undefined)
                content = $("div.content", this).html();
            else
                content = $("textarea", this).val().replace(/\n/g, "<br/>");
            var param = { MemoID: Number($(this).attr("value")), BookID: bookID, PageNo: page, Top: $(this).position().top, Left: $(this).position().left, Width: $(this).width(), Height: $(this).height(), Content: content };
            for (i = 0; i < arrMemo.length; i++) {
                if (arrMemo[i].MemoID == param.MemoID) {
                    arrMemo[i].Width = param.Width;
                    arrMemo[i].Height = param.Height;
                    break;
                };
            };
            $.ajax({
                type: "POST",
                dataType: "json",
                data: JSON.stringify(param),
                contentType: "application/json; charset=utf-8",
                url: prefix + "WebService.asmx/AddMemo",
                success: function(data) {

                },
                error: function(xhr) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert("Error: " + err.Message);
                }
            });

        }
    });
    if (isNew) {
        var p = $(id).css("paddingRight");
        var padding = Number(p.substring(0, p.length - 2));
        $("textarea", id).css({ height: $(id).height() - 25, width: $(id).width() - padding }).focus();
        $(".memo-edit-button", id).hide();
    }
    else {
        $(".memo-save-button", id).hide();
    };
    // bind the buttons
    $(".memo-close-button", id).click(function() {
        //$(this).parents("div.memo").remove();
        if (confirm("Are you sure to delete this memo?"))
            removeMemo(Number($(this).parents("div.memo").attr("value")));
    });
    $(".memo-save-button", id).click(function() {
        var memo = $(this).parents("div.memo");
        // save with AJAX
        var page = getCurrentPage();
        if (IsSinglePage() && page != 1 && page % 2 == 1) page--;
        var param = { MemoID: Number($(memo).attr("value")), BookID: bookID, PageNo: page, Top: $(memo).position().top, Left: $(memo).position().left, Width: $(memo).width(), Height: $(memo).height(), Content: $("textarea", memo).val().replace(/\n/g, "<br />") };
        //$("#memo" + param.MemoID).addClass("loading");
        $("#memo" + param.MemoID).append("<div class='loading' style='position:absolute;'></div>");
        //arrMemo.push(param);
        $.ajax({
            type: "POST",
            dataType: "json",
            data: JSON.stringify(param),
            contentType: "application/json; charset=utf-8",
            url: prefix + "WebService.asmx/AddMemo",
            success: function(data) {
                var memo = data.d;
                var memoDiv = $("#memo" + memo.MemoID);
                memo.Content = memo.Content.replace(/\n/g, "<br />");
                memoDiv.append("<div class='content'>" + memo.Content + "</div>");
                $("textarea", memoDiv).remove();
                $(".memo-edit-button", memoDiv).show();
                $(".memo-save-button", memoDiv).hide();
                for (i = 0; i < arrMemo.length; i++) {
                    if (arrMemo[i].MemoID == memo.MemoID) {
                        arrMemo.splice(i, 1, memo);
                        break;
                    };
                };
                $("#memo" + param.MemoID + " div.loading").remove();
                //$("#memo" + param.MemoID).removeClass("loading");
            },
            error: function(xhr) {
                var err = eval("(" + xhr.responseText + ")");
                alert("Error: " + err.Message);
            }
        });
    });
    $(".memo-edit-button", id).click(function() {
        var memo = $(this).parents("div.memo");
        memo.append("<textarea>" + $("div.content", memo).html().replace(/<br>/ig, "\n") + "</textarea>");
        var p = $(memo).css("paddingRight");
        var padding = Number(p.substring(0, p.length - 2));
        $("textarea", memo).css({ height: $(memo).height() - 25, width: $(memo).width() - padding }).focus();
        $("div.content", memo).remove();
        $(".memo-save-button", memo).show();
        $(".memo-edit-button", memo).hide();
    });
};

function removeMemo(MemoID) {
    var param = { BookID: bookID, MemoID: MemoID };
    $("#memo" + param.MemoID).append("<div class='loading' style='position:absolute;'></div>");
    //$("#memo" + param.MemoID).addClass("loading");
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(param),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/DeleteMemo",
        success: function(data) {
            var memoID = data.d;
            for (i = 0; i < arrMemo.length; i++) {
                if (arrMemo[i].MemoID == memoID) {
                    arrMemo.splice(i, 1);
                    break;
                };
            };
            var memoDiv = $("#memo" + memoID);
            $(memoDiv).remove();
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

//function updateMemo(page, memo) {
//    $.ajax({
//        type: "POST",
//        dataType: "json",
//        data: JSON.stringify(param),
//        contentType: "application/json; charset=utf-8",
//        url: prefix + "WebService.asmx/AddBookmark",
//        success: function(data) {
//            $("#addBookmark-dialog").dialog("close");
//            alert("Bookmark is added");
//        },
//        error: function(xhr) {
//            var err = eval("(" + xhr.responseText + ")");
//            //alert("Error: " + err.Message);
//            $("#addBookmark-message").text(err.Message);
//        }
//    });
//};

function getMemo(page) {
    $("#container div.memo").remove();
    for (i = 0; i < arrMemo.length; i++) {
        var memo = arrMemo[i];
        if (memo.PageNo == page || (page != 1 && page % 2 == 1 && (memo.PageNo + 1) == page))
            showMemo(memo);
    };
};

function listMemo() {
    disableWheelEvent();
    $("#memo-container div.memo-item").remove();
    $("#memo-control").show();
    $("#memo-container").show();
    $("#memo-loading").text("Loading...").show();

    var memo;
    for (var i = 0; i < arrMemo.length; i++) {
        memo = arrMemo[i];
        var p = memo.PageNo;
        url = prefix + "page3.ashx?book=" + bookID + "&zoom=index2&url=" + arrStaticPage[p - 1];
        caption = "&lt;Page " + (p - pageStart) + "&gt;";
        if (p <= pageStart) caption = "";
        if (url != "") {
            $("#memo-container").append("<div class='memo-item ui-widget-default ui-corner-all' page='" + p + "' memoid='" + memo.MemoID + "'><span class='ui-icon ui-icon-close smallbuttonright'></span><img src=\"" + url + "\" class='imageFrame' /><p align='left'>" + caption + "<br/>" + memo.Content + "</p></div>");
        };
    };
    if (arrMemo.length == 0) {
        $("#memo-loading").text("No Memo Found");
    }
    else {
        $("#memo-loading").hide();
    };
    $(".memo-item").click(function() {
        $("#memo-control").hide();
        var p = Number($(this).attr("page"));
        gotoPage(p);
        enableWheelEvent();
    });
    $(".memo-item span.smallbuttonright").click(function() {
        if (confirm("Are you sure to delete this memo?")) {
            var MemoID = Number($(this).parents(".memo-item").attr("memoid"));
            removeMemo(MemoID);
            $(this).parent().remove();
            $("#memo" + MemoID).remove();
        };
        return false;
    });

};

function loadTheme() {
    $("#theme-container div.theme-item").remove();
    $("#theme-control").show();
    $("#theme-loading").show();
    var param = { CompanyID: Number($("#lblCompanyID").text()) };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(param),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/GetTheme",
        success: function(data) {
            $("#theme-loading").hide();

            var themes = data.d;
            var theme;
            for (i = 0; i < themes.length; i++) {
                theme = themes[i];
                $("#theme-container").append("<div class='theme-item' theme='" + theme.Theme + "' themeid='" + theme.ThemeID + "'><img src='" + prefix + "theme/thumbnail/" + theme.Theme + ".jpg' /><p><br /><br />" + theme.ThemeName + "</p></div>");
            };
            // Add a Clear Theme
            $("#theme-container").append("<div class='theme-item' theme=''><p><br /><br />Clear Theme</p></div>");
            $("#theme-container .theme-item").click(function() {
                var themeId = $(this).attr("themeid");
                if (themeId == undefined) themeId = "0";
                updateTheme(Number(themeId), $(this).attr("theme"));
                $("#theme-control").hide();
                enableWheelEvent();
            });
        },
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });

};

function updateTheme(themeId, theme) {
    // clear theme
    //$("#themeCss").remove();

    if (theme != "") {
        //$("#themeCss").attr("href", prefix + "theme/" + theme + "/StyleSheet.css");
        //$("head").append("<link href='" + prefix + "theme/" + theme + "/StyleSheet.css' id='themeCss' rel='stylesheet' type='text/css' />");
        $("#themeCss").attr("href", prefix + "theme/" + theme + "/StyleSheet.css");
        $("#themeCss2").attr("href", prefix + "theme/" + theme + "/jquery-ui-1.7.2.custom.css");
        flippingBook.settings.firstPageNumber = getCurrentPage();
        flippingBook.settings.backgroundImage = prefix + "theme/" + theme + "/images/background.jpg";
        flippingBook.create();
    }
    else {
        //$("#themeCss").attr("href", "");
        //$("head").append("<link href='" + prefix + "theme/clean/StyleSheet.css' id='themeCss' rel='stylesheet' type='text/css' />");
        $("#themeCss").attr("href", prefix + "theme/clean/StyleSheet.css");
        //$("head").append("<link href='" + prefix + "theme/clean/StyleSheet.css' id='themeCss' rel='stylesheet' type='text/css' />");
        $("#themeCss2").attr("href", prefix + "css/hm-theme/jquery-ui-1.7.2.custom.css");
        flippingBook.settings.firstPageNumber = getCurrentPage();
        flippingBook.settings.backgroundImage = "";
        flippingBook.create();
    };
    switchDoublePage();
    var param = { BookID: bookID, ThemeID: themeId, Theme: theme };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: JSON.stringify(param),
        contentType: "application/json; charset=utf-8",
        url: prefix + "WebService.asmx/UpdateTheme",
        error: function(xhr) {
            var err = eval("(" + xhr.responseText + ")");
            alert("Error: " + err.Message);
        }
    });
};

function drawCanvas() {
    if (!IsSinglePage()) {
        var width0 = $("#container-double-page").width();
        var height0 = $("#container-double-page").height();
        var w = Math.min(width0 * 0.95, bookW);
        var h = Math.min(height0 * 0.95, bookH);
        w = Math.min(w, h * bookW / bookH);
        h = Math.min(h, w * bookH / bookW);
        var top = (height0 - h) / 2 + $("#container-double-page").position().top;
        var p = getCurrentPage();
        if (p == 1 || (p == pageTotal && p % 2 == 0)) {
            w = w / 2;
        };
        var left = (width0 - w) / 2;
        $("#pen-canvas").width(w).height(h).show().css({ top: top, left: left });
    } else {
        $("#pen-canvas").width(pageW).height(pageH).show();
    };
};

function loadBrowserSettings() {
    var agent = navigator.userAgent;
    isiPhone = (agent.match(/iPhone/i) || agent.match(/iPod/i) || agent.match(/iPad/i));
    isAndroid = (agent.match(/Android/i));
    isTouch = (isiPhone || isAndroid);
    supportFlash = (!isiPhone && !isAndroid);
};

function isiPhone() {
};

function fbs_click() { u = location.href; t = document.title; window.open('http://www.facebook.com/sharer.php?u=' + encodeURIComponent(u) + '&t=' + encodeURIComponent(t), 'sharer', 'toolbar=0,status=0,width=626,height=436'); return false; };
