(this || (0, eval)("(this)")).bdor = []; (function(b) {
    function c(b) {
        b = f.match(b);
        if (null == b || 0 == b.length) return 0;
        b = b[0];
        var c = b.indexOf("/");
        b = b.substring(c + 1, b.length);
        return "" == b ? 0 : parseInt(b)
    }
    function d(b) {
        b = f.match(b);
        if (null == b || 0 == b.length) return 0;
        b = b[0].replace("_", ".").match(/\d+\.?\d?/);
        if (null == b || 0 == b.length) return 0;
        b = b[0];
        return "" == b ? 0 : parseFloat(b)
    }
    var f = navigator.userAgent.toLowerCase();
    b.browser = {};
    b.browser.webkit = /webkit/.test(f);
    b.browser.mozilla = /firefox/.test(f);
    b.browser.firefox = b.browser.mozilla;
    b.browser.msie = /msie/.test(f) || /trident/.test(f);
    b.browser.opera = /opera/.test(f) || /opr/.test(f);
    b.browser.chrome = /chrome/.test(f) && !b.browser.opera;
    b.browser.uc = /ucbrowser/.test(f);
    b.browser.safari = /safari/.test(f) && !b.browser.chrome && !b.browser.uc && !b.browser.opera;
    b.browser.version = 0;
    bdor[1] = "p";
    b.browser.firefox && (b.browser.version = c(/firefox\/\d+/));
    if (b.browser.msie) {
        var g = f.match(/msie\s?\d+\.0/);
        null == g ? (g = f.match(/trident\/\d+\.0/), null != g && 0 < g.length && (g = parseInt(g[0].replace("trident/", "")), b.browser.version = g + 4)) : (g = parseInt(g[0].replace("msie", "")), b.browser.version = g)
    }
    b.browser.opera && (b.browser.version = c(/opera\/\d+/) || c(/opr\/\d+/));
    b.browser.chrome && (b.browser.version = c(/chrome\/\d+/));
    b.browser.uc && (b.browser.version = c(/ucbrowser\/\d+/));
    b.browser.safari && (b.browser.version = c(/safari\/\d+/));
    if (void 0 == b.browser.device) {
        b.browser.DEVICE_PC = 0;
        b.browser.DEVICE_PAD = 1;
        b.browser.DEVICE_PHONE = 2;
        var g = /pad/.test(f) || /ipod/.test(f),
        h = /iphone/.test(f),
        k = /wpdesktop/.test(f) || /windows phone/.test(f),
        l = /blackberry/.test(f),
        m = /mobile/.test(f) || /phone/.test(f);
        b.browser.device = b.browser.DEVICE_PC;
        if (g) b.browser.device = b.browser.DEVICE_PAD;
        else if (h || k || l || m) b.browser.device = b.browser.DEVICE_PHONE
    }
    void 0 == b.browser.prefix && (b.browser.prefix = "", !0 == b.browser.webkit && (b.browser.prefix = "-webkit-"), !0 == b.browser.mozilla && (b.browser.prefix = "-moz-"), !0 == b.browser.opera && (b.browser.prefix = "-webkit-"), !0 == b.browser.uc && (b.browser.prefix = "-webkit-"), !0 == b.browser.msie && (b.browser.prefix = "-ms-"));
    if (void 0 == b.system) {
        b.system = {
            name: "",
            version: 0
        };
        b.system.WINDOWS = "Windows";
        b.system.WP = "WinPhone";
        b.system.WP_DESKTOP = "WinPhoneDesktop";
        b.system.MAC = "Mac OS";
        b.system.IOS = "iPhone OS";
        b.system.LINUX = "Linux";
        b.system.ANDROID = "Android";
        b.system.BLACKBERRY = "BlackBerry";
        /windows/.test(f) && (b.system.name = b.system.WINDOWS, b.system.version = d(/windows nt\s?\d+\.?\d?/));
        /windows phone/.test(f) && (b.system.name = b.system.WP, b.system.version = d(/windows phone\s?\d+\.?\d?/));
        /wpdesktop/.test(f) && (b.system.name = b.system.WP_DESKTOP, b.system.version = d(/wpdesktop\s?\d+\.?\d?/));
        if (b.system.name != b.system.WP) {
            if (/iphone/.test(f) || /ipad/.test(f)) b.system.name = b.system.IOS,
            b.system.version = d(/os\s?\d+_?\d?/);
            /android/.test(f) && (b.system.name = b.system.ANDROID, b.system.version = d(/android\s?\d+\.?\d?/))
        }
        /mac/.test(f) && b.browser.system != b.browser.IOS && (b.system.name = b.system.MAC, b.system.version = d(/os x\s?\d+\.?\d?/));
        /linux/.test(f) && !/android/.test(f) && (b.system.name = b.system.LINUX);
        /blackberry/.test(f) && (b.system.name = b.system.BLACKBERRY, b.system.version = d(/blackberry\s?\d+/))
    }
})(jQuery);
var global = function() {
    return this || (0, eval)("(this)")
} (),
virtual_function = function() {};
function getPackageByName(b) {
    if (void 0 == b || "" == b) return global;
    var c = global;
    b = b.split(".");
    for (var d = 0; d < b.length; d++) {
        var f = b[d];
        c[f] || (c[f] = {
            IS_PACKAGE_OBJECT: !0
        });
        c = c[f]
    }
    return c
}
function getClassByFullName(b) {
    if ( - 1 == b.indexOf(".")) return global[b];
    var c = b.split(".");
    b = c.pop();
    c = c.join(".");
    return getPackageByName(c)[b]
}
function classof(b, c) {
    if (!b) return "";
    c || (c = global);
    "string" == typeof c && (c = getPackageByName(c));
    for (var d in c) if (c[d] instanceof Function) try {
        if (b instanceof c[d]) return d
    } catch(f) {}
    for (d in c) if ("object" == typeof c[d] && c[d].IS_PACKAGE_OBJECT) {
        var g = classof(b, c[d]);
        if ("" != g) return d + "." + g
    }
    return ""
}
function Class(b, c) {
    if ("string" === typeof b) {
        var d = c,
        f = getPackageByName(d.Package);
        f[b] = Class(d);
        return f[b]
    }
    d = function() {
        if (this.Import) {
            "string" == typeof this.Import && (this.Import = [this.Import]);
            for (var b = 0; b < this.Import.length; b++) {
                var c = this.Import[b],
                d = getPackageByName(c);
                if (d instanceof Function) this[c.split(".").pop()] = d;
                else for (var f in d) d[f] instanceof Function && (this[f] = d[f])
            }
        }
        d = getPackageByName(this.Package);
        if (d != global) for (f in d) this.getClassName() != f && d[f] instanceof Function && (this[f] = d[f]);
        this.create && this.create instanceof Function && this.create.apply(this, arguments)
    };
    d.prototype = b || {};
    d.prototype.getClassName = function() {
        return classof(this, this.Package)
    };
    d.prototype.getClass = function() {
        var b = this.getClassName();
        return getPackageByName(this.Package)[b]
    };
    f = d.prototype.statics;
    if (void 0 != f) {
        for (var g in f) void 0 == d[g] && (d[g] = f[g]);
        delete d.prototype.statics
    }
    return d
}
Function.prototype.extend = function(b) {
    if (!b) return this;
    if ("string" == typeof b) if ( - 1 < b.indexOf(".")) {
        if (b = getClassByFullName(b), !b) return this
    } else {
        var c = this.prototype.Package,
        d = b,
        f = b;
        c && "" != c && (f = c + "." + d);
        if (c = getClassByFullName(f)) b = c;
        else if (c = getClassByFullName(d)) b = c;
        else return this
    }
    if (b instanceof Function) {
        for (var g in b) void 0 == this[g] && (this[g] = b[g]);
        for (g in b.prototype) void 0 == this.prototype[g] ? b.prototype[g] == virtual_function ? console && console.error && console.error("virtual function [%s] must be override.", g) : this.prototype[g] = b.prototype[g] : (d = /xyz/.test(function() {
            xyz
        }) ? /\b_super\b/: /.*/, this.prototype[g] instanceof Function && b.prototype[g] instanceof Function && d.test(this.prototype[g]) && (this.prototype[g] = function(c, d) {
            return function() {
                var f = this._super;
                this._super = b.prototype[c];
                var g = d.apply(this, arguments);
                this._super = f;
                return g
            }
        } (g, this.prototype[g])));
        if (b.prototype.Import) for (this.prototype.Import || (this.prototype.Import = []), g = b.prototype.Import, d = 0; d < g.length; d++) this.prototype.Import.push(g[d]);
        b.prototype.Package && this.prototype.Package != b.prototype.Package && (this.prototype.Import || (this.prototype.Import = []), this.prototype.Import.push(b.prototype.Package));
        return this
    }
    return "object" !== typeof b ? this: this.extend(Class(b))
};
Function.prototype.expand = function(b, c) {
    if ("object" === typeof b) if (void 0 == c && (c = !1), !0 === c) for (var d in b) this.prototype[d] = b[d];
    else this.extend(Class(b))
};
var Instance = {
    copy: function(b) {
        if (!b) return null;
        var c = {};
        b instanceof Array && (c = []);
        for (property in b) c[property] = "object" == typeof b[property] ? Instance.copy(b[property]) : b[property];
        return c
    },
    create: function(b, c) {
        c || (c = []);
        var d = b;
        "string" == typeof b && (d = getClassByFullName(d));
        if (!d) return null;
        var f = d.prototype.create;
        d.prototype.create = function() {};
        var g = new d;
        d.prototype.create = f;
        g.create && g.create instanceof Function && g.create.apply(g, c);
        return g
    },
    JSON: function(b) {
        if (void 0 == b || null == b) return b;
        if (b instanceof Array) {
            for (var c = "[",
            d = 0; d < b.length; d++) c = c + Instance.JSON(b[d]) + ", ";
            1 < c.length && (c = c.substr(0, c.length - 2));
            return c + "]"
        }
        if (b instanceof Function) return b;
        if ("string" === typeof b) return '"' + b.toString() + '"';
        if ("number" === typeof b) return Number(b).toString();
        if ("boolean" === typeof b) return Boolean(b).toString();
        if ("object" === typeof b) {
            c = "{";
            for (d in b) sPropStr = '"' + d + '":' + Instance.JSON(b[d]) + ", ",
            c += sPropStr;
            1 < c.length && (c = c.substr(0, c.length - 2));
            return c += "}"
        }
    },
    parse: function(b, c) {
        return b && "undefined" != b && "null" != b && "" != b ? eval("(" + b + ")") : c
    }
};
Object.create = Object.create ||
function() {
    function b() {}
    return function(c) {
        if (1 != arguments.length) throw Error("Object.create implementation only accepts one parameter.");
        b.prototype = c;
        return new b
    }
} ();
Object.keys = Object.keys ||
function(b) {
    if (b !== Object(b)) throw new TypeError("Object.keys called on a non-object");
    var c = [],
    d;
    for (d in b) Object.prototype.hasOwnProperty.call(b, d) && c.push(d);
    return c
}; (function() {
    for (var b = 0,
    c = ["webkit", "moz"], d = 0; d < c.length && !window.requestAnimationFrame; ++d) window.requestAnimationFrame = window[c[d] + "RequestAnimationFrame"],
    window.cancelAnimationFrame = window[c[d] + "CancelAnimationFrame"] || window[c[d] + "CancelRequestAnimationFrame"];
    window.requestAnimationFrame || (window.requestAnimationFrame = function(c) {
        var d = (new Date).getTime(),
        h = Math.max(0, 16.7 - (d - b)),
        k = window.setTimeout(function() {
            c(d + h)
        },
        h);
        b = d + h;
        return k
    });
    window.cancelAnimationFrame || (window.cancelAnimationFrame = function(b) {
        clearTimeout(b)
    })
})(); (function() {
    var b = {
        supportsFullScreen: !1,
        isFullScreen: function() {
            return ! 1
        },
        requestFullScreen: function() {},
        cancelFullScreen: function() {},
        fullScreenEventName: "-",
        prefix: ""
    },
    c = ["webkit", "moz", "o", "ms"];
    if ("undefined" != typeof document.exitFullscreen) b.supportsFullScreen = !0;
    else if ("undefined" != typeof document.cancelFullScreen) b.supportsFullScreen = !0;
    else for (var d = 0,
    f = c.length; d < f; d++) if (b.prefix = c[d], "undefined" != typeof document[b.prefix + "CancelFullScreen"]) {
        b.supportsFullScreen = !0;
        break
    }
    b.supportsFullScreen && (b.fullScreenEventName = b.prefix + "fullscreenchange", b.isFullScreen = function() {
        switch (this.prefix) {
        case "":
            return document.fullScreen;
        case "webkit":
            return document.webkitIsFullScreen;
        default:
            return document[this.prefix + "FullScreen"]
        }
    },
    b.requestFullScreen = function(b) {
        b[this.prefix + "RequestFullScreen"]()
    },
    b.cancelFullScreen = function(b) {
        return "" === this.prefix ? document.cancelFullScreen() : document[this.prefix + "CancelFullScreen"]()
    });
    window.fullScreenApi = b
})();
Function.expand({
    bind: function(b) {
        var c = this;
        return function() {
            return c.apply(b, arguments)
        }
    },
    delay: function(b, c, d) {
        "object" !== typeof b && (d = c, c = b, b = {});
        c = c || 1;
        d = d || [];
        return setTimeout(function() {
            this.apply(b, d)
        }.bind(this), c)
    },
    interval: function(b, c, d) {
        "object" !== typeof b && (d = c, c = b, b = {});
        c = c || 1;
        d = d || [];
        var f = this;
        return {
            intervalId: setInterval(function() {
                this.apply(b, d)
            }.bind(this), c),
            stop: function() {
                clearInterval(this.intervalId);
                this.intervalId = void 0
            },
            isRunning: function() {
                return void 0 != this.intervalId
            },
            start: function() {
                this.intervalId = setInterval(function() {
                    f.apply(b, d)
                },
                c)
            }
        }
    },
    runInAnimate: function(b, c) {
        "object" !== typeof b && (c = b, b = {});
        var d = {
            stopFlag: !1,
            stop: function() {
                this.stopFlag = !0
            }
        },
        f = this,
        g = 0,
        h = Math.ceil(c / 16.7),
        k = function() {
            g++; ! 1 !== f.apply(b, [g, h]) && !0 !== d.stopFlag && (g < h || void 0 == c) && window.requestAnimationFrame(k)
        };
        k();
        return d
    },
    executeOnce: function() {
        this.executed || (this.executed = !1);
        this.executed || (this(), this.executed = !0)
    }
});
String.expand({
    trim: function() {
        return this.replace(/(^\s*)|(\s*$)/g, "")
    },
    replaceAll: function(b, c, d) {
        void 0 == d && (d = !1);
        if (RegExp && !d) return this.replace(RegExp(b, "g"), c);
        var f = this.indexOf(b);
        d = [];
        for (var g = this; - 1 != f;) {
            var f = f + b.length,
            h = g.substring(0, f),
            g = g.substring(f),
            h = h.replace(b, c);
            d.push(h);
            f = g.indexOf(b)
        }
        "" !== g && d.push(g);
        return d.join("")
    },
    subBetween: function(b, c) {
        if (void 0 == b || void 0 == c) return "";
        var d = this.length,
        f = this.indexOf(b);
        if ( - 1 == f) return "";
        f += b.length;
        d = this.substring(f, d).indexOf(c);
        return - 1 == d ? "": this.substring(f, d + f)
    },
    html2Text: function() {
        return this.replaceAll("<[.[^<]]*>", "")
    },
    HTMLLabel2Text: function() {
        return this.replaceAll("<", "&lt;").replaceAll(">", "&gt;")
    },
    isUrl: function() {
        return "" != this && this.match(/(http\:\/\/)?([\w.]+)(\/[\w-   \.\/\?%&=]*)?/gi) ? !0 : !1
    },
    isEmail: function() {
        return "" != this && this.match(/^([A-Za-z0-9])(\w)+@(\w)+(\.)(com|com\.cn|net|cn|net\.cn|org|biz|info|gov|gov\.cn|edu|edu\.cn)/) ? !0 : !1
    },
    toArray: function(b) {
        b || (b = "");
        return this.split(b)
    },
    reverse: function() {
        var b = this.split("");
        b.reverse();
        return b.join("")
    },
    equals: function(b) {
        return this.trim() == b.trim()
    },
    equalsIgnoreCase: function(b) {
        return this.toLowerCase().trim() == b.toLowerCase().trim()
    },
    startWith: function(b) {
        return "" === b ? !1 : this.substr(0, b.length) === b
    },

    endWith: function(b) {
        return "" === b ? !1 : this.substr( - b.length, b.length) === b
    },
    isEnglish: function() {
        return /[\x00-\xff]/.test(this)
    },
    overflow: function(b) {
        if (void 0 == b) return this.toString();
        var c = 2;
        /[^\x00-\xff]/.test(this) && (b = Math.floor(b / 2), c = Math.floor(c / 2));
        return this.length - b > c ? this.substr(0, b) + "...": this.toString()
    },
    extract: function() {
        if (0 == this.length || 0 == arguments.length) return [];
        for (var b = [], c = this.toString(), d = 0; d < c.length;) {
            for (var f = !1,
            g = 0; g < arguments.length; g++) {
                var h = arguments[g];
                if (c.substr(d, h.length) == h) {
                    b.push(h);
                    d += h.length;
                    f = !0;
                    break
                }
            }
            f || d++
        }
        return b
    },
    remove: function(b) {
        if ("string" == typeof b && b) {
            var c = this.indexOf(b);
            if (! (0 > c)) return b = b.length,
            this.substring(0, c) + this.substring(c + b, this.length)
        }
    },
    removeStartWidth: function(b) {
        if ("string" == typeof b && b && (b = this.indexOf(b), !(0 > b))) return this.substring(0, b)
    },
    cycle: function(b) {
        if (!isNaN(b)) {
            for (var c = parseInt(b / this.length), d = this; 0 < c;) d += this,
            c--;
            return d.substring(0, b)
        }
    },
    statics: {
        format: function() {
            if (0 == arguments.length) return "";
            if (1 == arguments.length) return arguments[0];
            for (var b = arguments[0], c = b.extract("%s", "%d", "%f"), d = 1; d < arguments.length; d++) {
                var f = arguments[d],
                g = c[d - 1];
                "%s" == g && ("string" == typeof f ? b = b.replace("%s", f) : b = b.replace("%s", ""));
                if ("%d" == g) {
                    isNaN(f) && (f = 0);
                    var h;
                    h = "number" == typeof f ? -1 == Number(f).toString().indexOf(".") : !1;
                    h ? b = b.replace("%d", f + "") : b = b.replace("%d", "")
                }
                "%f" == g && (isNaN(f) && (f = 0), "number" == typeof f ? b = b.replace("%f", f + "") : b = b.replace("%f", ""))
            }
            return b
        }
    },
    riseAWord: function(b, c) { - 1 == this.indexOf(b) && (b = b.toLowerCase());
        if ( - 1 != this.indexOf(b)) return this.replaceAll(b, "<font color=red><strong>" + b + "</strong></font>")
    }
});
Array.expand({
    remove: function(b) {
        return isNaN(b) || b > this.length ? !1 : this.splice(b, 1)[0]
    },
    indexOf: function(b) {
        for (var c = 0; c < this.length; c++) if (this[c] === b) return c;
        return - 1
    },
    removeElement: function(b) {
        b = this.indexOf(b); - 1 < b && this.remove(b)
    },
    lastIndexOf: function(b) {
        for (var c = -1,
        d = 0; d < this.length; d++) this[d] === b && (c = d);
        return c
    },
    statics: {
        isArray: function(b) {
            return "[object Array]" == Object.prototype.toString.call(b)
        }
    }
});
Date.expand({
    format: function(b, c) {
        c = c || !0;
        var d = {
            "y+": this.getYear(),
            "M+": this.getMonth() + 1,
            "d+": this.getDate(),
            "h+": this.getHours(),
            "m+": this.getMinutes(),
            "s+": this.getSeconds(),
            "q+": Math.floor((this.getMonth() + 3) / 3),
            S: this.getMilliseconds()
        };
        /(y+)/.test(b) && (b = b.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)));
        for (var f in d) RegExp("(" + f + ")").test(b) && (b = !0 === c ? b.replace(RegExp.$1, d[f]) : b.replace(RegExp.$1, 1 == RegExp.$1.length ? d[f] : ("00" + d[f]).substr(("" + d[f]).length)));
        return b
    },
    statics: {
        now: function() {
            return (new Date).getTime()
        }
    }
});
Number.expand({
    statics: {
        between: function(b, c, d) {
            b < c && (b = c);
            b > d && (b = d);
            return b
        },
        fixed: function(b, c) {
            var d = Math.pow(10, c);
            return Math.round(b * d) / d
        }
    }
});
var Color = function(b) {
    return {
        value: b,
        toString: function() {
            function b(c, d, h) {
                if (c.length < h && c.length > d) for (; c.length < h;) c = "0" + c;
                return c
            }
            var d = this.value;
            d || (d = 0);
            if ("string" == typeof d) {
                if (0 == d.indexOf("#")) return d;
                if (0 == d.indexOf("0x")) return d.replace("0x", "#")
            }
            d = parseInt(d).toString(16);
            8 < d.length && (d = d.substr(0, 8));
            d = b(d, 6, 8);
            d = b(d, 3, 6);
            d = b(d, 0, 3);
            return "#" + d
        },
        valueOf: toString,
        split: function() {
            var b = {
                r: 0,
                g: 0,
                b: 0,
                a: 255
            };
            if (!this.value) return b;
            var d = this.toString(),
            f = "FF",
            g = "FF",
            h = "FF",
            k = "FF";
            switch (d.length) {
            case 9:
                k = d.substr(1, 2);
                f = d.substr(3, 2);
                g = d.substr(5, 2);
                h = d.substr(7, 2);
                break;
            case 7:
                f = d.substr(1, 2);
                g = d.substr(3, 2);
                h = d.substr(5, 2);
                break;
            case 4:
                f = d.substr(1, 1);
                g = d.substr(2, 1);
                h = d.substr(3, 1);
                f += f;
                g += g;
                h += h;
                break;
            default:
                return b
            }
            return {
                r:
                parseInt(f, 16),
                g: parseInt(g, 16),
                b: parseInt(h, 16),
                a: parseInt(k, 16)
            }
        },
        add: function(b) {
            var d = this.split(),
            f = Math.min(d.r + b, 255).toString(16).toUpperCase(),
            g = Math.min(d.g + b, 255).toString(16).toUpperCase();
            b = Math.min(d.b + b, 255).toString(16).toUpperCase();
            d = Number(d.a).toString(16).toUpperCase();
            f = 1 >= f.length ? "0" + f: f;
            g = 1 >= g.length ? "0" + g: g;
            b = 1 >= b.length ? "0" + b: b;
            d = 1 >= d.length ? "0" + d: d;
            return "FF" == d ? "#" + f + g + b: "#" + d + f + g + b
        },
        reduce: function(b) {
            return this.add( - b)
        },
        rgba: function(b) {
            var d = this.split();
            b = void 0 == b || "" === b ? d.a: parseFloat(b);
            1 < b && (b = Number.fixed(b / 255, 2));
            return String.format("rgba(%d,%d,%d,%f)", d.r, d.g, d.b, b)
        }
    }
};
function equals(b, c) {
    return 1E-7 > Math.abs(b - c)
}
var Point = function(b, c) {
    return {
        x: b,
        y: c,
        isNearTo: function(b, c) {
            if (!b) return ! 1;
            void 0 == c && (c = 5);
            return Math.abs(this.x - b.x) < c && Math.abs(this.y - b.y) < c
        },
        equals: function(b) {
            return b ? equals(this.x, b.x) && equals(this.y, b.y) : !1
        },
        toString: function() {
            return "(" + this.x + "," + this.y + ")"
        },
        clone: function() {
            return Point(this.x, this.y)
        },
        getX: function() {
            return this.x
        },
        getY: function() {
            return this.y
        },
        isNaP: function() {
            return isNaN(this.x) || isNaN(this.y)
        }
    }
};
Point.NaP = function() {
    return Point(Number.NaN, Number.NaN)
};
$.browser.mozilla && (HTMLElement.prototype.__defineGetter__("innerText",
function() {
    return this.textContent
}), HTMLElement.prototype.__defineSetter__("innerText",
function(b) {
    this.textContent = b
}));
bdor[30] = function(b, c) {
    return bdor[b] - c
}; (function(b) {
    b.fn.slider = function(c) {
        if (void 0 != c.value) try {
            this.setRange(c.value)
        } catch(d) {} else if (void 0 != c.maxValue) try {
            this.duration = c.maxValue,
            this.setRange(this.range)
        } catch(f) {} else {
            var g = this;
            this.duration = c.max;
            this.onChange = c.onChange;
            this.direction = c.direction;
            var h = b('<div class="slider-total"></div>'),
            k = b('<div class="slider-range"></div>'),
            l = b('<div class="slider-handle"></div>');
            this.append(h);
            this.append(k);
            this.append(l);
            this.setRange = function(b) {
                if (void 0 != b) {
                    g.range = b;
                    b = h.offset().left - g.offset().left;
                    var c = parseInt(k.css("bottom").replace("px", "")),
                    d = l.width();
                    if ("horizontal" == g.direction) {
                        var f = h.width() - d,
                        c = Math.floor(g.range * f / g.duration),
                        c = Math.min(c, f),
                        d = c + d / 2;
                        l.css({
                            left: c + b
                        });
                        k.css({
                            width: d
                        })
                    } else f = h.height() - d,
                    b = Math.floor(g.range * f / g.duration),
                    b = Math.min(b, f),
                    d = b + d / 2,
                    l.css({
                        bottom: b + c
                    }),
                    k.css({
                        height: d
                    })
                }
            };
            this.setRange(c.range);
            c = function(c) {
                c = isTouch ? c.originalEvent ? c.originalEvent.changedTouches: c.changedTouches: [c];
                c = c[0];
                if (void 0 != c) {
                    var d = b(c.target),
                    f = 0;
                    "horizontal" == g.direction ? (f = c.offsetX, void 0 == f && (f = c.pageX - d.offset().left), f = f / h.width() * g.duration) : (f = c.offsetY, void 0 == f && (f = c.pageY - d.offset().top), f = (d.height() - f) / h.height() * g.duration);
                    g.setRange.apply(g, [f]);
                    g.onChange(f);
                    return ! 1
                }
            };
            h.bind(_event._click, c);
            k.bind(_event._click, c)
        }
    }
})(jQuery); (function(b) {
    var c = "object" == typeof exports && exports,
    d = "object" == typeof module && module && module.exports == c && module,
    f = "object" == typeof global && global;
    if (f.global === f || f.window === f) b = f;
    var g = function(b) {
        this.message = b
    };
    g.prototype = Error();
    g.prototype.name = "InvalidCharacterError";
    var h = {
        encode: function(b) {
            b = String(b);
            if (/[^\0-\xFF]/.test(b)) throw new g("The string to be encoded contains characters outside of the Latin1 range.");
            for (var c = b.length % 3,
            d = "",
            f = -1,
            h, k, r, s = b.length - c; ++f < s;) h = b.charCodeAt(f) << 16,
            k = b.charCodeAt(++f) << 8,
            r = b.charCodeAt(++f),
            h = h + k + r,
            d += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 18 & 63) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 12 & 63) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 6 & 63) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h & 63);
            2 == c ? (h = b.charCodeAt(f) << 8, k = b.charCodeAt(++f), h += k, d += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 10) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 4 & 63) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h << 2 & 63) + "=") : 1 == c && (h = b.charCodeAt(f), d += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h >> 2) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(h << 4 & 63) + "==");
            return d
        },
        decode: function(b) {
            b = String(b);
            for (var c = b.length,
            d = 0,
            f, g, h = "",
            k = -1; ++k < c;) g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(b.charAt(k)),
            f = d % 4 ? 64 * f + g: g,
            d++%4 && (h += String.fromCharCode(255 & f >> ( - 2 * d & 6)));
            return h
        },
        version: "0.1.0"
    };
    if ("function" == typeof define && "object" == typeof define.amd && define.amd) define(function() {
        return h
    });
    else if (c && !c.nodeType) if (d) d.exports = h;
    else for (var k in h) h.hasOwnProperty(k) && (c[k] = h[k]);
    else b.base64 = h
})(this);
function parsHexToNormalString(b) {
    for (var c = ""; 2 <= b.length;) c += String.fromCharCode(parseInt(b.substring(0, 2), 16)),
    b = b.substring(2, b.length);
    return c
}
function parseHexString(b) {
    for (var c = []; 2 <= b.length;) c.push(parseInt(b.substring(0, 2), 16)),
    b = b.substring(2, b.length);
    return c
}
function byteArray2String(b) {
    for (var c = "",
    d = 0; d < b.length; d++) c += String.fromCharCode(b[d]);
    return c
}
function rc4(b, c) {
    for (var d = [], f = [], g = 0; 256 > g; g++) d[g] = g,
    f[g] = b.charCodeAt(g % b.length);
    for (var h = 0,
    g = 0; 256 > g; g++) {
        var h = h + d[g] + f[g] & 255,
        k = d[g];
        d[g] = d[h];
        d[h] = k
    }
    for (var l = h = f = 0,
    m, k = "",
    g = 0; g < c.length; g++) f = f + 1 & 255,
    h = h + d[f] & 255,
    l = d[f],
    d[f] = d[h],
    d[h] = l,
    l = d[f] + d[h] & 255,
    m = c.charCodeAt(g),
    m ^= d[l],
    k += String.fromCharCode(m);
    return k
}
String.prototype.MD5 = function(b) {
    function c(b, c) {
        var d, f, g, h, k;
        g = b & 2147483648;
        h = c & 2147483648;
        d = b & 1073741824;
        f = c & 1073741824;
        k = (b & 1073741823) + (c & 1073741823);
        return d & f ? k ^ 2147483648 ^ g ^ h: d | f ? k & 1073741824 ? k ^ 3221225472 ^ g ^ h: k ^ 1073741824 ^ g ^ h: k ^ g ^ h
    }
    function d(b, d, f, g, h, k, l) {
        b = c(b, c(c(d & f | ~d & g, h), l));
        return c(b << k | b >>> 32 - k, d)
    }
    function f(b, d, f, g, h, k, l) {
        b = c(b, c(c(d & g | f & ~g, h), l));
        return c(b << k | b >>> 32 - k, d)
    }
    function g(b, d, f, g, h, k, l) {
        b = c(b, c(c(d ^ f ^ g, h), l));
        return c(b << k | b >>> 32 - k, d)
    }
    function h(b, d, f, g, h, k, l) {
        b = c(b, c(c(f ^ (d | ~g), h), l));
        return c(b << k | b >>> 32 - k, d)
    }
    function k(b) {
        var c = "",
        d = "",
        f;
        for (f = 0; 3 >= f; f++) d = b >>> 8 * f & 255,
        d = "0" + d.toString(16),
        c += d.substr(d.length - 2, 2);
        return c
    }
    var l = [],
    m,
    n,
    p,
    q,
    t,
    r,
    s,
    u,
    v,
    l = function(b) {
        var c, d = b.length;
        c = d + 8;
        for (var f = 16 * ((c - c % 64) / 64 + 1), g = Array(f - 1), h = 0, k = 0; k < d;) c = (k - k % 4) / 4,
        h = k % 4 * 8,
        g[c] |= b.charCodeAt(k) << h,
        k++;
        c = (k - k % 4) / 4;
        g[c] |= 128 << k % 4 * 8;
        g[f - 2] = d << 3;
        g[f - 1] = d >>> 29;
        return g
    } (this);
    r = 1732584193;
    s = 4023233417;
    u = 2562383102;
    v = 271733878;
    for (m = 0; m < l.length; m += 16) n = r,
    p = s,
    q = u,
    t = v,
    r = d(r, s, u, v, l[m + 0], 7, 3614090360),
    v = d(v, r, s, u, l[m + 1], 12, 3905402710),
    u = d(u, v, r, s, l[m + 2], 17, 606105819),
    s = d(s, u, v, r, l[m + 3], 22, 3250441966),
    r = d(r, s, u, v, l[m + 4], 7, 4118548399),
    v = d(v, r, s, u, l[m + 5], 12, 1200080426),
    u = d(u, v, r, s, l[m + 6], 17, 2821735955),
    s = d(s, u, v, r, l[m + 7], 22, 4249261313),
    r = d(r, s, u, v, l[m + 8], 7, 1770035416),
    v = d(v, r, s, u, l[m + 9], 12, 2336552879),
    u = d(u, v, r, s, l[m + 10], 17, 4294925233),
    s = d(s, u, v, r, l[m + 11], 22, 2304563134),
    r = d(r, s, u, v, l[m + 12], 7, 1804603682),
    v = d(v, r, s, u, l[m + 13], 12, 4254626195),
    u = d(u, v, r, s, l[m + 14], 17, 2792965006),
    s = d(s, u, v, r, l[m + 15], 22, 1236535329),
    r = f(r, s, u, v, l[m + 1], 5, 4129170786),
    v = f(v, r, s, u, l[m + 6], 9, 3225465664),
    u = f(u, v, r, s, l[m + 11], 14, 643717713),
    s = f(s, u, v, r, l[m + 0], 20, 3921069994),
    r = f(r, s, u, v, l[m + 5], 5, 3593408605),
    v = f(v, r, s, u, l[m + 10], 9, 38016083),
    u = f(u, v, r, s, l[m + 15], 14, 3634488961),
    s = f(s, u, v, r, l[m + 4], 20, 3889429448),
    r = f(r, s, u, v, l[m + 9], 5, 568446438),
    v = f(v, r, s, u, l[m + 14], 9, 3275163606),
    u = f(u, v, r, s, l[m + 3], 14, 4107603335),
    s = f(s, u, v, r, l[m + 8], 20, 1163531501),
    r = f(r, s, u, v, l[m + 13], 5, 2850285829),
    v = f(v, r, s, u, l[m + 2], 9, 4243563512),
    u = f(u, v, r, s, l[m + 7], 14, 1735328473),
    s = f(s, u, v, r, l[m + 12], 20, 2368359562),
    r = g(r, s, u, v, l[m + 5], 4, 4294588738),
    v = g(v, r, s, u, l[m + 8], 11, 2272392833),
    u = g(u, v, r, s, l[m + 11], 16, 1839030562),
    s = g(s, u, v, r, l[m + 14], 23, 4259657740),
    r = g(r, s, u, v, l[m + 1], 4, 2763975236),
    v = g(v, r, s, u, l[m + 4], 11, 1272893353),
    u = g(u, v, r, s, l[m + 7], 16, 4139469664),
    s = g(s, u, v, r, l[m + 10], 23, 3200236656),
    r = g(r, s, u, v, l[m + 13], 4, 681279174),
    v = g(v, r, s, u, l[m + 0], 11, 3936430074),
    u = g(u, v, r, s, l[m + 3], 16, 3572445317),
    s = g(s, u, v, r, l[m + 6], 23, 76029189),
    r = g(r, s, u, v, l[m + 9], 4, 3654602809),
    v = g(v, r, s, u, l[m + 12], 11, 3873151461),
    u = g(u, v, r, s, l[m + 15], 16, 530742520),
    s = g(s, u, v, r, l[m + 2], 23, 3299628645),
    r = h(r, s, u, v, l[m + 0], 6, 4096336452),
    v = h(v, r, s, u, l[m + 7], 10, 1126891415),
    u = h(u, v, r, s, l[m + 14], 15, 2878612391),
    s = h(s, u, v, r, l[m + 5], 21, 4237533241),
    r = h(r, s, u, v, l[m + 12], 6, 1700485571),
    v = h(v, r, s, u, l[m + 3], 10, 2399980690),
    u = h(u, v, r, s, l[m + 10], 15, 4293915773),
    s = h(s, u, v, r, l[m + 1], 21, 2240044497),
    r = h(r, s, u, v, l[m + 8], 6, 1873313359),
    v = h(v, r, s, u, l[m + 15], 10, 4264355552),
    u = h(u, v, r, s, l[m + 6], 15, 2734768916),
    s = h(s, u, v, r, l[m + 13], 21, 1309151649),
    r = h(r, s, u, v, l[m + 4], 6, 4149444226),
    v = h(v, r, s, u, l[m + 11], 10, 3174756917),
    u = h(u, v, r, s, l[m + 2], 15, 718787259),
    s = h(s, u, v, r, l[m + 9], 21, 3951481745),
    r = c(r, n),
    s = c(s, p),
    u = c(u, q),
    v = c(v, t);
    return 32 == b ? k(r) + k(s) + k(u) + k(v) : k(s) + k(u)
};
function QR8bitByte(b) {
    this.mode = QRMode.MODE_8BIT_BYTE;
    this.data = b
}
QR8bitByte.prototype = {
    getLength: function(b) {
        return this.data.length
    },
    write: function(b) {
        for (var c = 0; c < this.data.length; c++) b.put(this.data.charCodeAt(c), 8)
    }
};
function QRCode(b, c) {
    this.typeNumber = b;
    this.errorCorrectLevel = c;
    this.modules = null;
    this.moduleCount = 0;
    this.dataCache = null;
    this.dataList = []
}
QRCode.prototype = {
    addData: function(b) {
        b = new QR8bitByte(b);
        this.dataList.push(b);
        this.dataCache = null
    },
    isDark: function(b, c) {
        if (0 > b || this.moduleCount <= b || 0 > c || this.moduleCount <= c) throw Error(b + "," + c);
        return this.modules[b][c]
    },
    getModuleCount: function() {
        return this.moduleCount
    },
    make: function() {
        if (1 > this.typeNumber) {
            for (var b = 1,
            b = 1; 40 > b; b++) {
                for (var c = QRRSBlock.getRSBlocks(b, this.errorCorrectLevel), d = new QRBitBuffer, f = 0, g = 0; g < c.length; g++) f += c[g].dataCount;
                for (g = 0; g < this.dataList.length; g++) c = this.dataList[g],
                d.put(c.mode, 4),
                d.put(c.getLength(), QRUtil.getLengthInBits(c.mode, b)),
                c.write(d);
                if (d.getLengthInBits() <= 8 * f) break
            }
            this.typeNumber = b
        }
        this.makeImpl(!1, this.getBestMaskPattern())
    },
    makeImpl: function(b, c) {
        this.moduleCount = 4 * this.typeNumber + 17;
        this.modules = Array(this.moduleCount);
        for (var d = 0; d < this.moduleCount; d++) {
            this.modules[d] = Array(this.moduleCount);
            for (var f = 0; f < this.moduleCount; f++) this.modules[d][f] = null
        }
        this.setupPositionProbePattern(0, 0);
        this.setupPositionProbePattern(this.moduleCount - 7, 0);
        this.setupPositionProbePattern(0, this.moduleCount - 7);
        this.setupPositionAdjustPattern();
        this.setupTimingPattern();
        this.setupTypeInfo(b, c);
        7 <= this.typeNumber && this.setupTypeNumber(b);
        null == this.dataCache && (this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList));
        this.mapData(this.dataCache, c)
    },
    setupPositionProbePattern: function(b, c) {
        for (var d = -1; 7 >= d; d++) if (! ( - 1 >= b + d || this.moduleCount <= b + d)) for (var f = -1; 7 >= f; f++) - 1 >= c + f || this.moduleCount <= c + f || (this.modules[b + d][c + f] = 0 <= d && 6 >= d && (0 == f || 6 == f) || 0 <= f && 6 >= f && (0 == d || 6 == d) || 2 <= d && 4 >= d && 2 <= f && 4 >= f ? !0 : !1)
    },
    getBestMaskPattern: function() {
        for (var b = 0,
        c = 0,
        d = 0; 8 > d; d++) {
            this.makeImpl(!0, d);
            var f = QRUtil.getLostPoint(this);
            if (0 == d || b > f) b = f,
            c = d
        }
        return c
    },
    createMovieClip: function(b, c, d) {
        b = b.createEmptyMovieClip(c, d);
        this.make();
        for (c = 0; c < this.modules.length; c++) {
            d = 1 * c;
            for (var f = 0; f < this.modules[c].length; f++) {
                var g = 1 * f;
                this.modules[c][f] && (b.beginFill(0, 100), b.moveTo(g, d), b.lineTo(g + 1, d), b.lineTo(g + 1, d + 1), b.lineTo(g, d + 1), b.endFill())
            }
        }
        return b
    },
    setupTimingPattern: function() {
        for (var b = 8; b < this.moduleCount - 8; b++) null == this.modules[b][6] && (this.modules[b][6] = 0 == b % 2);
        for (b = 8; b < this.moduleCount - 8; b++) null == this.modules[6][b] && (this.modules[6][b] = 0 == b % 2)
    },
    setupPositionAdjustPattern: function() {
        for (var b = QRUtil.getPatternPosition(this.typeNumber), c = 0; c < b.length; c++) for (var d = 0; d < b.length; d++) {
            var f = b[c],
            g = b[d];
            if (null == this.modules[f][g]) for (var h = -2; 2 >= h; h++) for (var k = -2; 2 >= k; k++) this.modules[f + h][g + k] = -2 == h || 2 == h || -2 == k || 2 == k || 0 == h && 0 == k ? !0 : !1
        }
    },
    setupTypeNumber: function(b) {
        for (var c = QRUtil.getBCHTypeNumber(this.typeNumber), d = 0; 18 > d; d++) {
            var f = !b && 1 == (c >> d & 1);
            this.modules[Math.floor(d / 3)][d % 3 + this.moduleCount - 8 - 3] = f
        }
        for (d = 0; 18 > d; d++) f = !b && 1 == (c >> d & 1),
        this.modules[d % 3 + this.moduleCount - 8 - 3][Math.floor(d / 3)] = f
    },
    setupTypeInfo: function(b, c) {
        for (var d = QRUtil.getBCHTypeInfo(this.errorCorrectLevel << 3 | c), f = 0; 15 > f; f++) {
            var g = !b && 1 == (d >> f & 1);
            6 > f ? this.modules[f][8] = g: 8 > f ? this.modules[f + 1][8] = g: this.modules[this.moduleCount - 15 + f][8] = g
        }
        for (f = 0; 15 > f; f++) g = !b && 1 == (d >> f & 1),
        8 > f ? this.modules[8][this.moduleCount - f - 1] = g: 9 > f ? this.modules[8][15 - f - 1 + 1] = g: this.modules[8][15 - f - 1] = g;
        this.modules[this.moduleCount - 8][8] = !b
    },
    mapData: function(b, c) {
        for (var d = -1,
        f = this.moduleCount - 1,
        g = 7,
        h = 0,
        k = this.moduleCount - 1; 0 < k; k -= 2) for (6 == k && k--;;) {
            for (var l = 0; 2 > l; l++) if (null == this.modules[f][k - l]) {
                var m = !1;
                h < b.length && (m = 1 == (b[h] >>> g & 1));
                QRUtil.getMask(c, f, k - l) && (m = !m);
                this.modules[f][k - l] = m;
                g--; - 1 == g && (h++, g = 7)
            }
            f += d;
            if (0 > f || this.moduleCount <= f) {
                f -= d;
                d = -d;
                break
            }
        }
    }
};
QRCode.PAD0 = 236;
QRCode.PAD1 = 17;
QRCode.createData = function(b, c, d) {
    c = QRRSBlock.getRSBlocks(b, c);
    for (var f = new QRBitBuffer,
    g = 0; g < d.length; g++) {
        var h = d[g];
        f.put(h.mode, 4);
        f.put(h.getLength(), QRUtil.getLengthInBits(h.mode, b));
        h.write(f)
    }
    for (g = b = 0; g < c.length; g++) b += c[g].dataCount;
    if (f.getLengthInBits() > 8 * b) throw Error("code length overflow. (" + f.getLengthInBits() + ">" + 8 * b + ")");
    for (f.getLengthInBits() + 4 <= 8 * b && f.put(0, 4); 0 != f.getLengthInBits() % 8;) f.putBit(!1);
    for (; ! (f.getLengthInBits() >= 8 * b);) {
        f.put(QRCode.PAD0, 8);
        if (f.getLengthInBits() >= 8 * b) break;
        f.put(QRCode.PAD1, 8)
    }
    return QRCode.createBytes(f, c)
};
QRCode.createBytes = function(b, c) {
    for (var d = 0,
    f = 0,
    g = 0,
    h = Array(c.length), k = Array(c.length), l = 0; l < c.length; l++) {
        var m = c[l].dataCount,
        n = c[l].totalCount - m,
        f = Math.max(f, m),
        g = Math.max(g, n);
        h[l] = Array(m);
        for (var p = 0; p < h[l].length; p++) h[l][p] = 255 & b.buffer[p + d];
        d += m;
        p = QRUtil.getErrorCorrectPolynomial(n);
        m = (new QRPolynomial(h[l], p.getLength() - 1)).mod(p);
        k[l] = Array(p.getLength() - 1);
        for (p = 0; p < k[l].length; p++) n = p + m.getLength() - k[l].length,
        k[l][p] = 0 <= n ? m.get(n) : 0
    }
    for (p = l = 0; p < c.length; p++) l += c[p].totalCount;
    d = Array(l);
    for (p = m = 0; p < f; p++) for (l = 0; l < c.length; l++) p < h[l].length && (d[m++] = h[l][p]);
    for (p = 0; p < g; p++) for (l = 0; l < c.length; l++) p < k[l].length && (d[m++] = k[l][p]);
    return d
};
for (var QRMode = {
    MODE_NUMBER: 1,
    MODE_ALPHA_NUM: 2,
    MODE_8BIT_BYTE: 4,
    MODE_KANJI: 8
},
QRErrorCorrectLevel = {
    L: 1,
    M: 0,
    Q: 3,
    H: 2
},
QRMaskPattern = {
    PATTERN000: 0,
    PATTERN001: 1,
    PATTERN010: 2,
    PATTERN011: 3,
    PATTERN100: 4,
    PATTERN101: 5,
    PATTERN110: 6,
    PATTERN111: 7
},
QRUtil = {
    PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
    G15: 1335,
    G18: 7973,
    G15_MASK: 21522,
    getBCHTypeInfo: function(b) {
        for (var c = b << 10; 0 <= QRUtil.getBCHDigit(c) - QRUtil.getBCHDigit(QRUtil.G15);) c ^= QRUtil.G15 << QRUtil.getBCHDigit(c) - QRUtil.getBCHDigit(QRUtil.G15);
        return (b << 10 | c) ^ QRUtil.G15_MASK
    },
    getBCHTypeNumber: function(b) {
        for (var c = b << 12; 0 <= QRUtil.getBCHDigit(c) - QRUtil.getBCHDigit(QRUtil.G18);) c ^= QRUtil.G18 << QRUtil.getBCHDigit(c) - QRUtil.getBCHDigit(QRUtil.G18);
        return b << 12 | c
    },
    getBCHDigit: function(b) {
        for (var c = 0; 0 != b;) c++,
        b >>>= 1;
        return c
    },
    getPatternPosition: function(b) {
        return QRUtil.PATTERN_POSITION_TABLE[b - 1]
    },
    getMask: function(b, c, d) {
        switch (b) {
        case QRMaskPattern.PATTERN000:
            return 0 == (c + d) % 2;
        case QRMaskPattern.PATTERN001:
            return 0 == c % 2;
        case QRMaskPattern.PATTERN010:
            return 0 == d % 3;
        case QRMaskPattern.PATTERN011:
            return 0 == (c + d) % 3;
        case QRMaskPattern.PATTERN100:
            return 0 == (Math.floor(c / 2) + Math.floor(d / 3)) % 2;
        case QRMaskPattern.PATTERN101:
            return 0 == c * d % 2 + c * d % 3;
        case QRMaskPattern.PATTERN110:
            return 0 == (c * d % 2 + c * d % 3) % 2;
        case QRMaskPattern.PATTERN111:
            return 0 == (c * d % 3 + (c + d) % 2) % 2;
        default:
            throw Error("bad maskPattern:" + b);
        }
    },
    getErrorCorrectPolynomial: function(b) {
        for (var c = new QRPolynomial([1], 0), d = 0; d < b; d++) c = c.multiply(new QRPolynomial([1, QRMath.gexp(d)], 0));
        return c
    },
    getLengthInBits: function(b, c) {
        if (1 <= c && 10 > c) switch (b) {
        case QRMode.MODE_NUMBER:
            return 10;
        case QRMode.MODE_ALPHA_NUM:
            return 9;
        case QRMode.MODE_8BIT_BYTE:
            return 8;
        case QRMode.MODE_KANJI:
            return 8;
        default:
            throw Error("mode:" + b);
        } else if (27 > c) switch (b) {
        case QRMode.MODE_NUMBER:
            return 12;
        case QRMode.MODE_ALPHA_NUM:
            return 11;
        case QRMode.MODE_8BIT_BYTE:
            return 16;
        case QRMode.MODE_KANJI:
            return 10;
        default:
            throw Error("mode:" + b);
        } else if (41 > c) switch (b) {
        case QRMode.MODE_NUMBER:
            return 14;
        case QRMode.MODE_ALPHA_NUM:
            return 13;
        case QRMode.MODE_8BIT_BYTE:
            return 16;
        case QRMode.MODE_KANJI:
            return 12;
        default:
            throw Error("mode:" + b);
        } else throw Error("type:" + c);
    },
    getLostPoint: function(b) {
        for (var c = b.getModuleCount(), d = 0, f = 0; f < c; f++) for (var g = 0; g < c; g++) {
            for (var h = 0,
            k = b.isDark(f, g), l = -1; 1 >= l; l++) if (! (0 > f + l || c <= f + l)) for (var m = -1; 1 >= m; m++) 0 > g + m || c <= g + m || 0 == l && 0 == m || k != b.isDark(f + l, g + m) || h++;
            5 < h && (d += 3 + h - 5)
        }
        for (f = 0; f < c - 1; f++) for (g = 0; g < c - 1; g++) if (h = 0, b.isDark(f, g) && h++, b.isDark(f + 1, g) && h++, b.isDark(f, g + 1) && h++, b.isDark(f + 1, g + 1) && h++, 0 == h || 4 == h) d += 3;
        for (f = 0; f < c; f++) for (g = 0; g < c - 6; g++) b.isDark(f, g) && !b.isDark(f, g + 1) && b.isDark(f, g + 2) && b.isDark(f, g + 3) && b.isDark(f, g + 4) && !b.isDark(f, g + 5) && b.isDark(f, g + 6) && (d += 40);
        for (g = 0; g < c; g++) for (f = 0; f < c - 6; f++) b.isDark(f, g) && !b.isDark(f + 1, g) && b.isDark(f + 2, g) && b.isDark(f + 3, g) && b.isDark(f + 4, g) && !b.isDark(f + 5, g) && b.isDark(f + 6, g) && (d += 40);
        for (g = h = 0; g < c; g++) for (f = 0; f < c; f++) b.isDark(f, g) && h++;
        b = Math.abs(100 * h / c / c - 50) / 5;
        return d + 10 * b
    }
},
QRMath = {
    glog: function(b) {
        if (1 > b) throw Error("glog(" + b + ")");
        return QRMath.LOG_TABLE[b]
    },
    gexp: function(b) {
        for (; 0 > b;) b += 255;
        for (; 256 <= b;) b -= 255;
        return QRMath.EXP_TABLE[b]
    },
    EXP_TABLE: Array(256),
    LOG_TABLE: Array(256)
},
i = 0; 8 > i; i++) QRMath.EXP_TABLE[i] = 1 << i;
for (i = 8; 256 > i; i++) QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
for (i = 0; 255 > i; i++) QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
function QRPolynomial(b, c) {
    if (void 0 == b.length) throw Error(b.length + "/" + c);
    for (var d = 0; d < b.length && 0 == b[d];) d++;
    this.num = Array(b.length - d + c);
    for (var f = 0; f < b.length - d; f++) this.num[f] = b[f + d]
}
QRPolynomial.prototype = {
    get: function(b) {
        return this.num[b]
    },
    getLength: function() {
        return this.num.length
    },
    multiply: function(b) {
        for (var c = Array(this.getLength() + b.getLength() - 1), d = 0; d < this.getLength(); d++) for (var f = 0; f < b.getLength(); f++) c[d + f] ^= QRMath.gexp(QRMath.glog(this.get(d)) + QRMath.glog(b.get(f)));
        return new QRPolynomial(c, 0)
    },
    mod: function(b) {
        if (0 > this.getLength() - b.getLength()) return this;
        for (var c = QRMath.glog(this.get(0)) - QRMath.glog(b.get(0)), d = Array(this.getLength()), f = 0; f < this.getLength(); f++) d[f] = this.get(f);
        for (f = 0; f < b.getLength(); f++) d[f] ^= QRMath.gexp(QRMath.glog(b.get(f)) + c);
        return (new QRPolynomial(d, 0)).mod(b)
    }
};
function QRRSBlock(b, c) {
    this.totalCount = b;
    this.dataCount = c
}
QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
QRRSBlock.getRSBlocks = function(b, c) {
    var d = QRRSBlock.getRsBlockTable(b, c);
    if (void 0 == d) throw Error("bad rs block @ typeNumber:" + b + "/errorCorrectLevel:" + c);
    for (var f = d.length / 3,
    g = [], h = 0; h < f; h++) for (var k = d[3 * h + 0], l = d[3 * h + 1], m = d[3 * h + 2], n = 0; n < k; n++) g.push(new QRRSBlock(l, m));
    return g
};
QRRSBlock.getRsBlockTable = function(b, c) {
    switch (c) {
    case QRErrorCorrectLevel.L:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (b - 1) + 0];
    case QRErrorCorrectLevel.M:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (b - 1) + 1];
    case QRErrorCorrectLevel.Q:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (b - 1) + 2];
    case QRErrorCorrectLevel.H:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (b - 1) + 3]
    }
};
function QRBitBuffer() {
    this.buffer = [];
    this.length = 0
}
QRBitBuffer.prototype = {
    get: function(b) {
        return 1 == (this.buffer[Math.floor(b / 8)] >>> 7 - b % 8 & 1)
    },
    put: function(b, c) {
        for (var d = 0; d < c; d++) this.putBit(1 == (b >>> c - d - 1 & 1))
    },
    getLengthInBits: function() {
        return this.length
    },
    putBit: function(b) {
        var c = Math.floor(this.length / 8);
        this.buffer.length <= c && this.buffer.push(0);
        b && (this.buffer[c] |= 128 >>> this.length % 8);
        this.length++
    }
}; (function(b) {
    b.fn.qrcode = function(c) {
        "string" === typeof c && (c = {
            text: c
        });
        c = b.extend({},
        {
            render: "canvas",
            width: 256,
            height: 256,
            typeNumber: -1,
            correctLevel: QRErrorCorrectLevel.H,
            background: "#ffffff",
            foreground: "#000000"
        },
        c);
        return this.each(function() {
            var d;
            if ("canvas" == c.render) {
                d = new QRCode(c.typeNumber, c.correctLevel);
                d.addData(c.text);
                d.make();
                var f = document.createElement("canvas");
                f.width = c.width;
                f.height = c.height;
                for (var g = f.getContext("2d"), h = c.width / d.getModuleCount(), k = c.height / d.getModuleCount(), l = 0; l < d.getModuleCount(); l++) for (var m = 0; m < d.getModuleCount(); m++) {
                    g.fillStyle = d.isDark(l, m) ? c.foreground: c.background;
                    var n = Math.ceil((m + 1) * h) - Math.floor(m * h),
                    p = Math.ceil((l + 1) * h) - Math.floor(l * h);
                    g.fillRect(Math.round(m * h), Math.round(l * k), n, p)
                }
            } else for (d = new QRCode(c.typeNumber, c.correctLevel), d.addData(c.text), d.make(), f = b("<table></table>").css("width", c.width + "px").css("height", c.height + "px").css("border", "0px").css("border-collapse", "collapse").css("background-color", c.background), g = c.width / d.getModuleCount(), h = c.height / d.getModuleCount(), k = 0; k < d.getModuleCount(); k++) for (l = b("<tr></tr>").css("height", h + "px").appendTo(f), m = 0; m < d.getModuleCount(); m++) b("<td></td>").css("width", g + "px").css("background-color", d.isDark(k, m) ? c.foreground: c.background).appendTo(l);
            d = f;
            jQuery(d).appendTo(this)
        })
    }
})(jQuery); (function(b) {
    b.fn.qrcode = function(c) {
        "string" === typeof c && (c = {
            text: c
        });
        c = b.extend({},
        {
            render: "canvas",
            width: 256,
            height: 256,
            typeNumber: -1,
            correctLevel: QRErrorCorrectLevel.H,
            background: "#ffffff",
            foreground: "#000000"
        },
        c);
        return this.each(function() {
            var d;
            if ("canvas" == c.render) {
                d = new QRCode(c.typeNumber, c.correctLevel);
                d.addData(c.text);
                d.make();
                var f = document.createElement("canvas");
                f.width = c.width;
                f.height = c.height;
                for (var g = f.getContext("2d"), h = c.width / d.getModuleCount(), k = c.height / d.getModuleCount(), l = 0; l < d.getModuleCount(); l++) for (var m = 0; m < d.getModuleCount(); m++) {
                    g.fillStyle = d.isDark(l, m) ? c.foreground: c.background;
                    var n = Math.ceil((m + 1) * h) - Math.floor(m * h),
                    p = Math.ceil((l + 1) * h) - Math.floor(l * h);
                    g.fillRect(Math.round(m * h), Math.round(l * k), n, p)
                }
            } else for (d = new QRCode(c.typeNumber, c.correctLevel), d.addData(c.text), d.make(), f = b("<table></table>").css("width", c.width + "px").css("height", c.height + "px").css("border", "0px").css("border-collapse", "collapse").css("background-color", c.background), g = c.width / d.getModuleCount(), h = c.height / d.getModuleCount(), k = 0; k < d.getModuleCount(); k++) for (l = b("<tr></tr>").css("height", h + "px").appendTo(f), m = 0; m < d.getModuleCount(); m++) b("<td></td>").css("width", g + "px").css("background-color", d.isDark(k, m) ? c.foreground: c.background).appendTo(l);
            d = f;
            jQuery(d).appendTo(this)
        })
    }
})(jQuery);
jQuery.fn.zoom = function(b) {
    this.options = b;
    this.middleScale = 3;
    this.maxScale = 6;
    this.windowWidth = windowWidth;
    this.windowHeight = windowHeight;
    this.parameters = {
        width: $(this).width() || 0,
        height: $(this).height() || 0,
        naturalWidth: $(this).width() || 0,
        naturalHeight: $(this).height() || 0,
        left: $(this).offset().left || 0,
        top: $(this).offset().top || 0,
        scale: 1,
        rotate: 0,
        toScale: 1,
        tran: {
            x: 0,
            y: 0
        },
        origin: {
            x: 50,
            y: 50
        },
        zoomFlag: !1,
        zoomming: !1,
        zoonOut: !1,
        resize: !1,
        eventCancel: !1
    };
    b = new Hammer.Manager($(this)[0]);
    b.add(new Hammer.Pan);
    b.add((new Hammer.Swipe({
        velocity: 0.15
    })).recognizeWith(b.get("pan")));
    b.add(new Hammer.Pinch);
    b.add(new Hammer.Tap({
        event: "doubletap",
        taps: 2,
        interval: 400,
        posThreshold: 30
    }));
    b.on("panstart panmove panend pancancel", onPan.bind(this));
    if (isPhone() || isPad() || isSlideBook()) b.on("pinchstart pinchmove pinchcancel pinchend", onPinch.bind(this));
    b.on("swipe swipeup", onSwipe.bind(this));
    if (!isAndroidWeChat()) b.on("doubletap", onDoubleTap.bind(this))
};
function onPan(b) {
    if (!this.parameters.resize && !this.parameters.eventCancel && !this.parameters.zoomming && b && b.pointers && 1 == b.pointers.length && (this.swipeInterval && this.swipeInterval.stop(), this.animateInterval && this.animateInterval.stop(), this.parameters.zoomFlag)) {
        var c = panForMove(this, b.deltaX, b.deltaY, !0);
        if (this.options && this.options.onPan) this.options.onPan();
        if ("panend" == b.type || "pancancel" == b.type) setZoomParameters(this, c),
        restrictInBoundary(this)
    }
}
function onSwipe(b) {
    if (!this.parameters.resize && !this.parameters.eventCancel && !this.parameters.zoomming) if (this.parameters.zoomFlag) {
        var c = this.parameters.tran,
        d = tranLimit(this, this.parameters.scale, this.parameters.tran);
        if (d.x == parseInt(c.x) && d.y == parseInt(c.y)) {
            this.animateInterval && this.animateInterval.stop();
            this.swipeInterval && this.swipeInterval.stop();
            var f = 0,
            g = 0;
            0 != b.velocityX && (f = b.velocityX);
            0 != b.velocityY && (g = b.velocityY);
            this.swipeInterval = function(b, c) {
                var d = this.parameters.tran,
                m = tranLimit(this, this.parameters.scale, this.parameters.tran);
                m.x != parseInt(d.x) || m.y != parseInt(d.y) ? (this.swipeInterval.stop(), restrictInBoundary(this)) : (d = (c - b) / c, d = panForMove(this, f * d * 16.7, g * d * 16.7, !0), setZoomParameters(this, d), b >= c && (this.swipeInterval.stop(), restrictInBoundary(this)))
            }.runInAnimate(this, 320)
        }
    } else b.direction & Hammer.DIRECTION_RIGHT && (c = "right"),
    b.direction & Hammer.DIRECTION_LEFT && (c = "left"),
    b.direction & Hammer.DIRECTION_UP && (c = "up"),
    b.direction & Hammer.DIRECTION_DOWN && (c = "down"),
    this.options && this.options.swipeend && this.options.swipeend(c)
}
function onDoubleTap(b) {
    if (! (BookInfo.getBook().status_resize || BookInfo.getBook().flipping || (BookInfo.getBook().endFlip(), global.windowTapInterval && window.clearTimeout(global.windowTapInterval), this.parameters.resize || this.parameters.eventCancel || this.parameters.zoomming))) if (this.status_zoom = !0, !this.parameters.zoomFlag) zoomIn(this),
    this.parameters.origin = mathOrigin(this, b),
    originObj(this, this.parameters.origin),
    this.parameters.zoomOut = !1,
    animateToScale(this, this.middleScale, b);
    else if (this.parameters.zoomFlag) {
        var c = this.parameters.naturalWidth / this.parameters.width;
        this.parameters.zoomOut = !0;
        animateToScale(this, c, b)
    }
}
function onPinch(b) {
    "pinchstart" == b.type && (this.pinchStart = !0);
    if (! (this.parameters.resize || this.parameters.eventCancel || this.parameters.zoomming || !this.parameters.zoomFlag && 1 >= b.scale) && b && b.pointers) {
        this.animateInterval && this.animateInterval.stop();
        this.swipeInterval && this.swipeInterval.stop();
        var c = function() {
            this.pinchStart = !1;
            this.parameters.zoomFlag || (this.parameters.zoomOut = !1, zoomIn(this));
            this.scale = this.parameters.toScale;
            this.parameters.origin = mathOrigin(this, b);
            originObj(this, this.parameters.origin);
            pinchMoveIn(this, parseFloat(this.scale) * parseFloat(b.scale), b, this.parameters.origin)
        }.bind(this);
        "pinchstart" == b.type && c(b);
        "pinchend" == b.type && (this.parameters.scale = this.parameters.toScale, exceedScale(this, b), this.pinchStart = !1);
        "pinchmove" == b.type && (this.pinchStart && c(b), pinchMoveIn(this, parseFloat(this.scale) * parseFloat(b.scale), b, this.parameters.origin));
        "pinchcancel" == b.type && (this.parameters.scale = this.parameters.toScale, exceedScale(this, b), this.pinchStart = !1)
    }
}
function exceedScale(b, c) {
    var d = b.parameters.width * b.parameters.toScale / b.parameters.naturalWidth,
    f = b.parameters.width * b.parameters.toScale,
    g = b.parameters.height * b.parameters.toScale,
    h = b.parameters.naturalWidth * b.maxScale / b.parameters.width,
    k = b.parameters.naturalWidth / b.parameters.width,
    l = b.parameters.toScale;
    d > b.maxScale && (l = h);
    if (1 > d || f < b.windowWidth && g < b.windowHeight) b.parameters.zoomOut = !0,
    l = k;
    animateToScale(b, l, c)
}
function zoomIn(b) {
    b.parameters.tran = getTransform(b[0]);
    b.parameters.left = $(b).offset().left - b.parameters.tran.x;
    b.parameters.top = $(b).offset().top - b.parameters.tran.y;
    b.parameters.width = $(b).width();
    b.parameters.height = $(b).height();
    b.parameters.naturalWidth = $(b).width();
    b.parameters.naturalHeight = $(b).height();
    b.parameters.zoomFlag = !0;
    b.parameters.zoomOut = !1;
    b.options && b.options.zoomIn && b.options.zoomIn()
}
function zoomOut(b) {
    b.swipeInterval && b.swipeInterval.stop();
    b.animateInterval && b.animateInterval.stop();
    b.parameters.zoomFlag = !1;
    b.parameters.zoomOut = !0;
    b.parameters.toScale = 1;
    b.parameters.scale = 1;
    b.options && b.options.zoomOut && b.options.zoomOut()
}
function tranLimit(b, c, d) {
    if (d) {
        if (!isAndroidWeChat() && b.parameters.zoomOut) {
            d = {
                x: 0,
                y: 0
            };
            d.x = b.parameters.width * (c - 1) * b.parameters.origin.x / 100;
            d.y = b.parameters.height * (c - 1) * b.parameters.origin.y / 100;
            if (bookType == BookType.normal_book && bookConfig.retainBookCenter) {
                var f = BookInfo.getBook().getCurrentPageIndex();
                if (1 == f && !rightToLeft || rightToLeft && f == totalPageCount) d.x -= b.parameters.width * c / 4;
                if (1 == f && rightToLeft || !rightToLeft && f == totalPageCount) d.x += b.parameters.width * c / 4
            }
            return d
        }
        b.parameters.origin || (b.parameters.origin = {
            x: 0,
            y: 0
        });
        f = d.x;
        d = d.y;
        var g, h, k, l;
        g = b.parameters.width;
        h = b.parameters.height;
        k = b.parameters.left - b.parameters.origin.x * (c - 1) * g / 100;
        l = b.parameters.top - b.parameters.origin.y * (c - 1) * h / 100;
        var m = 0,
        n = 0,
        p = 0,
        q = 0,
        n = c * g;
        c *= h;
        n > b.windowWidth ? (m = b.windowWidth - n - k, p = -k) : (m = -k, p = b.windowWidth - n - k);
        c > b.windowHeight ? (n = b.windowHeight - c - l, q = -l) : (n = -l, q = b.windowHeight - c - l);
        f = Number.between(f, m, p);
        d = Number.between(d, n, q);
        return {
            x: parseInt(f),
            y: parseInt(d)
        }
    }
}
function pinchMoveIn(b, c, d) {
    if (!b.parameters.eventCancel && !b.parameters.zoomming && d && d.pointers && 2 == d.pointers.length) {
        var f = {};
        f.scale = c;
        f.tran = mathTran(b, d, b.parameters.origin);
        transformSetting(b, f);
        b.parameters.toScale = c
    }
}
function mathTran(b, c, d) {
    if (!c || !c.pointers || 0 >= c.pointers.length || !d) return {
        x: 0,
        y: 0
    };
    var f, g;
    1 == c.pointers.length && (f = c.pointers[0].pageX, g = c.pointers[0].pageY);
    1 < c.pointers.length && (f = (c.pointers[0].pageX + c.pointers[1].pageX) / 2, g = (c.pointers[0].pageY + c.pointers[1].pageY) / 2);
    var h, k;
    k = b.parameters.width;
    c = b.parameters.height;
    h = b.parameters.left;
    b = b.parameters.top;
    h = (d.x * k / 100 + h).toFixed(2);
    d = (d.y * c / 100 + b).toFixed(2);
    tranX = f - parseFloat(h);
    tranY = g - parseFloat(d);
    return {
        x: parseFloat(tranX.toFixed(2)),
        y: parseFloat(tranY.toFixed(2))
    }
}
function mathOrigin(b, c) {
    if (!c || !c.pointers || 0 >= c.pointers.length) return {
        x: 50,
        y: 50
    };
    var d, f;
    1 == c.pointers.length && (d = c.pointers[0].pageX, f = c.pointers[0].pageY);
    1 < c.pointers.length && (d = (c.pointers[0].pageX + c.pointers[1].pageX) / 2, f = (c.pointers[0].pageY + c.pointers[1].pageY) / 2);
    var g, h;
    g = b.parameters.width;
    h = b.parameters.height;
    d = (d - parseInt(b.offset().left)) / (g * b.parameters.toScale);
    f = (f - parseInt(b.offset().top)) / (h * b.parameters.toScale);
    return {
        x: (100 * d).toFixed(2),
        y: (100 * f).toFixed(2)
    }
}
function animateToScale(b, c, d) {
    if (!b.parameters.eventCancel && !b.parameters.zoomming) {
        b.options && b.options.zoomStart && b.options.zoomStart();
        b.parameters.zoomming = !0;
        var f = {};
        f.origin = b.parameters.origin;
        f.scale = c;
        f.tran = mathTran(b, d, f.origin);
        f.tran = tranLimit(b, c, f.tran);
        d = transformCSS(f);
        originObj(b, f.origin);
        animateOnce(b, d, 300,
        function() {
            getTransform(b[0]);
            transformSetting(b, f);
            b.parameters.scale = c;
            b.parameters.toScale = c;
            b.parameters.zoomming = !1;
            if (b.options.onZoomed) b.options.onZoomed(f);
            1 >= b.parameters.width * b.parameters.toScale / b.parameters.naturalWidth && zoomOut(b)
        }.bind(b), "%stransform", "ease-in-out")
    }
}
function restrictInBoundary(b) {
    if (!b.parameters.eventCancel && !b.parameters.zoomming) {
        var c = b.parameters.tran,
        d = tranLimit(b, b.parameters.scale, c);
        if (d.x != parseInt(c.x) || d.y != parseInt(c.y)) {
            b.animateInterval && b.animateInterval.stop();
            var f = 0,
            g = 0,
            h = 0;
            d.x != c.x && (f = d.x - c.x);
            d.y != c.y && (g = d.y - c.y);
            b.animateInterval = function(c, d) {
                var m = $.easing.easeOutBack(null, h, 0, f, 20),
                n = $.easing.easeOutBack(null, h, 0, g, 20);
                0 < h && (m -= $.easing.easeOutBack(null, h - 1, 0, f, 20), n -= $.easing.easeOutBack(null, h - 1, 0, g, 20));
                m = panForMove(b, m, n);
                setZoomParameters(b, m);
                h++; (20 <= h || c >= d) && b.animateInterval.stop()
            }.runInAnimate(this, 320)
        }
    }
}
function transformSetting(b, c) {
    setZoomParameters(b, c);
    var d = transformCSS(c);
    b.css(d)
}
function panForMove(b, c, d, f) {
    var g = b.parameters ? b.parameters.tran: {
        x: 0,
        y: 0
    };
    f = b.parameters ? b.parameters.scale: 1;
    g || (g = {
        x: 0,
        y: 0
    });
    f || 0 == f || (f = 1);
    c = {
        x: g.x + c,
        y: g.y + d
    };
    d = transformCSS({
        tran: c,
        scale: f
    });
    b.css(d);
    return {
        tran: c,
        scale: f
    }
}
function originObj(b, c) {
    b.css({
        "-webkit-transform-origin": c.x + "% " + c.y + "%",
        "-moz-transform-origin": c.x + "% " + c.y + "%",
        "-ms-transform-origin": c.x + "% " + c.y + "%",
        "-o-transform-origin": c.x + "% " + c.y + "%"
    })
}
function setZoomParameters(b, c) {
    function d(d) {
        return void 0 === c[d] || null === c[d] || isNaN(c[d]) ? b.parameters[d] : c[d]
    }
    function f(d) {
        return void 0 !== c[d] && null !== c[d] ? c[d] : b.parameters[d]
    }
    b && b.parameters && c && (b.parameters = {
        width: d("width"),
        height: d("height"),
        naturalWidth: d("naturalWidth"),
        naturalHeight: d("naturalHeight"),
        left: d("left"),
        top: d("top"),
        scale: d("scale"),
        rotate: d("rotate"),
        toScale: d("toScale"),
        tran: f("tran"),
        origin: f("origin"),
        zoomFlag: f("zoomFlag"),
        zoomming: f("zoomming"),
        zoomOut: f("zoomOut"),
        resize: f("resize"),
        eventCancel: f("eventCancel")
    })
}
bdor[7] = "m"; (function(b) {
    b.fn.addVideoSkin = function(c) {
        var d = this;
        this.theme = void 0;
        for (var f = 0; f < videoThemes.length; f++) videoThemes[f].name == c && (this.theme = videoThemes[f]);
        void 0 == this.theme && (this.theme = videoThemes[0]);
        c = this.find("video:first");
        var g = c[0];
        if (void 0 != g && null != g) {
            this.addClass("video-player").addClass(this.theme.name);
            var h = b('<div class="video-controls slider-action"></div>');
            this.append(h);
            f = b('<div class="control-border"></div>');
            h.append(f);
            var k = b('<div class="video-play"></div>');
            h.append(k);
            f = b('<div class="bevel"></div>');
            h.append(f);
            f = function(b) { ! 1 == g.paused ? g.pause() : g.play();
                stopEvent(b);
                return ! 1
            };
            c.bind(_event._click, f);
            k.bind(_event._click, f);
            c.bind("play",
            function() {
                k.addClass("paused-button")
            });
            c.bind("pause",
            function() {
                k.removeClass("paused-button")
            });
            c.bind("ended",
            function() {
                k.removeClass("paused-button")
            });
            h.playButton = k;
            var l = b('<div class="video-timer">00:00</div>');
            h.append(l);
            c.bind("timeupdate",
            function() {
                var b = g.currentTime,
                c = g.duration;
                if (0 == c || void 0 == c) c = 100;
                m.slider({
                    maxValue: c
                });
                m.slider({
                    value: b
                });
                l.text(timeFormat(b))
            });
            h.videoTimer = l;
            var m = b('<div class="video-seek"></div>');
            h.append(m); (function() {
                var b = g.duration;
                if (0 == b || void 0 == b) b = 100;
                m.slider({
                    range: 0,
                    max: b,
                    direction: "horizontal",
                    onChange: function(b) {
                        try {
                            g.currentTime = b
                        } catch(c) {}
                    }
                });
                h.show();
                d.controlbarWidth = h.width()
            })();
            h.videoSeek = m;
            f = b('<div class="bevel"></div>');
            h.append(f);
            var n = b('<div class="volume-seek"></div>');
            h.append(n);
            this.volume_value = 1;
            n.slider({
                range: 1,
                max: 1,
                direction: "vertical",
                onChange: function(b) {
                    try {
                        d.volume_value = b,
                        0 == b ? (g.muted = !0, p.addClass("volume-mute")) : (g.muted = !1, p.removeClass("volume-mute")),
                        g.volume = b
                    } catch(c) {}
                }
            });
            h.volumeSeek = n;
            var p = b('<div class="volume-button"></div>');
            h.append(p);
            p.bind(_event._click,
            function() { ! 0 == g.muted ? (g.muted = !1, n.slider({
                    value: d.volume_value
                }), p.removeClass("volume-mute")) : (g.muted = !0, n.slider({
                    value: 0
                }), p.addClass("volume-mute"));
                return ! 1
            });
            p.bind("mouseenter",
            function() {
                n.css({
                    visiblity: "visible",
                    opacity: "1"
                })
            });
            p.bind("mouseleave",
            function() {
                n.css({
                    visiblity: "hidden",
                    opacity: "0"
                })
            });
            n.bind("mouseenter",
            function() {
                n.css({
                    visiblity: "visible",
                    opacity: "1"
                })
            });
            n.bind("mouseleave",
            function() {
                n.css({
                    visiblity: "hidden",
                    opacity: "0"
                })
            });
            h.volumeButton = p;
            var q = b('<div class="player-fullscreen"></div>');
            h.append(q);
            q.bind(_event._click,
            function() {
                fullScreenApi.supportsFullScreen ? fullScreenApi.isFullScreen() ? fullScreenApi.cancelFullScreen() : fullScreenApi.requestFullScreen(g) : g.webkitSupportsFullscreen && g.webkitEnterFullscreen();
                return ! 1
            });
            c.bind(fullScreenApi.fullScreenEventName,
            function() {
                fullScreenApi.isFullScreen() ? q.addClass("player-exit-fullscreen") : q.removeClass("player-exit-fullscreen")
            });
            h.fullscreenButton = q;
            this.controlbar = h;
            this.resizeVideoSkin()
        }
    };
    bdor.i = function(b) {
        return bdor[b]
    };
    b.fn.resizeVideoSkin = function() {
        var b = this.find("video:first")[0],
        d = this.controlbar;
        if (void 0 != d) {
            var f = d.videoSeek,
            g = d.volumeSeek,
            h = d.volumeButton,
            k = d.fullscreenButton,
            l = this.width(),
            m = Math.max(0, l - this.theme.seekWidth);
            0 >= m ? f.css({
                display: "none"
            }) : (f.css({
                width: m,
                display: "block"
            }), f.slider({
                value: b.currentTime
            }));
            d = h.offset().left - d.offset().left + (h.width() - g.width()) / 2;
            l < this.theme.fullscreenWidth ? (k.css({
                display: "none"
            }), l < this.theme.volumeWidth ? (h.css({
                display: "none"
            }), g.css({
                left: "-45px"
            })) : (h.css({
                display: "block"
            }), g.css({
                left: d + "px"
            }))) : (h.css({
                display: "block"
            }), k.css({
                display: "block"
            }), g.css({
                left: d + "px"
            })); ! 0 == b.muted ? g.slider({
                value: 0
            }) : g.slider({
                value: this.volume_value
            })
        }
    };
    bdor.f = "f";
    b.fn.addAudioSkin = function(c) {
        var d = this;
        this.theme = void 0;
        for (var f = 0; f < audioThemes.length; f++) audioThemes[f].name == c && (this.theme = audioThemes[f]);
        void 0 == this.theme && (this.theme = audioThemes[0]);
        c = this.find("audio:first");
        var g = c[0];
        if (void 0 != g && null != g) {
            this.audioList = [];
            this.audioIndex = 0;
            if (0 == c.children("source").length) f = c.attr("src"),
            "" != f && void 0 != f && this.audioList.push(c.attr("src"));
            else for (f = 0; f < c.children("source").length; f++) {
                var h = c.children("source")[f];
                this.audioList.push(h.src)
            }
            if (this.audioResources.length > this.audioList.length) for (this.audioList = [], f = 0; f < this.audioResources.length; f++) this.audioList.push(this.audioResources[f]);
            this.addClass("audio-player").addClass(this.theme.name);
            this.play_btn = b('<div class="audio-play slider-action"></div>');
            this.append(this.play_btn);
            this.play_btn.bind(_event._click,
            function(b) { ! 1 == g.paused ? g.pause() : g.play();
                stopEvent(b);
                return ! 1
            });
            c.bind("play",
            function() {
                d.play_btn.addClass("paused-button")
            });
            c.bind("pause",
            function() {
                d.play_btn.removeClass("paused-button")
            });
            c.bind("ended",
            function() {
                d.play_btn.removeClass("paused-button");
                d.audioIndex < d.audioResources.length - 1 && k()
            });
            this.back_btn = b('<div class="back_button slider-action"></div>');
            this.append(this.back_btn);
            this.back_btn.bind(_event._click,
            function(b) {
                if (0 != d.audioResources.length) {
                    d.audioIndex--;
                    0 > d.audioIndex && (d.audioIndex += d.audioResources.length);
                    var c = d.audioResources[d.audioIndex];
                    g.src = c;
                    d.audio_name.text(m(c));
                    g.play();
                    stopEvent(b);
                    return ! 1
                }
            });
            this.forward_btn = b('<div class="forward_button slider-action"></div>');
            this.append(this.forward_btn);
            var k = function(b) {
                if (0 != d.audioResources.length) {
                    d.audioIndex++;
                    d.audioIndex %= d.audioResources.length;
                    var c = d.audioResources[d.audioIndex];
                    g.src = c;
                    d.audio_name.text(m(c));
                    g.play();
                    stopEvent(b);
                    return ! 1
                }
            };
            this.forward_btn.bind(_event._click, k);
            this.volume_seek = b('<div class="volume-seek slider-action"></div>');
            this.append(this.volume_seek);
            this.volume_value = 1;
            this.volume_seek.slider({
                range: 1,
                max: 1,
                direction: this.theme.volumeDirection,
                onChange: function(b) {
                    try {
                        d.volume_value = b,
                        0 == b ? (g.muted = !0, d.volume_btn.addClass("volume-mute")) : (g.muted = !1, d.volume_btn.removeClass("volume-mute")),
                        g.volume = b
                    } catch(c) {}
                }
            });
            this.volume_btn = b('<div class="volume-button slider-action"></div>');
            this.append(this.volume_btn);
            var l = function(b) {
                d.volume_value = g.volume + b;
                d.volume_value = Math.max(0, d.volume_value);
                d.volume_value = Math.min(1, d.volume_value);
                g.volume = d.volume_value
            };
            this.volume_up_btn = b('<div class="volume-up-button slider-action"></div>');
            this.volume_down_btn = b('<div class="volume-down-button slider-action"></div>');
            this.volume_up_btn.bind(_event._click,
            function() {
                l(0.1)
            });
            this.volume_down_btn.bind(_event._click,
            function() {
                l( - 0.1)
            });
            this.append(this.volume_up_btn);
            this.append(this.volume_down_btn);
            this.volume_btn.bind(_event._click,
            function(b) { ! 0 == g.muted ? (g.muted = !1, d.volume_seek.slider({
                    value: d.volume_value
                }), d.volume_btn.removeClass("volume-mute")) : (g.muted = !0, d.volume_seek.slider({
                    value: 0
                }), d.volume_btn.addClass("volume-mute"));
                stopEvent(b);
                return ! 1
            });
            this.audio_timer = b('<div class="audio-timer">00:00/00:00</div>');
            this.append(this.audio_timer);
            c.bind("timeupdate",
            function() {
                var b = g.currentTime,
                c = g.duration;
                d.audio_seek.slider({
                    maxValue: c
                });
                d.audio_seek.slider({
                    value: b
                });
                d.audio_timer.text(timeFormat(b) + "/" + timeFormat(c))
            });
            this.audio_seek = b('<div class="audio-seek slider-action"></div>');
            this.append(this.audio_seek); (function() {
                var b = g.duration;
                if (0 == b || void 0 == b) b = 100;
                d.audio_seek.slider({
                    range: 0,
                    max: b,
                    direction: "horizontal",
                    onChange: function(b) {
                        try {
                            g.currentTime = b
                        } catch(c) {}
                    }
                });
                d.resizeAudioSkin()
            })();
            this.audio_name = b('<div class="audio-file"></div>');
            this.append(this.audio_name);
            f = "";
            0 < this.audioList.length && (f = this.audioResources[0]);
            var m = function(b) {
                if ("" == b) return "";
                var c = -1,
                c = -1 == b.indexOf("\\") ? b.lastIndexOf("/") : b.lastIndexOf("\\");
                iNameEnd = b.lastIndexOf(".");
                return fileTitle = b.substr(c + 1, iNameEnd - c - 1)
            };
            this.audio_name.text(m(f));
            d.resizeAudioSkin()
        }
    };
    b.fn.resizeAudioSkin = function() {
        var b = this.find("audio:first")[0];
        if (null != this.theme && void 0 != this.theme) {
            var d = Math.max(0, this.width() - this.theme.audioSeek);
            0 >= d ? this.audio_seek.css({
                display: "none"
            }) : (this.audio_seek.css({
                width: d,
                display: "block"
            }), this.audio_seek.slider({
                value: b.currentTime
            }));
            d = this.theme.wolumnWidth;
            void 0 != d && (this.width() < d ? (this.volume_btn.css({
                display: "none"
            }), this.volume_seek.css({
                display: "none"
            })) : (this.volume_btn.css({
                display: "block"
            }), this.volume_seek.css({
                display: "block"
            })), !1 == b.muted ? this.volume_seek.slider({
                value: this.volume_value
            }) : this.volume_seek.slider({
                value: 0
            }))
        }
    };
    b.fn.refreshAudioSeek = function() {
        var b = this.find("audio:first")[0];
        null != this.theme && void 0 != this.theme && null != b && (this.audio_seek.slider({
            value: b.currentTime
        }), !1 == b.muted ? this.volume_seek.slider({
            value: this.volume_value
        }) : this.volume_seek.slider({
            value: 0
        }))
    };
    this.skin = this.bdor
})(jQuery);
var videoThemes = [{
    name: "default",
    seekWidth: 150,
    volumeWidth: 105,
    fullscreenWidth: 130
},
{
    name: "round",
    seekWidth: 225,
    volumeWidth: 145,
    fullscreenWidth: 150
},
{
    name: "classic",
    seekWidth: 195,
    volumeWidth: 135,
    fullscreenWidth: 170
},
{
    name: "smallblack",
    seekWidth: 135,
    volumeWidth: 85,
    fullscreenWidth: 110
},
{
    name: "circle",
    seekWidth: 70,
    volumeWidth: 105,
    fullscreenWidth: 60
}],
audioThemes = [{
    name: "default",
    volumeDirection: "horizontal",
    audioSeek: 20,
    wolumnWidth: 170
},
{
    name: "advanced",
    volumeDirection: "horizontal"
},
{
    name: "wave",
    volumeDirection: "horizontal",
    audioSeek: 125
},
{
    name: "glass",
    volumeDirection: "horizontal"
},
{
    name: "simple",
    volumeDirection: "horizontal"
},
{
    name: "enjoy",
    volumeDirection: "horizontal"
},
{
    name: "decent",
    volumeDirection: "vertical"
},
{
    name: "tree",
    volumeDirection: "horizontal"
},
{
    name: "christmas",
    volumeDirection: "vertical"
},
{
    name: "turnonoff",
    volumeDirection: "horizontal"
},
{
    name: "fade",
    volumeDirection: "horizontal"
},
{
    name: "background",
    volumeDirection: "horizontal"
},
{
    name: "skin1",
    volumeDirection: "horizontal",
    audioSeek: 130
},
{
    name: "skin2",
    volumeDirection: "horizontal",
    audioSeek: 80
}],
audioThemeNames = {
    GlassAudioPlayer: "",
    SimpleAudioPlayer: "",
    StandardAudioPlayer: "",
    StandardAudioPlayer02: "",
    StandardAudioPlayer03: "",
    StandardAudioPlayer04: "",
    StandardAudioPlayer05: "",
    StandardAudioPlayer06: ""
},
timeFormat = function(b) {
    var c = 10 > Math.floor(b / 60) ? "0" + Math.floor(b / 60) : Math.floor(b / 60);
    return c + ":" + (10 > Math.floor(b - 60 * c) ? "0" + Math.floor(b - 60 * c) : Math.floor(b - 60 * c))
},
stopEvent = function(b) {
    b = b || window.event;
    b.preventDefault ? (b.preventDefault(), b.stopPropagation()) : (b.returnValue = !1, b.cancelBubble = !0)
};
bdor[8] = "o"; (function(b, c, d) {
    function f(b, c) {
        var d = (b[0] || 0) - (c[0] || 0);
        return 0 < d || !d && 0 < b.length && f(b.slice(1), c.slice(1))
    }
    function g(b) {
        if (typeof b != k) return b;
        var c = [],
        d = "",
        f;
        for (f in b) d = typeof b[f] == k ? g(b[f]) : [f, l ? encodeURI(b[f]) : b[f]].join("="),
        c.push(d);
        return c.join("&")
    }
    function h(b) {
        var c = [],
        d;
        for (d in b) c.push(['<param name="', d, '" value="', g(b[d]), '" />'].join(""));
        return c.join("")
    }
    var k = "object",
    l = !0;
    try {
        var m = d.description || (new d("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version")
    } catch(n) {
        m = "Unavailable"
    }
    var p = m.match(/\d+/g) || [0];
    b[c] = {
        available: 0 < p[0],
        activeX: d && !d.name,
        version: {
            original: m,
            array: p,
            string: p.join("."),
            major: parseInt(p[0], 10) || 0,
            minor: parseInt(p[1], 10) || 0,
            release: parseInt(p[2], 10) || 0
        },
        hasVersion: function(b) {
            b = /string|number/.test(typeof b) ? b.toString().split(".") : /object/.test(typeof b) ? [b.major, b.minor] : b || [0, 0];
            return f(p, b)
        },
        encodeParams: !0,
        expressInstall: "expressInstall.swf",
        expressInstallIsActive: !1,
        create: function(b) {
            if (!b.swf || this.expressInstallIsActive || !this.available && !b.hasVersionFail) return ! 1;
            if (!this.hasVersion(b.hasVersion || 1)) {
                this.expressInstallIsActive = !0;
                if ("function" == typeof b.hasVersionFail && !b.hasVersionFail.apply(b)) return ! 1;
                b = {
                    swf: b.expressInstall || this.expressInstall,
                    height: 137,
                    width: 214,
                    flashvars: {
                        MMredirectURL: location.href,
                        MMplayerType: this.activeX ? "ActiveX": "PlugIn",
                        MMdoctitle: document.title.slice(0, 47) + " - Flash Player Installation"
                    }
                }
            }
            attrs = {
                data: b.swf,
                type: "application/x-shockwave-flash",
                id: b.id || "flash_" + Math.floor(999999999 * Math.random()),
                width: b.width || 320,
                height: b.height || 180,
                style: b.style || ""
            };
            l = "undefined" !== typeof b.useEncode ? b.useEncode: this.encodeParams;
            b.movie = b.swf;
            b.wmode = b.wmode || "opaque";
            delete b.fallback;
            delete b.hasVersion;
            delete b.hasVersionFail;
            delete b.height;
            delete b.id;
            delete b.swf;
            delete b.useEncode;
            delete b.width;
            var c = document.createElement("div"),
            d;
            d = attrs;
            var f = [],
            g;
            for (g in d) d[g] && f.push([g, '="', d[g], '"'].join(""));
            d = f.join(" ");
            c.innerHTML = ["<object ", d, ">", h(b), "</object>"].join("");
            return c.firstChild
        }
    };
    b.fn[c] = function(d) {
        var f = this.find(k).andSelf().filter(k);
        /string|object/.test(typeof d) && this.each(function() {
            var f = b(this),
            g;
            d = typeof d == k ? d: {
                swf: d
            };
            d.fallback = this;
            if (g = b[c].create(d)) f.children().remove(),
            f.html(g)
        });
        "function" == typeof d && f.each(function() {
            var f = this;
            f.jsInteractionTimeoutMs = f.jsInteractionTimeoutMs || 0;
            660 > f.jsInteractionTimeoutMs && (f.clientWidth || f.clientHeight ? d.call(f) : setTimeout(function() {
                b(f)[c](d)
            },
            f.jsInteractionTimeoutMs + 66))
        });
        return f
    }
})(jQuery, "flash", navigator.plugins["Shockwave Flash"] || window.ActiveXObject);
jQuery.easing.jswing = jQuery.easing.swing;
jQuery.extend(jQuery.easing, {
    def: "easeOutQuad",
    swing: function(b, c, d, f, g) {
        return jQuery.easing[jQuery.easing.def](b, c, d, f, g)
    },
    easeInQuad: function(b, c, d, f, g) {
        return f * (c /= g) * c + d
    },
    easeOutQuad: function(b, c, d, f, g) {
        return - f * (c /= g) * (c - 2) + d
    },
    easeInOutQuad: function(b, c, d, f, g) {
        return 1 > (c /= g / 2) ? f / 2 * c * c + d: -f / 2 * (--c * (c - 2) - 1) + d
    },
    easeInCubic: function(b, c, d, f, g) {
        return f * (c /= g) * c * c + d
    },
    easeOutCubic: function(b, c, d, f, g) {
        return f * ((c = c / g - 1) * c * c + 1) + d
    },
    easeInOutCubic: function(b, c, d, f, g) {
        return 1 > (c /= g / 2) ? f / 2 * c * c * c + d: f / 2 * ((c -= 2) * c * c + 2) + d
    },
    easeInQuart: function(b, c, d, f, g) {
        return f * (c /= g) * c * c * c + d
    },
    easeOutQuart: function(b, c, d, f, g) {
        return - f * ((c = c / g - 1) * c * c * c - 1) + d
    },
    easeInOutQuart: function(b, c, d, f, g) {
        return 1 > (c /= g / 2) ? f / 2 * c * c * c * c + d: -f / 2 * ((c -= 2) * c * c * c - 2) + d
    },
    easeInQuint: function(b, c, d, f, g) {
        return f * (c /= g) * c * c * c * c + d
    },
    easeOutQuint: function(b, c, d, f, g) {
        return f * ((c = c / g - 1) * c * c * c * c + 1) + d
    },
    easeInOutQuint: function(b, c, d, f, g) {
        return 1 > (c /= g / 2) ? f / 2 * c * c * c * c * c + d: f / 2 * ((c -= 2) * c * c * c * c + 2) + d
    },
    easeInSine: function(b, c, d, f, g) {
        return - f * Math.cos(c / g * (Math.PI / 2)) + f + d
    },
    easeOutSine: function(b, c, d, f, g) {
        return f * Math.sin(c / g * (Math.PI / 2)) + d
    },
    easeInOutSine: function(b, c, d, f, g) {
        return - f / 2 * (Math.cos(Math.PI * c / g) - 1) + d
    },
    easeInExpo: function(b, c, d, f, g) {
        return 0 == c ? d: f * Math.pow(2, 10 * (c / g - 1)) + d
    },
    easeOutExpo: function(b, c, d, f, g) {
        return c == g ? d + f: f * ( - Math.pow(2, -10 * c / g) + 1) + d
    },
    easeInOutExpo: function(b, c, d, f, g) {
        return 0 == c ? d: c == g ? d + f: 1 > (c /= g / 2) ? f / 2 * Math.pow(2, 10 * (c - 1)) + d: f / 2 * ( - Math.pow(2, -10 * --c) + 2) + d
    },
    easeInCirc: function(b, c, d, f, g) {
        return - f * (Math.sqrt(1 - (c /= g) * c) - 1) + d
    },
    easeOutCirc: function(b, c, d, f, g) {
        return f * Math.sqrt(1 - (c = c / g - 1) * c) + d
    },
    easeInOutCirc: function(b, c, d, f, g) {
        return 1 > (c /= g / 2) ? -f / 2 * (Math.sqrt(1 - c * c) - 1) + d: f / 2 * (Math.sqrt(1 - (c -= 2) * c) + 1) + d
    },
    easeInElastic: function(b, c, d, f, g) {
        b = 1.70158;
        var h = 0,
        k = f;
        if (0 == c) return d;
        if (1 == (c /= g)) return d + f;
        h || (h = 0.3 * g);
        k < Math.abs(f) ? (k = f, b = h / 4) : b = h / (2 * Math.PI) * Math.asin(f / k);
        return - (k * Math.pow(2, 10 * (c -= 1)) * Math.sin(2 * (c * g - b) * Math.PI / h)) + d
    },
    easeOutElastic: function(b, c, d, f, g) {
        b = 1.70158;
        var h = 0,
        k = f;
        if (0 == c) return d;
        if (1 == (c /= g)) return d + f;
        h || (h = 0.3 * g);
        k < Math.abs(f) ? (k = f, b = h / 4) : b = h / (2 * Math.PI) * Math.asin(f / k);
        return k * Math.pow(2, -10 * c) * Math.sin(2 * (c * g - b) * Math.PI / h) + f + d
    },
    easeInOutElastic: function(b, c, d, f, g) {
        b = 1.70158;
        var h = 0,
        k = f;
        if (0 == c) return d;
        if (2 == (c /= g / 2)) return d + f;
        h || (h = 0.3 * g * 1.5);
        k < Math.abs(f) ? (k = f, b = h / 4) : b = h / (2 * Math.PI) * Math.asin(f / k);
        return 1 > c ? -0.5 * k * Math.pow(2, 10 * (c -= 1)) * Math.sin(2 * (c * g - b) * Math.PI / h) + d: k * Math.pow(2, -10 * (c -= 1)) * Math.sin(2 * (c * g - b) * Math.PI / h) * 0.5 + f + d
    },
    easeInBack: function(b, c, d, f, g, h) {
        void 0 == h && (h = 1.70158);
        return f * (c /= g) * c * ((h + 1) * c - h) + d
    },
    easeOutBack: function(b, c, d, f, g, h) {
        void 0 == h && (h = 1.70158);
        return f * ((c = c / g - 1) * c * ((h + 1) * c + h) + 1) + d
    },
    easeInOutBack: function(b, c, d, f, g, h) {
        void 0 == h && (h = 1.70158);
        return 1 > (c /= g / 2) ? f / 2 * c * c * (((h *= 1.525) + 1) * c - h) + d: f / 2 * ((c -= 2) * c * (((h *= 1.525) + 1) * c + h) + 2) + d
    },
    easeInBounce: function(b, c, d, f, g) {
        return f - jQuery.easing.easeOutBounce(b, g - c, 0, f, g) + d
    },
    easeOutBounce: function(b, c, d, f, g) {
        return (c /= g) < 1 / 2.75 ? 7.5625 * f * c * c + d: c < 2 / 2.75 ? f * (7.5625 * (c -= 1.5 / 2.75) * c + 0.75) + d: c < 2.5 / 2.75 ? f * (7.5625 * (c -= 2.25 / 2.75) * c + 0.9375) + d: f * (7.5625 * (c -= 2.625 / 2.75) * c + 0.984375) + d
    },
    easeInOutBounce: function(b, c, d, f, g) {
        return c < g / 2 ? 0.5 * jQuery.easing.easeInBounce(b, 2 * c, 0, f, g) + d: 0.5 * jQuery.easing.easeOutBounce(b, 2 * c - g, 0, f, g) + 0.5 * f + d
    }
}); (function(b) {
    var c = [],
    d = function() {},
    f = 0,
    g = [],
    h = function() {
        f++;
        f >= c.length && (d(g), d = function() {})
    },
    k = function(c) {
        var d = new Image;
        b(d).load(function() {
            g.push({
                url: c,
                img: d
            });
            h()
        }).error(function() {
            g.push(d);
            h()
        }).attr("src", c)
    };
    b.fn.loader = function(f, g, h) {
        f && b.extend(c, f);
        "function" == typeof g && (d = g);
        for (f = 0; f < c.length; f++) k(c[f])
    }
})(jQuery);
var phoneIconInfo = {
    width: 600,
    height: 720,
    iconInfo: [{
        id: "next",
        position: {
            x: 96,
            y: 193
        },
        width: 48,
        height: 48
    },
    {
        id: "prev",
        position: {
            x: 10,
            y: 193
        },
        width: 48,
        height: 48
    },
    {
        id: "search",
        position: {
            x: 178,
            y: 18
        },
        width: 48,
        height: 48
    },
    {
        id: "tableofcontent",
        position: {
            x: 255,
            y: 21
        },
        width: 48,
        height: 48
    },
    {
        id: "zoomIn",
        position: {
            x: 19,
            y: 106
        },
        width: 48,
        height: 48
    },
    {
        id: "addBookmark",
        position: {
            x: 542,
            y: 17
        },
        width: 48,
        height: 48
    },
    {
        id: "bookmark",
        position: {
            x: 483,
            y: 17
        },
        width: 48,
        height: 48
    },
    {
        id: "miBookmark",
        position: {
            x: 552,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "miBookmark_close",
        position: {
            x: 402,
            y: 429
        },
        width: 40,
        height: 40
    },
    {
        id: "miBookmark_close_enter",
        position: {
            x: 462,
            y: 429
        },
        width: 40,
        height: 40
    },
    {
        id: "thumb",
        position: {
            x: 19,
            y: 18
        },
        width: 48,
        height: 48
    },
    {
        id: "more",
        position: {
            x: 97,
            y: 19
        },
        width: 48,
        height: 48
    },
    {
        id: "miSearch",
        position: {
            x: 20,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "miTableOfContent",
        position: {
            x: 373,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "miShare",
        position: {
            x: 87,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "miHome",
        position: {
            x: 495,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "facebook",
        position: {
            x: 20,
            y: 414
        },
        width: 65,
        height: 65
    },
    {
        id: "twitter",
        position: {
            x: 92,
            y: 414
        },
        width: 65,
        height: 65
    },
    {
        id: "google",
        position: {
            x: 164,
            y: 414
        },
        width: 65,
        height: 65
    },
    {
        id: "addthis",
        position: {
            x: 309,
            y: 414
        },
        width: 65,
        height: 65
    },
    {
        id: "linkedin",
        position: {
            x: 236,
            y: 414
        },
        width: 65,
        height: 65
    },
    {
        id: "collapsed",
        position: {
            x: 406,
            y: 348
        },
        width: 24,
        height: 24
    },
    {
        id: "expanded",
        position: {
            x: 449,
            y: 351
        },
        width: 24,
        height: 24
    },
    {
        id: "download",
        position: {
            x: 162,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "print",
        position: {
            x: 305,
            y: 283
        },
        width: 32,
        height: 32
    },
    {
        id: "autoPlay",
        position: {
            x: 184,
            y: 104
        },
        width: 48,
        height: 48
    },
    {
        id: "stopAutoPlay",
        position: {
            x: 258,
            y: 104
        },
        width: 48,
        height: 48
    },
    {
        id: "shoppingCart",
        position: {
            x: 407,
            y: 104
        },
        width: 48,
        height: 48
    },
    {
        id: "goBtn",
        position: {
            x: 338,
            y: 110
        },
        width: 48,
        height: 48
    },
    {
        id: "languageChange",
        position: {
            x: 232,
            y: 284
        },
        width: 32,
        height: 32
    },
    {
        id: "setting",
        position: {
            x: 437,
            y: 282
        },
        width: 32,
        height: 32
    },
    {
        id: "firstBtn",
        position: {
            x: 194,
            y: 194
        },
        width: 45,
        height: 45
    },
    {
        id: "prevBtn",
        position: {
            x: 291,
            y: 194
        },
        width: 45,
        height: 45
    },
    {
        id: "nextBtn",
        position: {
            x: 383,
            y: 194
        },
        width: 45,
        height: 45
    },
    {
        id: "lastBtn",
        position: {
            x: 475,
            y: 194
        },
        width: 45,
        height: 45
    },
    {
        id: "choosed",
        position: {
            x: 356,
            y: 346
        },
        width: 28,
        height: 28
    },
    {
        id: "unchoosed",
        position: {
            x: 297,
            y: 346
        },
        width: 28,
        height: 28
    },
    {
        id: "gotoPage",
        position: {
            x: 414,
            y: 20
        },
        width: 48,
        height: 48
    },
    {
        id: "zoomOut",
        position: {
            x: 101,
            y: 107
        },
        width: 48,
        height: 48
    },
    {
        id: "passward",
        position: {
            x: 8,
            y: 547
        },
        width: 170,
        height: 170
    },
    {
        id: "fullScreen",
        position: {
            x: 482,
            y: 104
        },
        width: 48,
        height: 48
    },
    {
        id: "exitFullScreen",
        position: {
            x: 540,
            y: 104
        },
        width: 48,
        height: 48
    }]
},
catalogIconInfo = {
    width: 520,
    height: 174,
    iconInfo: [{
        id: "background",
        position: {
            x: 3,
            y: 9
        },
        width: 420,
        height: 50
    },
    {
        id: "thumb",
        position: {
            x: 144,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "search",
        position: {
            x: 192,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "prev",
        position: {
            x: 240,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "next",
        position: {
            x: 288,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "more",
        position: {
            x: 336,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "fullScreen",
        position: {
            x: 384,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "exitFullScreen",
        position: {
            x: 432,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "share",
        position: {
            x: 480,
            y: 66
        },
        width: 38,
        height: 38
    },
    {
        id: "thumb_down",
        position: {
            x: 144,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "search_down",
        position: {
            x: 192,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "prev_down",
        position: {
            x: 240,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "next_down",
        position: {
            x: 288,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "more_down",
        position: {
            x: 336,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "fullScreen_down",
        position: {
            x: 384,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "exitFullScreen_down",
        position: {
            x: 432,
            y: 106
        },
        width: 38,
        height: 38
    },
    {
        id: "share_down",
        position: {
            x: 480,
            y: 106
        },
        width: 38,
        height: 38
    }]
}; (function(b) {
    var c = function() {
        return Hammer.HAS_TOUCHEVENTS && navigator.userAgent.match(Hammer.MOBILE_REGEX)
    };
    bdor[3] = "f";
    var d = function(b) {
        var f = this;
        this.theButton = b;
        this.eventSource = b[0];
        c() ? (b.bind("touchstart",
        function() {
            d.prototype.mouseDown.apply(f, arguments)
        }), b.bind("touchend",
        function() {
            d.prototype.mouseUp.apply(f, arguments)
        })) : (b.bind("mousedown",
        function() {
            d.prototype.mouseDown.apply(f, arguments)
        }), b.bind("mouseleave",
        function() {
            d.prototype.mouseUp.apply(f, arguments)
        }), b.bind("mouseup",
        function() {
            d.prototype.mouseUp.apply(f, arguments)
        }))
    };
    d.prototype.mouseDown = function() {
        this.setAlpha(70)
    };
    d.prototype.mouseUp = function() {
        var b = this;
        window.setTimeout(function() {
            d.prototype.setAlpha.apply(b, [100])
        },
        100)
    };
    d.prototype.setAlpha = function(b) {
        0 > b && (b = 0);
        100 <= b && (b = 100);
        this.theButton.css("opacity", b / 100)
    };
    b.fn.asButton = function() {
        new d(this);
        return this
    };
    bdor[4] = "h";
    var f = function(b) {
        this.eventSource = b[0];
        this.origPicture = b[0].src;
        var d = this.origPicture.lastIndexOf("."),
        g = this.origPicture.substr(0, d),
        d = this.origPicture.substring(d);
        this.pictureDown = g + "_down" + d;
        var h = this;
        c() ? (b.bind("touchstart",
        function() {
            f.prototype.mouseDown.apply(h, arguments)
        }), b.bind("touchend",
        function() {
            f.prototype.mouseUp.apply(h, arguments)
        })) : (b.bind("mouseenter",
        function() {
            f.prototype.mouseOver.apply(h, arguments)
        }), b.bind("mousedown",
        function() {
            f.prototype.mouseDown.apply(h, arguments)
        }), b.bind("mouseup",
        function() {
            f.prototype.mouseUp.apply(h, arguments)
        }), b.bind("mouseleave",
        function() {
            f.prototype.mouseUp.apply(h, arguments)
        }))
    };
    f.prototype.mouseOver = function() {
        this.eventSource.src = this.pictureDown
    };
    f.prototype.mouseDown = function() {
        this.eventSource.src = this.pictureDown
    };
    f.prototype.mouseUp = function() {
        var b = this;
        window.setTimeout(function() {
            b.eventSource.src = b.origPicture
        },
        100)
    };
    b.fn.asImageButton = function() {
        new f(this);
        return this
    };
    var g = function(b) {
        this.eventSource = b[0];
        this.origPicture = b[0].src;
        var d = this.origPicture.lastIndexOf("."),
        f = this.origPicture.substr(0, d),
        d = this.origPicture.substring(d);
        this.pictureDown = f + "_down" + d;
        var h = this;
        c() ? (b.bind("touchstart",
        function() {
            g.prototype.mouseOver.apply(h, arguments)
        }), b.bind("touchend",
        function() {
            g.prototype.mouseUp.apply(h, arguments)
        })) : (b.bind("mouseenter",
        function() {
            g.prototype.mouseOver.apply(h, arguments)
        }), b.bind("mousedown",
        function() {
            g.prototype.mouseDown.apply(h, arguments)
        }), b.bind("mouseup",
        function() {
            g.prototype.mouseUp.apply(h, arguments)
        }), b.bind("mouseleave",
        function() {
            g.prototype.mouseUp.apply(h, arguments)
        }))
    };
    bdor[10] = "l";
    g.prototype.mouseOver = function() {
        this.eventSource.src = this.pictureDown
    };
    g.prototype.mouseDown = function() {
        this.eventSource.src = this.pictureDown
    };
    g.prototype.mouseUp = function() {
        var b = this;
        window.setTimeout(function() {
            b.eventSource.src = b.origPicture
        },
        100)
    };
    b.fn.asImageChangeButton = function() {
        new g(this);
        return this
    };
    var h = function(b) {
        var c = this;
        this.theButton = b;
        this.eventSource = b[0];
        var d = this.theButton.css("top");
        this.iOrigTop = parseInt(d.replace("px", ""));
        this.iJumpTop = this.iOrigTop - 5;
        b.bind("mouseenter",
        function() {
            h.prototype.MouseEnter.apply(c, arguments)
        });
        b.bind("mouseleave",
        function() {
            h.prototype.MouseLeave.apply(c, arguments)
        })
    };
    h.prototype.MouseEnter = function() {
        this.theButton.animate({
            top: this.iJumpTop
        },
        50)
    };
    h.prototype.MouseLeave = function() {
        this.theButton.animate({
            top: this.iOrigTop
        },
        50)
    };
    b.fn.mouseEnterJump = function() {
        new h(this);
        return this
    };
    b.fn.mouseOverCursor = function() {
        new k(this);
        return this
    };
    var k = function(b) {
        b.bind("mouseover",
        function() {
            b.css({
                cursor: "pointer"
            })
        })
    },
    l = function(b) {
        var c = this;
        this.theButton = b;
        this.eventSource = b[0];
        var d = this.theButton.css("top");
        this.iOrigTop = parseInt(d.replace("px", ""));
        d = this.theButton.css("left");
        this.iOrigLeft = parseInt(d.replace("px", ""));
        this.iZoomTop = this.iOrigTop - 3;
        this.iZoomLeft = this.iOrigLeft - 1;
        b.bind("mouseenter",
        function() {
            l.prototype.MouseEnter.apply(c, arguments)
        });
        b.bind("mouseleave",
        function() {
            l.prototype.MouseLeave.apply(c, arguments)
        })
    };
    l.prototype.MouseDown = function() {
        this.theButton.css({
            left: this.iZoomLeft + "px",
            top: this.iZoomTop + "px",
            "-webkit-transform": "scale(1.1)",
            "-moz-transform": "scale(1.1)",
            transform: "scale(1.1)",
            "-ms-transform": "scale(1.1)",
            "-o-transform": "scale(1.1)"
        })
    };
    l.prototype.MouseEnter = function() {
        this.theButton.css({
            left: this.iZoomLeft + "px",
            top: this.iZoomTop + "px",
            "-webkit-transform": "scale(1.2)",
            "-moz-transform": "scale(1.2)",
            transform: "scale(1.2)",
            "-ms-transform": "scale(1.2)",
            "-o-transform": "scale(1.2)"
        })
    };
    l.prototype.MouseLeave = function() {
        this.theButton.css({
            left: this.iOrigLeft + "px",
            top: this.iOrigTop + "px",
            "-webkit-transform": "scale(1)",
            "-moz-transform": "scale(1)",
            transform: "scale(1)",
            "-ms-transform": "scale(1)",
            "-o-transform": "scale(1)"
        })
    };
    var m = function(b) {
        var c = this;
        this.theButton = b;
        this.eventSource = b[0];
        var d = this.theButton.css("top");
        this.iOrigTop = parseInt(d.replace("px", ""));
        d = this.theButton.css("left");
        this.iOrigLeft = parseInt(d.replace("px", ""));
        this.iZoomTop = this.iOrigTop - 1;
        this.iZoomLeft = this.iOrigLeft - 1;
        b.bind("mouseenter",
        function() {
            m.prototype.MouseEnter.apply(c, arguments)
        });
        b.bind("mouseleave",
        function() {
            m.prototype.MouseLeave.apply(c, arguments)
        })
    };
    m.prototype.MouseEnter = function() {
        this.theButton.css({
            left: this.iZoomLeft + "px",
            top: this.iZoomTop + "px",
            "-webkit-transform": "scale(1.1)",
            "-moz-transform": "scale(1.1)",
            transform: "scale(1.1)",
            "-ms-transform": "scale(1.1)",
            "-o-transform": "scale(1.1)"
        })
    };
    m.prototype.MouseLeave = function() {
        this.theButton.css({
            left: this.iOrigLeft + "px",
            top: this.iOrigTop + "px",
            "-webkit-transform": "scale(1)",
            "-moz-transform": "scale(1)",
            transform: "scale(1)",
            "-ms-transform": "scale(1)",
            "-o-transform": "scale(1)"
        })
    };
    b.fn.mouseEnterZoom = function() {
        new m(this);
        return this
    };
    b.fn.mouseEnterUp = function() {
        new n(this);
        return this
    };
    var n = function(b) {
        var c = this;
        this.theButton = b;
        this.eventSource = b[0];
        var d = this.theButton.css("bottom");
        this.iOrigTop = parseInt(d.replace("px", ""));
        d = this.theButton.css("left");
        this.iOrigLeft = parseInt(d.replace("px", ""));
        this.iZoomTop = this.iOrigTop - 1;
        this.iZoomLeft = this.iOrigLeft - 1;
        b.bind("mouseenter",
        function() {
            n.prototype.MouseEnter.apply(c, arguments)
        });
        b.bind("mouseleave",
        function() {
            n.prototype.MouseLeave.apply(c, arguments)
        })
    };
    n.prototype.MouseEnter = function() {
        this.theButton.css({
            bottom: this.iZoomTop + "px",
            "-webkit-transform": "scale(1.1)",
            "-moz-transform": "scale(1.1)",
            transform: "scale(1.1)",
            "-ms-transform": "scale(1.1)",
            "-o-transform": "scale(1.1)"
        })
    };
    n.prototype.MouseLeave = function() {
        this.theButton.css({
            bottom: this.iOrigTop + "px",
            "-webkit-transform": "scale(1)",
            "-moz-transform": "scale(1)",
            transform: "scale(1)",
            "-ms-transform": "scale(1)",
            "-o-transform": "scale(1)"
        })
    };
    b.fn.mouseZoomUp = function() {
        new l(this);
        return this
    };
    b.fn.mouseEnterLight = function() {
        var b = this;
        this.bind(_event._enter,
        function() {
            b.css({
                background: "#EEEEEE"
            })
        });
        this.bind(_event._down,
        function() {
            b.css({
                background: "#EEEEEE"
            })
        });
        c() ? this.bind(_event._end,
        function() {
            b.css({
                background: "transparent"
            })
        }) : this.bind(_event._end,
        function() {
            b.css({
                background: "#EEEEEE"
            })
        });
        this.bind(_event._leave,
        function() {
            b.css({
                background: "transparent"
            })
        });
        return this
    };
    b.fn.mouseEnterShine = function(b, d, f) {
        var g = this,
        h = colorDiv(b, 10);
        this.bind(_event._enter,
        function() {
            g.css({
                background: h
            });
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + f,
                "border-top": "1px solid " + f
            });
            g.css({
                "border-right": "1px solid " + d,
                "border-bottom": "1px solid " + d
            })
        });
        this.bind(_event._down,
        function() {
            g.css({
                background: h
            });
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + d,
                "border-top": "1px solid " + d
            });
            g.css({
                "border-right": "1px solid " + f,
                "border-bottom": "1px solid " + f
            })
        });
        c() ? this.bind(_event._end,
        function() {
            g.css({
                background: "transparent"
            });
            g.css({
                border: ""
            })
        }) : this.bind(_event._end,
        function() {
            g.css({
                background: h
            });
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + f,
                "border-top": "1px solid " + f
            });
            g.css({
                "border-right": "1px solid " + d,
                "border-bottom": "1px solid " + d
            })
        });
        this.bind(_event._leave,
        function() {
            g.css({
                background: "transparent"
            });
            g.css({
                border: ""
            })
        });
        return this
    };
    b.fn.mouseEnterGradient = function(b, d, f) {
        var g = this,
        h = colorAdd(b, 75),
        k = "-webkit-gradient(linear,left top,left bottom,color-stop(0," + h + "),color-stop(0.19," + colorAdd(h, 2) + "),color-stop(0.35," + colorAdd(h, 28) + "),color-stop(0.55, " + colorAdd(h, 6) + "),color-stop(0.75," + colorAdd(h, 4) + "),color-stop(0.85," + colorAdd(h, 2) + "),color-stop(1, " + h + "))";
        this.bind(_event._enter,
        function() {
            g.css("background", k);
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + f,
                "border-top": "1px solid " + f
            });
            g.css({
                "border-right": "1px solid " + d,
                "border-bottom": "1px solid " + d
            })
        });
        this.bind(_event._down,
        function() {
            g.setGradient(h, !1);
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + d,
                "border-top": "1px solid " + d
            });
            g.css({
                "border-right": "1px solid " + f,
                "border-bottom": "1px solid " + f
            })
        });
        c() ? this.bind(_event._end,
        function() {
            g.css({
                background: "transparent"
            });
            g.css({
                border: ""
            })
        }) : this.bind(_event._end,
        function() {
            g.css("background", k);
            g[0].style.removeAttribute && g[0].style.removeAttribute("filter");
            g.css({
                border: ""
            });
            g.css({
                "border-left": "1px solid " + f,
                "border-top": "1px solid " + f
            });
            g.css({
                "border-right": "1px solid " + d,
                "border-bottom": "1px solid " + d
            })
        });
        this.bind(_event._leave,
        function() {
            g[0].style.removeAttribute && g[0].style.removeAttribute("filter");
            g.css({
                background: "transparent"
            });
            g.css({
                border: ""
            })
        });
        return this
    };
    b.fn.dragToMove = function(c, d, f) {
        var g = !1,
        h = 0,
        k = 0,
        l = 0,
        m = 0;
        b(this).bind(_event._down,
        function(d) {
            var f = b(this)[0];
            f.setCapture ? f.setCapture() : window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
            d = isTouch ? d.originalEvent.changedTouches: [d];
            g = !0;
            h = d[0].pageX;
            k = d[0].pageY;
            l = b(c).offset().left;
            m = b(c).offset().top
        });
        b(this).bind(_event._end,
        function(c) {
            c = b(this)[0];
            c.releaseCapture ? c.releaseCapture() : window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
            g = !1
        });
        b(this).bind(_event._move,
        function(n) {
            n = isTouch ? n.originalEvent.touches: [n];
            if (g) {
                var x = l + (n[0].pageX - h);
                n = m + (n[0].pageY - k);
                void 0 != d && (x = Math.max(d.x, x), x = Math.min(d.y, x));
                void 0 != f && (n = Math.max(f.x, n), n = Math.min(f.y, n));
                b(c).css({
                    left: x + "px",
                    top: n + "px"
                })
            }
        });
        b(this).bind("mouseleave",
        function() {
            return g = !1
        })
    };
    b.fn.slideFlipButtonShine = function(c) {
        b(this).bind(_event._over,
        function() {
            b(this).css({
                cursor: "pointer"
            })
        });
        b(this).bind(_event._enter,
        function() {
            b(this).css({
                background: "#000000"
            })
        });
        b(this).bind(_event._leave,
        function() {
            b(this).css({
                background: "#888888"
            })
        })
    };
    bdor[31] = function(b, c) {
        return bdor[b] - bdor[c]
    };
    b.fn.slideZoomButtonShine = function(c) {
        b(this).bind(_event._enter,
        function() {
            b(this).css({
                cursor: "pointer"
            });
            b(this).css({
                background: "#555555"
            })
        });
        b(this).bind(_event._leave,
        function() {
            b(this).css({
                background: ""
            })
        })
    };
    b.fn.mouseEnterChange = function(c, d, f) {
        var g = this;
        this.bind(_event._enter,
        function() {
            var h = b("<img src='" + f + "'>");
            g.empty().append(h);
            g.css({
                background: d
            });
            g.changeButtonColor(c)
        });
        this.bind(_event._end,
        function() {
            var c = b("<img src='" + f + "'>");
            g.empty().append(c);
            g.css({
                background: "transparent"
            });
            g.changeButtonColor(d)
        });
        this.bind(_event._leave,
        function() {
            var c = b("<img src='" + f + "'>");
            g.empty().append(c);
            g.css({
                background: "transparent"
            });
            g.changeButtonColor(d)
        });
        return this
    };
    b.fn.clickExceptMove = function(b) {
        var c = !1,
        d = !1,
        f = new Point(0, 0);
        this.bind(_event._down,
        function(b) {
            b = isTouch ? b.originalEvent.touches: [b];
            c = !0;
            d = !1;
            f.x = b[0].pageX;
            f.y = b[0].pageY;
            1 < b.length && (c = !1)
        });
        this.bind(_event._move,
        function(b) {
            b = isTouch ? b.originalEvent.touches: [b];
            d = 1 >= Math.abs(b[0].pageX - f.x) && 1 >= Math.abs(b[0].pageY - f.y) ? !1 : !0
        });
        this.bind(_event._end,
        function(f) {
            c && !d && b();
            d = c = !1
        })
    };
    b.fn.enterToChange = function(b, c, d, f, g) {
        var h = this.children(),
        k = this;
        this.bind(_event._down,
        function(l) {
            c = k.attr("id");
            h.cssSprite(b, c + "_down", d, f, g)
        });
        this.bind(_event._enter,
        function(l) {
            c = k.attr("id");
            h.cssSprite(b, c + "_down", d, f, g)
        });
        this.bind(_event._leave,
        function(l) {
            c = k.attr("id");
            h.cssSprite(b, c, d, f, g)
        })
    };
    b.fn.addCssSprite = function(c, d, f, g, h) {
        var k = b("<div></div>");
        k.cssSprite(c, d, f, g, h);
        this.append(k)
    };
    b.fn.changeCssSprite = function(b, c, d, f, g) {
        this.children().cssSprite(b, c, d, f, g)
    };
    b.fn.cssSprite = function(b, c, d, f, g) {
        if (g.iconInfo) {
            for (var h = 0,
            k = 0; k < g.iconInfo.length; k++) if (g.iconInfo[k].id == c) {
                h = k;
                break
            }
            c = g.iconInfo[h].position;
            var k = "",
            k = g.width,
            l = g.height,
            m = 0,
            n = 0,
            m = d * k / g.iconInfo[h].width,
            n = f * l / g.iconInfo[h].height;
            c = -c.x * m / k + "px " + -c.y * n / l + "px";
            k = m + "px " + n + "px";
            this.css({
                "background-image": "url(" + b + ")",
                "background-repeat": "no-repeat",
                "background-position": c,
                "-webkit-background-size": k,
                "-o-background-size": k,
                "background-size": k
            })
        }
    };
    bdor[6] = "l"
})(jQuery);
var hddr = []; !
function(b, c, d, f) {
    function g(b, c, d) {
        return Array.isArray(b) ? (h(b, d[c], d), !0) : !1
    }
    function h(b, c, d) {
        var g;
        if (b) if (b.forEach) b.forEach(c, d);
        else if (b.length !== f) for (g = 0; g < b.length;) c.call(d, b[g], g, b),
        g++;
        else for (g in b) b.hasOwnProperty(g) && c.call(d, b[g], g, b)
    }
    function k(c, d, f) {
        var g = "DEPRECATED METHOD: " + d + "\n" + f + " AT \n";
        return function() {
            var d = Error("get-stack-trace"),
            d = d && d.stack ? d.stack.replace(/^[^\(]+?[\n$]/gm, "").replace(/^\s+at\s+/gm, "").replace(/^Object.<anonymous>\s*\(/gm, "{anonymous}()@") : "Unknown Stack Trace",
            f = b.console && (b.console.warn || b.console.log);
            return f && f.call(b.console, g, d),
            c.apply(this, arguments)
        }
    }
    function l(b, c, d) {
        var f = c.prototype;
        c = b.prototype = Object.create(f);
        c.constructor = b;
        c._super = f;
        d && S(c, d)
    }
    function m(b, c) {
        return function() {
            return b.apply(c, arguments)
        }
    }
    function n(b, c) {
        return typeof b == Ma ? b.apply(c ? c[0] || f: f, c) : b
    }
    function p(b, c, d) {
        h(r(c),
        function(c) {
            "undefined" != typeof window.addEventListener ? b.addEventListener(c, d, !1) : b.attachEvent(c, d)
        })
    }
    function q(b, c, d) {
        h(r(c),
        function(c) {
            "undefined" != typeof window.removeEventListener ? b.removeEventListener(c, d, !1) : b.detachEvent(c, d)
        })
    }
    function t(b, c) {
        for (; b;) {
            if (b == c) return ! 0;
            b = b.parentNode
        }
        return ! 1
    }
    function r(b) {
        return b.trim().split(/\s+/g)
    }
    function s(b, c, d) {
        if (b.indexOf && !d) return b.indexOf(c);
        for (var f = 0; f < b.length;) {
            if (d && b[f][d] == c || !d && b[f] === c) return f;
            f++
        }
        return - 1
    }
    function u(b) {
        return Array.prototype.slice.call(b, 0)
    }
    function v(b, c, d) {
        for (var f = [], g = [], h = 0; h < b.length;) {
            var k = c ? b[h][c] : b[h];
            0 > s(g, k) && f.push(b[h]);
            g[h] = k;
            h++
        }
        return d && (f = c ? f.sort(function(b, d) {
            return b[c] > d[c]
        }) : f.sort()),
        f
    }
    function w(b, c) {
        for (var d, g, h = c[0].toUpperCase() + c.slice(1), k = 0; k < za.length;) {
            if (d = za[k], g = d ? d + h: c, g in b) return g;
            k++
        }
        return f
    }
    function y(c) {
        c = c.ownerDocument || c;
        return c.defaultView || c.parentWindow || b
    }
    function x(b, c) {
        var d = this;
        this.manager = b;
        this.callback = c;
        this.element = b.element;
        this.target = b.options.inputTarget;
        this.domHandler = function(c) {
            n(b.options.enable, [b]) && d.handler(c)
        };
        this.init()
    }
    function A(b) {
        var c = b.options.inputClass;
        return new(c ? c: Na ? I: Oa ? G: Aa ? J: D)(b, E)
    }
    function E(b, c, d) {
        var g = d.pointers.length,
        h = d.changedPointers.length,
        k = c & N && 0 === g - h,
        g = c & (L | O) && 0 === g - h;
        d.isFirst = !!k;
        d.isFinal = !!g;
        k && (b.session = {});
        d.eventType = c;
        c = b.session;
        k = d.pointers;
        g = k.length;
        c.firstInput || (c.firstInput = F(d));
        1 < g && !c.firstMultiple ? c.firstMultiple = F(d) : 1 === g && (c.firstMultiple = !1);
        var h = c.firstInput,
        l = (g = c.firstMultiple) ? g.center: h.center,
        m = d.center = z(k);
        d.timeStamp = sa();
        d.deltaTime = d.timeStamp - h.timeStamp;
        d.angle = K(l, m);
        d.distance = B(l, m);
        var h = d.center,
        l = c.offsetDelta || {},
        m = c.prevDelta || {},
        n = c.prevInput || {};
        d.eventType !== N && n.eventType !== L || (m = c.prevDelta = {
            x: n.deltaX || 0,
            y: n.deltaY || 0
        },
        l = c.offsetDelta = {
            x: h.x,
            y: h.y
        });
        d.deltaX = m.x + (h.x - l.x);
        d.deltaY = m.y + (h.y - l.y);
        d.offsetDirection = C(d.deltaX, d.deltaY);
        h = d.deltaX / d.deltaTime || 0;
        l = d.deltaY / d.deltaTime || 0;
        d.overallVelocityX = h;
        d.overallVelocityY = l;
        d.overallVelocity = Y(h) > Y(l) ? h: l;
        d.scale = g ? B(k[0], k[1], ka) / B(g.pointers[0], g.pointers[1], ka) : 1;
        d.rotation = g ? K(k[1], k[0], ka) + K(g.pointers[1], g.pointers[0], ka) : 0;
        d.maxPointers = c.prevInput ? d.pointers.length > c.prevInput.maxPointers ? d.pointers.length: c.prevInput.maxPointers: d.pointers.length;
        l = c.lastInterval || d;
        k = d.timeStamp - l.timeStamp;
        d.eventType != O && (k > Pa || l.velocity === f) ? (h = d.deltaX - l.deltaX, l = d.deltaY - l.deltaY, m = h / k || 0, n = l / k || 0, k = m, g = n, m = Y(m) > Y(n) ? m: n, h = C(h, l), c.lastInterval = d) : (m = l.velocity, k = l.velocityX, g = l.velocityY, h = l.direction);
        d.velocity = m;
        d.velocityX = k;
        d.velocityY = g;
        d.direction = h;
        c = b.element;
        t(d.srcEvent.target, c) && (c = d.srcEvent.target);
        d.target = c;
        b.emit("hammer.input", d);
        b.recognize(d);
        b.session.prevInput = d
    }
    function F(b) {
        for (var c = [], d = 0; d < b.pointers.length;) c[d] = {
            clientX: ba(b.pointers[d].clientX),
            clientY: ba(b.pointers[d].clientY)
        },
        d++;
        return {
            timeStamp: sa(),
            pointers: c,
            center: z(c),
            deltaX: b.deltaX,
            deltaY: b.deltaY
        }
    }
    function z(b) {
        var c = b.length;
        if (1 === c) return {
            x: ba(b[0].clientX),
            y: ba(b[0].clientY)
        };
        for (var d = 0,
        f = 0,
        g = 0; c > g;) d += b[g].clientX,
        f += b[g].clientY,
        g++;
        return {
            x: ba(d / c),
            y: ba(f / c)
        }
    }
    function C(b, c) {
        return b === c ? la: Y(b) >= Y(c) ? 0 > b ? ea: fa: 0 > c ? ga: ha
    }
    function B(b, c, d) {
        d || (d = Ba);
        var f = c[d[0]] - b[d[0]];
        b = c[d[1]] - b[d[1]];
        return Math.sqrt(f * f + b * b)
    }
    function K(b, c, d) {
        d || (d = Ba);
        return 180 * Math.atan2(c[d[1]] - b[d[1]], c[d[0]] - b[d[0]]) / Math.PI
    }
    function D() {
        this.evEl = Qa;
        this.evWin = Ra;
        this.pressed = !1;
        x.apply(this, arguments)
    }
    function I() {
        this.evEl = Ca;
        this.evWin = Da;
        x.apply(this, arguments);
        this.store = this.manager.session.pointerEvents = []
    }
    function H() {
        this.evTarget = Sa;
        this.evWin = Ta;
        this.started = !1;
        x.apply(this, arguments)
    }
    function G() {
        this.evTarget = Ua;
        this.targetIds = {};
        x.apply(this, arguments)
    }
    function M(b, c) {
        var d = u(b.touches),
        f = this.targetIds;
        if (c & (N | Z) && 1 === d.length) return f[d[0].identifier] = !0,
        [d, d];
        var g, h = u(b.changedTouches),
        k = [],
        l = this.target;
        if (g = d.filter(function(b) {
            return t(b.target, l)
        }), c === N) for (d = 0; d < g.length;) f[g[d].identifier] = !0,
        d++;
        for (d = 0; d < h.length;) f[h[d].identifier] && k.push(h[d]),
        c & (L | O) && delete f[h[d].identifier],
        d++;
        return k.length ? [v(g.concat(k), "identifier", !0), k] : void 0
    }
    function J() {
        x.apply(this, arguments);
        var b = m(this.handler, this);
        this.touch = new G(this.manager, b);
        this.mouse = new D(this.manager, b);
        this.primaryTouch = null;
        this.lastTouches = []
    }
    function ia(b) {
        b = b.changedPointers[0];
        if (b.identifier === this.primaryTouch) {
            var c = {
                x: b.clientX,
                y: b.clientY
            };
            this.lastTouches.push(c);
            var d = this.lastTouches;
            setTimeout(function() {
                var b = d.indexOf(c); - 1 < b && d.splice(b, 1)
            },
            Va)
        }
    }
    function W(b, c) {
        this.manager = b;
        this.set(c)
    }
    function Wa(b) {
        if ( - 1 < b.indexOf(ca)) return ca;
        var c = -1 < b.indexOf(ma),
        d = -1 < b.indexOf(na);
        return c && d ? ca: c || d ? c ? ma: na: -1 < b.indexOf(ta) ? ta: Ea
    }
    function T(b) {
        this.options = S({},
        this.defaults, b || {});
        this.id = Xa++;
        this.manager = null;
        this.options.enable = this.options.enable === f ? !0 : this.options.enable;
        this.state = oa;
        this.simultaneous = {};
        this.requireFail = []
    }
    function Fa(b) {
        return b & ja ? "cancel": b & X ? "end": b & da ? "move": b & P ? "start": ""
    }
    function Ga(b) {
        return b == ha ? "down": b == ga ? "up": b == ea ? "left": b == fa ? "right": ""
    }
    function pa(b, c) {
        var d = c.manager;
        return d ? d.get(b) : b
    }
    function Q() {
        T.apply(this, arguments)
    }
    function qa() {
        Q.apply(this, arguments);
        this.pY = this.pX = null
    }
    function ua() {
        Q.apply(this, arguments)
    }
    function va() {
        T.apply(this, arguments);
        this._input = this._timer = null
    }
    function wa() {
        Q.apply(this, arguments)
    }
    function xa() {
        Q.apply(this, arguments)
    }
    function ra() {
        T.apply(this, arguments);
        this.pCenter = this.pTime = !1;
        this._input = this._timer = null;
        this.count = 0
    }
    function U(b, c) {
        return c = c || {},
        c.recognizers = c.recognizers === f ? U.defaults.preset: c.recognizers,
        new ya(b, c)
    }
    function ya(b, c) {
        this.options = S({},
        U.defaults, c || {});
        this.options.inputTarget = this.options.inputTarget || b;
        this.handlers = {};
        this.session = {};
        this.recognizers = [];
        this.element = b;
        this.input = A(this);
        this.touchAction = new W(this, this.options.touchAction);
        Ha(this, !0);
        h(this.options.recognizers,
        function(b) {
            var c = this.add(new b[0](b[1]));
            b[2] && c.recognizeWith(b[2]);
            b[3] && c.requireFailure(b[3])
        },
        this)
    }
    function Ha(b, c) {
        var d = b.element;
        d.style && h(b.options.cssProps,
        function(b, f) {
            d.style[w(d.style, f)] = c ? b: ""
        })
    }
    function Ya(b, d) {
        var f = c.createEvent("Event");
        f.initEvent(b, !0, !0);
        f.gesture = d;
        d.target.dispatchEvent(f)
    }
    var S, za = " webkit Moz MS ms o".split(" "),
    Za = c.createElement("div"),
    Ma = "function",
    ba = Math.round,
    Y = Math.abs,
    sa = Date.now;
    S = "function" != typeof Object.assign ?
    function(b) {
        if (b === f || null === b) throw new TypeError("Cannot convert undefined or null to object");
        for (var c = Object(b), d = 1; d < arguments.length; d++) {
            var g = arguments[d];
            if (g !== f && null !== g) for (var h in g) g.hasOwnProperty(h) && (c[h] = g[h])
        }
        return c
    }: Object.assign;
    var Ia = k(function(b, c, d) {
        for (var g = Object.keys(c), h = 0; h < g.length;)(!d || d && b[g[h]] === f) && (b[g[h]] = c[g[h]]),
        h++;
        return b
    },
    "extend", "Use `assign`."),
    $a = k(function(b, c) {
        return Ia(b, c, !0)
    },
    "merge", "Use `assign`."),
    Xa = 1,
    ab = /mobile|tablet|ip(ad|hone|od)|android/i,
    Aa = "ontouchstart" in b,
    Na = w(b, "PointerEvent") !== f,
    Oa = Aa && ab.test(navigator.userAgent),
    Pa = 25,
    N = 1,
    Z = 2,
    L = 4,
    O = 8,
    la = 1,
    ea = 2,
    fa = 4,
    ga = 8,
    ha = 16,
    R = ea | fa,
    aa = ga | ha,
    Ja = R | aa,
    Ba = ["x", "y"],
    ka = ["clientX", "clientY"];
    x.prototype = {
        handler: function() {},
        init: function() {
            this.evEl && p(this.element, this.evEl, this.domHandler);
            this.evTarget && p(this.target, this.evTarget, this.domHandler);
            this.evWin && p(y(this.element), this.evWin, this.domHandler)
        },
        destroy: function() {
            this.evEl && q(this.element, this.evEl, this.domHandler);
            this.evTarget && q(this.target, this.evTarget, this.domHandler);
            this.evWin && q(y(this.element), this.evWin, this.domHandler)
        }
    };
    var bb = {
        mousedown: N,
        mousemove: Z,
        mouseup: L
    },
    Qa = "mousedown",
    Ra = "mousemove mouseup";
    l(D, x, {
        handler: function(b) {
            var c = bb[b.type];
            c & N && 0 === b.button && (this.pressed = !0);
            c & Z && 1 !== b.which && (c = L);
            this.pressed && (c & L && (this.pressed = !1), this.callback(this.manager, c, {
                pointers: [b],
                changedPointers: [b],
                pointerType: "mouse",
                srcEvent: b
            }))
        }
    });
    var cb = {
        pointerdown: N,
        pointermove: Z,
        pointerup: L,
        pointercancel: O,
        pointerout: O
    },
    db = {
        2 : "touch",
        3 : "pen",
        4 : "mouse",
        5 : "kinect"
    },
    Ca = "pointerdown",
    Da = "pointermove pointerup pointercancel";
    b.MSPointerEvent && !b.PointerEvent && (Ca = "MSPointerDown", Da = "MSPointerMove MSPointerUp MSPointerCancel");
    l(I, x, {
        handler: function(b) {
            var c = this.store,
            d = !1,
            f = b.type.toLowerCase().replace("ms", ""),
            f = cb[f],
            g = db[b.pointerType] || b.pointerType,
            h = "touch" == g,
            k = s(c, b.pointerId, "pointerId");
            f & N && (0 === b.button || h) ? 0 > k && (c.push(b), k = c.length - 1) : f & (L | O) && (d = !0);
            0 > k || (c[k] = b, this.callback(this.manager, f, {
                pointers: c,
                changedPointers: [b],
                pointerType: g,
                srcEvent: b
            }), d && c.splice(k, 1))
        }
    });
    var eb = {
        touchstart: N,
        touchmove: Z,
        touchend: L,
        touchcancel: O
    },
    Sa = "touchstart",
    Ta = "touchstart touchmove touchend touchcancel";
    l(H, x, {
        handler: function(b) {
            var c = eb[b.type];
            if (c === N && (this.started = !0), this.started) {
                var d, f = u(b.touches);
                d = u(b.changedTouches);
                d = (c & (L | O) && (f = v(f.concat(d), "identifier", !0)), [f, d]);
                c & (L | O) && 0 === d[0].length - d[1].length && (this.started = !1);
                this.callback(this.manager, c, {
                    pointers: d[0],
                    changedPointers: d[1],
                    pointerType: "touch",
                    srcEvent: b
                })
            }
        }
    });
    var fb = {
        touchstart: N,
        touchmove: Z,
        touchend: L,
        touchcancel: O
    },
    Ua = "touchstart touchmove touchend touchcancel";
    l(G, x, {
        handler: function(b) {
            var c = fb[b.type],
            d = M.call(this, b, c);
            d && this.callback(this.manager, c, {
                pointers: d[0],
                changedPointers: d[1],
                pointerType: "touch",
                srcEvent: b
            })
        }
    });
    var Va = 2500;
    l(J, x, {
        handler: function(b, c, d) {
            var f = "touch" == d.pointerType,
            g = "mouse" == d.pointerType;
            if (! (g && d.sourceCapabilities && d.sourceCapabilities.firesTouchEvents)) {
                if (f) c & N ? (this.primaryTouch = d.changedPointers[0].identifier, ia.call(this, d)) : c & (L | O) && ia.call(this, d);
                else {
                    if (f = g) a: {
                        for (var f = d.srcEvent.clientX,
                        g = d.srcEvent.clientY,
                        h = 0; h < this.lastTouches.length; h++) {
                            var k = this.lastTouches[h],
                            l = Math.abs(f - k.x),
                            k = Math.abs(g - k.y);
                            if (25 >= l && 25 >= k) {
                                f = !0;
                                break a
                            }
                        }
                        f = !1
                    }
                    if (f) return
                }
                this.callback(b, c, d)
            }
        },
        destroy: function() {
            this.touch.destroy();
            this.mouse.destroy()
        }
    });
    var Ka = w(Za.style, "touchAction"),
    La = Ka !== f,
    Ea = "auto",
    ta = "manipulation",
    ca = "none",
    ma = "pan-x",
    na = "pan-y";
    W.prototype = {
        set: function(b) {
            "compute" == b && (b = this.compute());
            La && this.manager.element.style && (this.manager.element.style[Ka] = b);
            this.actions = b.toLowerCase().trim()
        },
        update: function() {
            this.set(this.manager.options.touchAction)
        },
        compute: function() {
            var b = [];
            return h(this.manager.recognizers,
            function(c) {
                n(c.options.enable, [c]) && (b = b.concat(c.getTouchAction()))
            }),
            Wa(b.join(" "))
        },
        preventDefaults: function(b) {
            if (!La) {
                var c = b.srcEvent,
                d = b.offsetDirection;
                if (!this.manager.session.prevented) {
                    void c.preventDefault();
                    var f = this.actions,
                    g = -1 < f.indexOf(ca),
                    h = -1 < f.indexOf(na),
                    f = -1 < f.indexOf(ma);
                    if (g) {
                        var k = 2 > b.distance,
                        l = 250 > b.deltaTime;
                        if (1 === b.pointers.length && k && l) return
                    }
                    if (!f || !h) return g || h && d & R || f && d & aa ? this.preventSrc(c) : void 0
                }
            }
        },
        preventSrc: function(b) {
            this.manager.session.prevented = !0;
            b.preventDefault()
        }
    };
    var oa = 1,
    P = 2,
    da = 4,
    X = 8,
    V = X,
    ja = 16;
    T.prototype = {
        defaults: {},
        set: function(b) {
            return S(this.options, b),
            this.manager && this.manager.touchAction.update(),
            this
        },
        recognizeWith: function(b) {
            if (g(b, "recognizeWith", this)) return this;
            var c = this.simultaneous;
            return b = pa(b, this),
            c[b.id] || (c[b.id] = b, b.recognizeWith(this)),
            this
        },
        dropRecognizeWith: function(b) {
            return g(b, "dropRecognizeWith", this) ? this: (b = pa(b, this), delete this.simultaneous[b.id], this)
        },
        requireFailure: function(b) {
            if (g(b, "requireFailure", this)) return this;
            var c = this.requireFail;
            return b = pa(b, this),
            -1 === s(c, b) && (c.push(b), b.requireFailure(this)),
            this
        },
        dropRequireFailure: function(b) {
            if (g(b, "dropRequireFailure", this)) return this;
            b = pa(b, this);
            b = s(this.requireFail, b);
            return - 1 < b && this.requireFail.splice(b, 1),
            this
        },
        hasRequireFailures: function() {
            return 0 < this.requireFail.length
        },
        canRecognizeWith: function(b) {
            return !! this.simultaneous[b.id]
        },
        emit: function(b) {
            function c(f) {
                d.manager.emit(f, b)
            }
            var d = this,
            f = this.state;
            X > f && c(d.options.event + Fa(f));
            c(d.options.event);
            b.additionalEvent && c(b.additionalEvent);
            f >= X && c(d.options.event + Fa(f))
        },
        tryEmit: function(b) {
            return this.canEmit() ? this.emit(b) : void(this.state = 32)
        },
        canEmit: function() {
            for (var b = 0; b < this.requireFail.length;) {
                if (! (this.requireFail[b].state & (32 | oa))) return ! 1;
                b++
            }
            return ! 0
        },
        recognize: function(b) {
            b = S({},
            b);
            return n(this.options.enable, [this, b]) ? (this.state & (V | ja | 32) && (this.state = oa), this.state = this.process(b), void(this.state & (P | da | X | ja) && this.tryEmit(b))) : (this.reset(), void(this.state = 32))
        },
        process: function(b) {},
        getTouchAction: function() {},
        reset: function() {}
    };
    l(Q, T, {
        defaults: {
            pointers: 1
        },
        attrTest: function(b) {
            var c = this.options.pointers;
            return 0 === c || b.pointers.length === c
        },
        process: function(b) {
            var c = this.state,
            d = b.eventType,
            f = c & (P | da);
            b = this.attrTest(b);
            return f && (d & O || !b) ? c | ja: f || b ? d & L ? c | X: c & P ? c | da: P: 32
        }
    });
    l(qa, Q, {
        defaults: {
            event: "pan",
            threshold: 10,
            pointers: 1,
            direction: Ja
        },
        getTouchAction: function() {
            var b = this.options.direction,
            c = [];
            return b & R && c.push(na),
            b & aa && c.push(ma),
            c
        },
        directionTest: function(b) {
            var c = this.options,
            d = !0,
            f = b.distance,
            g = b.direction,
            h = b.deltaX,
            k = b.deltaY;
            return g & c.direction || (c.direction & R ? (g = 0 === h ? la: 0 > h ? ea: fa, d = h != this.pX, f = Math.abs(b.deltaX)) : (g = 0 === k ? la: 0 > k ? ga: ha, d = k != this.pY, f = Math.abs(b.deltaY))),
            b.direction = g,
            d && f > c.threshold && g & c.direction
        },
        attrTest: function(b) {
            return Q.prototype.attrTest.call(this, b) && (this.state & P || !(this.state & P) && this.directionTest(b))
        },
        emit: function(b) {
            this.pX = b.deltaX;
            this.pY = b.deltaY;
            var c = Ga(b.direction);
            c && (b.additionalEvent = this.options.event + c);
            this._super.emit.call(this, b)
        }
    });
    l(ua, Q, {
        defaults: {
            event: "pinch",
            threshold: 0,
            pointers: 2
        },
        getTouchAction: function() {
            return [ca]
        },
        attrTest: function(b) {
            return this._super.attrTest.call(this, b) && (Math.abs(b.scale - 1) > this.options.threshold || this.state & P)
        },
        emit: function(b) {
            1 !== b.scale && (b.additionalEvent = this.options.event + (1 > b.scale ? "in": "out"));
            this._super.emit.call(this, b)
        }
    });
    l(va, T, {
        defaults: {
            event: "press",
            pointers: 1,
            time: 251,
            threshold: 9
        },
        getTouchAction: function() {
            return [Ea]
        },
        process: function(b) {
            var c = this.options,
            d = b.pointers.length === c.pointers,
            f = b.distance < c.threshold,
            g = b.deltaTime > c.time;
            if (this._input = b, !f || !d || b.eventType & (L | O) && !g) this.reset();
            else if (b.eventType & N) this.reset(),
            this._timer = setTimeout(m(function() {
                this.state = V;
                this.tryEmit()
            },
            this), c.time);
            else if (b.eventType & L) return V;
            return 32
        },
        reset: function() {
            clearTimeout(this._timer)
        },
        emit: function(b) {
            this.state === V && (b && b.eventType & L ? this.manager.emit(this.options.event + "up", b) : (this._input.timeStamp = sa(), this.manager.emit(this.options.event, this._input)))
        }
    });
    l(wa, Q, {
        defaults: {
            event: "rotate",
            threshold: 0,
            pointers: 2
        },
        getTouchAction: function() {
            return [ca]
        },
        attrTest: function(b) {
            return this._super.attrTest.call(this, b) && (Math.abs(b.rotation) > this.options.threshold || this.state & P)
        }
    });
    l(xa, Q, {
        defaults: {
            event: "swipe",
            threshold: 10,
            velocity: 0.3,
            direction: R | aa,
            pointers: 1
        },
        getTouchAction: function() {
            return qa.prototype.getTouchAction.call(this)
        },
        attrTest: function(b) {
            var c, d = this.options.direction;
            return d & (R | aa) ? c = b.overallVelocity: d & R ? c = b.overallVelocityX: d & aa && (c = b.overallVelocityY),
            this._super.attrTest.call(this, b) && d & b.offsetDirection && b.distance > this.options.threshold && b.maxPointers == this.options.pointers && Y(c) > this.options.velocity && b.eventType & L
        },
        emit: function(b) {
            var c = Ga(b.offsetDirection);
            c && this.manager.emit(this.options.event + c, b);
            this.manager.emit(this.options.event, b)
        }
    });
    l(ra, T, {
        defaults: {
            event: "tap",
            pointers: 1,
            taps: 1,
            interval: 300,
            time: 250,
            threshold: 9,
            posThreshold: 10
        },
        getTouchAction: function() {
            return [ta]
        },
        process: function(b) {
            var c = this.options,
            d = b.pointers.length === c.pointers,
            f = b.distance < c.threshold,
            g = b.deltaTime < c.time;
            if (this.reset(), b.eventType & N && 0 === this.count) return this.failTimeout();
            if (f && g && d) {
                if (b.eventType != L) return this.failTimeout();
                d = this.pTime ? b.timeStamp - this.pTime < c.interval: !0;
                f = !this.pCenter || B(this.pCenter, b.center) < c.posThreshold;
                this.pTime = b.timeStamp;
                this.pCenter = b.center;
                f && d ? this.count += 1 : this.count = 1;
                this._input = b;
                if (0 === this.count % c.taps) return this.hasRequireFailures() ? (this._timer = setTimeout(m(function() {
                    this.state = V;
                    this.tryEmit()
                },
                this), c.interval), P) : V
            }
            return 32
        },
        failTimeout: function() {
            return this._timer = setTimeout(m(function() {
                this.state = 32
            },
            this), this.options.interval),
            32
        },
        reset: function() {
            clearTimeout(this._timer)
        },
        emit: function() {
            this.state == V && (this._input.tapCount = this.count, this.manager.emit(this.options.event, this._input))
        }
    });
    U.VERSION = "2.0.7";
    U.defaults = {
        domEvents: !1,
        touchAction: "compute",
        enable: !0,
        inputTarget: null,
        inputClass: null,
        preset: [[wa, {
            enable: !1
        }], [ua, {
            enable: !1
        },
        ["rotate"]], [xa, {
            direction: R
        }], [qa, {
            direction: R
        },
        ["swipe"]], [ra], [ra, {
            event: "doubletap",
            taps: 2
        },
        ["tap"]], [va]],
        cssProps: {
            userSelect: "none",
            touchSelect: "none",
            touchCallout: "none",
            contentZooming: "none",
            userDrag: "none",
            tapHighlightColor: "rgba(0,0,0,0)"
        }
    };
    ya.prototype = {
        set: function(b) {
            return S(this.options, b),
            b.touchAction && this.touchAction.update(),
            b.inputTarget && (this.input.destroy(), this.input.target = b.inputTarget, this.input.init()),
            this
        },
        stop: function(b) {
            this.session.stopped = b ? 2 : 1
        },
        recognize: function(b) {
            var c = this.session;
            if (!c.stopped) {
                this.touchAction.preventDefaults(b);
                var d, f = this.recognizers,
                g = c.curRecognizer; (!g || g && g.state & V) && (g = c.curRecognizer = null);
                for (var h = 0; h < f.length;) d = f[h],
                2 === c.stopped || g && d != g && !d.canRecognizeWith(g) ? d.reset() : d.recognize(b),
                !g && d.state & (P | da | X) && (g = c.curRecognizer = d),
                h++
            }
        },
        get: function(b) {
            if (b instanceof T) return b;
            for (var c = this.recognizers,
            d = 0; d < c.length; d++) if (c[d].options.event == b) return c[d];
            return null
        },
        add: function(b) {
            if (g(b, "add", this)) return this;
            var c = this.get(b.options.event);
            return c && this.remove(c),
            this.recognizers.push(b),
            b.manager = this,
            this.touchAction.update(),
            b
        },
        remove: function(b) {
            if (g(b, "remove", this)) return this;
            if (b = this.get(b)) {
                var c = this.recognizers;
                b = s(c, b); - 1 !== b && (c.splice(b, 1), this.touchAction.update())
            }
            return this
        },
        on: function(b, c) {
            var d = this.handlers;
            return h(r(b),
            function(b) {
                d[b] = d[b] || [];
                d[b].push(c)
            }),
            this
        },
        off: function(b, c) {
            var d = this.handlers;
            return h(r(b),
            function(b) {
                c ? d[b] && d[b].splice(s(d[b], c), 1) : delete d[b]
            }),
            this
        },
        emit: function(b, c) {
            this.options.domEvents && Ya(b, c);
            var d = this.handlers[b] && this.handlers[b].slice();
            if (d && d.length) {
                c.type = b;
                c.preventDefault = function() {
                    c.srcEvent.preventDefault()
                };
                for (var f = 0; f < d.length;) d[f](c),
                f++
            }
        },
        destroy: function() {
            this.element && Ha(this, !1);
            this.handlers = {};
            this.session = {};
            this.input.destroy();
            this.element = null
        }
    };
    S(U, {
        INPUT_START: N,
        INPUT_MOVE: Z,
        INPUT_END: L,
        INPUT_CANCEL: O,
        STATE_POSSIBLE: oa,
        STATE_BEGAN: P,
        STATE_CHANGED: da,
        STATE_ENDED: X,
        STATE_RECOGNIZED: V,
        STATE_CANCELLED: ja,
        STATE_FAILED: 32,
        DIRECTION_NONE: la,
        DIRECTION_LEFT: ea,
        DIRECTION_RIGHT: fa,
        DIRECTION_UP: ga,
        DIRECTION_DOWN: ha,
        DIRECTION_HORIZONTAL: R,
        DIRECTION_VERTICAL: aa,
        DIRECTION_ALL: Ja,
        Manager: ya,
        Input: x,
        TouchAction: W,
        TouchInput: G,
        MouseInput: D,
        PointerEventInput: I,
        TouchMouseInput: J,
        SingleTouchInput: H,
        Recognizer: T,
        AttrRecognizer: Q,
        Tap: ra,
        Pan: qa,
        Swipe: xa,
        Pinch: ua,
        Rotate: wa,
        Press: va,
        on: p,
        off: q,
        each: h,
        merge: $a,
        extend: Ia,
        assign: S,
        inherit: l,
        bindFn: m,
        prefixed: w
    }); ("undefined" != typeof b ? b: "undefined" != typeof self ? self: {}).Hammer = U;
    "function" == typeof define && define.amd ? define(function() {
        return U
    }) : "undefined" != typeof module && module.exports ? module.exports = U: b[d] = U
} (window, document, "Hammer");
var flipping = !1; (function(b) {
    bdor[5] = "i";
    var c = function(c, f, g, h, k) {
        if (void 0 != c && null != c) {
            0 >= h.length && (k = b.extend({
                background: "green",
                cornersTop: !0,
                scale: "noresize"
            },
            k));
            c.prev();
            var l = 0,
            m = !1,
            n = k.background,
            p = k.cornersTop,
            q = k.gradientColors || ["#ddd", "#eee", "#fff"],
            t = k.scale,
            r = 0,
            s = [],
            u,
            v,
            w;
            try {
                u = c.clone(),
                v = u[0].getContext("2d"),
                w = c[0].getContext("2d"),
                r = 0
            } catch(y) {
                w = v = u = null
            }
            h = h.each(function(c) {
                if (!s[c] && null != w) {
                    var d = this;
                    d.onload = function() {
                        var k = 1;
                        if ("noresize" != t) {
                            var l = 0 == this.width ? this.naturalWidth: this.width,
                            n = 0 == this.height ? this.naturalHeight: this.height,
                            x = f / l,
                            A = g / n;
                            "fit" == t && (k = 1 > x || 1 > A ? Math.min(x, A) : 1);
                            "fill" == t && (k = Math.min(x, A))
                        }
                        b(d).data("flip.scale", k);
                        s[c] = w.createPattern(d, "no-repeat");
                        s[c].width = l;
                        s[c].height = n;
                        r++;
                        r != h.length || m || (m = !0, I())
                    };
                    d.complete && window.setTimeout(function() {
                        d.onload()
                    },
                    10)
                }
            }).get();
            var x = f,
            A = g,
            E = b.browser.msie ? c.offset() : null,
            F,
            z,
            C,
            B;
            b.browser.msie &&
            function() {
                var h = b("<div>").width(f).height(g).css({
                    position: "absolute",
                    cursor: "default",
                    zIndex: 1
                }).appendTo(tmpContainer);
                7 == parseInt(b.browser.version) && h.css({
                    opacity: 1E-6,
                    background: "#FFF"
                });
                var k = function() {
                    E = c.offset();
                    return h.css({
                        left: E.left + "px",
                        top: E.top + "px"
                    })
                };
                b(window).resize(k);
                return k()
            } ();
            setInterval(function() {
                window.clearInterval(F);
                z = (new Date).getTime();
                C = x;
                B = A / 50;
                F = window.setInterval(K, 0);
                l += 1;
                0 > l && (l = h.length - 1);
                l == h.length && (l = 0)
            },
            3E3);
            var K = function() {
                var b = (new Date).getTime() - z;
                700 <= b ? (window.clearInterval(F), h.push(h.shift()), s.push(s.shift()), x = f, A = g) : (x = C - 2 * f * b / 700, A = B + 2 * g * b / 700 / 3);
                I()
            },
            D = function(c, d) {
                if (null != w) {
                    var h = c * f + d,
                    k = -d / c;
                    b.browser.msie && (h = Math.round(h), k = Math.round(k));
                    w.beginPath();
                    w.moveTo(f, Math.min(h, g));
                    w.lineTo(f, 0);
                    w.lineTo(Math.max(k, 0), 0);
                    0 > k ? (w.lineTo(0, Math.min(d, g)), d < g && w.lineTo((g - d) / c, g), w.lineTo(f, g)) : h < g ? w.lineTo(f, h) : (w.lineTo((g - d) / c, g), w.lineTo(f, g))
                }
            },
            I = function() {
                if (m && null != w && null != v) {
                    b.browser.msie && w.clearRect(0, 0, f, g);
                    w.fillStyle = n;
                    w.fillRect(0, 0, f, g);
                    var c = h[0],
                    d = b(c).data("flip.scale");
                    if (b.browser.msie) try {
                        w.drawImage(c, 0, 0, c.width, c.height, 0, 0, f, g)
                    } catch(k) {
                        w.fillStyle = s[0],
                        w.fillStyle.width2 = w.fillStyle.width * d,
                        w.fillStyle.height2 = w.fillStyle.height * d,
                        w.fillRect(0, 0, f, g)
                    } else w.drawImage(c, (f - c.width * d) / 2, (g - c.height * d) / 2, c.width * d, c.height * d);
                    if (A && x != f && (c = (A - 2 * (x + f)) / 2, m2 = A / (f - x), q2 = x * m2, 2 != m2)) {
                        var l = 1,
                        E = 0;
                        w.save();
                        p || (E = g, l = -1);
                        w.translate(0, E);
                        w.scale(1, l);
                        var z = (q2 - c) / (2 - m2),
                        r = 2 * z + c,
                        F = (2 * r + z + 4 * x - 2 * A) / 5,
                        t = -F / 2 + r + z / 2,
                        d = Math.sqrt(Math.pow(z - F, 2) + Math.pow(r - t, 2)),
                        C = Math.min(0.5 * d, 30),
                        B;
                        b.browser.mozilla && 1.9 > parseFloat(b.browser.version) ? (B = v, B.clearRect(0, 0, f, g), B.save(), B.translate(1, 0)) : B = w;
                        z = B.createLinearGradient(z, r, F, t);
                        z.addColorStop(0, q[0]);
                        z.addColorStop(C / d, q[1]);
                        z.addColorStop(1, q[2]);
                        B.fillStyle = z;
                        B.beginPath();
                        B.moveTo( - c / 2, 0);
                        B.quadraticCurveTo(( - c / 2 + x) / 2 + 0.02 * x, A / 2, x, A);
                        B.quadraticCurveTo((f + x) / 2, (2 * f + c + A) / 2 - 0.02 * (g - A), f, 2 * f + c);
                        b.browser.mozilla && 1.9 > parseFloat(b.browser.version) ? (B.save(), B.clip(), B.fillRect(0, 0, f, g), B.restore(), w.drawImage(u[0], 0, 0), B.restore()) : B.fill();
                        w.fillStyle = n;
                        D(2, c);
                        w.fill();
                        D(2, c);
                        b.browser.safari || b.browser.opera || w.restore();
                        h[1] || (h[1] = h[0]);
                        c = h[1];
                        d = b(c).data("flip.scale");
                        if (b.browser.msie) w.fillStyle = s[1],
                        w.fillStyle.width2 = w.fillStyle.width * d,
                        w.fillStyle.height2 = w.fillStyle.height * d,
                        w.fill();
                        else {
                            w.save();
                            w.clip();
                            if (b.browser.safari || b.browser.opera) w.scale(1, 1 / l),
                            w.translate( - 0, -E);
                            w.drawImage(c, (f - c.width * d) / 2, (g - c.height * d) / 2, c.width * d, c.height * d);
                            w.restore(); (b.browser.safari || b.browser.opera) && w.restore()
                        }
                    }
                }
            }
        }
    };
    b.fn.jFlip = function(d, f, g, h, k) {
        return this.each(function() {
            b(this).wrap("<div class='bannerdiv' style='position: absolute;width:" + d + "px;height:" + f + "px;top:" + k + "px;left:" + h + "px'>");
            var l = b(this).find("img"),
            m = b(document.createElement("canvas")).attr({
                width: d,
                height: f
            }).css({
                margin: 0,
                width: d + "px",
                height: f + "px"
            });
            b(this).css({
                position: "absolute",
                left: "-9000px",
                top: "-9000px",
                display: "none"
            }).after(m);
            new c(b(this).next(), d || 300, f || 300, l, g)
        })
    }
})(jQuery);
function searchFromPages(b, c) {
    var d = [];
    c = c.trim().toLowerCase();
    for (var f = null,
    f = -1 == c.indexOf(" ") ? [c] : c.split(" "), g = 0, g = 0; g < b.length; g++) {
        var h = b[g].trim().toLowerCase(),
        k = h,
        l = -1,
        m = -1,
        n = -1,
        p = 0,
        q = !0,
        t;
        for (t = 0; t < f.length; t++) {
            var k = new KMP(k, f[t]),
            r = f[t].length;
            if (k.match()) {
                var s = p + k.getIndex();
                if (s > n) n = s,
                p = s + f[t].length,
                k = h.substring(p),
                0 == t && (l = s),
                t == f.length - 1 && (m = s + r);
                else {
                    q = !1;
                    break
                }
            } else {
                q = !1;
                break
            }
        }
        q && (n = [], n.search_page = g + 1, n.search_title = "page " + (g + 1), l = h.substring(0, l).lastIndexOf("."), -1 == l ? l = 0 : l++, p = h.substring(m), q = p.indexOf(".") + 1, q = -1 == q ? p.length() : m + q, h = h.substring(l, q), n.search_text = h, d.push(n))
    }
    return d
}
var KMP = function(b, c) {
    this.__string = b;
    this.__pattern = c;
    this.__next = [];
    this.__times = 0;
    this.__index = -1;
    for (var d = 0,
    d = 0; d < c.length; d++) this.__next[d] = 1 >= d ? d - 1 : this.next(c.substring(0, d));
    this.__times = 0;
    this.__index = -1
};
bdor[10] = "l";
KMP.prototype.next = function(b) {
    for (var c = Math.ceil(b.length / 2); 0 < c && 0 != b.substring(0, c).compareTo(b.substring(b.length - c, b.length));) c--;
    return c
};
KMP.prototype.match = function() {
    for (var b = 0,
    c = 0,
    d = -1; b < this.__string.length && c < this.__pattern.length;) {
        if (this.__string.charAt(b) == this.__pattern.charAt(c)) 0 === c && (d = b),
        b++,
        c++;
        else {
            for (var f = this.__next[c]; - 1 != f && this.__pattern.charAt(f) == this.__pattern.charAt(c);) f = this.__next[f];
            c = f; - 1 == c ? (b++, c = 0) : d = b - c
        }
        this.__times++
    }
    return c == this.__pattern.length ? (this.__index = d, !0) : !1
};
KMP.prototype.getTimes = function() {
    return this.__times
};
KMP.prototype.getIndex = function() {
    return this.__index
};
String.prototype.compareTo = function(b) {
    var c = this.length,
    d = b.length,
    f = Math.min(c, d),
    g = this.split("");
    b = b.split("");
    var h = 0,
    k = 0;
    if (h == k) for (k = h, f += h; k < f;) {
        var l = g[k],
        m = b[k];
        if (l != m) return l - m;
        k++
    } else for (; 0 != f--;) if (l = g[h++], m = b[k++], l != m) return l - m;
    return c - d
};
$.fn.setGradient = function(b, c) {
    var d = colorAdd(b, 15),
    f = colorDiv(b, 15);
    void 0 == c && (c = !1);
    var g = "",
    h = "0";
    c && (g = "left,", h = "1");
    this.css({
        background: "linear-gradient(" + g + d + ", " + f + ")"
    });
    switch (browserType) {
    case 1:
        this.css({
            background:
            "-webkit-linear-gradient(" + g + d + ", " + f + ")"
        });
        break;
    case 2:
        this.css({
            background:
            "-moz-linear-gradient(" + g + d + ", " + f + ")"
        });
        break;
    case 3:
        this.css({
            background:
            "-ms-linear-gradient(" + g + d + ", " + f + ")"
        });
        this.css("filter", "progid:DXImageTransform.Microsoft.Gradient(GradientType=" + h + ", EndColorStr=" + f + ", StartColorStr=" + d + ")");
        break;
    case 4:
        this.css({
            background:
            "-o-linear-gradient(" + g + d + ", " + f + ")"
        })
    }
};
$.fn.setGradientByDir = function(b, c, d) {
    void 0 == d && (d = !1);
    var f = "",
    g = "0";
    d && (f = "left,", g = "1");
    this.css({
        background: "linear-gradient(" + f + b + ", " + c + ")"
    });
    switch (browserType) {
    case 1:
        this.css({
            background:
            "-webkit-linear-gradient(" + f + b + ", " + c + ")"
        });
        break;
    case 2:
        this.css({
            background:
            "-moz-linear-gradient(" + f + b + ", " + c + ")"
        });
        break;
    case 3:
        this.css({
            background:
            "-ms-linear-gradient(" + f + b + ", " + c + ")"
        });
        this.css("filter", "progid:DXImageTransform.Microsoft.Gradient(GradientType=" + g + ", EndColorStr=" + c + ", StartColorStr=" + b + ")");
        break;
    case 4:
        this.css({
            background:
            "-o-linear-gradient(" + f + b + ", " + c + ")"
        })
    }
};
$.fn.addBorderShadow = function(b, c, d) {
    var f = c + "px",
    g = d + "px";
    c = 2 * (Math.abs(c) + Math.abs(d)) + "px";
    this.css({
        "-moz-box-shadow": f + " " + g + " " + c + " " + b,
        "box-shadow": f + " " + g + " " + c + " " + b,
        "-webkit-box-shadow": f + " " + g + " " + c + " " + b,
        "-o-box-shadow": f + " " + g + " " + c + " " + b,
        "-ms-box-shadow": f + " " + g + " " + c + " " + b
    })
};
var getHost = function(b) {
    var c;
    b || (b = window.location.href);
    var d = b.match(/(.*\:\/\/)([^\/]*)\/([^\/]*).*/);
    d && (c = "s3.amazonaws.com" === d[2] ? d[1] + d[2] + "/" + d[3] : d[1] + d[2]);
    Log.print(b + d + "," + c);
    return c
};
$.fn.changeButtonColor = function(b, c, d) {
    var f = this;
    if ("none" != this.css("display")) {
        var g = this;
        0 < this.children().length && (g = this.find("img:first"));
        if (window.ActiveXObject) {
            if ("complete" != g[0].readyState) {
                $(g).load(function() {
                    try {
                        f.changeButtonColor(b, c, d)
                    } catch(g) {}
                });
                return
            }
        } else if (!g[0].complete) {
            $(g).load(function() {
                try {
                    f.changeButtonColor(b, c, d)
                } catch(g) {}
            });
            return
        }
        if (void 0 != g[0]) {
            var h, k;
            try {
                h = $("<canvas></canvas>")[0],
                k = h.getContext("2d")
            } catch(l) {
                return
            }
            var m = g.width(),
            n = g.height(),
            g = g[0];
            void 0 == c && (c = !1);
            var p = getHost(g.src),
            q = getHost();
            if (p && q !== p) h = g.src.replace(p, q),
            g.src = h,
            !1 == c && $(g).load(function() {
                try {
                    f.changeButtonColor(b, !0, d)
                } catch(c) {}
            });
            else {
                h.width = m;
                h.height = n;
                try {
                    k.drawImage(g, 0, 0, g.naturalWidth, g.naturalHeight, 0, 0, m, n);
                    var t = k.getImageData(0, 0, m, n),
                    r = k.getImageData(0, 0, m, n);
                    if (!0 != g.colorChanged && (g.colorChanged = !0, t)) {
                        for (var s = Color(b).split(), m = 0, u = t.data.length; m < u; m += 4) 0 < r.data[m + 3] && (t.data[m] != s.r && (r.data[m] = t.data[m] / 255 * s.r), t.data[m + 1] != s.g && (r.data[m + 1] = t.data[m + 1] / 255 * s.g), t.data[m + 2] != s.b && (r.data[m + 2] = t.data[m + 2] / 255 * s.b));
                        k.putImageData(r, 0, 0);
                        g.src = h.toDataURL("image/png");
                        void 0 != d && d(f)
                    }
                } catch(v) { ! 1 == c && $(g).load(function() {
                        try {
                            f.changeButtonColor(b, !0, d)
                        } catch(c) {}
                    })
                }
            }
        }
    }
};
$.fn.rotate = function(b) {
    if (! (4 < browserType && 1 > browserType)) {
        switch (browserType) {
        case 1:
            this.css({
                "-webkit-transform":
                "rotate(" + b + "deg)"
            });
            break;
        case 2:
            this.css({
                "-moz-transform":
                "rotate(" + b + "deg)"
            });
            break;
        case 3:
            this.css({
                "-ms-transform":
                "rotate(" + b + "deg)"
            });
            break;
        case 4:
            this.css({
                "-o-transform":
                "rotate(" + b + "deg)"
            })
        }
        this.css({
            transform: "rotate(" + b + "deg)"
        })
    }
};
$.fn.scale = function(b, c) {
    void 0 == c && (c = "50% 50% 0");
    this.css({
        "-webkit-transform": "scale(" + b + ")",
        "-moz-transform": "scale(" + b + ")",
        "-ms-transform": "scale(" + b + ")",
        "-o-transform": "scale(" + b + ")",
        transform: "scale(" + b + ")",
        "-webkit-transform-origin": c,
        "-moz-transform-origin": c,
        "-ms-transform-origin": c,
        "-o-transform-origin": c,
        "transform-origin": c
    })
};
$.fn.transition3D = function() {
    this.css({
        "-ms-transform": "translate3d(0,0,0)",
        "-webkit-transform": "translate3d(0,0,0)",
        "-moz-transform": "translate3d(0,0,0)",
        "-o-transform": "translate3d(0,0,0)",
        transform: "translate3d(0,0,0)"
    });
    return this
};
$.fn.setAnimation = function(b, c, d) {
    if (void 0 != b) {
        100 > b && (b *= 1E3);
        if (void 0 == c || "" == c) c = "all";
        void 0 == d && (d = "ease-in-out");
        d = c + " %dms " + d;
        0 < b ? "all" != c ? this.css({
            "-moz-transition": String.format(d, "-moz-", b),
            "-webkit-transition": String.format(d, "-webkit-", b),
            "-o-transition": String.format(d, "-o-", b),
            "-ms-transition": String.format(d, "-ms-", b),
            transition: String.format(d, "", b)
        }) : this.css({
            "-moz-transition": String.format(d, b),
            "-webkit-transition": String.format(d, b),
            "-o-transition": String.format(d, b),
            "-ms-transition": String.format(d, b),
            transition: String.format(d, b)
        }) : this.css({
            "-moz-transition": "",
            "-webkit-transition": "",
            "-o-transition": "",
            "-ms-transition": "",
            transition: ""
        })
    }
};
$.fn.animateOnce = function(b, c, d, f, g) {
    var h = this;
    if (b) if (void 0 == c || 0 === c) h.css({
        "-moz-transition": "",
        "-webkit-transition": "",
        "-o-transition": "",
        "-ms-transition": "",
        transition: ""
    }),
    d && d instanceof Function && d();
    else {
        var k = !1;
        setAnimation(h, c, f, g);
        h.one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",
        function() { ! 0 != k && (k = !0, h.setAnimation(0), d && d instanceof Function && d())
        });
        h.css(b)
    }
};
var LanguageTool = {
    isEnglish: function(b) {
        return /[\x00-\xff]/.test(b)
    },
    isChinese: function(b) {
        return /[\u4E00-\u9FBF]/.test(b)
    },
    isArabic: function(b) {
        return /[\u0600-\u06FF]|[\u0750-\u077F]/.test(b)
    },
    isUrdu: function(b) {
        return this.isArabic(b) || /[\uFE70-\uFEFF]/.test(b)
    },
    isHebrew: function(b) {
        return /[\u0590-\u05FF]|[\uFB00-\uFB4F]/.test(b)
    },
    isFarsi: function(b) {
        return this.isUrdu(b) || /[\u0400-\u04FF]|[\u0500-\u052F]/.test(b)
    },
    isTai: function(b) {
        return /[\u0E00-\u0E7F]/.test(b)
    },
    isHindi: function(b) {
        return /[\u0900-\u097F]/.test(b)
    },
    isTamil: function(b) {
        return /[\u0B80-\u0BFF]/.test(b)
    },
    isHimalayaRahm: function(b) {
        return /[\u0D00-\u0D7F]/.test(b)
    },
    isRightToLeft: function(b) {
        return this.isArabic(b) || this.isUrdu(b) || this.isHebrew(b) || this.isFarsi(b) || this.isTai(b) || this.isHindi(b) || this.isTamil(b) || this.isHimalayaRahm(b)
    }
},
Log = Class({
    statics: {
        isDebug: function() {
            return /debug=true/.test(window.location.href)
        },
        isPAD: function() {
            return 0 < navigator.userAgent.toLowerCase().indexOf("pad")
        },
        logForPad: function(b, c) {
            void 0 == this.logDiv && (this.logDiv = $("<div></div>"), this.logDiv.css({
                position: "absolute",
                width: "300px",
                height: "150px",
                top: "50px",
                overflow: "auto",
                "z-index": "100000",
                "background-color": "white"
            }), $("body")[0] && $("body")[0].appendChild(this.logDiv[0]));
            var d = $("<p>" + b + "</p>");
            d.css("color", c);
            this.logDiv.append(d);
            d = this.logDiv[0];
            d.scrollTop = d.scrollHeight
        },
        info: function() {
            if (this.isDebug()) {
                $.browser && $.browser.msie && (arguments = [String.format.apply(this, arguments)]);
                try {
                    console && console.log && console.log.apply(console, arguments)
                } catch(b) {}
                this.logForPad(String.format.apply(this, arguments), "black")
            }
        },
        debug: function() {
            if (this.isDebug()) {
                $.browser && $.browser.msie && (arguments = [String.format.apply(this, arguments)]);
                try {
                    console && console.debug && console.debug.apply(console, arguments)
                } catch(b) {}
                this.logForPad(String.format.apply(this, arguments), "blue")
            }
        },
        warn: function() {
            if (this.isDebug()) {
                $.browser && $.browser.msie && (arguments = [String.format.apply(this, arguments)]);
                try {
                    console && console.warn && console.warn.apply(console, arguments)
                } catch(b) {}
                this.logForPad(String.format.apply(this, arguments), "#FFA042")
            }
        },
        error: function() {
            if (this.isDebug()) {
                $.browser && $.browser.msie && (arguments = [String.format.apply(this, arguments)]);
                try {
                    console && console.error && console.error.apply(console, arguments)
                } catch(b) {}
                this.logForPad(String.format.apply(this, arguments), "red")
            }
        },
        print: function() {
            var b = String.format.apply(this, arguments),
            c = (new Date).format("hh:mm:ss.S");
            this.debug("[%s] %s", c, b)
        }
    }
});
colorTo0x = function(b) {
    var c = b += "";
    if (null == b || void 0 == b) return c;
    "#" != b.substr(0, 1) && "0x" != b.substr(0, 2) && (c = "#" + parseInt(b).toString(16));
    "0x" == b.substr(0, 2) && (c = b.replace("0x", "#"));
    return c
};
bdor[2] = "e";
function Metacharacter(b) {
    if (null != b && "" != b) return b = b.replaceAll("%", "%25", !0),
    b = b.replaceAll("+", "%2B", !0),
    b = b.replaceAll("/", "%2F", !0),
    b = b.replaceAll("?", "%3F", !0),
    b = b.replaceAll(" ", "%20", !0),
    b = b.replaceAll("#", "%23", !0),
    b = b.replaceAll("&", "%26", !0),
    b = b.replaceAll("=", "%3D", !0),
    b = b.replaceAll(":", "%3A", !0),
    b = b.replaceAll("\r", "%0D", !0),
    b = b.replaceAll("\n", "%0A", !0)
}
function colorSplit(b) {
    var c = {
        r: 0,
        g: 0,
        b: 0
    },
    d = "FF",
    f = "FF",
    g = "FF";
    switch (b.length) {
    case 7:
        d = b.substr(1, 2);
        f = b.substr(3, 2);
        g = b.substr(5, 2);
        break;
    case 4:
        d = b.substr(1, 1),
        f = b.substr(2, 1),
        g = b.substr(3, 1),
        d += d,
        f += f,
        g += g
    }
    c.r = parseInt(d, 16);
    c.g = parseInt(f, 16);
    c.b = parseInt(g, 16);
    return c
}
function colorAdd(b, c) {
    var d = colorSplit(b);
    d.r = Math.min(d.r + c, 255).toString(16);
    d.g = Math.min(d.g + c, 255).toString(16);
    d.b = Math.min(d.b + c, 255).toString(16);
    d.r = 1 >= d.r.length ? "0" + d.r: d.r;
    d.g = 1 >= d.g.length ? "0" + d.g: d.g;
    d.b = 1 >= d.b.length ? "0" + d.b: d.b;
    return "#" + d.r + d.g + d.b
}
function colorDiv(b, c) {
    var d = colorSplit(b);
    d.r = Math.max(d.r - c, 0).toString(16);
    d.g = Math.max(d.g - c, 0).toString(16);
    d.b = Math.max(d.b - c, 0).toString(16);
    d.r = 1 >= d.r.length ? "0" + d.r: d.r;
    d.g = 1 >= d.g.length ? "0" + d.g: d.g;
    d.b = 1 >= d.b.length ? "0" + d.b: d.b;
    return "#" + d.r + d.g + d.b
}
var reflection = function(b) {
    var c = new Image,
    d = document.createElement("canvas"),
    f = d.getContext("2d");
    b[0].appendChild(d);
    c.onload = function() {
        c.onload = c.onerror = null;
        var b = this.width,
        h = this.height,
        k = 0.7 * h;
        try {
            d.style.width = b + "px";
            d.style.height = k + "px";
            d.width = b;
            d.height = k;
            d.className = "reflect";
            $(d).css({
                transform: "translateY(-1px)"
            });
            f.save();
            f.translate(0, h);
            f.scale(1, -1);
            f.drawImage(c, 0, 0, b, h);
            f.restore();
            f.globalCompositeOperation = "destination-out";
            var l = f.createLinearGradient(0, 0, 0, k);
            l.addColorStop(1, "rgba(255, 0, 0, 1.0)");
            l.addColorStop(0, "rgba(255, 0, 0, 0)");
            f.fillStyle = l;
            f.rect(0, 0, b, 2 * k);
            f.fill()
        } catch(m) {}
    };
    c.onerror = function() {
        c.onload = c.onerror = null
    };
    c.src = b.children("img")[0].src
};
$.fn.allowNumberOnly = function() {
    $(this).keypress(function(b) {
        b = b || e;
        b = b.keyCode || b.which;
        return 48 <= b && 57 >= b ? !0 : !1
    }).focus(function() {
        this.style.imeMode = "disabled"
    }).bind("paste",
    function() {
        var b = window.clipboardData.getData("Text");
        return /^\d+$/.test(b) ? !0 : !1
    })
};
var fullScreenEvent = function() {
    isPhone() ? alert(getLanguage("", "")) : !0 == $.browser.msie ? alert(getLanguage("")) : (fullscreenFun(), $(document).bind(fullScreenApi.fullScreenEventName,
    function() {
        toolBar.changeFullscreenIcon(fullScreenApi.isFullScreen())
    }))
};
function DeString(b, c) {
    if ("" == b) return "";
    c && "" != c || (c = "fb5");
    c = escape(c);
    if (null == b || 8 > b.length) alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted.");
    else if (null == c || 0 >= c.length) alert("Please enter a password with which to decrypt the message.");
    else {
        for (var d = "",
        f = 0; f < c.length; f++) d += c.charCodeAt(f).toString();
        var g = Math.floor(d.length / 5),
        g = parseInt(d.charAt(g) + d.charAt(2 * g) + d.charAt(3 * g) + d.charAt(4 * g) + d.charAt(5 * g)),
        h = Math.round(c.length / 2),
        k = Math.pow(2, 31) - 1,
        f = parseInt(b.substring(b.length - 8, b.length), 16);
        b = b.substring(0, b.length - 8);
        for (d += f; 10 < d.length;) d = (parseInt(d.substring(0, 10)) + parseInt(d.substring(10, d.length))).toString();
        for (var d = (g * d + h) % k, l = "", m = "", f = 0; f < b.length; f += 2) l = parseInt(parseInt(b.substring(f, f + 2), 16) ^ Math.floor(d / k * 255)),
        m += String.fromCharCode(l),
        d = (g * d + h) % k;
        return unescape(m)
    }
}
var divHint = Class({
    create: function(b, c, d, f) {
        this.instance = $("<div class='hint'></div>");
        this.setText(b);
        void 0 == f && (f = $("body"));
        f.append(this.instance);
        this.instance.css({
            display: "none",
            opacity: 0
        });
        this.moveto(c, d);
        this.animation = !1;
        this.className = "hint"
    },
    setAnimate: function(b) {
        this.animation = b; ! 0 == b && this.instance.css({
            "-moz-transition": "all 0.2s ease-in-out",
            "-webkit-transition": "all 0.2s ease-in-out",
            "-o-transition": "all 0.2s ease-in-out",
            "-ms-transition": "all 0.2s ease-in-out",
            transition: "all 0.2s ease-in-out"
        })
    },
    setStyle: function(b) {
        this.instance.removeClass(this.className);
        this.instance.addClass(b);
        this.className = b
    },
    setText: function(b) {
        this.instance.html(b)
    },
    moveto: function(b, c) {
        this.instance.css({
            left: b,
            top: c
        })
    },
    show: function() {
        this.instance.css({
            display: "block",
            opacity: 1
        })
    },
    hide: function() { ! 0 == this.animation ? this.instance.css({
            display: "none",
            opacity: 0
        }) : this.instance.css({
            display: "none",
            opacity: 1
        })
    },
    destroy: function() {
        this.hide();
        this.instance.empty();
        this.instance.remove()
    },
    width: function() {
        return this.instance.width() + 3 * this.padding()
    },
    height: function() {
        return this.instance.height() + 3 * this.padding()
    },
    padding: function() {
        var b = this.instance.css("padding");
        return void 0 == b || null == b || "" == b ? 0 : iPadding = parseInt(b.replace("px", ""))
    }
});
function loadJavascript(b, c, d) {
    var f = this,
    g = document.createElement("script");
    g.type = "text/javascript";
    g.async = !0;
    g.onload = g.onreadystatechange = function() {
        f.readyState && "loaded" != f.readyState && "complete" != f.readyState || (g.onload = g.onreadystatechange = null, void 0 != c && c(g))
    };
    g.onerror = function() {
        void 0 != d && d(g)
    };
    $("body")[0].appendChild(g);
    g.src = b;
    return g
}
function addProgressBar(b, c, d) {
    if (void 0 != b && null != b && (void 0 == b.progressBar || null == b.progressBar)) {
        var f = $("<div></div>"),
        g = $("<div></div>");
        c = void 0 == c || null == c ? $(b).outerWidth() : c;
        d = void 0 == d || null == d ? $(b).outerHeight() : d;
        var h = $("<img src='" + uiBaseURL + "progress.gif' style='position:absolute;' />");
        g.css({
            background: "#000000",
            opacity: "0.3",
            width: c + "px",
            height: d + "px",
            "z-index": "0"
        });
        f.css({
            width: c + "px",
            height: d + "px",
            "z-index": "100"
        });
        h.css({
            left: (c - 31) / 2 + "px",
            top: (d - 31) / 2 + "px",
            "z-index": "1"
        });
        f.append($(g));
        f.append($(h));
        b.append($(f));
        b.progressBar = f
    }
}
function clearProgressBar(b) {
    void 0 != b.progressBar && null != b.progressBar && b.progressBar.remove()
}
function setAnimation(b, c, d, f) {
    if (b && void 0 != c) {
        100 > c && (c *= 1E3);
        if (void 0 == d || "" == d) d = "all";
        void 0 == f && (f = "ease-in-out");
        f = d + " %dms " + f;
        0 < c ? "all" != d ? b.css({
            "-moz-transition": String.format(f, "-moz-", c),
            "-webkit-transition": String.format(f, "-webkit-", c),
            "-o-transition": String.format(f, "-o-", c),
            "-ms-transition": String.format(f, "-ms-", c),
            transition: String.format(f, "", c)
        }) : b.css({
            "-moz-transition": String.format(f, c),
            "-webkit-transition": String.format(f, c),
            "-o-transition": String.format(f, c),
            "-ms-transition": String.format(f, c),
            transition: String.format(f, c)
        }) : b.css({
            "-moz-transition": "",
            "-webkit-transition": "",
            "-o-transition": "",
            "-ms-transition": "",
            transition: ""
        })
    }
}
function animateOnce(b, c, d, f, g, h) {
    if (b && c) if (void 0 == d || 0 === d) b.css(c),
    f && f instanceof Function && f();
    else {
        var k = !1;
        setAnimation(b, d, g, h);
        b.one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",
        function() { ! 0 != k && (k = !0, setAnimation(b, 0), f && f instanceof Function && f())
        });
        b.css(c)
    }
}
function ScrollFunction(b, c, d, f) {
    var g = this,
    h;
    $(c).transform(0, 0);
    $(c).bind(_event._down,
    function(b) {
        g.scrollMouseDown = !0;
        d.isDrag = !1;
        b = isTouch ? b.originalEvent.touches: [b];
        g.mouseDownY = b[0].pageY;
        h = getPoint(c).y;
        $.browser.msie ? event.cancelBubble = !0 : event.stopPropagation();
        return ! 1
    });
    $(c).bind(_event._move,
    function(k) {
        if (g.scrollMouseDown) {
            k = isTouch ? k.originalEvent.touches: [k];
            k = g.mouseDownY - k[0].pageY;
            var l = h - k,
            l = Math.min(0, l),
            l = Math.max(b.outerHeight() - c.outerHeight(), l);
            b.outerHeight() < c.outerHeight() && (c.transform(0, l), void 0 != f && f());
            1 > Math.abs(k) ? d.isDrag = !1 : d.isDrag = !0
        } else d.isDrag = !1;
        return ! 1
    });
    $(c).bind(_event._mousewheel,
    function(d) {
        d.preventDefault();
        d = d.originalEvent;
        var g = -30;
        0 < Math.max( - 1, Math.min(1, d.wheelDelta || -d.detail)) && (g = 30);
        h = getPoint(c).y;
        d = h + g;
        d = Math.min(0, d);
        d = Math.max(b.outerHeight() - c.outerHeight(), d);
        b.outerHeight() < c.outerHeight() && c.transform(0, d);
        void 0 != f && f();
        return ! 1
    });
    $(c).bind(_event._end,
    function(b) {
        return g.scrollMouseDown = !1
    });
    $(c).bind(_event._leave,
    function(b) {
        return g.scrollMouseDown = !1
    })
}
function autoCenter(b, c, d, f) {
    if (b && !(0 >= b.length)) {
        var g = b.length;
        c = Math.max((c - d * g) / (g - 1), 0);
        void 0 == f && (f = 0);
        for (var h = 0; h < g; h++) b[h].css("left", c * h + d * h + f)
    }
}
function fullscreenFun() {
    if ($.browser.msie) alert("Press F11 to View FlipBook in Full Screen");
    else {
        var b = $("body")[0];
        fullScreenApi.supportsFullScreen && (fullScreenApi.isFullScreen() ? fullScreenApi.cancelFullScreen() : fullScreenApi.requestFullScreen(b));
        b.webkitSupportsFullscreen && b.webkitEnterFullscreen(Element.ALLOW_KEYBOARD_INPUT)
    }
}
$.fn.speed = function(b) {
    function c(b) {
        b = void 0 == b.originalEvent.touches ? [b] : b.originalEvent.touches;
        if (1 < b.length) return q = !0;
        g = k = b[0].pageX;
        h = l = b[0].pageY;
        m = new Date; - 1 != p && window.clearInterval(p);
        p = window.setInterval(function() {
            g = k;
            h = l;
            m = new Date
        },
        300)
    }
    function d(b) {
        if ( - 1 == p || !0 == q) return ! 0;
        b = void 0 == b.originalEvent.touches ? [b] : b.originalEvent.touches;
        k = b[0].pageX;
        l = b[0].pageY
    }
    function f(c) {
        if ( - 1 == p) return ! 0;
        c = void 0 != c.originalEvent.touches == !1 ? [c] : c.originalEvent.touches;
        if (!0 == q) return q = 1 < c.length,
        !0;
        n = new Date;
        c = (n - m) / 20;
        var d = k - g,
        f = l - h;
        0 == c ? iSpeedY = iSpeedX = 0 : (iSpeedX = d / c, iSpeedY = f / c);
        void 0 != b && b(iSpeedX, iSpeedY);
        window.clearInterval(p);
        p = -1
    }
    var g, h, k, l, m, n, p = -1,
    q = !1;
    try {
        this.bind("mousedown", c),
        this.bind("mousemove", d),
        this.bind("mouseup", f),
        this.bind("mouseleave", f)
    } catch(t) {}
    try {
        this.bind("touchstart", c),
        this.bind("touchmove", d),
        this.bind("touchend", f),
        this.bind("touchleave", f)
    } catch(r) {}
};
Class("ObjectPool", {
    objects: null,
    length: 0,
    create: function() {
        this.objects = []
    },
    add: function(b) {
        this.objects.push(b);
        this.length = this.objects.length
    },
    remove: function(b) {
        this.objects.removeElement(b);
        this.length = this.objects.length
    },
    find: function() {
        for (var b = arguments,
        c = new ObjectPool,
        d = 0; d < b.length; d++) {
            var f = b[d];
            if ("string" == typeof f && "" != f) for (var f = f.toLowerCase(), g = 0; g < this.objects.length; g++) {
                var h = this.objects[g];
                h.getClassName && -1 < h.getClassName().toLowerCase().indexOf(f) && c.add(h)
            }
        }
        return c
    },
    match: function() {
        for (var b = arguments,
        c = new ObjectPool,
        d = 0; d < b.length; d++) {
            var f = b[d];
            if ("string" == typeof f && "" != f) for (var g = 0; g < this.objects.length; g++) {
                var h = this.objects[g];
                h.getClassName && h.getClassName() == f && c.add(h)
            }
        }
        return c
    },
    clone: function() {
        for (var b = new ObjectPool,
        c = 0; c < this.objects.length; c++) b.add(this.get(c));
        return b
    },
    get: function(b) {
        return this.objects[b]
    },
    each: function(b) {
        for (var c = 0; c < this.objects.length; c++) {
            var d = this.objects[c];
            d && b && b instanceof Function && b(d)
        }
    }
});
var VERSION_NAME = "2.6.3",
BUILD_DATE = "2016060301",
BookType = {
    normal_book: 0,
    single_book: 1,
    slide_book: 3,
    phone_slide_book: 4,
    singlePhone_slide_book: 5,
    singleSlide_book: 6,
    catalog_book: 7,
    singleCatalog_book: 8
},
normalBookStatu = {
    book_statu_ready: 0,
    book_statu_auto_flip: 1,
    book_statu_mouse_flip: 2,
    book_statu_mag_flip: 3
},
singleBookStatu = {
    book_statu_ready: 0,
    book_statu_auto_flip: 1,
    book_statu_mouse_flip: 2,
    book_statu_mag_flip: 3
},
bookCorner = {
    top_left: 0,
    top_right: 1,
    bottom_left: 2,
    bottom_right: 3
},
BrowserType = {
    WEBKIT: 1,
    OPERA: 1,
    MOZ: 2,
    MS: 3
},
PageEditor = {
    AnnoType: {
        ANNO_LINK: "com.mobiano.flipbook.pageeditor.TAnnoLink",
        ANNO_YOUTUBE: "com.mobiano.flipbook.pageeditor.TAnnoYouTube",
        ANNO_YOUTUBE1: "com.mobiano.flipbook.pageeditor::TAnnoYoutubePlayer",
        ANNO_YOUTUBE2: "com.mobiano.flipbook.pageeditor.player::TAnnoYoutubePlayer02",
        ANNO_YOUTUBE3: "com.mobiano.flipbook.pageeditor.player::TAnnoYoutubePlayer03",
        ANNO_YOUTUBE4: "com.mobiano.flipbook.pageeditor.player::TAnnoYoutubePlayer04",
        ANNO_YOUTUBE5: "com.mobiano.flipbook.pageeditor.player::TAnnoYoutubePlayer05",
        ANNO_VIDEO1: "com.mobiano.flipbook.pageeditor::TAnnoVideoPlayer",
        ANNO_VIDEO2: "com.mobiano.flipbook.pageeditor.player::TAnnoSimpleVideoPlayer",
        ANNO_AUDIO1: "com.mobiano.flipbook.sound.TAnnoAdvancedSound",
        ANNO_AUDIO2: "com.mobiano.flipbook.sound.TAnnoWavemusicPlayer",
        ANNO_AUDIO3: "com.mobiano.flipbook.pageeditor::TAnnoPlugIn",
        ANNO_AUDIO4: "com.mobiano.flipbook.sound.TAnnoBackgroundSound",
        ANNO_AUDIO5: "",
        ANNO_AUDIO6: "",
        ANNO_AUDIO7: "",
        ANNO_AUDIO8: "",
        ANNO_AUDIO9: "",
        ANNO_VIMEO: "com.mobiano.flipbook.pageeditor.vimeoPlayer::TAnnoVimeoPlayer",
        ANNO_VIMEO2: "com.mobiano.flipbook.pageeditor.vimeoPlayer.TAnnoVimeoPopUpPlayer",
        ANNO_VIDEO: "com.mobiano.flipbook.pageeditor.TAnnoMovie",
        ANNO_AUDIO: "com.mobiano.flipbook.sound.TAnnoSound",
        ANNO_IMAGE: "com.mobiano.flipbook.pageeditor.TAnnoImage",
        ANNO_BUTTON: "com.mobiano.flipbook.pageeditor.TAnnoButton",
        ANNO_LINE: "com.mobiano.flipbook.pageeditor.shapes::TAnnoLine",
        ANNO_ARROW: "com.mobiano.flipbook.pageeditor.shapes::TAnnoArrow",
        ANNO_ROUND: "com.mobiano.flipbook.pageeditor.shapes::TAnnoEllipse",
        ANNO_RECTANGLE: "com.mobiano.flipbook.pageeditor.shapes::TAnnoRectangle",
        ANNO_TRIANGLE: "com.mobiano.flipbook.pageeditor.shapes::TAnnoTriangle",
        ANNO_PRISMATIC: "com.mobiano.flipbook.pageeditor.shapes::TAnnoPrismatic",
        ANNO_PARALLELOGRAM: "com.mobiano.flipbook.pageeditor.shapes::TAnnoParallelogram",
        ANNO_PENTAGON: "com.mobiano.flipbook.pageeditor.shapes::TAnnoPentagon",
        ANNO_HEXAGON: "com.mobiano.flipbook.pageeditor.shapes::TAnnoHexagon",
        ANNO_PENTAGON: "com.mobiano.flipbook.pageeditor.shapes::TAnnoPentagon",
        ANNO_DOVETAILED: "com.mobiano.flipbook.pageeditor.shapes::TAnnoDovetailed",
        ANNO_FLOWCHART: "com.mobiano.flipbook.pageeditor.shapes::TAnnoFlowChart",
        ANNO_CYLINDER: "com.mobiano.flipbook.pageeditor.shapes::TAnnoCylinder",
        ANNO_TRAPEZOID: "com.mobiano.flipbook.pageeditor.shapes::TAnnoTrapezoid",
        ANNO_RIGHTARROW: "com.mobiano.flipbook.pageeditor.shapes::TAnnoRightArrow",
        ANNO_VIRTUALEND: "com.mobiano.flipbook.pageeditor.shapes::TAnnoVirtualEnd",
        ANNO_CROSS: "com.mobiano.flipbook.pageeditor.shapes::TAnnoCross",
        ANNO_AREA: "com.mobiano.flipbook.pageeditor::TAnnoHighLightArea",
        ANNO_FLASHSHOW: "com.mobiano.flipbook.pageeditor.TAnnoSWF1",
        ANNO_PRINT: "com.mobiano.flipbook.pageeditor::TAnnoPrint",
        ANNO_TEXT: "com.mobiano.flipbook.pageeditor::TAnnoText",
        ANNO_ATEXT: "com.mobiano.flipbook.pageeditor::TAnnoDynamicText",
        ANNO_ROLLERTEXT: "com.mobiano.flipbook.pageeditor::TAnnoRollerText",
        ANNO_STARTEXT: "com.mobiano.flipbook.pageeditor::TAnnoStarwarsText",
        ANNO_TEXTANIM: "com.mobiano.flipbook.pageeditor.textAnim::TAnnoTextAnim",
        ANNO_EFFECTTEXT: "com.mobiano.flipbook.pageeditor.TAnnoEffectText",
        ANNO_CALLOUT: "com.mobiano.flipbook.pageeditor.shapes::TAnnoCallout",
        ANNO_ADVANCEDSOUND: "com.mobiano.flipbook.pageeditor::TAnnoAdvancedSound1",
        ANNO_ALPHATRANSITIONBANNER: "com.mobiano.flipbook.pageeditor.TAnnoAlphaTransitionBanner",
        ANNO_EMBEDDEDSLIDESHOW: "com.mobiano.flipbook.pageeditor.TAnnoEmbeddedSlideshow",
        ANNO_ATIMAGE: "com.mobiano.flipbook.pageeditor.TAnnoClipart",
        ANNO_BANNER: "com.mobiano.flipbook.pageeditor::TAnnoBanner",
        ANNO_CAROUSEL: "com.mobiano.flipbook.pageeditor.TAnnoCarouselViewer",
        ANNO_DYNSHOW: "com.mobiano.flipbook.pageeditor::TAnnoDynamicShowPhoto",
        ANNO_FLIPJUMP: "com.mobiano.flipbook.pageeditor.TAnnoDynamicTurnPhoto",
        ANNO_PLUGIN: "com.mobiano.flipbook.pageeditor::TAnnoPlugIn",
        ANNO_SWF: "com.mobiano.flipbook.pageeditor.TAnnoSWF",
        ANNO_CART: "com.mobiano.flipbook.pageeditor.TAnnoCart",
        ANNO_HOTSPOTS: "com.mobiano.flipbook.pageeditor.TAnnoHotSpots"
    },
    PlayEvt: {
        EVT_PLAY: "EVT_PageViewed",
        EVT_STOP: "EVT_PageOffView"
    },
    TriggerEventType: {
        MouseDown: "mouseDown",
        MouseOver: "mouseOver",
        MouseOut: "mouseOut",
        MouseUp: "mouseUp",
        MouseMove: "mouseMove",
        MouseLeave: "mouseLeave"
    },
    MouseOverType: {
        Zoom: "1",
        AddBorder: "2"
    },
    ActionType: {
        GOTO_PAGE: "com.mobiano.flipbook.pageeditor.TAnnoActionGotoPage",
        OPEN_URL: "com.mobiano.flipbook.pageeditor.TAnnoActionOpenURL",
        OPEN_WINDOW: "com.mobiano.flipbook.pageeditor.TAnnoActionOpenWindow",
        SLIDE_SHOW: "com.mobiano.flipbook.pageeditor.TAnnoActionPhotoSlide",
        ACTION_JS: "com.mobiano.flipbook.pageeditor.TAnnoActionJavascript",
        PLAY_AUDIO: "com.mobiano.flipbook.pageeditor.TAnnoActionPlayAudio",
        WINDOW_HTML: "com.mobiano.flipbook.pageeditor.TAnnoActionWindowHtml",
        PLAY_VIDEO: "com.mobiano.flipbook.pageeditor.TAnnoActionPlayVideo",
        SHOW_INFORMATION: "com.mobiano.flipbook.pageeditor.TAnnoActionShowInformation",
        QUIZ: "com.mobiano.flipbook.pageeditor.TAnnoActionQuiz",
        PLAYVIDEO: "com.mobiano.flipbook.Action.TAnnoActionPlayVideo"
    },
    WindowType: {
        OPEN_YOUTUBE: "TYPE_YOUTUBE",
        OPEN_VIMEO: "TYPE_VIMEO",
        OPEN_DAILYMOTION: "TYPE_DAILYMOTION",
        OPEN_TYPE_WISTIA: "TYPE_WISTIA",
        OPEN_TYPE_YOUKU: "TYPE_YOUKU",
        OPEN_TYPE_QQ: "TYPE_QQ",
        OPEN_VIDEO: "0",
        OPEN_FLASH: "1",
        OPEN_SHOW_TEXT: "4"
    }
},
bookEvent = {
    onCurrentPageIndexChanged: "BE_PIC",
    onCurrentPageIndexWillChange: "BE_PIWC",
    onNoNextPage: "BE_NNP",
    onNoPreviousPage: "BE_NPP"
},
PLUGIN_MAGNETICS = "AbPIMagneticSlider",
PLUGIN_ROTATE3D = "AbPIRotationPhotoFor3D",
PLUGIN_VIDEO1 = "VideoPlayerExemple01",
PLUGIN_VIDEO2 = "VideoPlayerExemple02",
PLUGIN_CLASSAUDIO = "",
KEY_CODE_ENTER = 13,
KEY_CODE_LEFT = 37,
KEY_CODE_UP = 38,
KEY_CODE_RIGHT = 39,
KEY_CODE_DOWN = 40,
KEY_CODE_HOME = 36,
KEY_CODE_END = 35,
KEY_CODE_PAGEUP = 33,
KEY_CODE_PAGEDOWN = 34,
KEY_CODE_DELETE = 46,
KEY_CODE_F11 = 122,
MOUSE_LEFT = 1,
MOUSE_MIDDLE = 2,
MOUSE_RIGHT = 3,
LOADING_WIDTH = 30,
LOADING_HEIGHT = 30,
COIL_PAGE_WIDTH = 500,
ICON_BACKGROUND = 0,
ICON_LAST = 1,
ICON_NEXT = 2,
ICON_PREV = 3,
ICON_FIRST = 4,
ICON_ZOOMIN = 5,
ICON_ZOOMOUT = 6,
ICON_AUTOPLAY = 7,
ICON_STOPAUTOPLAY = 8,
ICON_THUMB = 9,
ICON_SHARE = 10,
ICON_SEARCH = 11,
ICON_DOWNLOAD = 12,
ICON_HOME = 13,
ICON_BOOKMARK = 14,
ICON_SOUNDON = 15,
ICON_SOUNDOFF = 16,
ICON_PREV_NORMAL = 17,
ICON_PREV_NORMAL_DOWN = 18,
ICON_NEXT_NORMAL = 19,
ICON_NEXT_NORMAL_DOWN = 20,
ICON_PRINT = 21,
ICON_HELP = 22,
ICON_ABOUT = 23,
ICON_MOREBAR = 24,
ICON_LANGUAGE = 25,
ICON_THUMB_DOWN = 26,
ICON_FULLSCREEN = 27,
ICON_EXIT_FULLSCREEN = 28,
ICON_MOVE_POSITION = 29,
ICON_MOVE_DRAG = 30,
ICON_ANNOTATION = 31,
ICON_TOC = 32,
ICON_VIDEOGALLERY = 33,
ICON_PHOTOGALLERY = 34,
isTouchDevice = function() {
    var b = "ontouchstart" in window,
    c = navigator.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android/i),
    c = c && 0 < c.length;
    return b && c
},
isTouch = isTouchDevice(),
_event;
_event = isTouchDevice() ? {
    _down: "touchstart",
    _move: "touchmove",
    _end: "touchend",
    _click: "touchend",
    _leave: "touchleave",
    _out: "touchleave",
    _enter: "touchmove",
    _mousewheel: "mousewheel",
    _over: "touchover"
}: {
    _down: "mousedown",
    _move: "mousemove",
    _end: "mouseup",
    _click: "click",
    _leave: "mouseleave",
    _out: "mouseout",
    _enter: "mouseenter",
    _mousewheel: "mousewheel",
    _over: "mouseover"
};
$.browser.mozilla && (_event._mousewheel = "DOMMouseScroll");
var WebScheme = {
    HTTP: "http",
    HTTPS: "https",
    FTP: "ftp",
    MAILTO: "mailto",
    IDAP: "idap",
    FILE: "file",
    NEWS: "news",
    GOPHER: "gopher",
    TELNET: "telnet"
},
resizePlugin = function() {
    windowWidth > windowHeight && window.plugin && window.plugin.show();
    windowWidth < windowHeight && window.plugin && window.plugin.hide()
},
transformCSS = function(b) {
    var c = "";
    b.tran && ($.browser.msie && (c = c + "translate(" + b.tran.x + "px," + b.tran.y + "px) "), $.browser.msie || (c = c + "translate3d(" + b.tran.x + "px," + b.tran.y + "px,0px) "));
    b.rotate && (c = c + "rotate(" + b.rotate + "deg)");
    b.rotateY && (c = c + "rotateY(" + b.rotateY + "deg)");
    b.perspective && (c = c + "perspective(" + b.perspective + "px)");
    b.scale && (c = c + "scale3d(" + b.scale + "," + b.scale + ",1) ");
    b.scaleX && (c = c + "scaleX(" + b.scaleX + ") ");
    b.scaleY && (c = c + "scaleY(" + b.scaleY + ") ");
    var d = {
        "-webkit-transform": c,
        "-moz-transform": c,
        "-ms-transform": c,
        "-o-transform": c,
        transform: c
    };
    b.origin && (d = b.origin.x + "% " + b.origin.y + "%", d = {
        "-webkit-transform": c,
        "-moz-transform": c,
        "-ms-transform": c,
        "-o-transform": c,
        transform: c,
        "-webkit-transform-origin": d,
        "-moz-transform-origin": d,
        "-ms-transform-origin": d,
        "-o-transform-origin": d,
        "transform-origin": d
    });
    b.obj && b.obj.css(d);
    return d
},
initBookTye = function() {
    var b = "normal_book";
    if ("slide" == bookConfig.FlipStyle.toLowerCase() || isBelowIE9()) b = "slide_book";
    "flip" != bookConfig.FlipStyle.toLowerCase() || isBelowIE9() || (b = "flip_book");
    "" != bookConfig.FlipStyle || isBelowIE9() || (b = "flip_book");
    "catalog" != bookConfig.FlipStyle.toLowerCase() || isBelowIE9() || (b = "catalog_book");
    isPhoneBook() && (b = "phone_slide_book");
    return b
},
rotate = function(b) {
    return " rotate(" + b + "deg)"
},
translate = function(b, c) {
    return $.browser.msie ? "translate(" + b + "px," + c + "px)": "translate3d(" + b + "px," + c + "px,0px)"
},
tranScale = function(b) {
    return $.browser.msie ? " scale(" + b + ")": " scale3d(" + b + "," + b + ",1)"
},
cssTranslate = function(b, c, d) {
    if ($.browser.msie) {
        if (void 0 == b.getOrigin || null == b.getOrigin) b.getOrigin = !1;
        if (!b.getOrigin) {
            b.getOrigin = !0;
            b.originX = parseInt(b.css("left"));
            b.originY = parseInt(b.css("top"));
            if (void 0 == b.originX || null == b.originX || isNaN(b.originX)) b.originX = 0;
            if (void 0 == b.originY || null == b.originY || isNaN(b.originY)) b.originY = 0
        }
        b = {
            left: b.originX + c + "px",
            top: b.originY + d + "px"
        }
    } else b = translate(c, d),
    b = {
        "-webkit-transform": b,
        "-moz-transform": b,
        "-ms-transform": b,
        "-o-transform": b,
        transform: b
    };
    return b
},
translate2D = function(b, c) {
    return " translate(" + b + "px," + c + "px)"
},
horizontalMirror = function(b) {
    b && b.css({
        "-moz-transform": "scaleX(-1)",
        "-webkit-transform": "scaleX(-1)",
        "-o-transform": "scaleX(-1)",
        transform: "scaleX(-1)",
        filter: "FlipH"
    })
};
$.fn.transform = function(b, c) {
    if ($.browser.msie) {
        if (void 0 == this.getOrigin || null == this.getOrigin) this.getOrigin = !1;
        if (!this.getOrigin) {
            this.getOrigin = !0;
            this.originX = parseInt(this.css("left"));
            this.originY = parseInt(this.css("top"));
            if (void 0 == this.originX || null == this.originX || isNaN(this.originX)) this.originX = 0;
            if (void 0 == this.originY || null == this.originY || isNaN(this.originY)) this.originY = 0
        }
        this.css({
            left: this.originX + b + "px",
            top: this.originY + c + "px"
        });
        return this
    }
    var d = $.browser.msie ? " translate(" + b + "px," + c + "px)": " translate3d(" + b + "px," + c + "px,0px)";
    this.css({
        "-webkit-transform": d,
        "-moz-transform": d,
        "-ms-transform": d,
        "-o-transform": d,
        transform: d
    })
};
var scaleTran = function(b) {
    return " scale(" + b + ")"
},
isLeft = function(b) {
    return 0 == b || 2 == b
},
isRight = function(b) {
    return 1 == b || 3 == b
},
isTop = function(b) {
    return 0 == b || 1 == b
},
isBottom = function(b) {
    return 2 == b || 3 == b
},
flipAudio,
playFlipSound = function() {
    if ((!isPlaying || $.system.name != $.system.ANDROID) && parseBool(bookConfig.FlipSound, !0) && void 0 != global.flipAudio && null != flipAudio && void 0 != flipAudio[0].play) try {
        flipAudio[0].play()
    } catch(b) {}
},
nextPageFun = function() {
    switch (bookType) {
    case BookType.normal_book:
        gotoPageFun(2 * Math.floor(flipBook.getCurrentPageIndex() / 2 + 1));
        break;
    case BookType.single_book:
        gotoPageFun(parseInt(singlePageBook.currentPageIndex) + 1);
        break;
    case BookType.slide_book:
        gotoPageFun(2 * Math.floor(slideBook.getRealPageIndex() / 2 + 1));
        break;
    case BookType.singleSlide_book:
        gotoPageFun(parseInt(singleSlideBook.getRealPageIndex()) + 1);
        break;
    case BookType.catalog_book:
        gotoPageFun(2 * Math.floor(catalogBook.getCurrentPageIndex() / 2 + 1));
        break;
    case BookType.singleCatalog_book:
        gotoPageFun(parseInt(singleCatalogBook.currentIndex) + 1);
        break;
    case BookType.phone_slide_book:
        gotoPageFun(2 * Math.floor(phoneSlideBook.getRealPageIndex() / 2 + 1));
        break;
    case BookType.singlePhone_slide_book:
        gotoPageFun(parseInt(singlePhoneSlideBook.getRealPageIndex()) + 1)
    }
},
previousPageFun = function() {
    switch (bookType) {
    case BookType.normal_book:
        gotoPageFun(2 * Math.floor(flipBook.getCurrentPageIndex() / 2 - 1) + 1);
        break;
    case BookType.catalog_book:
        gotoPageFun(2 * Math.floor(catalogBook.getCurrentPageIndex() / 2 - 1) + 1);
        break;
    case BookType.single_book:
        gotoPageFun(parseInt(singlePageBook.currentPageIndex) - 1);
        break;
    case BookType.slide_book:
        gotoPageFun(2 * Math.floor(slideBook.getRealPageIndex() / 2 - 1) + 1);
        break;
    case BookType.singleSlide_book:
        gotoPageFun(singleSlideBook.getRealPageIndex() - 1);
        break;
    case BookType.singleCatalog_book:
        gotoPageFun(parseInt(singleCatalogBook.currentIndex) - 1);
        break;
    case BookType.phone_slide_book:
        gotoPageFun(2 * Math.floor(phoneSlideBook.getRealPageIndex() / 2 - 1) + 1);
        break;
    case BookType.singlePhone_slide_book:
        gotoPageFun(singlePhoneSlideBook.getRealPageIndex() - 1)
    }
},
firstPageFun = function() {
    gotoPageFun(1)
},
lastPageFun = function() {
    gotoPageFun(originTotalPageCount)
},
gotoPageFun = function(b) {
    sendvisitinfo(1, b);
    b = parseInt(b);
    if (passwardType() && bookConfig.excludeFrontPages && b > parseInt(bookConfig.excludeFrontPages) && !verifyPassward()) passwardPannel.show();
    else { (0 > BookInfo.getCurrentPages().indexOf(b) || 1 >= originTotalPageCount) && Advertisement.executeOnce();
        switch (bookType) {
        case BookType.normal_book:
            flipBook.gotoPage(b);
            break;
        case BookType.single_book:
            singlePageBook.gotoPage(b);
            break;
        case BookType.slide_book:
            slideBook.gotoPage(b);
            break;
        case BookType.singleSlide_book:
            singleSlideBook.gotoPage(b);
            break;
        case BookType.catalog_book:
            catalogBook.gotoPage(b);
            break;
        case BookType.singleCatalog_book:
            singleCatalogBook.gotoPage(b);
            break;
        case BookType.phone_slide_book:
            phoneSlideBook.gotoPage(b);
            break;
        case BookType.singlePhone_slide_book:
            singlePhoneSlideBook.gotoPage(b)
        }
        global.phoneBookmark && global.phoneBookmark.lightBookmarkButton(b)
    }
},
fillCurrentPageContent = function() {
    for (var b = getShownPage(), c = 0; c < b.length; c++) BookInfo.getBook().fillPage(b[c]);
    thumbnail && thumbnail.show && thumbnail.fillContent && thumbnail.fillContent()
},
setPageURL = function(b, c, d) {
    var f = parseInt(b) - 1;
    global.fliphtml5_pages || (global.fliphtml5_pages = []);
    global.fliphtml5_pages[f] || (global.fliphtml5_pages[f] = {});
    getShownPage();
    switch (c) {
    case 0:
        global.fliphtml5_pages[f].l = d;
        break;
    case 1:
        global.fliphtml5_pages[f].n = d;
        BookInfo.getBook().fillPage(b, !0);
        break;
    case 2:
        global.fliphtml5_pages[f].t = d
    }
},
getPageDir = function(b, c, d) {
    if (0 >= b || void 0 != d && b > d) return "";
    if (bookConfig.getPageURL) {
        var f = 0;
        "normal" == c && (f = 1);
        "thumb" == c && (f = 2);
        return bookConfig.getPageURL(b, f)
    }
    d = getFileFormat(b);
    var g = global.fliphtml5_pages;
    if (void 0 != g && 0 < g.length) {
        g = g[b - 1];
        if (void 0 != g && null != g) switch (c) {
        case "normal":
            f = void 0 == g.n ? g.l: g.n;
            break;
        case "large":
            f = g.l;
            break;
        case "thumb":
            f = g.t
        }
        if (void 0 == f) switch (c) {
        case "normal":
            return f = getString("normalPath", "files/page/") + b + d;
        case "large":
            return f = getString("largePath", "files/large/") + b + d;
        case "thumb":
            return f = getString("thumbPath", "files/thumbnail/") + b + d
        }
        return void 0 == f ? "": f
    }
    switch (c) {
    case "normal":
        return f = getString("normalPath", "files/page/") + b + d,
        void 0 == f ? "": f;
    case "large":
        return f = getString("largePath", "files/large/") + b + d,
        void 0 == f ? "": f;
    case "thumb":
        return f = getString("thumbPath", "files/thumbnail/") + b + d,
        void 0 == f ? "": f
    }
},
getFileFormat = function(b) {
    return ! passwardType() || !bookConfig.excludeFrontPages || b <= parseInt(bookConfig.excludeFrontPages) ? ".jpg": ".js"
},
decodeBase64 = function(b, c) {
    var d = encodeDatabasePrefix(c);
    if (global[d + b] && "string" == typeof global[d + b]) {
        var f = getRealkey();
        if (f) return d = base64.decode(global[d + b]),
        f = rc4(f, d),
        base64.encode(f)
    }
},
dataBase64Str = function(b, c, d) {
    if (verifyPassward()) {
        var f = decodeDatabasePrefix(c),
        g = encodeDatabasePrefix(c);
        if (global[f + b]) return global[g + b] = null,
        d && $(d).remove(),
        global[f + b];
        c = "data:image/jpg;base64," + decodeBase64(b, c);
        global[f + b] = c;
        global[g + b] = null;
        d && $(d).remove();
        return c
    }
},
decodeDatabasePrefix = function(b) {
    switch (b) {
    case "normal":
        return "dataBase";
    case "large":
        return "dataBase";
    case "thum":
        return "dataBaseThum"
    }
},
encodeDatabasePrefix = function(b) {
    switch (b) {
    case "normal":
        return "page";
    case "large":
        return "page";
    case "thum":
        return "thumb"
    }
},
userList,
getRealkey = function() {
    if (1 == passwardType()) return getSingleRealKey();
    if (userList && document.getElementById("passward") && "" != $("#passward").val() && document.getElementById("username") && "" != $("#username").val()) {
        var b = $("#passward").val(),
        c = $("#username").val();
        if (userList && "string" == typeof userList[c]) return getListRealKey(c, b, userList[c])
    }
},
getSingleRealKey = function() {
    if (bookConfig.singlePasswordKey && "string" == typeof bookConfig.singlePasswordKey && document.getElementById("passward") && "" != $("#passward").val()) {
        var b = parsHexToNormalString(bookConfig.singlePasswordKey);
        return rc4($("#passward").val(), b)
    }
},
getListRealKey = function(b, c, d) {
    b = (b + String.fromCharCode(9) + c).MD5(32);
    b = parsHexToNormalString(b);
    b = base64.encode(b);
    d = d.remove(b);
    d = d.replace(/==?$/, "");
    if (d = base64.decode(d)) return c = (b + c).cycle(128),
    rc4(c, d)
},
verifyPassward = function() {
    if (1 == passwardType()) {
        if (!document.getElementById("passward") || "" == $("#passward").val()) return;
        var b = $("#passward").val();
        return b.MD5(32).toLowerCase() === bookConfig.singlePasswordMD5.toLowerCase()
    }
    if (bookConfig.userListPath && (userList || loadJavascript(bookConfig.userListPath, verifyPassward,
    function() {}), userList && document.getElementById("passward") && "" != $("#passward").val() && document.getElementById("username") && "" != $("#username").val())) {
        var b = $("#passward").val(),
        c = $("#username").val();
        if ("string" == typeof userList[c]) return b = (c + String.fromCharCode(9) + b).MD5(32),
        b = parsHexToNormalString(b),
        b = base64.encode(b),
        userList[c].substring(0, 24) === b
    }
},
passwardType = function() {
    if (!bookConfig.securityType || 1 == parseInt(bookConfig.securityType)) return 0;
    if (bookConfig.securityType && 2 == parseInt(bookConfig.securityType)) return 1;
    if (bookConfig.securityType && 3 == parseInt(bookConfig.securityType)) return 2
},
fillImageOrNot = function(b, c) {
    return ! b || "string" != typeof b || passwardType() && bookConfig.excludeFrontPages && c > parseInt(bookConfig.excludeFrontPages) && !verifyPassward() ? !1 : !0
},
fillImage = function(b, c, d, f, g) {
    c && "string" == typeof c && b && d && f && fillImageOrNot(c, d) && ( - 1 < c.indexOf(".js") ? global[decodeDatabasePrefix(f) + d] && "string" == typeof global[decodeDatabasePrefix(f) + d] ? (b.attr("src", dataBase64Str(d, f)), g && g()) : loadJavascript(c,
    function(c) {
        b.attr("src", dataBase64Str(d, f, c));
        g && g()
    },
    function() {}) : (b.attr("src", c), g && g()))
},
getPageWidthHeight = function(b, c, d, f) {
    var g = Point(0, 0);
    b / c > d / f ? (g.x = 2 * parseInt(d * c / (2 * f)), g.y = c) : (g.x = 2 * parseInt(b / 2), g.y = b * f / d);
    return g
},
getPageWidthHeightByWidth = function(b, c, d, f) {
    c = Point(0, 0);
    c.x = b;
    c.y = b * f / d;
    return c
},
slideShowImagesAdapter = function(b, c) {
    if (b[0]) return b;
    for (var d = [], f = c[0], g = c[1], h = b[f].length, k = 0; k < h; k++) d.push(b[f][k][g]);
    return d
},
pointToLineDistance = function(b, c, d, f, g, h) {
    var k = h - f,
    l = d - g;
    return Math.abs(k * b + l * c + (g * f - d * h)) / Math.sqrt(k * k + l * l)
},
globalToBook = function(b, c, d) {
    var f;
    switch (bookType) {
    case BookType.single_book:
        f = Point(c - singlePageBook.getLeft(), d - singlePageBook.getTop());
        break;
    case BookType.normal_book:
        f = Point(c - ((b ? 0 : flipBook.getPageWidth()) + flipBook.getLeft()), d - flipBook.getTop());
        break;
    case BookType.catalog_book:
        f = catalogBook.getTran(),
        b = c - ((b ? 0 : catalogBook.getPageWidth()) + catalogBook.getCssLeft()) - f.x,
        d = d - catalogBook.getCssTop() - f.y,
        f = Point(b, d)
    }
    return f
};
bdor[32] = function(b, c) {
    return b + c
};
var changeShowBook = function(b) {
    switch (b) {
    case 0:
        bookType = BookType.normal_book;
        singlePageBook.hide();
        flipBook.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.mergeAll();
        break;
    case 1:
        bookType = BookType.single_book;
        singlePageBook.show();
        flipBook.hide();
        bookConfig.ThumbnailsButtonVisible && thumbnail.fissionAll();
        break;
    case 3:
        bookType = BookType.slide_book;
        slideBook.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.mergeAll();
        break;
    case 4:
        bookType = BookType.phone_slide_book;
        singlePhoneSlideBook.hide();
        phoneSlideBook.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.mergeAll();
        break;
    case 5:
        bookType = BookType.singlePhone_slide_book;
        singlePhoneSlideBook.show();
        phoneSlideBook.hide();
        bookConfig.ThumbnailsButtonVisible && thumbnail.fissionAll();
        break;
    case 6:
        bookType = BookType.singleSlide_book;
        singleSlideBook.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.fissionAll();
        break;
    case 7:
        bookType = BookType.catalog_book;
        catalogBook.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.mergeAll();
        break;
    case 8:
        bookType = BookType.singleCatalog_book,
        singleCatalogBook.show(),
        bookConfig.ThumbnailsButtonVisible && thumbnail.fissionAll()
    }
},
computePoint = function(b, c, d, f, g) {
    if (!f || !g) return {
        rotate: 0,
        pageTranX: 0,
        maskTranX: 0,
        maskTranY: 0
    };
    g.x > b && (g.x = b);
    g.x < -b && (g.x = -b);
    isAndroidDefault() && (f.y = g.y);
    if (f.x == g.x) {
        var h = 0;
        0 > f.x && (h += 180);
        return {
            rotate: h,
            pageTranX: 0,
            maskTranX: f.x,
            maskTranY: 0
        }
    }
    var k = Math.sqrt(Math.pow(g.y - c, 2) + Math.pow(g.x - 0, 2)),
    h = Math.sqrt(Math.pow(f.y - c, 2) + Math.pow(f.x - 0, 2));
    if (k > h) {
        var l = Math.atan((g.y - c) / (g.x - 0)),
        k = Math.abs(Math.sin(l) * h),
        h = Math.abs(Math.cos(l) * h);
        g.y = c - k;
        g.x = 0 < g.x ? h: -h
    }
    k = Math.sqrt(Math.pow(g.y - 0, 2) + Math.pow(g.x - 0, 2));
    h = Math.sqrt(Math.pow(f.y - 0, 2) + Math.pow(f.x - 0, 2));
    k > h && (l = Math.atan((g.y - 0) / (g.x - 0)), k = Math.abs(Math.sin(l) * h), h = Math.abs(Math.cos(l) * h), g.y = k, g.x = 0 < g.x ? h: -h);
    var m = (g.y - f.y) / (g.x - f.x),
    n = Math.atan(m),
    h = 180 * n / Math.PI,
    p = (g.x + f.x) / 2,
    q = (g.y + f.y) / 2,
    k = c / 2,
    l = b / 2,
    t = c / 2;
    0 > f.x && (h += 180, l = -b / 2);
    g = Math.sqrt(Math.pow(f.y - g.y, 2) + Math.pow(f.x - g.x, 2)) / 2;
    g = 0 <= h && 180 > h ? Math.abs((c - Math.abs(f.y)) * Math.sin(n)) + g: Math.abs(f.y * Math.sin(n)) + g;
    c = Math.atan(b / c);
    d = Math.abs(g / (Math.sin(c + Math.abs(n)) * d));
    d = Math.min(1, d);
    c = ((p - l) * m + t + Math.pow(m, 2) * q) / (1 + Math.pow(m, 2));
    f = m * (q - c) + p;
    t = Math.sqrt(Math.pow(l - f, 2) + Math.pow(t - c, 2));
    Math.abs(f) < Math.abs(l) && (t = -t);
    return {
        frontShadowDistance: g,
        shadowRate: d,
        rotate: h,
        pageTranX: t - b / 2,
        maskTranX: f - 0,
        maskTranY: c - k
    }
},
supports = function() {
    var b = document.createElement("div"),
    c = ["Khtml", "Ms", "O", "Moz", "Webkit"];
    return function(d) {
        if (d in b.style) return ! 0;
        d = d.replace(/^[a-z]/,
        function(b) {
            return b.toUpperCase()
        });
        for (var f = c.length; f--;) if (c[f] + d in b.style) return ! 0;
        return ! 1
    }
} (),
setCurrentIndexTextField = function(b, c) {
    var d = bookConfig.totalPagesCaption,
    f = bookConfig.pageNumberCaption;
    void 0 == d && (d = "");
    void 0 == f && (f = "");
    if ("" != f) if (1 != b && b != originTotalPageCount && c) {
        var f = 2 * Math.floor(b / 2),
        g = getShownPageNumber(f),
        h = getShownPageNumber(f + 1);
        b = rightToLeft ? h + "-" + g: g + "-" + h
    } else f = b = getShownPageNumber(b);
    else 1 != b && b != originTotalPageCount && c ? (g = f = 2 * Math.floor(b / 2), h = f + 1, b = rightToLeft ? h + "-" + g: g + "-" + h) : f = b;
    "" == d ? (d = originTotalPageCount, c || (d = originTotalPageCount)) : isNaN(d) || (d = g = parseInt(d), c || (d = originTotalPageCount - originTotalPageCount + g));
    f = bookConfig.RightToLeft ? d + "/" + f: f + "/" + d;
    $("#guidPageIndex").html("<b>" + f + "</b>");
    void 0 != $("#currentPageIndexTextField") && null != $("#currentPageIndexTextField") && void 0 != $("#currentPageIndexTextField")[0] && null != $("#currentPageIndexTextField")[0] && $("#currentPageIndexTextField").val(rightToLeft ? d + "/" + b: b + "/" + d)
},
getShownPageArray = function() {
    var b = bookConfig.pageNumberCaption + "",
    c = originTotalPageCount;
    ";" == b.substr(b.length - 1, 1) && (b = b.substr(0, b.length - 1));
    for (var b = b.split(";"), d = [], f = 0, g = 0; g < b.length; g++) if ("" != b[g] && void 0 != b[g] && (f = b[g].split(":"), f[0])) if (f[1] || (f[1] = ""), -1 < f[1].indexOf("+")) {
        var h = f[0];
        h.indexOf("-");
        for (var h = h.split("-"), k = h[1], h = parseInt(h[0]), k = k ? parseInt(k) : c, f = parseInt(f[1].replace("+", "")), l = h; l <= k; l++) d[l] = l - h + f
    } else isNaN(f[0]) || (h = parseInt(f[0]), d[h] = void 0 == f[1] ? "": f[1]);
    return d
},
getShownPageNumber = function(b) {
    var c = bookConfig.pageNumberCaption;
    if ("" == c || void 0 == c) return b;
    b = parseInt(b);
    c = getShownPageArray();
    return void 0 == c[b] ? b: c[b]
},
getRealPageNumber = function(b) {
    b = getRealPage(b);
    isNaN(b) && (b = 1);
    return b
},
getRealPage = function(b) {
    var c = bookConfig.pageNumberCaption;
    if ("" == c || void 0 == c) return parseInt(b);
    for (var c = getShownPageArray(), d = -1, f = c.length, g = 1; g <= f; g++) if (isNaN(parseInt(b))) {
        if (c[g] += "", c[g].toLowerCase() == b.toLowerCase()) {
            d = g;
            break
        }
    } else if (c[g] == b) {
        d = g;
        break
    }
    return - 1 == d ? parseInt(b) : d
},
setLocationHash = function(b) {
    window.location.hash = "#p=" + getShownPageNumber(b)
},
getSpeedArray = function(b, c) {
    for (var d = c / 2,
    f = (b - b / 4) / d, g = Array(c), h = 0; h < c; h++) g[h] = h < d ? b - (d - h) * f: b + (h - d + 1) * f;
    return g.reverse()
},
getBrowserPre = function() {
    switch (browserType) {
    case 3:
        return "-ms-";
    case 2:
        return "-moz-";
    case 1:
        return "-webkit-";
    case 4:
        return "-o-"
    }
},
getPoint = function(b) {
    if ($.browser.msie) {
        if (void 0 == b.getOrigin || null == b.getOrigin) b.getOrigin = !1;
        if (!b.getOrigin) {
            b.getOrigin = !0;
            b.originX = parseInt(b.css("left"));
            b.originY = parseInt(b.css("top"));
            if (void 0 == b.originX || null == b.originX || isNaN(b.originX)) b.originX = 0;
            if (void 0 == b.originY || null == b.originY || isNaN(b.originY)) b.originY = 0
        }
        return Point(parseInt(b.css("left")) - b.originX, parseInt(b.css("top")) - b.originY)
    }
    return getTransform(b[0])
},
getBookPoint = function(b) {
    return bookType != BookType.slide_book && bookType != BookType.singleSlide_book && bookType != BookType.catalog_book && bookType != BookType.singleCatalog_book ? getTransform(b[0]) : getPoint(b)
},
getTransform = function(b) {
    var c;
    switch (browserType) {
    case 3:
        c = b.style["-ms-transform"];
        break;
    case 2:
        c = b.style["-moz-transform"];
        break;
    case 1:
        c = b.style["-webkit-transform"];
        break;
    case 4:
        c = b.style["-o-transform"];
        break;
    default:
        c = b.style.transform
    }
    if (void 0 == c || null == c) if (c = b.style.transform, void 0 == c || null == c) return Point(0, 0);
    c = c.match(/translate\((.*?)\)/) || c.match(/translate3d\((.*?)\)/);
    if (null == c || "" == c || 2 > c.length) return Point(0, 0);
    c = c[1].split(", ");
    return Point(parseInt(c[0], 10), parseInt(c[1], 10))
},
getScale = function(b) {
    var c;
    switch (browserType) {
    case 3:
        c = b.style["-ms-transform"];
        break;
    case 2:
        c = b.style["-moz-transform"];
        break;
    case 1:
        c = b.style["-webkit-transform"];
        break;
    case 4:
        c = b.style["-o-transform"];
        break;
    default:
        c = b.style.transform
    }
    if (void 0 == c || null == c) if (c = b.style.transform, void 0 == c || null == c) return Point(0, 0);
    c = c.match(/scale\((.*?)\)/) || c.match(/scale3d\((.*?)\)/);
    if (null == c || "" == c) return 1;
    c = c[1].split(", ");
    return c[0]
},
getAliasValue = function(b) {
    b = bookConfig[b];
    if (b instanceof Array) for (; 0 < b.length;) return (b = b[0]) ? bookConfig[b] : void 0;
    else return b
},
getString = function(b, c) {
    return getAliasValue(b) || c
},
getInt = function(b, c) {
    var d = getAliasValue(b);
    try {
        return isNaN(d) || void 0 == d ? c: Number(d)
    } catch(f) {
        return c
    }
},
getBool = function(b, c) {
    return getConfigValue(b, c)
},
isBool = function(b) {
    if (!0 === b || !1 === b) return ! 0;
    if (void 0 == b) return ! 1;
    var c = ["false", "no", "hide", "disable"];
    b = b.toLowerCase();
    return 0 > ["true", "yes", "show", "enable"].indexOf(b) && 0 > c.indexOf(b) ? !1 : !0
},
parseBool = function(b, c) {
    if (!0 === b || !1 === b) return b;
    if (void 0 == b || null == b) return ! 1;
    void 0 == c && (c = !1);
    if ("" == b || "string" != typeof b) return ! 1;
    var d = ["true", "yes", "show", "enable"],
    f = ["false", "no", "hide", "disable"];
    b = b.toLowerCase();
    return 0 > d.indexOf(b) && 0 > f.indexOf(b) ? c: 0 <= d.indexOf(b)
},
getColor = function(b, c) {
    var d = getAliasValue(b);
    return void 0 != d ? colorTo0x(d) : c
},
getImage = function(b) {
    if (0 < iconArray.length) for (var c = 0; c < iconArray.length; c++) if (iconArray[c].url == b) return iconArray[c].img;
    return new Image
},
getLanguage = function(b, c) {
    return selectedLanguage[b] ? selectedLanguage[b] : getLanguageValue(b, c)
};
global.positionForPages || (global.positionForPages = []);
var highlightSearchFun = function(b, c) {
    if (0 != positionForPages.length) {
        var d = !1;
        if (void 0 == frmSearch || null == frmSearch) d = !0;
        frmSearch.isSearchShow || (d = !0);
        0 == frmSearch.itemCount && (d = !0);
        var f = frmSearch.textField.val().toLowerCase();
        rightToLeft && LanguageTool.isRightToLeft(f) && (f = f.reverse());
        "" == f && (d = !0);
        if (!0 == d) clearHighlightFun(b);
        else {
            for (var g, d = 0; d < positionForPages.length; d++) if (positionForPages[d].page == c) {
                g = positionForPages[d].positions;
                break
            }
            if (void 0 == g) clearHighlightFun(b);
            else {
                var h = "url(" + uiBaseURL + "highlight.png)",
                k = "",
                l = "",
                m = "",
                n = "";
                if (0 < g.length) {
                    for (d = 0; d < g.length; d++) {
                        var p = g[d];
                        if ( - 1 < p.word.toLowerCase().indexOf(f)) var q = p.left / (1 - p.width),
                        t = p.top / (1 - p.height),
                        k = k + h + ",",
                        n = n + "no-repeat,",
                        l = l + 100 * q + "% " + 100 * t + "%,",
                        m = m + 100 * p.width + "% " + 100 * p.height + "%,"
                    }
                    0 < k.length ? (k = k.substr(0, k.length - 1), n = n.substr(0, n.length - 1), l = l.substr(0, l.length - 1), m = m.substr(0, m.length - 1), b.css({
                        "background-image": k,
                        "background-repeat": n,
                        "background-position": l,
                        "-webkit-background-size": m,
                        "-o-background-size": m,
                        "background-size": m,
                        display: "block"
                    })) : clearHighlightFun(b)
                } else clearHighlightFun(b)
            }
        }
    }
},
clearHighlightFun = function(b) {
    b.css({
        "background-image": ""
    });
    b.css({
        display: "none"
    })
},
onWindowTap = function(b) {
    Log.print("onWindowTapEnter");
    global.windowTapInterval && window.clearTimeout(global.windowTapInterval);
    global.windowTapInterval = window.setTimeout(function() {
        if ((b = isTouch ? b.originalEvent ? b.originalEvent.changedTouches: b.changedTouches: [b]) && !(3 <= b.length)) {
            Log.print("onWindowTap");
            if (isPhone() || isPad()) {
                if (global.foldingMenu && !0 == global.foldingMenu.visible) return;
                toolBar.showOrHide()
            }
            global.windowTapInterval && window.clearTimeout(global.windowTapInterval)
        }
    },
    401)
},
stopEvent = function(b) {
    try {
        var c = b || window.event;
        c.preventDefault ? (c.preventDefault(), c.stopPropagation()) : (c.returnValue = !1, c.cancelBubble = !0)
    } catch(d) {}
    return ! 1
},
getShownPage = function() {
    function b(b) {
        1 <= b && b <= bookConfig.totalPageCount && c.push(b)
    }
    var c = [];
    if (bookType == BookType.normal_book) {
        var d = flipBook.getCurrentPageIndex(),
        d = 2 * Math.floor(d / 2),
        f = d + 1;
        rightToLeft ? (b(f), b(d)) : (b(d), b(f))
    }
    bookType == BookType.single_book && (d = singlePageBook.getCurrentPageIndex(), c.push(d));
    if (bookType == BookType.slide_book) {
        if (void 0 == slideBook) return;
        d = slideBook.getCurrentPageIndex();
        d = 2 * Math.floor(d / 2);
        f = d + 1;
        rightToLeft ? (b(f), b(d)) : (b(d), b(f))
    }
    if (bookType == BookType.singleSlide_book) {
        if (void 0 == singleSlideBook) return;
        d = parseInt(singleSlideBook.getCurrentPageIndex());
        b(d)
    }
    if (bookType == BookType.catalog_book) {
        if (void 0 == catalogBook) return;
        d = catalogBook.getCurrentPageIndex();
        d = 2 * Math.floor(d / 2);
        f = d + 1;
        rightToLeft ? (b(f), b(d)) : (b(d), b(f))
    }
    if (bookType == BookType.singleCatalog_book) {
        if (void 0 == singleCatalogBook) return;
        d = parseInt(singleCatalogBook.currentIndex);
        b(d)
    }
    if (bookType == BookType.phone_slide_book) {
        if (void 0 == phoneSlideBook) return;
        d = phoneSlideBook.getRealPageIndex();
        d = 2 * Math.floor(d / 2);
        f = d + 1;
        rightToLeft ? (b(f), b(d)) : (b(d), b(f))
    }
    if (bookType == BookType.singlePhone_slide_book) {
        if (void 0 == singlePhoneSlideBook) return;
        d = singlePhoneSlideBook.getRealPageIndex();
        b(d)
    }
    return c
},
getPagesByRange = function(b) {
    function c(b) {
        for (var c = 0; c < d.length; c++) if (d[c] == b) return ! 0;
        return ! 1
    }
    var d = [];
    if (!b || "string" !== typeof b || "" == b.trim()) return d;
    b = b.split(",");
    for (var f = 0; f < b.length; f++) {
        var g = b[f];
        if (!isNaN(g)) g = parseInt(g),
        c(g) || d.push(g);
        else if ( - 1 < g.indexOf("-")) {
            var h = g.split("-");
            if (! (2 > h.length)) for (var g = parseInt(h[0]), k = parseInt(h[1]), h = Math.min(g, k), g = Math.max(g, k); h <= g; h++) h > bookConfig.totalPageCount || c(h) || d.push(h)
        }
    }
    return d
},
getShownPageString = function() {
    var b = getShownPage();
    return 1 == b.length ? b[0] + "": b[0] + "-" + b[1]
},
isIE = function() {
    return $.browser.msie
},
isIE8 = function() {
    return $.browser.msie && 8 == $.browser.version
},
isIE9 = function() {
    return $.browser.msie && 9 == $.browser.version
},
isIE11 = function() {
    return $.browser.msie && 11 == $.browser.version
},
isPad = function() {
    return $.browser.device == $.browser.DEVICE_PAD || $.browser.device == $.browser.DEVICE_PC && $.system.name == $.system.ANDROID ? !0 : !1
},
isIpad = function() {
    var b = navigator.userAgent.toLowerCase();
    return 0 < b.indexOf("ipad") && 0 < b.indexOf("safari")
},
isPC = function() {
    return $.browser.device == $.browser.DEVICE_PC ? !0 : !1
},
isIpod = function() {
    return 0 < navigator.userAgent.toLowerCase().indexOf("ipod")
},
isIphone = function() {
    return 0 < navigator.userAgent.toLowerCase().indexOf("iphone")
},
isNokiaPhone = function() {
    var b = navigator.userAgent.toLowerCase();
    return 0 < b.indexOf("msie") && 0 < b.indexOf("wpdesktop")
},
isPhone = function() {
    var b = window.location.search;
    return $.browser.device == $.browser.DEVICE_PHONE || 0 <= b.toLowerCase().indexOf("phone=true") || 0 <= b.toLowerCase().indexOf("phonebook=true") ? !0 : !1
},
isAndroidWeChat = function() {
    return $.system.name == $.system.ANDROID && $.browser.chrome && 40 > $.browser.version
},
isAndroidDefault = function() {
    return $.system.name == $.system.ANDROID && $.browser.safari
},
isPhoneBook = function() {
    if ($.system.name == $.system.ANDROID && $.browser.uc) return ! 0;
    var b = window.location.search;
    return (isPhone() || isPad()) && $.system.name == $.system.ANDROID && 4 > parseInt($.system.version) || 0 <= b.toLowerCase().indexOf("phonebook=true") || (isPhone() || isPad()) && "slide" == bookConfig.FlipStyle.toLowerCase() ? !0 : !1
},
isFlipBook = function() {
    return bookType == BookType.normal_book || bookType == BookType.single_book || bookType == BookType.catalog_book || bookType == BookType.singleCatalog_book ? !0 : !1
},
isCatalogBook = function() {
    void 0 == bookConfig.FlipStyle && (bookConfig.FlipStyle = getConfigValue("FlipStyle", "flip"));
    return "catalog" == bookConfig.FlipStyle.toLowerCase() || isBelowIE9() ? !0 : !1
},
isSlideBook = function() {
    void 0 == bookConfig.FlipStyle && (bookConfig.FlipStyle = getConfigValue("FlipStyle", "flip"));
    return "slide" == bookConfig.FlipStyle.toLowerCase() || isBelowIE9() ? !0 : !1
},
MiniStyle = Class({
    create: function(b) {
        this.init(b);
        this.initEvent()
    },
    init: function(b) {
        this.caption = $("<div class='miniTitle'></div>");
        this.caption.html(getLanguage("lblFullscreen", "Click to view in fullscreen."));
        b.append(this.caption)
    },
    onResize: function() {},
    initEvent: function() {
        this.caption.bind(_event._end,
        function() {
            this.isMini() && (fullscreenFun(), this.hide())
        }.bind(this));
        this.caption.bind(_event._enter,
        function() {
            this.isMini() && $(this).animate({
                opacity: 1
            },
            200)
        }.bind(this));
        this.caption.bind(_event._leave,
        function() {
            this.isMini() && $(this.caption).animate({
                opacity: 0
            },
            200,
            function() {
                $(this).hide()
            }.bind(this.caption))
        }.bind(this));
        bookContainer.bind("mousemove",
        function(b) {
            this.isMini() && b.pageX > windowWidth / 2 - 25 && b.pageX < windowWidth / 2 + 25 && b.pageY > windowHeight / 2 - 25 && b.pageY < windowHeight / 2 + 25 && this.show()
        }.bind(this))
    },
    clearStyle: function() {
        this.caption.empty()
    },
    hide: function() {
        this.caption && this.caption.hide()
    },
    show: function() {
        this.caption.show();
        this.caption.animate({
            opacity: 1
        },
        200)
    },
    isMini: function() {
        return isPhone() || isPad() || !this.isMiniStyle() ? !1 : (global.foldingMenu && global.foldingMenu.hide(), BookInfo.getBook() && BookInfo.getBook().miniFullScreen && (BookInfo.getBook().miniFullScreen.remove(), BookInfo.getBook().addminiFullscreen = !1), !0)
    },
    isMiniStyle: function() {
        return (windowWidth <= bookConfig.maxWidthToSmallMode || windowHeight <= bookConfig.maxHeightToSmallMode) && bookConfig.MiniStyle && !fullScreenApi.isFullScreen() ? !0 : !1
    }
});
function isBelowIE9() {
    return $.browser.msie ? 9 > $.browser.version ? !0 : !1 : !1
}
function isBelowIE10() {
    return $.browser.msie ? 10 > $.browser.version ? !0 : !1 : !1
}
function hideLeftRightButton() {
    return void 0 == leftRightButton || null == leftRightButton || bookType != BookType.slide_book || "lite" != bookConfig.ToolbarViewMode.toLowerCase() || bookType != BookType.singleSlide_book || "lite" != bookConfig.ToolbarViewMode.toLowerCase() || bookType == BookType.singleCatalog_book || bookType == BookType.catalog_book || isPhone() ? !1 : !0
}
function addGoogleAdSense() {
    bookConfig.haveAdSense && loadJavascript("http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js",
    function() {
        var b = document.createElement("ins"),
        b = $(b);
        b.addClass("adsbygoogle");
        b.css({
            display: "inline-block",
            width: "100%",
            height: "100%"
        });
        b.attr("data-ad-client", bookConfig.adSenseClientId);
        var c = $("<div/>");
        c.css({
            position: "absolute",
            "z-index": 1,
            left: bookConfig.adSenseLeft + "px",
            top: bookConfig.adSenseTop + "px",
            width: bookConfig.adSenseWidth + "px",
            height: bookConfig.adSenseHeight + "px"
        });
        $("body").append(c);
        c.append(b);
        eval("(adsbygoogle = window.adsbygoogle || []).push({});")
    })
}
var BookInfo = Class({
    statics: {
        getCurrentPages: function() {
            return getShownPage()
        },
        getPageCount: function() {
            return bookConfig.totalPageCount
        },
        isRightToLeft: function() {
            return rightToLeft
        },
        getBookType: function() {
            return bookType
        },
        getBook: function() {
            var b;
            switch (this.getBookType()) {
            case BookType.normal_book:
                b = flipBook;
                break;
            case BookType.single_book:
                b = singlePageBook;
                break;
            case BookType.slide_book:
                b = slideBook;
                break;
            case BookType.phone_slide_book:
                b = phoneSlideBook;
                break;
            case BookType.singlePhone_slide_book:
                b = singlePhoneSlideBook;
                break;
            case BookType.singleSlide_book:
                b = singleSlideBook;
                break;
            case BookType.catalog_book:
                b = catalogBook;
                break;
            case BookType.singleCatalog_book:
                b = singleCatalogBook
            }
            return b
        },
        getCurrentPageIndex: function() {
            var b;
            switch (this.getBookType()) {
            case BookType.normal_book:
                b = flipBook;
                break;
            case BookType.single_book:
                b = singlePageBook;
                break;
            case BookType.slide_book:
                b = slideBook;
                break;
            case BookType.phone_slide_book:
                b = phoneSlideBook;
                break;
            case BookType.singlePhone_slide_book:
                b = singlePhoneSlideBook;
                break;
            case BookType.singleSlide_book:
                b = singleSlideBook;
                break;
            case BookType.catalog_book:
                b = catalogBook;
                break;
            case BookType.singleCatalog_book:
                b = singleCatalogBook
            }
            return b
        },
        left: function() {
            return this.getBook().getLeft()
        },
        top: function() {
            return this.getBook().getTop()
        },
        width: function() {
            return this.getBook().getWidth()
        },
        height: function() {
            return this.getBook().getHeight()
        },
        scale: function() {
            return this.getBook().getScale()
        },
        container: function() {
            return bookContainer
        }
    }
}),
getConfigValue = function(b, c) {
    void 0 != c && "string" == typeof c && "" != c.trim() && isBool(c) && (c = parseBool(c));
    var d;
    d = void 0 != bookConfig[b] ? bookConfig[b] : getValueFromAliasConfig(b);
    return void 0 == d ? c: void 0 == c ? d: "number" == typeof c ? Number(d) : "boolean" == typeof c ? parseBool(d) : d
},
getValueFromAliasConfig = function(b) {
    if (global.aliasConfig && (b = aliasConfig[b])) for (var c = 0; c < b.length; c++) {
        var d = b[c];
        if (void 0 != bookConfig[d]) return bookConfig[d]
    }
},
getLanguageValue = function(b, c) {
    try {
        if (!global.aliasLanguage) return c;
        var d = aliasLanguage[b];
        if (!d) return c;
        for (var f = 0; f < d.length; f++) {
            var g = d[f];
            if (selectedLanguage[g]) return selectedLanguage[g]
        }
        return c
    } catch(h) {
        return c
    }
},
fixDownloadURLValue = function() {
    "" == bookConfig.DownloadURL && void 0 != bookConfig.downloadURL && "" != bookConfig.downloadURL && (bookConfig.DownloadURL = bookConfig.downloadURL)
},
cr = DeString("c3753b3f49449a65f9ad12578d7a4602c8ae34"),
checkBookConfig = function() {
    void 0 == window.aliasConfig && (window.aliasConfig = {});
    bookConfig.searchColor = getConfigValue("searchColor", "#00ffff");
    bookConfig.searchAlpha = getConfigValue("searchAlpha", 0.3);
    bookConfig.appLogoIcon = getConfigValue("appLogoIcon", "");
    bookConfig.appLogoLinkURL = getConfigValue("appLogoLinkURL", "");
    bookConfig.HomeURL = getConfigValue("HomeURL", "");
    bookConfig.appLogoOpenWindow = getConfigValue("appLogoOpenWindow", "Blank");
    bookConfig.bookTitle = getConfigValue("bookTitle", "FLIPBOOK");
    bookConfig.bookDescription = getConfigValue("bookDescription", "");
    bookConfig.toolbarColor = getConfigValue("toolbarColor", "#27181A");
    bookConfig.iconColor = getConfigValue("iconColor", "#FFFFFF");
    bookConfig.pageNumColor = getConfigValue("pageNumColor", "#000000");
    bookConfig.loadingBackground = getConfigValue("loadingBackground", "#1F2232");
    bookConfig.logoHeight = getConfigValue("logoHeight", 40);
    bookConfig.logoPadding = getConfigValue("logoPadding", 0);
    bookConfig.logoTop = getConfigValue("logoTop", 0);
    bookConfig.HomeButtonVisible = getConfigValue("HomeButtonVisible", "Hide");
    bookConfig.ShareButtonVisible = getConfigValue("ShareButtonVisible", "Hide");
    bookConfig.ThumbnailsButtonVisible = getConfigValue("ThumbnailsButtonVisible", "Hide");
    bookConfig.thumbnailColor = getConfigValue("thumbnailColor", "#FFFFFF");
    bookConfig.thumbnailAlpha = getConfigValue("thumbnailAlpha", 60);
    bookConfig.ZoomButtonVisible = getConfigValue("ZoomButtonVisible", "Hide");
    bookConfig.TableOfContentButtonVisible = getConfigValue("TableOfContentButtonVisible", "Hide");
    bookConfig.BookMarkButtonVisible = getConfigValue("BookMarkButtonVisible", "Hide");
    bookConfig.bookmarkBackground = getConfigValue("bookmarkBackground", "#000000");
    bookConfig.bookmarkFontColor = getConfigValue("bookmarkFontColor", "#ffffff");
    bookConfig.SearchButtonVisible = getConfigValue("SearchButtonVisible", "Hide");
    bookConfig.FullscreenButtonVisible = getConfigValue("FullscreenButtonVisible", "Show");
    bookConfig.leastSearchChar = getConfigValue("leastSearchChar", 0);
    bookConfig.searchBackground = getConfigValue("searchBackground", "#383838");
    bookConfig.searchFontColor = getConfigValue("searchFontColor", "#ffffff");
    bookConfig.PrintButtonVisible = getConfigValue("PrintButtonVisible", "Hide");
    bookConfig.printWatermarkFile = getConfigValue("printWatermarkFile", "");
    bookConfig.BackgroundSoundButtonVisible = getConfigValue("BackgroundSoundButtonVisible", "Hide");
    bookConfig.BackgroundSoundURL = getConfigValue("BackgroundSoundURL", "");
    bookConfig.BackgroundSoundLoop = getConfigValue("BackgroundSoundLoop", -1);
    bookConfig.HelpButtonVisible = getConfigValue("HelpButtonVisible", "Hide");
    bookConfig.helpContentFileURL = getConfigValue("helpContentFileURL", "");
    bookConfig.helpWidth = getConfigValue("helpWidth", 400);
    bookConfig.helpHeight = getConfigValue("helpHeight", 450);
    bookConfig.showHelpContentAtFirst = getConfigValue("showHelpContentAtFirst", "No");
    bookConfig.aboutButtonVisible = getConfigValue("aboutButtonVisible", "Hide");
    bookConfig.aboutContactInfoTxt = getConfigValue("aboutContactInfoTxt", "");
    bookConfig.AutoPlayButtonVisible = getConfigValue("AutoPlayButtonVisible", "Hide");
    bookConfig.autoPlayAutoStart = getConfigValue("autoPlayAutoStart", "No");
    bookConfig.autoPlayDuration = getConfigValue("autoPlayDuration", 3);
    bookConfig.autoPlayLoopCount = getConfigValue("autoPlayLoopCount", 1);
    bookConfig.minZoomWidth = getConfigValue("minZoomWidth", 403);
    bookConfig.minZoomHeight = getConfigValue("minZoomHeight", 518);
    bookConfig.mouseWheelFlip = getConfigValue("mouseWheelFlip", "yes");
    bookConfig.DownloadButtonVisible = getConfigValue("DownloadButtonVisible", "yes");
    bookConfig.DownloadURL = getConfigValue("DownloadURL", "");
    fixDownloadURLValue();
    bookConfig.bgBeginColor = getConfigValue("bgBeginColor", "#E6E6E6");
    bookConfig.bgEndColor = getConfigValue("bgEndColor", "#E3E3E3");
    bookConfig.bgMRotation = getConfigValue("bgMRotation", 90);
    bookConfig.backGroundImgURL = getConfigValue("backGroundImgURL", "");
    bookConfig.LeftShadowWidth = getConfigValue("LeftShadowWidth", 40);
    bookConfig.LeftShadowAlpha = getConfigValue("LeftShadowAlpha", 1);
    bookConfig.RightShadowWidth = getConfigValue("RightShadowWidth", 40);
    bookConfig.RightShadowAlpha = getConfigValue("RightShadowAlpha", 1);
    bookConfig.pageBackgroundColor = getConfigValue("pageBackgroundColor", "#FFFFFF");
    bookConfig.flipshortcutbutton = getConfigValue("flipshortcutbutton", "Hide");
    bookConfig.OriginPageIndex = getConfigValue("OriginPageIndex", 1);
    bookConfig.HardPageEnable = getConfigValue("HardPageEnable", "No");
    bookConfig.RightToLeft = getConfigValue("RightToLeft", "No");
    bookConfig.flippingTime = getConfigValue("flippingTime", 0.3);
    void 0 != bookConfig.flippingTime && (bookConfig.flippingTime = 0.2 > bookConfig.flippingTime ? 0.2 : bookConfig.flippingTime);
    bookConfig.retainBookCenter = getConfigValue("retainBookCenter", "Yes");
    bookConfig.totalPagesCaption = getConfigValue("totalPagesCaption", "");
    bookConfig.pageNumberCaption = getConfigValue("pageNumberCaption", "");
    bookConfig.topMargin = getConfigValue("topMargin", 10);
    bookConfig.bottomMargin = getConfigValue("bottomMargin", 10);
    bookConfig.leftMargin = getConfigValue("leftMargin", 10);
    bookConfig.rightMargin = getConfigValue("rightMargin", 10);
    bookConfig.topMarginOnMobile = getConfigValue("topMarginOnMobile", 10);
    bookConfig.bottomMarginOnMobile = getConfigValue("bottomMarginOnMobile", 10);
    bookConfig.leftMarginOnMobile = getConfigValue("leftMarginOnMobile", 10);
    bookConfig.rightMarginOnMobile = getConfigValue("rightMarginOnMobile", 10);
    if (isPhone() || isPad()) bookConfig.topMargin = bookConfig.topMarginOnMobile,
    bookConfig.bottomMargin = bookConfig.bottomMarginOnMobile,
    bookConfig.leftMargin = bookConfig.leftMarginOnMobile,
    bookConfig.rightMargin = bookConfig.rightMarginOnMobile;
    bookConfig.visibleAreaLeft = getConfigValue("visibleAreaLeft", "0%");
    bookConfig.visibleAreaTop = getConfigValue("visibleAreaTop", "0%");
    bookConfig.visibleAreaRight = getConfigValue("visibleAreaRight", "100%");
    bookConfig.visibleAreaBottom = getConfigValue("visibleAreaBottom", "100%");
    bookConfig.visibleAreaLeft = isNaN(parseFloat(bookConfig.visibleAreaLeft)) ? "0%": bookConfig.visibleAreaLeft;
    bookConfig.visibleAreaTop = isNaN(parseFloat(bookConfig.visibleAreaTop)) ? "0%": bookConfig.visibleAreaTop;
    bookConfig.visibleAreaRight = isNaN(parseFloat(bookConfig.visibleAreaRight)) ? "100%": bookConfig.visibleAreaRight;
    bookConfig.visibleAreaBottom = isNaN(parseFloat(bookConfig.visibleAreaBottom)) ? "100%": bookConfig.visibleAreaBottom;
    bookConfig.LinkDownColor = getConfigValue("LinkDownColor", "#0000FF");
    bookConfig.LinkAlpha = getConfigValue("LinkAlpha", 0.4);
    bookConfig.OpenWindow = getConfigValue("OpenWindow", "Blank");
    bookConfig.googleAnalyticsID = getConfigValue("googleAnalyticsID", "");
    bookConfig.language = getConfigValue("language", "English");
    bookConfig.AboutAddress = getConfigValue("AboutAddress", "");
    bookConfig.AboutEmail = getConfigValue("AboutEmail", "support@fliphtml5.com");
    bookConfig.AboutMobile = getConfigValue("AboutMobile", "");
    bookConfig.AboutWebsite = getConfigValue("AboutWebsite", "http://www.fliphtml5.com");
    bookConfig.AboutDescription = getConfigValue("AboutDescription", "");
    bookConfig.AboutAuthor = getConfigValue("AboutAuthor", "fliphtml5.com");
    bookConfig.totalPageCount = getConfigValue("totalPageCount", 1);
    bookConfig.largePageWidth = getConfigValue("largePageWidth", 1440);
    bookConfig.largePageHeight = getConfigValue("largePageHeight", 1728);
    bookConfig.normalPath = getConfigValue("normalPath", "files/page/");
    bookConfig.largePath = getConfigValue("largePath", "files/large/");
    bookConfig.thumbPath = getConfigValue("thumbPath", "files/thumb/");
    bookConfig.FlipStyle = getConfigValue("FlipStyle", "flip");
    bookConfig.showDoublePage = getConfigValue("showDoublePage", "yes");
    bookConfig.QRPath = getConfigValue("QRPath", "files/extfile/QRURL.png");
    bookConfig.QRCode = getConfigValue("QRCode", "hide");
    bookConfig.MiniStyle = getConfigValue("MiniStyle", "Show");
    bookConfig.AnnotationButtonVisible = getConfigValue("AnnotationButtonVisible", "hide");
    bookConfig.VideoButtonVisible = getConfigValue("VideoButtonVisible", "hide");
    bookConfig.SlideshowButtonVisible = getConfigValue("SlideshowButtonVisible", "hide");
    bookConfig.CompanyLogoFile = getConfigValue("CompanyLogoFile", "");
    bookConfig.UIBaseURL = getConfigValue("UIBaseURL", "");
    bookConfig.haveAdSense = getConfigValue("haveAdSense", "No");
    bookConfig.adSenseLeft = getConfigValue("adSenseLeft", 0);
    bookConfig.adSenseTop = getConfigValue("adSenseTop", 0);
    bookConfig.adSenseWidth = getConfigValue("adSenseWidth", 0);
    bookConfig.adSenseHeight = getConfigValue("adSenseHeight", 0);
    bookConfig.adSenseClientId = getConfigValue("adSenseClientId", "");
    bookConfig.productName = getConfigValue("productName", "Flip HTML5");
    bookConfig.homePage = getConfigValue("homePage", "http://www.fliphtml5.com");
    "Yes" == bookConfig.addPaperCoil && (bookConfig.BindingType = "loose");
    bookConfig.addPaperCoil = "loose" == bookConfig.BindingType ? !0 : getConfigValue("addPaperCoil", "No");
    bookConfig.ToolbarViewMode = getConfigValue("ToolbarViewMode", "Lite");
    bookConfig.ToolbarViewMode = bookConfig.ToolbarViewMode.toLocaleLowerCase();
    bookConfig.HomeButtonIcon = getConfigValue("HomeButtonIcon", "");
    bookConfig.AnnotationButtonIcon = getConfigValue("AnnotationButtonIcon", "");
    bookConfig.VideoButtonIcon = getConfigValue("VideoButtonIcon", "");
    bookConfig.SlideshowButtonIcon = getConfigValue("SlideshowButtonIcon", "");
    bookConfig.ShareButtonIcon = getConfigValue("ShareButtonIcon", "");
    bookConfig.ThumbnailButtonIcon = getConfigValue("ThumbnailButtonIcon", "");
    bookConfig.ZoomInButtonIcon = getConfigValue("ZoomInButtonIcon", "");
    bookConfig.ZoomOutButtonIcon = getConfigValue("ZoomOutButtonIcon", "");
    bookConfig.FullscreenButtonIcon = getConfigValue("FullscreenButtonIcon", "");
    bookConfig.ExitFullscreenButtonIcon = getConfigValue("ExitFullscreenButtonIcon", "");
    bookConfig.BookmarkButtonIcon = getConfigValue("BookmarkButtonIcon", "");
    bookConfig.TableOfContentButtonIcon = getConfigValue("TableOfContentButtonIcon", "");
    bookConfig.SearchButtonIcon = getConfigValue("SearchButtonIcon", "");
    bookConfig.PrintButtonIcon = getConfigValue("PrintButtonIcon", "");
    bookConfig.BackgroundSoundButtonOnIcon = getConfigValue("BackgroundSoundButtonOnIcon", "");
    bookConfig.BackgroundSoundButtonOffIcon = getConfigValue("BackgroundSoundButtonOffIcon", "");
    bookConfig.HelpButtonIcon = getConfigValue("HelpButtonIcon", "");
    bookConfig.AboutButtonIcon = getConfigValue("AboutButtonIcon", "");
    bookConfig.AutoPlayStartButtonIcon = getConfigValue("AutoPlayStartButtonIcon", "");
    bookConfig.AutoPlayStopButtonIcon = getConfigValue("AutoPlayStopButtonIcon", "");
    bookConfig.DownloadButtonIcon = getConfigValue("DownloadButtonIcon", "");
    bookConfig.searchTextJS = getConfigValue("searchTextJS", "files/search/book_config.js");
    bookConfig.searchPositionJS = getConfigValue("searchPositionJS", "files/search/text_position.js");
    bookConfig.userSmallMode = getConfigValue("userSmallMode", "yes");
    bookConfig.maxWidthToSmallMode = getConfigValue("maxWidthToSmallMode", 400);
    bookConfig.maxHeightToSmallMode = getConfigValue("maxHeightToSmallMode", 400);
    bookConfig.backgroundScene = getConfigValue("backgroundScene", "None");
    bookConfig.audioVolume = getConfigValue("audioVolume", 0.5);
    bookConfig.userListPath = getConfigValue("userListPath", "files/extfiles/user.js");
    bookConfig.isFlipPdf = getConfigValue("isFlipPdf", !1); ! 1 == bookConfig.isFlipPdf && void 0 != global.isFlipPdf && (bookConfig.isFlipPdf = isFlipPdf);
    bookConfig.FlipSound = getConfigValue("FlipSound", !1);
    bookConfig.CurlingPageCorner = getConfigValue("CurlingPageCorner", !0);
    bookConfig.iconFontColor = getConfigValue("iconFontColor", "#ffffff");
    try {
        bookConfig.retainBookCenter = void 0 != staticAd && !0 == staticAd.haveAd ? !1 : getConfigValue("retainBookCenter", !0)
    } catch(b) {}
    bookConfig.borderColor = getConfigValue("borderColor", "#572f0d");
    bookConfig.outerCoverBorder = getConfigValue("outerCoverBorder", !1);
    bookConfig.hardCoverBorderWidth = getConfigValue("hardCoverBorderWidth", 0);
    bookConfig.cornerRound = getConfigValue("cornerRound", 0);
    bookConfig.hardCoverBorderWidth = bookConfig.HardPageEnable ? Number.between(0, 16, bookConfig.hardCoverBorderWidth) : 0;
    bookConfig.cornerRound = bookConfig.HardPageEnable ? Number.between(0, bookConfig.hardCoverBorderWidth, bookConfig.cornerRound) : 0;
    bookConfig.productName = getConfigValue("productName", "Flip HTML5");
    bookConfig.homePage = getConfigValue("homePage", "http://www.fliphtml5.com");
    productName = bookConfig.productName || "Flip HTML5";
    homePage = bookConfig.homePage || "http://www.fliphtml5.com"; (isPhone() || isPad()) && "slide" != bookConfig.FlipStyle.toLowerCase() && (bookConfig.FlipStyle = "flip");
    isBelowIE9() && (bookConfig.BookMarkButtonVisible = !1);
    if (isPhone() || isPad() || "catalog" == bookConfig.FlipStyle.toLowerCase() || "slide" == bookConfig.FlipStyle.toLowerCase() && "lite" == bookConfig.ToolbarViewMode.toLowerCase()) bookConfig.flipshortcutbutton = !1;
    bookConfig.BackgroundSoundURL || (bookConfig.BackgroundSoundButtonVisible = !1);
    if (bookType == BookType.singleCatalog_book || bookType == BookType.catalog_book || bookType == BookType.slide_book && "lite" == bookConfig.ToolbarViewMode.toLowerCase() || bookType == BookType.singleSlide_book && "lite" == bookConfig.ToolbarViewMode.toLowerCase() || isPhone() || isPad()) bookConfig.flipshortcutbutton = !1
},
CreateNoteRemark = function() {
    isPhone() || (global.noteCookie = new NoteCookie(tmpContainer), global.textRemark = new Remark, isBelowIE9() || (global.signature = new Signature(tmpContainer)), global.annotationShapes = window.AnnotationShapes, global.annotationImage = new AddImageFile(tmpContainer), global.textRemark.bindOnCreated(this, this.resetButton), global.noteCookie.bindOnCreated(this, this.resetButton), global.annotationShapes.bindOnCreated(this, this.resetButton), global.annotationImage.bindOnCreated(this, this.resetButton), isBelowIE9() || global.signature.bindOnCreated(this, this.resetButton))
},
AddNotesByContainers = function(b, c, d) {
    isPhone() || ($(d).css({
        background: "rgba(0,0,0,0)"
    }), isBelowIE9() && $(d).css({
        "background-image": "url('aaaa.a')"
    }), void 0 != global.noteCookie && noteCookie.setContainers(b, c, d), void 0 != global.textRemark && textRemark.setContainers(b, c, d), isBelowIE9() || void 0 == global.signature || isBelowIE9() || signature.setContainers(b, c, d), void 0 != global.annotationShapes && annotationShapes.setContainers(b, c, d), void 0 != global.bookmark && bookmark.setContainers(b, c, d), void 0 != global.global.annotationImage && global.annotationImage.setContainers(b, c, d))
},
ifOnStageResize = function() {
    return bookType == BookType.catalog_book || bookType == BookType.singleCatalog_book ? !1 : !0
},
isSupportTransition = function() {
    var b = document.body.style || document.documentElement.style;
    return void 0 !== b.transition || void 0 !== b.WebkitTransition || void 0 !== b.MozTransition || void 0 !== b.MsTransition || void 0 !== b.OTransition
},
changeLanguage = function(b) {
    selectLanguage(b);
    toolBar.changeLanguage();
    moreBar.changeLanguage();
    void 0 != frmBookmark && frmBookmark.setCaption(getLanguage("frmBookMark", "Book Mark"));
    void 0 != frmSearch && frmSearch.setCaption(getLanguage("frmSearch", "Search"))
},
selectedLanguage,
selectLanguage = function(b) {
    b = (b + "").toLowerCase();
    if (0 == language.length) selectedLanguage = [];
    else {
        for (var c = [], d = 0; d < language.length; d++) if (language[d].language.toLowerCase() == b) {
            c = language[d];
            break
        }
        selectedLanguage = c
    }
},
googleAnalytics = function() {
    bookConfig.googleAnalyticsID && window.setTimeout(function() { (function(b, c, d, f, g, h, k) {
            b.GoogleAnalyticsObject = g;
            b[g] = b[g] ||
            function() { (b[g].q = b[g].q || []).push(arguments)
            };
            b[g].l = 1 * new Date;
            h = c.createElement(d);
            k = c.getElementsByTagName(d)[0];
            h.async = 1;
            h.src = f;
            k.parentNode.insertBefore(h, k)
        })(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
        eval("ga('create', '" + bookConfig.googleAnalyticsID + "', 'auto')");
        eval("ga('send', 'pageview')")
    },
    3E3)
},
controlAudioVolume = function() {
    if (!isNaN(bookConfig.audioVolume)) {
        var b = parseFloat(bookConfig.audioVolume);
        document.getElementById("BGSound") && ($("#BGSound")[0].volume = b);
        flipAudio && (flipAudio[0].volume = b)
    }
},
TurnonAutoFlip = function() {
    bookConfig.autoFlipOnStart && window.setTimeout(function() {
        auto_player && auto_player.start();
        toolBar && toolBar.changeAutoPlayIcon && toolBar.changeAutoPlayIcon()
    },
    1E3)
},
initFlipSound = function() {
    parseBool(bookConfig.FlipSound, !0) && (flipAudio = $("<audio preload><source src='" + soundBaseURL + "flipsound.ogg' type='audio/ogg'><source src='" + soundBaseURL + "flipsound.mp3' type='audio/mpeg'></audio>"), tmpContainer.append(flipAudio))
};
function isZoomStatus() {
    return BookInfo.getBook() && BookInfo.getBook().status_zoom ? !0 : !1
}
function copyToClipboard(b) {
    if (window.clipboardData) window.clipboardData.clearData(),
    window.clipboardData.setData("Text", b);
    else if ( - 1 != navigator.userAgent.indexOf("Opera")) window.location = b;
    else if (window.netscape) {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
        } catch(c) {
            return alert("Your browser does not support clipboard.Please do it yourself."),
            !1
        }
        var d = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
        if (d) {
            var f = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
            if (f) {
                f.addDataFlavor("text/unicode");
                var g = {},
                g = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
                g.data = b;
                f.setTransferData("text/unicode", g, 2 * b.length);
                if (!d) return ! 1;
                d.setData(f, null, Components.interfaces.nsIClipboard.kGlobalClipboard)
            }
        }
    } else alert("Your browser does not support clipboard.Please do it yourself.")
}
var isPlaying;
Class("BackgroundMusic", {
    create: function() {
        bookConfig.BackgroundSoundURL && (this.index = 0, this.sleeping = $.browser.device != $.browser.DEVICE_PC ? !0 : !1, isPlaying = !0, this.initAudio(), this.initResource(), this.initEvents())
    },
    initAudio: function() {
        this.sound = -1 == bookConfig.BackgroundSoundLoop ? $("<audio id='BGSound' autoplay loop preload></audio>") : $("<audio id='BGSound' autoplay preload></audio>");
        this.html_sound = this.sound[0];
        tmpContainer.append(this.sound)
    },
    initResource: function() {
        this.sound.attr("src", bookConfig.BackgroundSoundURL)
    },
    play: function() {
        this.html_sound.play();
        isPlaying = !0
    },
    pause: function() {
        this.html_sound.pause();
        isPlaying = !1
    },
    playOrPause: function() { ! 0 == isPlaying ? this.pause() : this.play()
    },
    initEvents: function() {
        $("body").bind(_event._down,
        function(b) { ! 1 != this.sleeping && (this.play(), this.sleeping = !1)
        }.bind(this));
        var b = bookConfig.BackgroundSoundLoop; - 1 == b ? this.sound.bind("ended", this.play.bind(this)) : this.sound.bind("ended",
        function(c) {
            this.index < b - 1 ? this.play() : this.pause();
            this.index++
        }.bind(this));
        $("#btnSound").bind(_event._end, this.playOrPause.bind(this));
        $("#moreBtnSound").bind(_event._end, this.playOrPause.bind(this))
    }
});
bdor[25] = "i";
var form = Class({
    create: function(b, c) {
        this.formBackground = $("<div></div>");
        this.background = $("<div></div>");
        this.titleBox = $("<div></div>");
        this.contentBox = $("<div></div>");
        this.formConfig = b;
        this.parent = c;
        this.visible = !1;
        this.addFormSkin && this.addFormSkin();
        this.initFormEvent()
    },
    initFormEvent: function() {
        $(this.titleBox).dragToMove(this.formBackground);
        $(this.formBackground).bind(_event._down,
        function(b) {
            b.stopPropagation()
        });
        $(this.formBackground).bind(_event._move,
        function(b) {
            b.stopPropagation()
        });
        $(this.formBackground).bind(_event._end,
        function(b) {
            b.stopPropagation()
        })
    },
    setTop: function(b) {
        this.formBackground.css({
            top: b + "px"
        })
    },
    getWidth: function() {
        return this.width
    },
    getHeight: function() {
        return this.height
    },
    resize: function(b, c) {
        this.onResize(240, c)
    },
    onResize: function(b, c) {
        this.setWidth(b);
        this.setHeight(c)
    },
    closeForm: function() {
        $(this.formBackground).hide()
    },
    setCaption: function(b) {
        this.formConfig.caption = b;
        this.captionBox.setCaption(b)
    }
});
form.expand({
    addFormSkin: function() {
        this.titleHeight = 40;
        this.formConfig = $.extend({
            scrollbarWidth: 13
        },
        this.formConfig);
        this.formConfig.closeIconURL = uiBaseURL + "closeForm.png";
        this.formBackground.css({
            width: this.formConfig.width + "px",
            "padding-right": this.formConfig.scrollbarWidth + "px",
            height: this.formConfig.height + "px"
        });
        this.background.css({
            "background-color": this.formConfig.mainColor,
            width: this.formConfig.width + "px",
            height: this.formConfig.height + "px"
        });
        this.titleBox.css({
            "border-bottom": "1px solid " + colorDiv(this.formConfig.mainColor, 40),
            width: this.formConfig.width + "px",
            "line-height": this.titleHeight + "px",
            height: this.titleHeight + "px"
        });
        this.contentBox.css({
            top: this.titleHeight + 1 + "px",
            width: this.formConfig.width + "px",
            height: this.formConfig.height - this.titleHeight - 1 + "px",
            "padding-right": this.formConfig.scrollbarWidth + "px"
        });
        this.initTitleBox();
        this.setFormLayout()
    },
    initTitleBox: function(b) {
        this.captionBox = new label(this.formConfig.caption, this.titleBox);
        this.captionBox.setFont(12, "#ffffff", "arial");
        this.closeButton = new button(this.titleBox, {
            buttonType: 1,
            width: 26,
            height: 26,
            iconURL: this.formConfig.closeIconURL,
            asImgButton: !0
        });
        this.captionBox.getHeight();
        this.captionBox.setLabelPosition(15);
        this.closeButton.setButtonPosition(5, 5, ["right", "top"]);
        this.closeButton.onMouseUp(this, this.closeForm);
        this.captionBox.setFont("12px", "#ffffff", "arial");
        this.captionBox.setCaption("<strong>" + this.formConfig.caption + "</strong>")
    },
    setFormLayout: function() {
        $(this.parent).append(this.formBackground);
        $(this.formBackground).append(this.background);
        this.formBackground.append(this.titleBox);
        this.formBackground.append(this.contentBox);
        this.formBackground.addClass("formBackground");
        this.background.addClass("form_Background");
        this.background.addClass("formBoxShdow");
        this.titleBox.addClass("formTitleBox");
        this.contentBox.addClass("formContentBox");
        rightToLeft && (horizontalMirror(this.formBackground), horizontalMirror(this.titleBox.find("div")))
    },
    setWidth: function(b) {
        this.width = b;
        100 > b && (this.width = 100);
        this.formBackground.css({
            width: this.width + "px",
            "padding-right": this.formConfig.scrollbarWidth + "px"
        });
        this.contentBox.css({
            width: this.width + "px",
            "padding-right": this.formConfig.scrollbarWidth + "px"
        });
        this.background.css({
            width: this.width + "px"
        });
        this.titleBox.css({
            width: this.width + "px"
        });
        this.formBackground.css({
            left: (this.isSearchShow ? 10 : -(this.width + this.formConfig.scrollbarWidth) - 20) + "px"
        })
    },
    setHeight: function(b) {
        this.height = b;
        100 >= b && (this.height = 100);
        this.formBackground.css({
            height: this.height + "px"
        });
        this.background.css({
            height: this.height + "px"
        });
        this.contentBox.css({
            height: this.height - (this.titleHeight + 1) + "px"
        })
    }
},
!0);
function searchItem(b, c, d, f, g, h, k, l) {
    this.width = f;
    this.height = g;
    this.background = $("<div class='searchItem'></div>");
    c = c.replaceAll("<", "&lt");
    c = c.replaceAll(">", "&gt");
    this.textField = $("<p></p>");
    this.mainColor = h;
    this.pageIndex = b;
    this.mouseLeaveColor = k;
    this.mouseOverColor = l;
    g = colorDiv(this.mouseLeaveColor, 20);
    h = colorAdd(this.mainColor, 20);
    $(this.background).css({
        color: bookConfig.searchFontColor,
        width: f + "px",
        "font-size": "12px",
        "background-color": this.mouseLeaveColor,
        "border-bottom": "1px solid " + g,
        "border-top": "1px solid " + h,
        cursor: "pointer",
        "text-shadow": "1px 1px " + colorAdd(this.mainColor, 40),
        position: "relative"
    });
    this.isMouseMove = !1;
    this.downPoint = Point(0, 0);
    $(this.background).append(this.textField);
    $(d).append(this.background);
    var m = !1;
    $(this.background).bind(_event._down,
    function() {
        if (global.phoneSearch && !global.phoneSearch.isDrag || !global.phoneSearch && !isSearchDrag) m = !0
    });
    $(this.background).bind(_event._move,
    function() {
        if (global.phoneSearch && !global.phoneSearch.isDrag || !global.phoneSearch && !isSearchDrag) m = !1
    });
    $(this.background).bind(_event._end,
    function() {
        if (global.phoneSearch && !global.phoneSearch.isDrag || !global.phoneSearch && !isSearchDrag) m && gotoPageFun(this.pageIndex),
        m = !1
    }.bind(this));
    bdor[22] = "l";
    rightToLeft ? (this.pageSpan = $("<span style='position:absolute;right:10px;top:8px;'></span>"), this.pageSpan.html(":" + getShownPageNumber(b)), this.textField.css({
        margin: "10px 30px 10px 20px"
    }), c = c.reverse()) : (this.pageSpan = $("<span style='position:absolute;left:10px;top:8px;'></span>"), this.pageSpan.html(getShownPageNumber(b) + ":"), this.textField.css({
        margin: "10px 20px 10px 30px"
    }));
    b = this.cutText(c, searchWord);
    this.textField.html(b.riseAWord(searchWord));
    this.textField.css({
        "font-family": "arial"
    });
    this.background.append(this.pageSpan);
    rightToLeft && (this.textField.css({
        "text-align": "right"
    }), isPhone() || horizontalMirror(this.background));
    this.initEvent()
}
searchItem.prototype.onResize = function(b) {
    $(this.background).css({
        width: b + "px"
    })
};
searchItem.prototype.setPosition = function(b, c) {};
searchItem.prototype.getWidth = function() {
    return this.width
};
searchItem.prototype.getHeight = function() {
    return this.height
};
searchItem.prototype.cutText = function(b, c) {
    if (120 > b.length || "" == c) return b;
    var d = b.length,
    f = b.toLowerCase().indexOf(c.toLowerCase()),
    g;
    60 <= f ? (g = Math.max(60 <= d - f ? f - 60 : d - 120, 0), g = ".." + b.substring(g, f)) : g = b.substring(0, f);
    d = 60 < d - f ? b.substring(f, 60 <= f ? f + 60 : 120) + "..": b.substring(f, d);
    return g + d
};
searchItem.prototype.initEvent = function() {
    var b = this;
    this.background.bind("mouseenter",
    function(c) {
        b.background.css({
            background: b.mouseOverColor
        })
    });
    this.background.bind("mouseleave",
    function(c) {
        b.background.css({
            background: b.mouseLeaveColor
        })
    })
};
bdor[11] = "q";
bdor[5] = "i";
var searchWord = "",
searchPageArr = [],
isSearchDrag = !1,
loadSearchFlag = !1,
searchForm = Class({
    create: function(b) {
        var c = {
            caption: getLanguage("frmSearch", "Search"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.searchBackground,
            fontColor: bookConfig.searchFontColor
        };
        this._super(c, b);
        this.textContent = $("<div id='textContent'></div>");
        this.textField = $("<input type='text' id='search_text_textField' style='padding-right:5px;'/>");
        this.searchButton = $("<div id='searchButton'></div>").append("<img src='" + uiBaseURL + "searchButton.png'/>");
        this.resultContent = $("<div id='resultContent'></div>");
        this.searchScrollBac = $("<div id='searchScrollBac'></div>");
        this.searchScrollBox = $("<div id='searchScrollBox'></div>");
        rightToLeft && (this.textField.attr("dir", "rtl"), this.resultContent.css({
            "text-align": "right"
        }), horizontalMirror(this.textField), horizontalMirror(this.resultContent));
        isPhone() || isPad() ? this.searchScrollBac.css({
            "overflow-y": "scroll",
            "overflow-x": "hidden",
            "-webkit-overflow-scrolling": "touch"
        }) : (b = $("<link rel='stylesheet' href='" + bookConfig.UIBaseURL + "style/scrollbar.css'/>"), $("body").append(b));
        this.textField.focus();
        this.itemArr = [];
        this.itemHeight = this.itemWidth = 0;
        void 0 == window.textForPages && (window.textForPages = []);
        this.mouseDownY = -1;
        this.hideScrollBar = this.scrollMouseDown = !1;
        this.itemLeaveColor = "#ffffff";
        this.addSkin && this.addSkin();
        this.initEvent()
    },
    initEvent: function() {
        var b = this;
        this.searchButton.bind(_event._end,
        function(c) {
            b.searchStart()
        });
        this.textField.bind("keydown",
        function(c) {
            13 == c.keyCode && b.searchStart()
        });
        this.contentBox.bind(_event._down,
        function(c) {
            b.scrollMouseDown = !0;
            isSearchDrag = !1;
            c = isTouch ? c.originalEvent.touches: [c];
            b.mouseDownY = c[0].pageY
        });
        this.contentBox.bind(_event._move,
        function(c) {
            b.scrollMouseDown && (c = isTouch ? c.originalEvent.touches: [c], 20 < Math.abs(b.mouseDownY - c[0].pageY) && (isSearchDrag = !0))
        });
        this.contentBox.bind(_event._end,
        function(c) {
            b.scrollMouseDown = !1
        })
    },
    addItems: function(b) {
        function c() {
            m == h ? (window.clearTimeout(d.timeout), clearProgressBar(d.contentBox)) : (k = m * g, l = Math.min((m + 1) * g, f), d.timeout = window.setTimeout(function() {
                for (var f = l,
                g = k; g < f; g++) {
                    var h = b[g],
                    t = new searchItem(h.search_page, h.search_text, d.searchScrollBox, d.itemWidth, d.itemHeight, d.itemLeaveColor, d.itemLeaveColor, colorDiv(d.itemLeaveColor, 15));
                    d.itemArr.push(t);
                    searchPageArr.push(h.search_page)
                }
                m++;
                c()
            },
            100))
        }
        var d = this;
        this.itemArr = [];
        searchPageArr = [];
        var f = this.itemCount = b.length,
        g = 15,
        h = Math.ceil(f / g),
        k,
        l,
        m = 0;
        this.timeout = 0;
        addProgressBar(this.contentBox, this.width, this.height);
        c()
    },
    clearItems: function() {
        window.clearTimeout(this.timeout);
        clearProgressBar(this.contentBox);
        this.resultContent.html("");
        this.searchScrollBox.empty();
        searchWord = "";
        this.textField.val("");
        this.itemCount = 0
    },
    doSearch: function(b) {
        this.searchScrollBox.empty();
        this.resultContent.html("");
        searchWord = b;
        rightToLeft && LanguageTool.isRightToLeft(b) && (b = b.reverse());
        b = searchFromPages(textForPages, b);
        this.resultContent.html("&nbsp;&nbsp;" + getLanguage("lblPages", "Pages") + " : " + b.length + "&nbsp;&nbsp;");
        this.addItems(b);
        BookInfo.getBook().addSearchHighlight()
    },
    searchStart: function() {
        var b = this.textField.val();
        this.search(b)
    },
    search: function(b) {
        sendvisitinfo(6, BookInfo.getBook().getCurrentPageIndex());
        if (0 < bookConfig.leastSearchChar && b.length < bookConfig.leastSearchChar) this.resultContent.html("&nbsp;&nbsp;" + getLanguage("pnlSearchInputInvalid", "The search text is too short.") + "&nbsp;&nbsp;");
        else if (!1 == loadSearchFlag) if (isTouchDevice()) loadJavascript(bookConfig.searchTextJS,
        function() {
            loadSearchFlag = !0;
            this.doSearch(b)
        }.bind(this),
        function() {
            loadSearchFlag = !0;
            textForPages = []
        });
        else {
            var c = !1,
            d = !1,
            f = function() {
                c && d && (loadSearchFlag = !0, this.doSearch(b))
            }.bind(this);
            loadJavascript(bookConfig.searchTextJS,
            function() {
                c = !0;
                f()
            },
            function() {
                loadSearchFlag = !0;
                textForPages = []
            });
            loadJavascript(bookConfig.searchPositionJS,
            function() {
                d = !0;
                f()
            },
            function() {
                loadSearchFlag = !0
            })
        } else this.doSearch(b)
    },
    closeForm: function() {
        if (this.isSearchShow) {
            var b = windowWidth / 4,
            b = Math.max(300, b);
            this.isSearchShow = !1;
            this.formBackground.animate({
                left: -b - 20
            },
            400,
            function() {
                this.clearItems();
                this.itemArr = []
            }.bind(this));
            this.itemCount = 0;
            BookInfo.getBook().clearSearchHighlight()
        }
    },
    showForm: function() {
        this.isSearchShow = !0;
        this.formBackground.animate({
            left: 10
        },
        400,
        function() {
            this.textField.focus()
        }.bind(this));
        if ($("#preSearch")) {
            var b = $("#preSearch").val();
            "" != b && void 0 != b && (this.textField.val(b), this.search(b))
        }
    },
    onResize: function() {},
    isSearchShow: !1
}).extend(form),
phoneSearchForm = Class({
    create: function(b, c) {
        this.contentBox = c;
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miSearch").title.height();
        this.formConfig = $.extend({
            width: this.width,
            height: this.height,
            scrollbarWidth: 13
        },
        b);
        this.textPadding = 15;
        this.titleHeight = 40;
        this.itemWidth = this.width;
        this.itemHeight = 85;
        this.mouseDownY = -1;
        this.isDrag = this.scrollMouseDown = !1;
        this.hideScrollBar = !0;
        this.itemLeaveColor = this.contentBac = colorDiv(bookConfig.toolbarColor, 30);
        this.textContent = $("<div id='textContent'></div>");
        this.resultContent = $("<div id='resultContent'></div>");
        this.searchScrollBac = $("<div id='searchScrollBac'></div>");
        this.searchScrollBox = $("<div id='searchScrollBox'></div>");
        this.searchButton = $("<div></div>");
        this.textField = $('<input id="search_text_textField" style="position : absolute" type="text" size="13">');
        rightToLeft && this.textField.attr("dir", "rtl");
        this.searchButton.addCssSprite(phoneIconsURL[0], "miSearch", 15, 15, phoneIconInfo);
        this.searchButton.find("div").css({
            width: "100%",
            height: "100%"
        });
        this.contentBox.append(this.textContent);
        this.contentBox.append(this.resultContent);
        this.contentBox.append(this.searchScrollBac);
        this.searchScrollBac.append(this.searchScrollBox);
        this.textContent.append(this.textField);
        this.textContent.append(this.searchButton);
        this.itemArr = [];
        void 0 == window.textForPages && (window.textForPages = []);
        this.initStyle();
        this.initEvent();
        this.initScrollEvent()
    },
    initStyle: function() {
        this.textContentHeight = 60;
        this.resultContentHeight = 25;
        this.textContent.css({
            width: this.width + "px",
            height: this.textContentHeight + "px",
            background: this.contentBac,
            "border-top": "1px solid " + colorAdd(this.contentBac, 40),
            "border-bottom": "1px solid " + colorDiv(this.contentBac, 40)
        });
        var b = this.contentBox.width() - 2 * this.textPadding - 10 - 25;
        this.textField.css({
            top: "19px",
            left: this.textPadding + "px",
            width: b + "px",
            height: "18px",
            background: this.contentBac,
            "border-radius": "12px",
            "border-left": "1px solid " + colorDiv(this.contentBac, 40),
            "border-top": "1px solid " + colorDiv(this.contentBac, 40),
            "border-right": "1px solid " + colorAdd(this.contentBac, 40),
            "border-bottom": "1px solid " + colorAdd(this.contentBac, 40),
            color: "white",
            "padding-right": "25px",
            "padding-left": "5px",
            "font-family": "Tahoma"
        });
        rightToLeft && this.textField.attr("dir", "rtl");
        this.searchButton.css({
            cursor: "pointer",
            width: 15,
            height: 15,
            position: "absolute",
            right: 8 + this.textPadding + "px",
            top: (this.textContentHeight - 15) / 2 + "px"
        });
        this.resultContent.css({
            width: this.width + "px",
            height: this.resultContentHeight + "px",
            "line-height": this.resultContentHeight + "px",
            top: this.textContentHeight + 1 + "px",
            left: "0px",
            position: "absolute",
            color: "#ffffff",
            "font-family": "Tahoma",
            "font-size": "12px",
            "vertical-align": "middle",
            background: colorDiv(bookConfig.toolbarColor, 20),
            "text-shadow": "1px 1px #000000"
        });
        this.searchScrollBac.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height - this.textContentHeight - this.resultContentHeight - 5 + "px",
            top: this.textContentHeight + this.resultContentHeight + 3 + "px",
            left: "0px",
            background: this.contentBac
        })
    },
    onResize: function() {
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miSearch").title.height();
        this.textContent.css({
            width: this.width + "px"
        });
        var b = this.contentBox.width() - 2 * this.textPadding - 10 - 25;
        this.textField.css({
            width: b + "px"
        });
        this.searchButton.css({
            right: 8 + this.textPadding + "px"
        });
        this.resultContent.css({
            width: this.width + "px"
        });
        this.searchScrollBac.css({
            width: this.width + "px",
            height: this.height - this.textContentHeight - this.resultContentHeight - 5 + "px"
        });
        for (b = 0; b < this.itemArr.length; b++) this.itemArr[b].onResize(this.width)
    },
    initScrollEvent: function() {
        if (isPhone() || isPad()) this.searchScrollBac.css({
            "overflow-y": "auto",
            "overflow-x": "hidden",
            "-webkit-overflow-scrolling": "touch"
        });
        else {
            var b = $("<link rel='stylesheet' href='" + bookConfig.UIBaseURL + "style/scrollbar.css'/>");
            $("body").append(b);
            this.searchScrollBac.css({
                overflow: "hidden"
            });
            ScrollFunction(this.searchScrollBac, this.searchScrollBox, this)
        }
    }
}).extend(searchForm);
searchForm.expand({
    addSkin: function() {
        this.setLayout();
        this.textPadding = 15;
        this.textContentHeight = this.buttonAreaHeight = this.buttonAreaWidth = 60;
        this.resultContentHeight = 25;
        this.itemLeaveColor = this.contentBac = colorAdd(bookConfig.searchBackground, 112);
        this.textContent.css({
            width: "100%",
            height: this.textContentHeight + "px",
            background: this.contentBac,
            "border-top": "1px solid " + colorAdd(this.contentBac, 40),
            "border-bottom": "1px solid " + colorDiv(this.contentBac, 40)
        });
        this.searchButton.mouseEnterGradient(bookConfig.searchBackground, colorDiv(bookConfig.searchBackground, 30), colorAdd(bookConfig.searchBackground, 105));
        this.searchButton.css({
            right: 8 + this.formConfig.scrollbarWidth + "px",
            top: (this.textContentHeight - 36) / 2 + "px"
        });
        var b = this.background.width() - this.textPadding - this.buttonAreaWidth;
        this.textField.css({
            left: this.textPadding + "px",
            width: b + "px"
        });
        colorDiv(this.contentBac, 40);
        b = colorAdd(this.contentBac, 40);
        this.resultContent.css({
            width: "100%",
            height: this.resultContentHeight + "px",
            "line-height": this.resultContentHeight + "px",
            "border-top": "1px solid " + colorAdd(this.contentBac, 40),
            "border-bottom": "1px solid " + colorDiv(this.contentBac, 90)
        });
        this.resultContent.setGradient(colorDiv(this.contentBac, 50), !1);

        this.searchScrollBac.css({
            "overflow-y": "auto",
            width: "100%",
            height: this.height - this.titleHeight - this.textContentHeight - this.resultContentHeight - 5 + "px",
            top: this.textContentHeight + this.resultContentHeight + "px",
            background: this.contentBac,
            "border-top": "1px solid " + b
        });
        this.searchScrollBox.css({
            position: "absolute",
            "overflow-y": "auto",
            width: this.width + this.formConfig.scrollbarWidth + "px",
            height: this.height - this.titleHeight - this.textContentHeight - this.resultContentHeight - 5 + "px",
            top: this.textContentHeight + this.resultContentHeight + 4 + "px"
        })
    },
    setLayout: function() {
        this.textContent.append(this.searchButton);
        this.textContent.append(this.textField);
        this.contentBox.append(this.textContent);
        this.contentBox.append(this.resultContent);
        this.contentBox.append(this.searchScrollBac);
        this.contentBox.append(this.searchScrollBox);
        this.textField.addClass("searchTextField");
        this.textField.addClass("inputInnerShadow");
        this.textContent.addClass("searchTextContent");
        this.resultContent.addClass("searchResultContent");
        this.searchButton.addClass("searchButton")
    },
    onResize: function(b, c) {
        this.width = Math.max(100, b);
        this.height = Math.max(100, c);
        this.itemWidth = this.width;
        this.itemHeight = 60;
        this.setWidth(b);
        this.setHeight(c);
        var d = b - this.textPadding - this.buttonAreaWidth;
        this.searchScrollBox.css({
            width: this.width + this.formConfig.scrollbarWidth + "px",
            height: this.height - this.titleHeight - this.textContentHeight - this.resultContentHeight - 5 + "px"
        });
        this.searchScrollBac.css({
            height: this.height - this.titleHeight - this.textContentHeight - this.resultContentHeight - 5 + "px"
        });
        this.textField.css({
            width: d + "px"
        });
        for (d = 0; d < this.itemArr.length; d++) this.itemArr[d].onResize(this.itemWidth, this.itemHeight)
    }
},
!0);
var miniStyle, loadingBook = Class({
    create: function(b, c) {
        this.width = 700;
        this.height = 460;
        this.bg = $("<div></div>");
        this.loadingBox = $("<div></div>");
        this.bg.css({
            "background-color": c,
            width: window.innerWidth + "px",
            height: window.innerHeight + "px"
        });
        isTouch && (this.width = window.innerWidth, this.height = window.innerHeight);
        c || (c = "#1F2232");
        this.loadingBox.css({
            width: this.width + "px",
            height: this.height + "px",
            position: "absolute",
            left: (window.innerWidth - this.width) / 2 + "px",
            top: (window.innerHeight - this.height) / 2 + "px",
            "background-color": c,
            position: "absolute",
            "z-index": "10"
        });
        b.append(this.bg);
        this.bg.append(this.loadingBox);
        this.showHide(!1)
    },
    chooseFlipSlide: function() {
        var b = this,
        c = initBookTye();
        global.isFlipModel = !0;
        switch (c) {
        case "phone_slide_book":
            this.showHide(!1);
            isFlipModel = !1;
            b.hide();
            bookType = windowWidth > windowHeight && bookConfig.showDoublePage ? 4 : 5;
            init();
            toolBar.hide();
            global.QRbutton && QRbutton.hide();
            break;
        case "slide_book":
            this.showHide(!1);
            isFlipModel = !1;
            b.hide();
            bookType = !0 == bookConfig.showDoublePage ? 3 : 6;
            miniStyle || (miniStyle = new MiniStyle(tmpContainer));
            init();
            break;
        case "flip_book":
            this.showHide(!1);
            isFlipModel = !0;
            this.hide();
            bookType = windowWidth > windowHeight ? BookType.normal_book: BookType.single_book;
            miniStyle || (miniStyle = new MiniStyle(tmpContainer));
            init();
            bookConfig.flipshortcutbutton && leftRightButton.show();
            break;
        case "catalog_book":
            this.showHide(!1);
            isFlipModel = !1;
            b.hide();
            bookType = BookType.catalog_book;
            miniStyle || (miniStyle = new MiniStyle(tmpContainer));
            init();
            break;
        case "normal_book":
            this.initPannel();
            this.showHide(!0);
            this.flipModel.bind(_event._end,
            function() {
                isFlipModel = !0;
                b.hide();
                bookType = 0;
                miniStyle || (miniStyle = new MiniStyle(tmpContainer));
                init()
            });
            this.padModel.bind(_event._end,
            function() {
                isFlipModel = !1;
                b.hide();
                bookType = !0 == bookConfig.showDoublePage ? 3 : 6;
                miniStyle || (miniStyle = new MiniStyle(tmpContainer));
                init();
                window.setTimeout(function() {
                    var b = $("<img src='" + uiBaseURL + "toolbarshow.png'/>");
                    tmpContainer.append($(b).asImageButton());
                    $(b).css({
                        width: "50px",
                        height: "50px",
                        bottom: "10px",
                        right: "10px",
                        position: "absolute",
                        "z-index": "300"
                    });
                    $(b).bind(_event._end,
                    function() { ! 1 == toolBar.visible && (toolBar.show(), onStageResize(), $(b).css({
                            display: "none"
                        }))
                    });
                    bookContainer.bind(_event._down,
                    function(b) {});
                    bookContainer.bind(_event._end,
                    function(c) {
                        bookType != BookType.slide_book && bookType != BookType.singleSlide_book && bookType != BookType.singlePhone_slide_book && bookType != BookType.phone_slide_book && bookType != BookType.singleCatalog_book && bookType != BookType.catalog_book || !0 != toolBar.visible || (toolBar.hide(), onStageResize(), $(b).css({
                            display: "block"
                        }))
                    })
                },
                200)
            });
            var d = 10,
            f = window.setInterval(function() {
                b.descriptionLabel.html(getLanguage("lblSelectMode", "Select View Mode Please.") + "(" + d + ")");
                d--;
                0 >= d && (window.clearInterval(f), window.setTimeout(function() {
                    b.flipModel.trigger(_event._end)
                },
                20))
            },
            1E3)
        }
    },
    initPannel: function() {
        var b = this;
        this.titleLabel = new label("", this.loadingBox);
        this.descriptionLabel = $("<div></div>");
        this.flipModel = $("<div></div>");
        this.padModel = $("<div></div>");
        this.loadingBox.append(this.titleLabel);
        this.loadingBox.append(this.descriptionLabel);
        this.loadingBox.append(this.flipModel);
        this.loadingBox.append(this.padModel);
        this.flipModel.append($("<img src='" + uiBaseURL + "pc.png'/>").asImageButton());
        this.padModel.append($("<img src='" + uiBaseURL + "pad.png'/>").asImageButton());
        this.flipModel.css({
            position: "absolute",
            left: (this.width - 500) / 2 + "px",
            top: (this.height - 262) / 2 + 70 + "px"
        });
        this.padModel.css({
            position: "absolute",
            left: (this.width - 500) / 2 + 260 + "px",
            top: (this.height - 262) / 2 + 70 + "px"
        });
        this.titleLabel.setCSS({
            position: "absolute",
            height: "50px",
            width: b.width + "px",
            left: 0,
            top: (this.height - 262) / 2 - 50 + "px",
            "line-height": "50px",
            "text-align": "center",
            "vertical-align": "middle",
            overflow: "hidden",
            "white-space": "nowrap",
            "text-overflow": "ellipsis",
            "font-size": "30px",
            color: "#ffffff"
        });
        this.descriptionLabel.css({
            position: "absolute",
            height: "50px",
            width: this.width + "px",
            left: 0,
            top: (this.height - 262) / 2 + "px",
            "line-height": "50px",
            "text-align": "center",
            "vertical-align": "middle",
            "font-size": "20px",
            color: "#ffffff"
        });
        this.titleLabel.setCaption(window.document.title);
        $(this.loadingBox).css({
            "text-shadow": "0 0 10px #8c97cb, 0 0 20px #8c97cb,0 0 30px #8c97cb"
        });
        this.flipModel.bind(_event._enter,
        function() {
            b.flipModel.css({
                cursor: "pointer",
                border: "2px solid #ff8040"
            })
        });
        this.padModel.bind(_event._enter,
        function() {
            b.padModel.css({
                cursor: "pointer",
                border: "2px solid #ff8040"
            })
        });
        this.flipModel.bind(_event._leave,
        function() {
            b.flipModel.css({
                cursor: "pointer",
                border: ""
            })
        });
        this.padModel.bind(_event._leave,
        function() {
            b.padModel.css({
                cursor: "pointer",
                border: ""
            })
        })
    },
    onResize: function() {
        void 0 != this.loadingBox && (this.bg.css({
            width: window.innerWidth + "px",
            height: window.innerHeight + "px"
        }), this.loadingBox.css({
            width: this.width + "px",
            height: this.height + "px",
            left: (window.innerWidth - this.width) / 2 + "px",
            top: (window.innerHeight - this.height) / 2 + "px"
        }))
    },
    showHide: function(b) {
        b ? this.loadingBox.css("display", "block") : this.loadingBox.css("display", "none")
    },
    hide: function() {
        this.bg.remove()
    }
});
function loadXMLString(b) {
    var c = null;
    if (!window.DOMParser && window.ActiveXObject) for (var d = ["MSXML.2.DOMDocument.6.0", "MSXML.2.DOMDocument.3.0", "Microsoft.XMLDOM"], f = 0; f < d.length; f++) try {
        c = new ActiveXObject(d[f]);
        c.async = !1;
        c.loadXMLString(b);
        break
    } catch(g) {} else if (window.DOMParser && document.implementation && document.implementation.createDocument) try {
        domParser = new DOMParser,
        c = domParser.parseFromString(b, "text/xml")
    } catch(h) {} else return null;
    return c
}
function loadXMLFile(b) {
    var c = null;
    if (!window.DOMParser && window.ActiveXObject) for (var d = ["MSXML.2.DOMDocument.6.0", "MSXML.2.DOMDocument.3.0", "Microsoft.XMLDOM"], f = 0; f < d.length; f++) try {
        c = new ActiveXObject(d[f]);
        break
    } catch(g) {} else if (document.implementation && document.implementation.createDocument) try {
        c = document.implementation.createDocument("", "", null)
    } catch(h) {} else return null;
    null != c && (c.async = !1, c.load(b));
    return c
}
bdor[26] = "h";
bdor[16] = "q";
var printBar = Class({
    create: function(b) {
        this.background = $("<div class='printBar'></div>");
        this.contentBack = $("<div class='printBack'></div>");
        this.contentBox = $("<div class='printBG'></div>");
        this.toolBox = $("<div class='printBox'></div>");
        this.checkBox = $("<div class='printBox'></div>");
        this.titleBox = $("<div class='printBox'></div>");
        this.printArea = $("<div></div>");
        this.printAll = $('<p><input type="radio" value="printAll" id="printAll" name="gender" checked=\'true\' onClick=\'setPrintValue("printAll")\'/><label id=\'frmPrintall\' for="printAll">' + getLanguage("frmPrintall", "Print All Pages") + "</label></p>");
        this.printCurrent = $('<p><input type="radio" value="printCurrent" id="printCurrent" name="gender" onClick=\'setPrintValue("printCurrent")\'/><label id=\'frmPrintcurrent\' for="printCurrent">' + getLanguage("frmPrintcurrent", "Print Current Page") + "</label></p>");
        var c = '<p><input type="radio" value="printRange" id="printRange" name="gender" onClick=\'setPrintValue("printRange")\'/><label id=\'frmPrintRange\' for="printRange">' + getLanguage("frmPrintRange", "Print Range ") + "</label><input id='rangeNum' width='30px' style='left:50px' type='text'/><label id='frmPrintexample' for=\"example\">" + getLanguage("frmPrintexample", "Example: 2,3,5-10") + "</label></p>";
        this.printRange = $(c);
        this.printSubmit = $('<p><button id=\'frmPrintbtn\' type="button" style="width:49px;height:28px;">' + getLanguage("frmPrintbtn", "Print") + "</button></p>");
        this.printSubmit.css({
            position: "absolute",
            right: 30,
            "margin-top": "5px"
        });
        setPrintValue("printAll");
        this.showing = !1;
        this.width = windowWidth;
        this.height = windowHeight;
        this.contentWidth = 330;
        this.contentHeight = 213;
        this.mainColor = "#888888";
        this.background.css({
            height: this.height + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        });
        this.contentBack.css({
            height: this.contentHeight + 10 + "px",
            width: this.contentWidth + 10 + "px",
            left: (this.width - this.contentWidth) / 2 - 5 + "px"
        });
        this.contentBack.css({
            opacity: 0.5
        });
        this.toolBox.css({
            width: "330px",
            height: "31px",
            top: "0px",
            left: "0px",
            background: "#333333"
        });
        this.checkBox.css({
            width: "330px",
            height: "300px",
            top: "31px",
            left: "0px"
        });
        this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px"
        });
        this.contentBack.css({
            top: (this.height - this.contentHeight) / 2 - 5 + "px"
        });
        bdor[16] = "q";
        $(this.background).css({
            "-webkit-box-shadow": "0 0 5px rgba(40, 40, 40, 0.5)",
            "-moz-box-shadow": "0 0 5px rgba(40, 40, 40, 0.5)",
            "-o-box-shadow": "0 0 5px rgba(40, 40, 40, 0.5)",
            "-ms-box-shadow": "0 0 5px rgba(40, 40, 40, 0.5)",
            "box-shadow": "0 0 5px rgba(40, 40, 40, 0.5)"
        });
        $(b).append(this.background);
        $(b).append(this.contentBack);
        $(b).append(this.contentBox);
        $(this.contentBox).append(this.toolBox);
        $(this.contentBox).append(this.checkBox);
        $(this.checkBox).append(this.printAll);
        $(this.checkBox).append(this.printCurrent);
        $(this.checkBox).append(this.printRange);
        $(this.checkBox).append(this.printSubmit);
        this.contentBox.css({
            "text-shadow": "1px 1px #ffffff",
            background: "#dddddd"
        });
        this.closeButton = $("<div></div>");
        $(this.closeButton).css({
            top: "0px",
            right: "0px",
            position: "absolute"
        });
        $(this.closeButton).append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton());
        this.titleBox.css({
            height: "20px",
            left: "15px",
            position: "absolute"
        });
        this.titleBox.css({
            color: "#ffffff",
            top: "7px"
        });
        this.titleBox.css({
            "text-shadow": "1px 1px #000000",
            "font-family": "verdana"
        });
        $(this.titleBox).html(getLanguage("frmPrintCaption", "Print"));
        $(this.toolBox).append(this.closeButton);
        $(this.toolBox).append(this.titleBox);
        this.initEvent();
        this.initPrintEvent();
        this.background.css({
            display: "none"
        });
        this.contentBox.css({
            display: "none"
        });
        this.contentBack.css({
            display: "none"
        });
        rightToLeft && (horizontalMirror(this.contentBox), horizontalMirror(this.titleBox), horizontalMirror(this.printSubmit), horizontalMirror(this.printAll.find("label")), horizontalMirror(this.printCurrent.find("label")), horizontalMirror(this.printRange.find("label")), horizontalMirror($("#rangeNum")), $("#rangeNum").attr("dir", "rtl"))
    },
    onResize: function() {
        this.contentHeight = 213;
        this.contentWidth = 330;
        this.background.css({
            height: windowHeight + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (windowWidth - this.contentWidth) / 2 + "px"
        });
        this.contentBack.css({
            height: this.contentHeight + 10 + "px",
            width: this.contentWidth + 10 + "px",
            left: (windowWidth - this.contentWidth) / 2 - 5 + "px"
        });
        this.toolBox.css({
            width: "330px",
            height: "31px",
            top: "0px",
            left: "0px"
        });
        this.checkBox.css({
            width: "330px",
            height: "300px",
            top: "31px",
            left: "0px"
        });
        this.contentBox.css({
            top: (windowHeight - this.contentHeight) / 2 + "px"
        });
        this.contentBack.css({
            top: (windowHeight - this.contentHeight) / 2 - 5 + "px"
        });
        this.closeButton.css({
            top: "0px",
            right: "0px"
        });
        this.printAll.css({
            "margin-left": "10px"
        });
        this.printCurrent.css({
            "margin-left": "10px"
        });
        this.printRange.css({
            "margin-left": "10px"
        });
        $("#rangeNum").css({
            width: "50px",
            "margin-left": "10px",
            "margin-right": "10px"
        });
        $("#rangeNum").css({
            "border-right": "1px solid " + colorAdd("#ffffff", 40)
        });
        $("#rangeNum").css({
            "border-bottom": "1px solid " + colorAdd("#ffffff", 40)
        });
        $("#rangeNum").css({
            "border-left": "1px solid " + colorDiv("#aaaaaa", 40)
        });
        $("#rangeNum").css({
            "border-top": "1px solid " + colorDiv("#aaaaaa", 40)
        });
        this.printArea.css({
            top: -windowHeight + "px",
            left: "0px"
        })
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px")
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    showshow: function() {
        $(this.background).css({
            display: "block"
        });
        $(this.contentBox).fadeIn(500);
        $(this.contentBack).fadeIn(500);
        this.showing = !0
    },
    hideBox: function() {
        $(this.background).fadeOut(500);
        $(this.contentBox).fadeOut(500);
        $(this.contentBack).fadeOut(500);
        this.showing = !1
    },
    initEvent: function() {
        var b = this;
        this.background.bind(_event._down,
        function(c) {
            b.hideBox();
            b.showing = !1
        });
        this.closeButton.bind("mouseover",
        function(c) {
            b.closeButton.css({
                cursor: "pointer"
            })
        });
        this.closeButton.bind(_event._end,
        function(c) {
            b.hideBox();
            b.showing = !1
        })
    },
    changeLanguage: function() {
        $("#frmPrintall").text(getLanguage("frmPrintall", "Print All Pages"));
        $("#frmPrintcurrent").text(getLanguage("frmPrintcurrent", "Print Current Page"));
        $("#frmPrintRange").text(getLanguage("frmPrintcurrent", "Print Current Page"));
        $("#frmPrintexample").text(getLanguage("frmPrintexample", "Example: 2,3,5-10"));
        $("#frmPrintbtn").text(getLanguage("frmPrintbtn", "Print"))
    },
    getImageSizeForMM: function(b, c) {
        return b / 210 >= c / 297 ? {
            width: 210,
            height: Math.floor(210 * c / b)
        }: {
            width: Math.floor(297 * b / c),
            height: 297
        }
    },
    getImageSizeForInches: function(b, c) {
        return b / 8.26 >= c / 11.69 ? {
            width: 8.26,
            height: Number.fixed(8.26 * c / b, 2)
        }: {
            width: Number.fixed(11.69 * b / c, 2),
            height: 11.69
        }
    },
    printPages: function(b) {
        if (b && 0 != b.length) {
            var c = 0;
            this.printArea.empty();
            for (var d = 0; d < b.length; d++) {
                var f = b[d],
                g = $("<div style='position:relative'></div>");
                0 < d && g.css({
                    "page-break-before": "always"
                });
                var h = getPageDir(f, "large", originTotalPageCount),
                f = $("<img style='width:100%;height:100%' />");
                g.append(f);
                this.printArea.append(g);
                var k = this;
                f.load(function() {
                    c++;
                    var d = k.getImageSizeForInches(this.naturalWidth, this.naturalHeight);
                    $(this).parent().css({
                        width: d.width + "in",
                        height: d.height + "in"
                    });
                    c == b.length && (k.printArea.printArea(), clearProgressBar(k.contentBox))
                });
                f.attr("src", h);
                parseBool(bookConfig.PrintButtonVisible) && "" != bookConfig.printWatermarkFile && (g = $("<img src = '" + bookConfig.printWatermarkFile + "'/>"), g.css({
                    "z-index": "201",
                    left: "10",
                    top: "10",
                    position: "absolute"
                }), f.append(g))
            }
        } else clearProgressBar(this.contentBox)
    },
    getPages: function(b) {
        b = b.toLowerCase();
        if ("all" == b) {
            b = [];
            for (var c = 1; c <= bookConfig.totalPageCount; c++) b.push(c);
            return b
        }
        return "current" == b ? getShownPage() : getPagesByRange(b)
    },
    initPrintEvent: function() {
        this.printSubmit.bind(_event._down,
        function(b) {
            addProgressBar(this.contentBox, this.contentWidth, this.contentHeight);
            switch (printValue) {
            case "printAll":
                b = this.getPages("all");
                this.printPages(b);
                break;
            case "printCurrent":
                b = this.getPages("current");
                this.printPages(b);
                break;
            case "printRange":
                b = $("#rangeNum").val(),
                b = this.getPages(b),
                this.printPages(b)
            }
        }.bind(this))
    }
});
function setPrintValue(b) {
    printValue = b
}
var phonePrintBar = Class({
    create: function(b) {
        this.contentBox = b;
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miPrint").title.height();
        this.contentWidth = 330;
        this.contentHeight = 213;
        this.mainColor = colorDiv(bookConfig.toolbarColor, 30);
        setPrintValue("printAll");
        this.showing = !1;
        this.scrollBox = $("<div style='color:white;font-size:13px;left:19px;position:absolute;'></div>");
        this.printArea = $("<div></div>");
        this.printAll = $("<p style='height:23px;'><input style='width : 12px;height:23px;' type=\"radio\" value=\"printAll\" id=\"printAll\" name=\"gender\" checked='true' onClick='setPrintValue(\"printAll\")'/><label id='frmPrintall' style='position:absolute;width:auto;height: 23px;line-height:23px;vertical-align:middle;' for=\"printAll\">" + getLanguage("frmPrintall", "Print All Pages") + "</label></p>");
        this.printCurrent = $('<p style=\'height:23px;\'><input style=\'width : 12px;height:23px;\' type="radio" value="printCurrent" id="printCurrent" name="gender" onClick=\'setPrintValue("printCurrent")\'/><label id=\'frmPrintcurrent\' style=\'position:absolute;width:auto;height: 23px;line-height:23px;vertical-align:middle;\' for="printCurrent">' + getLanguage("frmPrintcurrent", "Print Current Page") + "</label></p>");
        this.printRange = '<p style=\'height:43px;\'><input style=\'width : 12px;height:23px;\' type="radio" value="printRange" id="printRange" name="gender" onClick=\'setPrintValue("printRange")\'/><label id=\'frmPrintRange\' style=\'position:absolute;width:auto;height: 23px;line-height:23px;vertical-align:middle;\' for="printRange">' + getLanguage("frmPrintRange", "Print Range ") + "</label><input id='rangeNum' style='margin-left:10px;width:50px;position:absolute;left:102px;' type='text'/><br><label id='frmPrintexample' style='position:absolute;width:auto;height: 23px;line-height:23px;vertical-align:middle;left:110px;' for=\"example\">" + getLanguage("frmPrintexample", "Example: 2,3,5-10") + "</label></br></p>";
        this.printSubmit = $('<p><button id=\'frmPrintbtn\' type="button" style="width:' + (this.width - 38) + "px;height:28px;border:1px solid " + colorDiv(bookConfig.toolbarColor, 50) + ";background:" + colorDiv(bookConfig.toolbarColor, 20) + ';color:white;">' + getLanguage("frmPrintbtn", "Print") + "</button></p>");
        this.printSubmit.css({
            position: "absolute",
            "margin-top": "5px"
        });
        this.scrollBox.css({
            width: this.width + "px",
            height: "300px",
            top: "5px"
        });
        $(this.contentBox).append(this.scrollBox);
        $(this.scrollBox).append(this.printAll);
        $(this.scrollBox).append(this.printCurrent);
        $(this.scrollBox).append(this.printRange);
        $(this.scrollBox).append(this.printSubmit);
        this.initPrintEvent()
    },
    onResize: function() {
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miPrint").title.height();
        this.printSubmit.find("button").css("width", this.width - 38 + "px");
        this.scrollBox.css({
            width: this.width + "px"
        });
        this.printArea.css({
            top: -windowHeight + "px"
        })
    }
}).extend(printBar);
function helpBar(b) {
    this.background = $("<div class='printBar'></div>");
    this.contentBack = $("<div class='printBack'></div>");
    this.contentBox = $("<div class='printBG'></div>");
    this.toolBox = $("<div class='printBox'></div>");
    this.checkBox = $("<div class='printBox'></div>");
    this.showing = !1;
    this.width = windowWidth;
    this.height = windowHeight;
    this.contentWidth = bookConfig.helpWidth;
    this.contentHeight = bookConfig.helpHeight;
    "" == bookConfig.helpContentFileURL && (this.contentWidth = 300, this.contentHeight = 200);
    this.mainColor = "#888888";
    this.background.css({
        height: this.height + "px",
        bottom: "0px"
    });
    this.contentBox.css({
        height: this.contentHeight + "px",
        width: this.contentWidth + "px",
        left: (this.width - this.contentWidth) / 2 + "px"
    });
    this.contentBack.css({
        height: this.contentHeight + 10 + "px",
        width: this.contentWidth + 10 + "px",
        left: (this.width - this.contentWidth) / 2 - 5 + "px"
    });
    this.contentBack.css({
        opacity: 0.5
    });
    this.toolBox.css({
        width: this.contentWidth - 30 + "px",
        height: "31px",
        "line-height": "31px",
        "vertical-align": "middle",
        top: "0px",
        left: "0px",
        background: "#333333",
        padding: "0px 15px 0px 15px"
    });
    this.checkBox.css({
        width: this.contentWidth + "px",
        height: this.contentHeight - 31 + "px",
        top: "31px",
        left: "0px"
    });
    this.contentBox.css({
        top: (this.height - this.contentHeight) / 2 + "px"
    });
    this.contentBack.css({
        top: (this.height - this.contentHeight) / 2 - 5 + "px"
    });
    $(b).append(this.background);
    $(b).append(this.contentBack);
    $(b).append(this.contentBox);
    $(this.contentBox).append(this.toolBox);
    $(this.contentBox).append(this.checkBox);
    this.contentBox.css({
        "text-shadow": "1px 1px #ffffff",
        background: "#dddddd"
    });
    this.closeButton = $("<div></div>");
    this.closeButton.css({
        top: "0px",
        position: "absolute"
    });
    this.closeButton.append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton());
    $(this.toolBox).html("<b>" + getLanguage("btnHelp", "Help") + "</b>");
    $(this.toolBox).append(this.closeButton);
    this.toolBox.css({
        color: "#ffffff",
        "text-shadow": "1px 1px #000000",
        "font-family": "verdana"
    });
    this.fillImage();
    this.initEvent();
    bookConfig.showHelpContentAtFirst && bookConfig.HelpButtonVisible || (this.background.css({
        display: "none"
    }), this.contentBox.css({
        display: "none"
    }), this.contentBack.css({
        display: "none"
    }));
    rightToLeft ? (this.checkBox.find("p").css("text-align", "right"), this.toolBox.css("text-align", "right")) : this.closeButton.css({
        right: "0px"
    })
}
bdor[28] = "o";
helpBar.prototype.onResize = function() {
    this.contentWidth = bookConfig.helpWidth;
    this.contentHeight = bookConfig.helpHeight;
    "" == bookConfig.helpContentFileURL && (this.contentWidth = 300, this.contentHeight = 200);
    this.background.css({
        height: windowHeight + "px",
        bottom: "0px"
    });
    this.contentBox.css({
        height: this.contentHeight + "px",
        width: this.contentWidth + "px",
        left: (windowWidth - this.contentWidth) / 2 + "px"
    });
    this.contentBack.css({
        height: this.contentHeight + 10 + "px",
        width: this.contentWidth + 10 + "px",
        left: (windowWidth - this.contentWidth) / 2 - 5 + "px"
    });
    this.toolBox.css({
        width: this.contentWidth - 30 + "px",
        height: "31px",
        top: "0px",
        left: "0px",
        background: "#333333"
    });
    this.checkBox.css({
        width: this.contentWidth + "px",
        height: this.contentHeight - 31 + "px",
        top: "31px",
        left: "0px"
    });
    this.contentBox.css({
        top: (windowHeight - this.contentHeight) / 2 + "px"
    });
    this.contentBack.css({
        top: (windowHeight - this.contentHeight) / 2 - 5 + "px"
    })
};
helpBar.prototype.setPosition = function(b, c, d) {
    void 0 == d && (d = ["left", "top"]);
    bdor[4] = "h";
    $(this.background).css(d[0], b + "px");
    $(this.background).css(d[1], c + "px")
};
helpBar.prototype.getShowStatu = function() {
    return this.showing
};
helpBar.prototype.setShowStatu = function(b) {
    this.showing = b
};
helpBar.prototype.showshow = function() {
    $(this.background).css({
        display: "block"
    });
    $(this.contentBox).fadeIn(500);
    $(this.contentBack).fadeIn(500);
    this.showing = !0
};
helpBar.prototype.hideBox = function() {
    $(this.background).fadeOut(500);
    $(this.contentBox).fadeOut(500);
    $(this.contentBack).fadeOut(500);
    this.showing = !1
};
helpBar.prototype.initEvent = function() {
    var b = this;
    this.background.bind(_event._down,
    function(c) {
        b.hideBox();
        b.showing = !1
    });
    this.closeButton.bind(_event._end,
    function(c) {
        b.hideBox();
        b.showing = !1
    });
    this.closeButton.bind("mouseover",
    function(c) {
        b.closeButton.css({
            cursor: "pointer"
        })
    })
};
helpBar.prototype.fillImage = function() {
    var b;
    "" != bookConfig.helpContentFileURL ? b = $("<img src='" + bookConfig.helpContentFileURL + "'/>") : (b = $("<div></div>"), rightToLeft ? (b.append($("<p><span>" + getLanguage("lblHelp1", "Drag the page corner to view") + "</span><img src='" + uiBaseURL + "bookMarkEnter.png'/></p>")), b.append($("<p><span>" + getLanguage("lblHelp2", "Double click to zoom in, out") + "</span><img src='" + uiBaseURL + "bookMarkEnter.png'/></p>"))) : (b.append($("<p><img src='" + uiBaseURL + "bookMarkEnter.png'/><span>" + getLanguage("lblHelp1", "Drag the page corner to view") + "</span></p>")), b.append($("<p><img src='" + uiBaseURL + "bookMarkEnter.png'/><span>" + getLanguage("lblHelp2", "Double click to zoom in, out") + "</span></p>"))), b.css({
        "margin-left": "15px",
        "margin-right": "15px",
        "text-shadow": "0px 1px #ffffff",
        "font-weight": "bold",
        "font-size": "13px",
        "font-family": "verdana",
        left: "20px"
    }));
    this.checkBox.append(b)
}; (function(b) {
    b.loadJavascript("//connect.facebook.net/en_US/sdk.js")
})(global);
var WebSharer = {
    getShareImage: function(b) {
        switch (b) {
        case "email":
            return "email.png";
        case "facebook":
            return "facebook.png";
        case "google":
            return "google.png";
        case "myspace":
            return "myspace.png";
        case "twitter":
            return "twitter.png";
        case "digg":
            return "digg.png";
        case "reddit":
            return "reddit.png";
        case "linkedin":
            return "linkedin.png";
        case "buffer":
            return "buffer.png";
        case "more":
            return "more.png";
        default:
            ""
        }
    },
    button: function(b) {
        b = this.getShareImage(b);
        return "" == b ? null: $("<div><img src='" + uiBaseURL + b + "' class='shareBarImg' /></div>")
    },
    getShareMethod: function(b) {
        switch (b) {
        case "email":
            return new ShareToMail;
        case "facebook":
            return new ShareToFacebook;
        case "google":
            return new ShareToGoogle;
        case "myspace":
            return new ShareToMySpace;
        case "twitter":
            return new ShareToTwitter;
        case "digg":
            return new ShareToDigg;
        case "reddit":
            return new ShareToReddit;
        case "linkedin":
            return new ShareToLinkedIn;
        case "buffer":
            return new ShareToBuffer;
        case "more":
            return new ShareToMore;
        default:
            return null
        }
    },
    shareto: function(b) { (b = this.getShareMethod(b)) && b.share()
    }
};
Class("ShareMethod", {
    create: function() {
        this.url = window.location.href;
        this.title = window.document.title;
        this.screenshot = this.url.substring(0, this.url.lastIndexOf("/")) + "/" + bookConfig.thumbPath + "1.jpg";
        this.description = bookConfig.bookDescription
    }
});
Class("ShareToMore", {
    share: function() {
        var b = String.format("http://www.addthis.com/bookmark.php?v=300&url=%s&title=%s&description=%s&screenshot=%s", Metacharacter(this.url), Metacharacter(this.title), Metacharacter(this.description), Metacharacter(this.screenshot));
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToMail", {
    share: function() {
        var b = "https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=1&su=" + Metacharacter(this.title) + "&body=" + this.getMailBody();
        window.open(b)
    },
    getMailBody: function() {
        return Metacharacter(this.title + "\r\n" + this.url)
    }
}).extend(ShareMethod);
Class("ShareToFacebook", {
    share: function() {
        if (this.isFlipWebsite() && global.FB) this.init(),
        this.submit();
        else {
            var b = "http://www.facebook.com/sharer.php?u=" + Metacharacter(this.url);
            window.open(b)
        }
    },
    isFlipWebsite: function() {
        var b = getHost(this.url).toLowerCase();
        return - 1 < b.indexOf("fliphtml5.com") || -1 < b.indexOf("pubhtml5.com")
    },
    init: function() {
        FB.init({
            appId: this.getAppId(),
            status: !0,
            xfbml: !1,
            version: "v2.4"
        })
    },
    getAppId: function() {
        var b = getHost(this.url).toLowerCase();
        if ( - 1 < b.indexOf("fliphtml5.com")) return "759223277462081";
        if ( - 1 < b.indexOf("pubhtml5.com")) return "552959651503135"
    },
    submit: function() {
        FB.ui({
            method: "feed",
            link: this.url,
            name: this.title,
            picture: this.screenshot,
            description: this.description
        })
    }
}).extend(ShareMethod);
Class("ShareToGoogle", {
    share: function() {
        var b = "https://plus.google.com/share?url=" + Metacharacter(this.url);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToMySpace", {
    share: function() {
        var b = "https://www.google.com/share?url=" + Metacharacter(this.url);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToTwitter", {
    share: function() {
        var b = "https://twitter.com/intent/tweet?url=" + Metacharacter(this.url) + "&text=" + Metacharacter(this.title);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToDigg", {
    share: function() {
        var b = "http://digg.com/submit?url=" + Metacharacter(this.url) + "&title=" + Metacharacter(this.title);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToLinkedIn", {
    share: function() {
        var b = "http://www.linkedin.com/shareArticle?url=" + Metacharacter(this.url) + "&title=" + Metacharacter(this.title);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToReddit", {
    share: function() {
        var b = "http://reddit.com/submit?url=" + Metacharacter(this.url) + "&title=" + Metacharacter(this.title);
        window.open(b)
    }
}).extend(ShareMethod);
Class("ShareToBuffer", {
    share: function() {
        var b = "http://bufferapp.com/add?url=" + Metacharacter(this.url) + "&text=" + Metacharacter(this.title);
        window.open(b)
    }
}).extend(ShareMethod);
var SharePanel = Class({
    create: function(b) {
        this.background = $("<div class='printBar' id='background'></div>");
        this.contentBack = $("<div class='printBack' id='contentBack'></div>");
        this.contentBox = $("<div class='printBG sharePanel' id='contentBox'></div>");
        this.toolBox = $("<div class='printBox' id='toolBox'></div>");
        this.checkBox = $("<div class='printBox' id='checkBox'></div>");
        this.titleBox = $("<div class='printBox'></div>");
        this.shareUrl = $("<div class='printBox' id='shareUrl'></div>");
        this.shareCheck = $("<div class='printBox' id='shareCheck'></div>");
        this.shareCopy = $("<div class='printBox' id='shareCopy'></div>");
        this.shareUrlInput = $("<div class='printBox'><input type='text' id='utlField' size='13'/></div>");
        this.shareUrlSubmit = $('<button type="button">' + getLanguage("lblCopy", "Copy") + "</button>");
        this.shareCheckPanel = $("<div class='printBox'></div>");
        this.shareCheckTitle = $("<div class='printBox'></div>");
        this.shareCheckBar = $("<div class='printBox'></div>");
        var c;
        c = getLanguage("frmShareInfo", "You can easily share this publication to social networks, just click the appropriate button below.");
        this.textCheckField = new label(c, this.shareCheckPanel);
        this.shareCopyPanel = $("<div class='printBox'></div>");
        this.shareCopyTitle = $("<div class='printBox'></div>");
        this.shareCopyInput = $("<div class='printBox'><textarea id='copyField' size='13'/></div>");
        this.shareCopySubmit = $('<button type="button">' + getLanguage("lblCopy", "Copy") + "</button>");
        c = getLanguage("frminsertInfo", "Use the code below to embed this publication to your website.");
        this.textCopyField = new label(c, this.shareCopyPanel);
        this.mainColor = colorAdd("#333333", 160);
        this.showing = !1;
        this.width = windowWidth;
        this.height = windowHeight;
        this.contentWidth = 565;
        this.contentHeight = 390;
        this.background.css({
            height: this.height + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        });
        this.contentBack.css({
            height: this.contentHeight + 10 + "px",
            width: this.contentWidth + 10 + "px",
            left: (this.width - this.contentWidth) / 2 - 5 + "px"
        });
        this.contentBack.css({
            opacity: 0.5
        });
        this.toolBox.css({
            width: this.contentWidth + "px",
            height: "35px",
            top: "0px",
            left: "0px",
            background: "#333333"
        });
        this.checkBox.css({
            width: this.contentWidth + "px",
            height: this.contentHeight - 35 + "px",
            top: "35px",
            left: "0px"
        });
        this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px"
        });
        this.contentBack.css({
            top: (this.height - this.contentHeight) / 2 - 5 + "px"
        });
        this.shareUrl.css({
            width: this.contentWidth + "px",
            height: "50px",
            top: "0px",
            left: "0px"
        });
        this.shareCheck.css({
            width: this.contentWidth + "px",
            height: "100px",
            top: "50px",
            left: "0px"
        });
        this.shareCopy.css({
            width: this.contentWidth + "px",
            height: this.contentHeight - 35 - 50 - 100 + "px",
            top: "150px",
            left: "0px"
        });
        this.shareUrlInput.css({
            width: "470px",
            height: "40px",
            "margin-left": "13px",
            bottom: "1px"
        });
        this.shareUrlInput.children("input").css({
            color: "black",
            "border-radius": "5px"
        });
        this.shareUrlInput.children("input").css({
            width: "470px",
            height: "30px"
        });
        this.shareUrlInput.children("input").css({
            "padding-left": "5px"
        });
        this.shareUrlInput.children("input").css({
            "border-width": "1px"
        });
        this.shareUrlSubmit.css({
            width: "50px",
            height: "33px",
            "margin-top": "10px",
            "margin-left": "500px",
            "border-radius": "5px"
        });
        this.shareCheckPanel.css({
            width: "538px",
            height: "80px",
            top: "10px",
            left: "13px",
            "border-radius": "5px"
        });
        this.shareCheckTitle.css({
            width: "auto",
            "font-size": "8px",
            "font-family": "arial",
            height: "auto",
            top: "3px",
            left: "23px",
            background: this.mainColor
        });
        this.shareCheckBar.css({
            width: "538px",
            height: "50px",
            bottom: "0px",
            left: "0px"
        });
        this.shareCheckPanel.css({
            "border-left": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCheckPanel.css({
            "border-top": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCheckPanel.css({
            "border-right": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.shareCheckPanel.css({
            "border-bottom": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.shareCheckTitle.html("<b>" + getLanguage("frmShareLabel", "Share") + "</b>");
        this.shareCopyPanel.css({
            width: "538px",
            height: "180px",
            top: "10px",
            left: "13px",
            "border-radius": "5px"
        });
        this.shareCopyTitle.css({
            width: "auto",
            "font-size": "10px",
            "font-family": "arial",
            height: "auto",
            top: "3px",
            left: "23px",
            background: this.mainColor
        });
        this.shareCopyPanel.css({
            "border-left": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCopyPanel.css({
            "border-top": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCopyPanel.css({
            "border-right": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.shareCopyPanel.css({
            "border-bottom": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.shareCopyTitle.html("<b>" + getLanguage("frminsertLabel", "Insert to Site") + "</b>");
        this.shareCopyInput.css({
            width: "516px",
            height: "85px",
            "margin-left": "11px",
            top: "40px"
        });
        this.shareCopyInput.children("textarea").css({
            color: "black",
            "border-radius": "0px"
        });
        this.shareCopyInput.children("textarea").css({
            "padding-left": "5px"
        });
        this.shareCopyInput.children("textarea").css({
            width: "516px",
            height: "85px",
            "border-radius": "5px"
        });
        this.shareCopySubmit.css({
            width: "50px",
            height: "33px",
            "margin-top": "140px",
            "margin-left": "480px",
            "border-radius": "5px"
        });
        this.shareCopyInput.children("textarea").css({
            "border-left": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCopyInput.children("textarea").css({
            "border-top": "1px solid " + colorDiv(this.mainColor, 120)
        });
        this.shareCopyInput.children("textarea").css({
            "border-right": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.shareCopyInput.children("textarea").css({
            "border-bottom": "1px solid " + colorAdd(this.mainColor, 120)
        });
        this.titleBox.css({
            width: "50px",
            height: "20px",
            left: "15px",
            position: "absolute"
        });
        this.titleBox.css({
            color: "#ffffff",
            top: "7px"
        });
        this.titleBox.css({
            "text-shadow": "1px 1px #000000",
            "font-family": "verdana"
        });
        $(this.titleBox).html(getLanguage("frmShareCaption", "Share"));
        $(b).append(this.background);
        $(b).append(this.contentBack);
        $(b).append(this.contentBox);
        $(this.contentBox).append(this.toolBox);
        $(this.contentBox).append(this.checkBox);
        $(this.checkBox).append(this.shareUrl);
        $(this.checkBox).append(this.shareCheck);
        $(this.checkBox).append(this.shareCopy);
        $(this.shareUrl).append(this.shareUrlInput);
        $(this.shareUrl).append(this.shareUrlSubmit);
        $(this.shareCheck).append(this.shareCheckPanel);
        $(this.shareCheck).append(this.shareCheckTitle);
        $(this.shareCheckPanel).append(this.shareCheckBar);
        $(this.shareCheckPanel).append(this.textCheckField);
        $(this.shareCopy).append(this.shareCopyPanel);
        $(this.shareCopy).append(this.shareCopyTitle);
        $(this.shareCopyPanel).append(this.shareCopyInput);
        $(this.shareCopyPanel).append(this.textCopyField);
        $(this.shareCopyPanel).append(this.shareCopySubmit);
        this.textCheckField.setLabelPosition(15, 8);
        this.textCopyField.setLabelPosition(15, 8);
        this.textCheckField.onResize(516, 30);
        this.textCopyField.onResize(516, 30);
        this.shareUrlSubmit.bind(_event._end,
        function() {
            copyToClipboard($("#utlField").val())
        });
        this.shareCopySubmit.bind(_event._end,
        function() {
            copyToClipboard($("#copyField").val())
        });
        this.contentBox.css({
            "text-shadow": "1px 1px #ffffff",
            background: this.mainColor
        });
        this.closeButton = $("<div></div>");
        this.closeButton.css({
            top: "0px",
            right: "0px",
            position: "absolute"
        });
        this.closeButton.append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton());
        $(this.toolBox).append(this.closeButton);
        $(this.toolBox).append(this.titleBox);
        window.shareObj ? this.initShareBar(this.shareCheckBar) : this.initDefaultShareBar(this.shareCheckBar);
        this.initEvent();
        this.background.css({
            display: "none"
        });
        this.contentBox.css({
            display: "none"
        });
        this.contentBack.css({
            display: "none"
        });
        rightToLeft && (horizontalMirror(this.contentBox), horizontalMirror(this.titleBox), horizontalMirror(this.shareUrlInput), this.shareUrlInput.find("input").attr("dir", "rtl"), horizontalMirror(this.shareUrlSubmit), horizontalMirror(this.shareUrlSubmit), horizontalMirror(this.shareCheckTitle), horizontalMirror(this.shareCheckBar), horizontalMirror(this.shareCopyInput), this.shareCopyInput.find("textarea").attr("dir", "rtl"), horizontalMirror(this.shareCopySubmit), horizontalMirror(this.textCopyField.labelBox), horizontalMirror(this.textCheckField.labelBox), this.textCopyField.labelBox.css({
            "text-align": "right"
        }), this.textCheckField.labelBox.css({
            "text-align": "right"
        }), horizontalMirror(this.shareCopyTitle))
    },
    onResize: function() {
        this.contentWidth = 565;
        this.contentHeight = 390;
        this.width = windowWidth;
        this.height = windowHeight;
        this.background.css({
            height: this.height + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        });
        this.contentBack.css({
            height: this.contentHeight + 10 + "px",
            width: this.contentWidth + 10 + "px",
            left: (this.width - this.contentWidth) / 2 - 5 + "px"
        });
        this.toolBox.css({
            width: this.contentWidth + "px",
            height: "35px",
            top: "0px",
            left: "0px"
        });
        this.checkBox.css({
            width: this.contentWidth + "px",
            height: this.contentHeight - 35 + "px",
            top: "35px",
            left: "0px"
        });
        this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px"
        });
        this.contentBack.css({
            top: (this.height - this.contentHeight) / 2 - 5 + "px"
        });
        this.shareUrl.css({
            width: this.contentWidth + "px",
            height: "50px",
            top: "0px",
            left: "0px"
        });
        this.shareCheck.css({
            width: this.contentWidth + "px",
            height: "100px",
            top: "50px",
            left: "0px"
        });
        this.shareCopy.css({
            width: this.contentWidth + "px",
            height: this.contentHeight - 35 - 50 - 100 + "px",
            top: "150px",
            left: "0px"
        });
        this.shareUrlInput.css({
            width: "470px",
            height: "40px",
            "margin-left": "13px"
        });
        this.shareUrlInput.children("input").css({
            width: "470px",
            height: "30px"
        });
        this.shareUrlSubmit.css({
            width: "50px",
            height: "33px",
            "margin-top": "10px",
            "margin-left": "500px"
        });
        this.shareCheckPanel.css({
            width: "538px",
            height: "80px",
            top: "10px",
            left: "13px"
        });
        this.shareCheckTitle.css({
            width: "auto",
            height: "auto",
            top: "3px",
            left: "23px"
        });
        this.shareCopyPanel.css({
            width: "538px",
            height: "180px",
            top: "10px",
            left: "13px"
        });
        this.shareCopyTitle.css({
            width: "auto",
            height: "auto",
            top: "3px",
            left: "23px"
        });
        this.closeButton.css({
            top: "0px",
            right: "0px"
        })
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px")
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    showshow: function() {
        sendvisitinfo(2, getShownPageString());
        $(this.background).css({
            display: "block"
        });
        $(this.contentBox).fadeIn(500);
        $(this.contentBack).fadeIn(500);
        var b = window.location.href;
        0 <= b.toLowerCase().indexOf("file:") && (b = "index.html");
        var c = "<iframe frameborder='0'  width='240' height='210'  title='" + window.document.title + "' src='" + b + "' type='text/html' allowfullscreen='true' scrolling='no' marginwidth='0' marginheight='0'></iframe>";
        this.shareUrlInput.children("input").val(b);
        this.shareCopyInput.children("textarea").val(c);
        this.showing = !0
    },
    hideBox: function() {
        $(this.background).fadeOut(500);
        $(this.contentBox).fadeOut(500);
        $(this.contentBack).fadeOut(500);
        this.showing = !1
    },
    showOrHide: function() {
        this.showing ? this.hideBox() : this.showshow()
    },
    initEvent: function() {
        var b = this;
        this.background.bind(_event._down,
        function(c) {
            b.hideBox();
            b.showing = !1
        });
        this.closeButton.bind(_event._end,
        function(c) {
            b.hideBox();
            b.showing = !1
        });
        this.closeButton.bind("mouseover",
        function(c) {
            b.closeButton.css({
                cursor: "pointer",
                "background-image": "url(" + uiBaseURL + "close_down.png)"
            })
        })
    },
    fillContent: function() {
        var b = $("<div/>");
        b.html(bookConfig.aboutContactInfoTxt);
        this.checkBox.append(b)
    },
    fixItemInfo: function(b) {
        if (b) {
            var c = window.location.href,
            d = "",
            f = "";
            try {
                d = window.parent.location.href,
                f = window.top.location.href
            } catch(g) {}
            var h = window.document.title,
            k = c.substring(0, c.lastIndexOf("/")) + "/" + bookConfig.thumbPath + "1.jpg",
            l = b.url + "";
            0 <= l.indexOf("${url_no_page}") && (l = l.remove("${url_no_page}"), c = c.removeStartWidth("#p="), d = d.removeStartWidth("#p="), f = f.removeStartWidth("#p="));
            l = l.replaceAll("${url}", c, !0);
            l = l.replaceAll("${url_parent}", d, !0);
            l = l.replaceAll("${url_top}", f, !0);
            l = l.replaceAll("${shot-img}", k, !0);
            l = l.replaceAll("${title}", h, !0);
            c = b.logo + "";
            bookConfig.isFlipPdf && c.startWith("./") && (c = "." + c);
            return {
                url: l,
                logo: c,
                title: b.title + ""
            }
        }
    },
    initShareBar: function(b) {
        if (window.shareObj && !(0 >= window.shareObj.length)) for (var c = window.shareObj.length,
        d = 0; d < c; d++) {
            var f = this.fixItemInfo(window.shareObj[d], b),
            g = $("<a target='_blank' href='" + f.url + "'></a>"),
            h = $("<div class='item'></div>"),
            k = $("<img class='logo' src='" + f.logo + "'/>");
            g.append(h);
            f.logo && h.append(k);
            h.attr("title", f.title);
            b.append(g)
        }
    },
    initDefaultShareBar: function(b) {
        this.shareURL = window.location.href;
        this.shareTitle = window.document.title;
        0 <= this.shareURL.toLowerCase().indexOf("file:") && (shareURL = "index.html");
        this.screenShot = this.getThumbnailDir();
        this.description = bookConfig.bookDescription;
        this.initShareButtons(b);
        b = window.location.href;
        0 <= b.toLowerCase().indexOf("file:") && (b = "index.html");
        var c = "<iframe frameborder='0'  width='240' height='210'  title='" + window.document.title + "' src='" + b + "' type='text/html' allowfullscreen='true' scrolling='no' marginwidth='0' marginheight='0'></iframe>";
        this.shareUrlInput.children("input").val(b);
        this.shareCopyInput.children("textarea").val(c)
    },
    getThumbnailDir: function() {
        var b = $("<div></div>"),
        c = getPageDir(1, "thumb");
        b.css("background-image", "url(" + c + ")");
        c = b.css("background-image").subBetween("url(", ")");
        b.css("background-image", "");
        return c
    },
    initShareButtons: function(b) {
        var c = [];
        c.push(this.initShareButton("facebook"));
        c.push(this.initShareButton("google"));
        c.push(this.initShareButton("email"));
        c.push(this.initShareButton("twitter"));
        c.push(this.initShareButton("linkedin"));
        c.push(this.initShareButton("digg"));
        c.push(this.initShareButton("reddit"));
        c.push(this.initShareButton("more"));
        for (var d = 0; d < c.length; d++) {
            var f = c[d];
            rightToLeft ? f.css({
                top: "10px",
                right: 10 + 35 * d + "px"
            }) : f.css({
                top: "10px",
                left: 10 + 35 * d + "px"
            });
            b.append(f)
        }
    },
    initShareButton: function(b) {
        var c = $("<div style = 'position: absolute;width:30px;height:30px;border-radius:15px;'></div>"),
        d = WebSharer.button(b);
        if (d) return d.css({
            cursor: "pointer"
        }),
        d.attr({
            title: "Share to " + b
        }),
        c.append(d),
        d.bind(_event._end,
        function(c) {
            WebSharer.shareto(b);
            sendvisitinfo(2, getShownPageString())
        }),
        c.mouseenter(function(b) {
            $(c).css({
                "-webkit-box-shadow": "0 0 10px rgba(0, 0, 0, 0.5)",
                "-moz-box-shadow": "0 0 10px rgba(0, 0, 0, 0.5)",
                "-o-box-shadow": "0 0 10px rgba(0, 0, 0, 0.5)",
                "-ms-box-shadow": "0 0 10px rgba(0, 0, 0, 0.5)",
                "box-shadow": "0 0 10px rgba(0, 0, 0, 0.5)"
            })
        }),
        c.mousedown(function(b) {}),
        c.mouseup(function(b) {
            c.css("background-color", "");
            c.css({
                "-moz-box-shadow": "",
                "-ms-box-shadow": "",
                "box-shadow": "",
                "-webkit-box-shadow": "",
                "-o-box-shadow": ""
            })
        }),
        c.mouseleave(function(b) {
            c.css("background-color", "");
            c.css({
                "-moz-box-shadow": "",
                "-ms-box-shadow": "",
                "box-shadow": "",
                "-webkit-box-shadow": "",
                "-o-box-shadow": ""
            })
        }),
        c
    }
}),
isShareDrag = !1;
function initDefaultShareObj() {
    var b = window.location.href,
    c = window.document.title;
    b.substring(0, b.lastIndexOf("/"));
    window.defaultShareObj = [{
        name: "facebook",
        url: "http://www.facebook.com/sharer.php?u=" + b + "&t=" + c,
        logo: uiBaseURL + "Facebook.png",
        title: "Facebook Share"
    },
    {
        name: "twitter",
        url: "http://www.twitter.com/home?status=" + b + "&t=" + c,
        logo: uiBaseURL + "twitter.png",
        title: "Twitter Share"
    },
    {
        name: "google",
        url: "http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=" + b + "&t=" + c,
        logo: uiBaseURL + "google.png",
        title: "Google Share"
    },
    {
        name: "linkedin",
        url: "http://www.linkedin.com/shareArticle?mini=true&url=" + b + "&t=" + c + "&ro=false&summary=&source=",
        logo: uiBaseURL + "linkedin.png",
        title: "Linkedin Share"
    },
    {
        name: "addthis",
        url: "http://www.addthis.com/bookmark.php?v=15&winname=addthis&s=more&url=" + b + "&t=" + c,
        logo: uiBaseURL + "addthis.png",
        title: "Addthis Share"
    }]
}
var phoneSharePanel = Class({
    create: function(b) {
        initDefaultShareObj();
        this.contentBox = b;
        this.initContainer();
        this.initLinkObj();
        this.initItem()
    },
    initContainer: function() {
        this.contentBox && (this.scrollBox = $("<div class='phoneSharePanel'></div>"), this.contentBox.append(this.scrollBox))
    },
    initItem: function() {
        if (this.shareObj && !(0 >= this.shareObj.length)) {
            for (var b = this.shareObj.length,
            c = 0; c < b; c++) {
                var d = window.shareObj ? this.fixItemInfo(this.shareObj[c]) : this.shareObj[c],
                f = $("<a target='_blank' href='" + d.url + "'></a>"),
                g = $("<div class='item'></div>");
                if (window.shareObj) var h = $("<img class='logo' src='" + d.logo + "'/>");
                else h = $("<div class='logo'></div>"),
                h.addCssSprite(phoneIconsURL[0], d.name, 50, 50, phoneIconInfo);
                var k = $("<span>" + d.title + "</span>");
                f.append(g);
                d.logo && g.append(h);
                g.append(k);
                this.scrollBox.append(f)
            }
            this.mainColor = colorDiv(bookConfig.toolbarColor, 30);
            $(".phoneSharePanel .item").css("border-top", "1px solid " + colorAdd(this.mainColor, 10));
            $(".phoneSharePanel .item").css("border-bottom", "1px solid " + colorDiv(this.mainColor, 10))
        }
    },
    fixItemInfo: function(b) {
        if (b) {
            var c = window.location.href,
            d = "",
            f = "";
            try {
                d = window.parent.location.href,
                f = window.top.location.href
            } catch(g) {}
            var h = window.document.title,
            k = c.substring(0, c.lastIndexOf("/")) + "/" + bookConfig.thumbPath + "1.jpg",
            l = b.url + "";
            0 <= l.indexOf("${url_no_page}") && (l = l.remove("${url_no_page}"), c = c.removeStartWidth("#p="), d = d.removeStartWidth("#p="), f = f.removeStartWidth("#p="));
            l = l.replaceAll("${url}", c, !0);
            l = l.replaceAll("${url_parent}", d, !0);
            l = l.replaceAll("${url_top}", f, !0);
            l = l.replaceAll("${shot-img}", k, !0);
            l = l.replaceAll("${title}", h, !0);
            c = b.logo + "";
            bookConfig.isFlipPdf && c.startWith("./") && (c = "." + c);
            return {
                url: l,
                logo: c,
                title: b.title + ""
            }
        }
    },
    initLinkObj: function() {
        this.shareObj = window.shareObj ? shareObj: window.defaultShareObj
    },
    onResize: function() {}
});
function aboutBar(b) {
    this.background = $("<div class='printBar'></div>");
    this.contentBack = $("<div class='printBack'></div>");
    this.contentBox = $("<div class='printBG'></div>");
    this.toolBox = $("<div class='printBox'></div>");
    this.checkBox = $("<div class='printBox'></div>");
    this.checkLeftBox = $("<div class='printBox dd'></div>");
    this.checkRightBox = $("<div class='printBox dda'></div>");
    this.showing = !1;
    this.width = windowWidth;
    this.height = windowHeight;
    this.contentWidth = 532;
    this.contentHeight = 350;
    this.mainColor = "#888888";
    this.background.css({
        height: this.height + "px",
        bottom: "0px"
    });
    this.contentBox.css({
        height: this.contentHeight + "px",
        width: this.contentWidth + "px",
        left: (this.width - this.contentWidth) / 2 + "px"
    });
    this.contentBack.css({
        height: this.contentHeight + 10 + "px",
        width: this.contentWidth + 10 + "px",
        left: (this.width - this.contentWidth) / 2 - 5 + "px"
    });
    this.contentBack.css({
        opacity: 0.5
    });
    this.contentBack.setGradient("#222222", !1);
    this.toolBox.css({
        width: this.contentWidth + "px",
        height: "31px",
        top: "0px",
        left: "0px"
    });
    this.checkBox.css({
        width: this.contentWidth + "px",
        height: this.contentHeight - 31 + "px",
        top: "31px",
        left: "0px",
        backgroundColor: "#CACACA"
    });
    this.checkLeftBox.css({
        width: this.contentWidth / 2 - 10 + "px",
        height: this.contentHeight - 31 + "px",
        top: "0px",
        left: "10px"
    });
    this.checkRightBox.css({
        width: this.contentWidth / 2 - 10 + "px",
        height: this.contentHeight - 31 + "px",
        top: "0px",
        left: this.contentWidth / 2 + "px"
    });
    this.contentBox.css({
        top: (this.height - this.contentHeight) / 2 + "px"
    });
    this.contentBack.css({
        top: (this.height - this.contentHeight) / 2 - 5 + "px"
    });
    $(b).append(this.background);
    $(b).append(this.contentBack);
    $(b).append(this.contentBox);
    $(this.contentBox).append(this.toolBox);
    $(this.contentBox).append(this.checkBox);
    $(this.checkBox).append(this.checkLeftBox);
    $(this.checkBox).append(this.checkRightBox);
    $(this.contentBack).css({
        "border-radius": "10px"
    });
    $(this.contentBox).css({
        "border-radius": "10px"
    });
    $(this.toolBox).css({
        background: "#393838"
    });
    $(this.toolBox).css({
        "font-family": "verdana"
    });
    $(this.toolBox).css({
        "vertical-align": "middle",
        "text-indent": "18px",
        lineHeight: "31px"
    });
    $(this.toolBox).css({
        color: "#ffffff",
        "text-shadow": "1px 1px #000000"
    });
    $(this.toolBox).html("<b>" + getLanguage("frmaboutcaption", "Contact") + "</b>");
    $(this.contentBox).css({
        "text-shadow": "1px 1px #000000"
    });
    $(this.checkLeftBox).css({
        "font-family": "Georgia"
    });
    $(this.checkLeftBox).css({
        color: "#000000",
        "text-shadow": "#ffffff 1px 1px"
    });
    $(this.checkLeftBox).html("<p><font size=3><b>" + getLanguage("frmaboutcontactinformation", "Contact Information") + "</b></font></p><p><font size=1><b>" + getLanguage("frmaboutADDRESS", "ADDRESS") + "</b></font><br><font size=0.5>" + bookConfig.AboutAddress + "</font></br></p><p><font size=1><b>" + getLanguage("frmaboutEMAIL", "EMAIL") + "</b></font><br><a href=mailto:" + bookConfig.AboutEmail + "><font size=0.5 color='#000000'>" + bookConfig.AboutEmail + "</font></a></br></p><p><font size=1><b>" + getLanguage("frmaboutWEBSITE", "WEBSITE") + "</b></font><br><a href=" + bookConfig.AboutWebsite + "><font size=0.5 color='#000000'>" + bookConfig.AboutWebsite + "</font></a></br></p><p><font size=1><b>" + getLanguage("frmaboutMOBILE", "MOBILE") + "</b></font><br><font size=0.5>" + bookConfig.AboutMobile + "</font></br></p><p><font size=1><b>" + getLanguage("frmaboutAUTHOR", "AUTHOR") + "</b></font><br><font size=0.5>" + bookConfig.AboutAuthor + "</font></br></p>");
    $(this.checkRightBox).css({
        "font-family": "Georgia"
    });
    $(this.checkRightBox).css({
        color: "#000000",
        "text-shadow": "#ffffff 1px 1px"
    });
    $(this.checkRightBox).html("<p><a href=" + getLogoLink()[0] + "><img src='" + bookConfig.CompanyLogoFile + "'/></a></p><p><font size=1><b>" + getLanguage("frmaboutDESCRIPTION", "DESCRIPTION") + "</b></font><br><font size=0.5>" + bookConfig.AboutDescription + "</font></br></p>");
    this.closeButton = $("<div></div>");
    this.closeButton.css({
        top: "0px",
        position: "absolute"
    });
    this.closeButton.append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton());
    $(this.toolBox).append(this.closeButton);
    $(this.contentBack).css({
        border: "1px solid #666666"
    });
    $(this.contentBack).css({
        "-webkit-box-shadow": "0 0 1px rgba(40, 40, 40, 1)",
        "-moz-box-shadow": "0 0 1px rgba(40, 40, 40, 1)",
        "-o-box-shadow": "0 0 1px rgba(40, 40, 40, 1)",
        "-ms-box-shadow": "0 0 1px rgba(40, 40, 40, 1)",
        "box-shadow": "0 0 1px rgba(40, 40, 40, 1)"
    });
    this.fillContent();
    this.initEvent();
    $(this.background).css({
        display: "none"
    });
    $(this.contentBox).css({
        display: "none"
    });
    $(this.contentBack).css({
        display: "none"
    });
    rightToLeft ? (horizontalMirror(this.checkBox), horizontalMirror(this.checkLeftBox), horizontalMirror(this.checkRightBox), this.checkBox.find("p").css("text-align", "right"), this.toolBox.css("text-align", "right")) : this.closeButton.css({
        right: "0px"
    })
}
bdor[22] = "l";
aboutBar.prototype.onResize = function() {
    this.contentWidth = 532;
    this.contentHeight = 350;
    this.background.css({
        height: windowHeight + "px",
        bottom: "0px"
    });
    this.contentBox.css({
        height: this.contentHeight + "px",
        width: this.contentWidth + "px",
        left: (windowWidth - this.contentWidth) / 2 + "px"
    });
    this.contentBack.css({
        height: this.contentHeight + 10 + "px",
        width: this.contentWidth + 10 + "px",
        left: (windowWidth - this.contentWidth) / 2 - 5 + "px"
    });
    this.toolBox.css({
        width: this.contentWidth + "px",
        height: "31px",
        top: "0px",
        left: "0px"
    });
    this.checkBox.css({
        width: this.contentWidth + "px",
        height: this.contentHeight - 31 + "px",
        top: "31px",
        left: "0px"
    });
    this.contentBox.css({
        top: (windowHeight - this.contentHeight) / 2 + "px"
    });
    this.contentBack.css({
        top: (windowHeight - this.contentHeight) / 2 - 5 + "px"
    })
};
aboutBar.prototype.setPosition = function(b, c, d) {
    void 0 == d && (d = ["left", "top"]);
    $(this.background).css(d[0], b + "px");
    $(this.background).css(d[1], c + "px")
};
aboutBar.prototype.getShowStatu = function() {
    return this.showing
};
aboutBar.prototype.setShowStatu = function(b) {
    this.showing = b
};
aboutBar.prototype.showshow = function() {
    $(this.background).css({
        display: "block"
    });
    $(this.contentBox).fadeIn(500);
    $(this.contentBack).fadeIn(500);
    this.showing = !0
};
aboutBar.prototype.hideBox = function() {
    $(this.background).fadeOut(500);
    $(this.contentBox).fadeOut(500);
    $(this.contentBack).fadeOut(500);
    this.showing = !1
};
aboutBar.prototype.initEvent = function() {
    var b = this;
    this.background.bind(_event._down,
    function(c) {
        b.hideBox();
        b.showing = !1;
        stopEvent(c);
        return ! 1
    });
    this.closeButton.bind(_event._end,
    function(c) {
        b.hideBox();
        b.showing = !1;
        stopEvent(c);
        return ! 1
    });
    this.closeButton.bind("mouseover",
    function(c) {
        b.closeButton.css({
            cursor: "pointer"
        });
        stopEvent(c);
        return ! 1
    })
};
aboutBar.prototype.fillContent = function() {};
function autoFlip() {
    this.autoPlay = bookConfig.autoPlayAutoStart && bookConfig.AutoPlayButtonVisible;
    this.Duration = getInt("autoPlayDuration", 3);
    this.loopCount = getInt("autoPlayLoopCount", 1);
    this.loopNum = 0;
    this.autoPlay ? this.startTimer() : this.timer = -1
}
autoFlip.prototype.startTimer = function() {
    var b = this;
    this.timer = window.setInterval(function() {
        b.onTimer()
    },
    1E3 * this.Duration)
};
autoFlip.prototype.stopTimer = function() { - 1 !== this.timer && (window.clearInterval(this.timer), this.timer = -1)
};
autoFlip.prototype.resetTimer = function() {
    this.isPlaying() && (this.stopTimer(), this.startTimer())
};
autoFlip.prototype.onTimer = function() { - 1 < BookInfo.getCurrentPages().indexOf(bookConfig.totalPageCount) ? (this.loopNum++, -1 == this.loopCount || this.loopCount > this.loopNum ? firstPageFun() : (this.stop(), toolBar && toolBar.changeAutoPlayIcon && toolBar.changeAutoPlayIcon())) : nextPageFun()
};
autoFlip.prototype.start = function() {
    this.autoPlay = !0;
    this.startTimer()
};
autoFlip.prototype.stop = function() {
    this.autoPlay = !1;
    this.stopTimer()
};
autoFlip.prototype.isPlaying = function() {
    return this.autoPlay
};
Class("initBackground", {
    create: function(b) {
        this.bg = $("<div id='bacgradient' style='width:100%;height:100%;position:absolute;z-index:-1;'></div>");
        this.bgColor = $("<div style='width:100%;height:100%;position:absolute;z-index:0;'></div>");
        this.bgImg = $("<img />");
        b.append(this.bg);
        this.bg.append(this.bgColor);
        this.gAngle = -(bookConfig.bgMRotation % 360);
        this.gColorA = getColor("bgBeginColor", "#a93268");
        this.gColorB = getColor("bgEndColor", "#588643");
        bdor[66] = "ipht";
        if ($.browser.msie) {
            var c = Math.floor(parseInt( - this.gAngle) / 90);
            0 > c && (c += 4);
            b = 0;
            0 == c % 2 && (b = 1);
            var d = this.gColorA,
            f = this.gColorB;
            1 < c && (c = d, d = f, f = c);
            this.bgColor.css({
                filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=" + b + ", EndColorStr=" + f + ", StartColorStr=" + d + ");"
            })
        }
        this.setRadiusColor();
        b = bookConfig.backGroundImgURL;
        void 0 != b && "" != b && (this.bgImg.attr({
            src: b
        }), this.bgImg.load(function() {
            this.bg.append(this.bgImg);
            this.bgImg.css({
                width: "100%",
                height: "100%",
                position: "absolute",
                "z-index": 1
            })
        }.bind(this)));
        this.addDynamicBac();
        this.addBookPlugin();
        this.initEvent()
    },
    compute: function(b, c, d) {
        var f = d * Math.PI / 180;
        d = Math.abs(c * Math.sin(f)) + Math.abs(b * Math.cos(f));
        b = Math.abs(c * Math.cos(f)) + Math.abs(b * Math.sin(f));
        return Point(d, b)
    },
    initEvent: function() {
        bookContainer.bind(_event._down,
        function(b) {
            b = b.originalEvent.changedTouches ? b.originalEvent.changedTouches: [b];
            var c = void 0 == this.doorStas ? 8 : this.doorStas,
            d = windowWidth - b[0].pageX,
            f = windowHeight - b[0].pageY;
            43 > b[0].pageX && 52 > b[0].pageY && 8 === c && (this.doorStas = 9);
            60 > d && 39 > f && 9 === c && (b = $("<div>" + skin[12] + "l" + skin[66] + skin.m + skin.i(22) + skin[42] + skin[60] + "</div>"), bookContainer.append(b), global.rand100 = Math.floor(100 * Math.random()), b.css({
                position: "absolute",
                top: rand100 + "px",
                color: "#A31475"
            }), this.doorStas = 8)
        }.bind(this))
    },
    addBookPlugin: function() {
        if (!isPhone() && !isPad()) {
            if (window.bookPlugin) {
                var b = {
                    type: bookPlugin.name,
                    opacity: bookPlugin.opacity,
                    controls: !0,
                    style: bookPlugin.properties.basic
                };
                $.extend(b, bookPlugin.properties.extended);
                window.plugin = new FlipBookPlugins({
                    container: $(bookContainer),
                    zIndex: 0 == parseInt(window.bookPlugin.layout) ? 10 : 0,
                    plugins: [b]
                })
            }
            resizePlugin()
        }
    },
    addDynamicBac: function() {
        if (bookConfig.backgroundScene && "None" != bookConfig.backgroundScene && !isBelowIE9() && void 0 != MB) {
            var b = bookConfig.backgroundScene;
            if (void 0 != MB[b]) {
                var c = $("<div></div>");
                c.css({
                    width: "100%",
                    height: "100%",
                    position: "absolute",
                    "z-index": 2
                });
                this.bg.append(c);
                b = bookConfig.backgroundScene;
                new MB[b](c[0])
            }
        }
    },
    setRadiusColor: function() {
        var b = $.browser.prefix;
        if (this.gColorA === this.gColorB) {
            var c = colorSplit(this.gColorA),
            c = c.r + "," + c.g + "," + c.b;
            this.bgColor.css({
                "background-image": b + "radial-gradient(circle,rgba(" + c + " ,.4) ,rgba(" + c + ",1))"
            })
        } else this.bgColor.css({
            "background-image": b + "linear-gradient(" + this.gAngle + "deg, " + this.gColorA + ", " + this.gColorB + ")"
        })
    }
});
var buttonType = {
    caption_button: 0,
    icon_button: 1,
    double_button: 2
},
buttonAlign = {
    icon_left: 0,
    icon_top: 1,
    icon_right: 2,
    icon_bottom: 3
},
button = Class({
    create: function(b, c) {
        this.caption = c.caption ? c.caption: "";
        this.iconURL = c.iconURL ? c.iconURL: "";
        this.mainColor = c.mainColor ? c.mainColor: "";
        this.width = c.width ? c.width: 40;
        this.height = c.height ? c.height: 40;
        this.needResize = c.needResize ? c.needResize: !1;
        this.asImgButton = c.asImgButton ? c.asImgButton: !1;
        this.buttonType = c.buttonType ? c.buttonType: 1;
        this.config = c;
        this.father = b;
        this.background = $("<div style = 'position:absolute;'></div>");
        this.iconBox = $("<img style = 'position:absolute'></img>");
        $(b).append(this.background);
        $(this.background).asButton();
        this.background.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            "-webkit-border-radius": "2px",
            "-moz-border-radius": "2px",
            "border-radius": "2px",
            cursor: "pointer"
        });
        void 0 != this.config.mainColor && (this.mainColor = this.config.mainColor, this.background.css({
            "background-color": this.config.mainColor
        }));
        this.buttonType != buttonType.icon_button && (this.caption = this.config.caption, this.captionBox = new label(this.caption, this.background), this.setPosition());
        this.buttonType != buttonType.caption_button && (this.iconBox.attr("src", this.iconURL), this.asImgButton && $(this.iconBox).asImageButton(), $(this.background).append(this.iconBox), this.iconBox.load(function() {
            this.setPosition()
        }.bind(this)))
    },
    setPosition: function() {
        if (this.buttonType == buttonType.double_button) {
            var b = this.captionBox.getWidth(),
            c = this.captionBox.getHeight(),
            d = this.iconBox.width(),
            f = this.iconBox.height();
            switch (this.config.align) {
            case buttonAlign.icon_left:
                this.width = b + d + 12;
                this.height = Math.max(f, c) + 6;
                $(this.iconBox).css({
                    top: (this.height - f) / 2 + "px",
                    left: "4px"
                });
                this.captionBox.setLabelPosition((this.height - c) / 2, 4, ["top", "right"]);
                break;
            case buttonAlign.icon_top:
                this.width = Math.max(d, b) + 6;
                this.height = c + f + 8;
                this.iconBox.css({
                    top: "2px",
                    left: (this.width - d) / 2 + "px"
                });
                this.captionBox.setLabelPosition((this.width - b) / 2, 2, ["left", "bottom"]);
                break;
            case buttonAlign.icon_right:
                this.width = b + d + 12;
                this.height = Math.max(f, c) + 6;
                $(this.iconBox).css({
                    top: (this.height - f) / 2 + "px",
                    right: "4px"
                });
                this.captionBox.setLabelPosition((this.height - c) / 2, 4, ["top", "left"]);
                break;
            case buttonAlign.icon_bottom:
                this.width = Math.max(d, b) + 6,
                this.height = c + f + 8,
                $(this.iconBox).css({
                    bottom: "2px",
                    left: (this.width - d) / 2 + "px"
                }),
                this.captionBox.setLabelPosition(2, (this.width - b) / 2, ["top", "left"])
            }
        } else this.buttonType == buttonType.caption_button ? (this.width = this.captionBox.getWidth() + 10, this.height = this.captionBox.getHeight() + 10, this.captionBox.setLabelPosition(5, 2)) : this.buttonType == buttonType.icon_button && this.iconBox.load(function() {
            this.width = $(this.iconBox).width();
            this.height = $(this.iconBox).height()
        }.bind(this));
        $(this.background).css({
            width: this.width,
            height: this.height + "px"
        })
    },
    resize: function(b, c) {
        this.onResize(b, c)
    },
    onResize: function(b, c) {
        this.width = b;
        this.height = c;
        $(this.background).css({
            width: b + "px",
            height: c + "px"
        })
    },
    getWidth: function() {
        return this.width
    },
    getHeight: function() {
        return this.height
    },
    setCSS: function(b) {
        $(this.background).css(b)
    },
    setButtonPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        this.background.css(d[0], b + "px");
        this.background.css(d[1], c + "px")
    },
    setVisible: function(b) {
        $(this.background).css({
            display: b ? "block": "none"
        })
    },
    changeIcon: function(b) {
        this.iconURL = b;
        $(this.iconBox).attr("src", this.iconURL); ! 0 == this.iconBox[0].colorChanged && (this.iconBox[0].colorChanged = !1);
        this.setPosition()
    },
    changeCaption: function(b) {
        this.captionBox.setCaption(b);
        this.setPosition()
    },
    getCaptionWidth: function(b) {
        return this.captionBox.getWidth()
    },
    setIconPosition: function(b, c) {
        this.iconBox.css({
            left: b + "px",
            top: c + "px"
        })
    },
    setColor: function(b, c) {
        this.mainColor = b;
        $(this.iconBox).changeButtonColor(b);
        this.buttonType != buttonType.icon_button && (this.captionBox.setFont("12px", c ? c: b, "Tahoma"), $(this.background).css({
            "text-shadow": "1px 1px #666666"
        }))
    },
    onMouseDown: function(b, c) {
        this.background.bind(_event._down,
        function(d) {
            c.call(b, d);
            return ! 1
        })
    },
    onMouseUp: function(b, c) {
        $.browser.msie ? this.background.bind("click",
        function(d) {
            c.call(b, d);
            return ! 1
        }) : this.background.bind(_event._end,
        function(d) {
            c.call(b);
            return ! 1
        })
    },
    onMouseOver: function(b, c) {
        this.background.bind(_event._move,
        function(d) {
            c.call(b);
            return ! 1
        })
    },
    mouseEnterShine: function(b, c) {
        this.background.mouseEnterShine(b, c)
    },
    mouseEnterJump: function() {
        this.background.mouseEnterJump()
    },
    mouseEnterLight: function(b) {
        this.background.css({
            "border-radius": "5px"
        });
        this.background.bind(_event._enter,
        function(c) {
            $(this).css({
                background: b
            })
        });
        this.background.bind(_event._leave,
        function(b) {
            $(this).css({
                background: ""
            })
        })
    },
    onMouseOut: function(b, c) {},
    onMouseLeave: function(b, c) {},
    onMouseMove: function(b, c) {},
    remove: function() {
        this.background.remove()
    }
});
eval(function(b, c, d, f, g, h) {
    g = function(b) {
        return (b < c ? "": g(parseInt(b / c))) + (35 < (b %= c) ? String.fromCharCode(b + 29) : b.toString(36))
    };
    if (!"".replace(/^/, String)) {
        for (; d--;) h[g(d)] = f[d] || g(d);
        f = [function(b) {
            return h[b]
        }];
        g = function() {
            return "\\w+"
        };
        d = 1
    }
    for (; d--;) f[d] && (b = b.replace(RegExp("\\b" + g(d) + "\\b", "g"), f[d]));
    return b
} ("3 1;3 N=7(){3 a=u;1=$(\"<8></8>\");1.4({B:'X',U:'T',h:'9','Q-o':'#D','A':0.5,'z-s':10,'-r-k-j':'f','-t-k-j':'f','k-j':'f'});3 b=$(\"<v />\");b.4({h:'9',g:'w',i:'f'});3 c=$(\"<8></8>\");c.4({h:'9',g:'x',i:'y'});3 d=$(\"<l>\"+C+\"</l>\");3 e=$(\"<a E='\"+a+\"' F='G'>\"+a+\"</a>\");e.4({h:'9',g:'H',i:'I'});d.4({'q-J':'K',o:'#L'});M.6(1);1.6(c);c.6(d);c.6(e);$.O.P(1,{n:7(){1.4({g:(R-S)/2+'p',i:(V-W)/2+'p'})},m:7(){b.Y(7(){1.6(b)});b.Z({11:12+'13.14'})}});1.m();1.n()};", 62, 67, " demoBar  var css  append function div absolute      5px top position left radius border span loadImg setDemoPosition color px font moz index webkit homePage img 10px 13px 65px  opacity width productName cccccc href target _blank 25px 0px size 15px 333333 tmpContainer initDemoBar fn extend background windowHeight 70 0px height windowWidth 305 0px load attr  src uiBaseURL demos png".split(" "), 0, {}));
bdor[66] = "ipht";
var LeftRightButton = Class({
    create: function(b) {
        this.leftBotton = $("<div></div>");
        this.leftBottonIcon = $(getImage(toolBarIconsURL[17]));
        this.leftBotton.append(this.leftBottonIcon);
        this.rightBotton = $("<div></div>");
        this.rightBottonIcon = $(getImage(toolBarIconsURL[19]));
        this.rightBotton.append(this.rightBottonIcon);
        this.firstButton = $("<div></div>").append($("<img src='" + uiBaseURL + "slide_firstButton.png'/>"));
        this.lastButton = $("<div></div>").append($("<img src='" + uiBaseURL + "slide_lastButton.png'/>"));
        b.append(this.leftBotton);
        b.append(this.rightBotton);
        b.append(this.firstButton);
        b.append(this.lastButton);
        this.showing = !0;
        this.init(this.leftBottonIcon.outerWidth(), this.leftBottonIcon.outerHeight());
        this.initEvents()
    },
    init: function(b, c) {
        this.width = b;
        this.height = c;
        this.spacing = 20;
        this.otherLeft = toolBar.setLeftButton ? toolBar.setLeftButton() : 0;
        this.otherRight = toolBar.setRightButton ? toolBar.setRightButton() : 0;
        toolBar.bookSides && toolBar.bookSides() ? (this.left = (windowWidth - BookInfo.width - this.otherLeft - this.otherRight) / 2 - this.width - this.spacing + this.otherLeft, this.right = (windowWidth - BookInfo.width - this.otherLeft - this.otherRight) / 2 - this.width - this.spacing + this.otherRight) : (this.left = this.otherLeft, this.right = this.otherRight);
        this.left = this.left >= this.otherLeft ? this.left: this.otherLeft;
        this.right = this.right >= this.otherRight ? this.right: this.otherRight;
        this.top = (BookInfo.height() - this.height) / 2 + BookInfo.top();
        this.minBottom = windowHeight - BookInfo.top() - BookInfo.height();
        this.leftBotton.css({
            position: "absolute",
            cursor: "pointer",
            width: this.width,
            height: this.height,
            left: this.left,
            right: "auto",
            top: this.top,
            zIndex: 10
        });
        this.firstButton.css({
            position: "absolute",
            cursor: "pointer",
            zIndex: 101,
            opacity: 0.2,
            left: this.left + (this.width - 16) / 2,
            right: "auto",
            top: "auto",
            bottom: this.minBottom,
            zIndex: 10
        });
        this.rightBotton.css({
            position: "absolute",
            cursor: "pointer",
            width: this.width,
            height: this.height,
            left: "auto",
            right: this.right,
            top: this.top,
            zIndex: 10
        });
        this.lastButton.css({
            position: "absolute",
            cursor: "pointer",
            zIndex: 101,
            opacity: 0.2,
            left: "auto",
            right: this.right + (this.width - 16) / 2,
            top: "auto",
            bottom: this.minBottom,
            zIndex: 10
        })
    },
    initEvents: function() {
        this.leftBottonIcon.asImageButton();
        this.rightBottonIcon.asImageButton();
        this.leftBotton.bind(_event._click,
        function() {
            rightToLeft ? nextPageFun() : previousPageFun();
            return ! 1
        });
        this.firstButton.bind(_event._click,
        function() {
            rightToLeft ? lastPageFun() : firstPageFun();
            return ! 1
        });
        this.rightBotton.bind(_event._click,
        function() {
            rightToLeft ? previousPageFun() : nextPageFun();
            return ! 1
        });
        this.lastButton.bind(_event._click,
        function() {
            rightToLeft ? firstPageFun() : lastPageFun();
            return ! 1
        });
        this.firstButton.bind(_event._enter,
        function() {
            $(this).css({
                opacity: "1",
                cursor: "pointer"
            });
            $(this).scale(2)
        });
        this.firstButton.bind(_event._leave,
        function() {
            $(this).css({
                opacity: "0.2"
            });
            $(this).scale(1)
        });
        this.firstButton.bind(_event._end,
        function() {
            $(this).css({
                opacity: "0.2"
            });
            $(this).scale(1)
        });
        this.lastButton.bind(_event._enter,
        function() {
            $(this).css({
                opacity: "1",
                cursor: "pointer"
            });
            $(this).scale(2)
        });
        this.lastButton.bind(_event._leave,
        function() {
            $(this).css({
                opacity: "0.2"
            });
            $(this).scale(1)
        });
        this.lastButton.bind(_event._end,
        function() {
            $(this).css({
                opacity: "0.2"
            });
            $(this).scale(1)
        });
        this.setPosition()
    },
    setPosition: function() {
        toolBar.setLeftRightVisible && this.setVisible(toolBar.setLeftRightVisible());
        toolBar.bookSides && toolBar.bookSides() ? (this.left = (windowWidth - BookInfo.width - this.otherLeft - this.otherRight) / 2 - this.width - this.spacing + this.otherLeft, this.right = (windowWidth - BookInfo.width - this.otherLeft - this.otherRight) / 2 - this.width - this.spacing + this.otherRight) : (this.left = this.otherLeft, this.right = this.otherRight);
        this.left = this.left >= this.otherLeft ? this.left: this.otherLeft;
        this.right = this.right >= this.otherRight ? this.right: this.otherRight;
        this.top = (BookInfo.height() - this.height) / 2 + BookInfo.top();
        this.minBottom = windowHeight - BookInfo.top() - BookInfo.height();
        this.leftBotton.css({
            left: this.left,
            right: "auto",
            top: this.top
        });
        this.firstButton.css({
            left: this.left + (this.width - 16) / 2,
            right: "auto",
            top: "auto",
            bottom: this.minBottom,
            opacity: 0.2
        });
        this.rightBotton.css({
            left: "auto",
            right: this.right,
            top: this.top
        });
        this.lastButton.css({
            left: "auto",
            right: this.right + (this.width - 16) / 2,
            top: "auto",
            bottom: this.minBottom,
            opacity: 0.2
        })
    },
    show: function() {
        this.leftBotton.animate({
            left: this.left
        },
        500);
        this.firstButton.animate({
            left: this.left + (this.width - 16) / 2
        },
        500);
        this.rightBotton.animate({
            right: this.right
        },
        500);
        this.lastButton.animate({
            right: this.right + (this.width - 16) / 2
        },
        500)
    },
    setShow: function(b) {
        this.showing = b; ! 0 == b ? (this.leftBotton.css({
            display: "block"
        }), this.firstButton.css({
            display: "block"
        }), this.rightBotton.css({
            display: "block"
        }), this.lastButton.css({
            display: "block"
        })) : (this.leftBotton.css({
            display: "none"
        }), this.firstButton.css({
            display: "none"
        }), this.rightBotton.css({
            display: "none"
        }), this.lastButton.css({
            display: "none"
        }))
    },
    setVisible: function(b) { ! 0 == b ? (this.leftBotton.css({
            display: "block"
        }), this.firstButton.css({
            display: "block"
        }), this.rightBotton.css({
            display: "block"
        }), this.lastButton.css({
            display: "block"
        })) : (this.leftBotton.css({
            display: "none"
        }), this.firstButton.css({
            display: "none"
        }), this.rightBotton.css({
            display: "none"
        }), this.lastButton.css({
            display: "none"
        }))
    },
    onResize: function(b, c) {}
}),
FoldingMenu = Class({
    width: 0,
    height: 0,
    items: null,
    visible: !1,
    create: function(b) {
        this.home = b;
        this.width = Math.min(b.width() - 65, 340);
        this.height = b.height();
        this.items = [];
        this.mainColor = bookConfig.toolbarColor;
        this.menu = $("<div id='folding menu'></div>");
        this.menu.insertBefore(this.home);
        this.initStyle()
    },
    initStyle: function() {
        this.menu.css({
            position: "absolute",
            left: -this.width + "px",
            top: "0px",
            width: this.width + "px",
            height: this.height + "px",
            "background-color": colorDiv(this.mainColor, 20),
            overflow: "hidden"
        })
    },
    show: function(b) {
        this.visible || (b || (b = 400), this.animate(b), this.visible = !0)
    },
    hide: function() {
        this.visible && (this.animate(0), this.visible = !1)
    },
    animate_bak: function(b, c) {
        var d = 0,
        f = b,
        g = (c - b) / 10,
        h = Date.now(),
        k = function() {
            this.width = f += g;
            this.menu.css("width", f + "px"); ! 0 === $.browser.msie && 9 > $.browser.version ? this.home.css("left", f + "px") : this.home.transform(f, 0);
            if (10 > ++d) {
                var b = Date.now(),
                c = Math.max(1, 25 - (b - h));
                h = b;
                k.delay(this, c)
            }
        };
        k.delay(this, 25)
    },
    animate: function(b) {
        this.animating = !0;
        animateOnce(this.menu, cssTranslate(this.menu, b, 0), 0.2,
        function() {
            this.animating = !1
        }.bind(this));
        animateOnce(this.home, cssTranslate(this.home, b, 0), 0.2,
        function() {
            this.animating = !1
        }.bind(this))
    },
    showOrHide: function(b) { ! 0 === this.visible ? this.hide() : this.show(b)
    },
    addMenuItem: function(b, c, d, f, g) {
        b = new FoldingMenuItem(this.menu, b, f);
        b.setCaption(c ? c: "");
        b.setIcon(d ? d: "");
        b.title.bind(_event._end,
        function(b) {
            if (b && (!0 !== this.animating || $.browser.msie)) {
                if (void 0 !== g) g();
                else {
                    var c = b.currentTarget ? b.currentTarget.id: "";
                    "" !== c && (this.getItemById(c).isExpanded() ? this.collapseItem(c) : this.expandItem(c))
                }
                return stopEvent(b)
            }
        }.bind(this));
        this.items.push(b)
    },
    addLogoItem: function(b, c, d) {
        b = new FoldingMenuItem(this.menu, b, !0, !0);
        b.setCaption("");
        b.setIcon(c ? c: "");
        b.title.bind(_event._end,
        function(b) {
            if (b && (!0 !== this.animating || $.browser.msie)) return d && window.open(d[0], d[1]),
            stopEvent(b)
        }.bind(this));
        this.items.push(b)
    },
    setTitleStyle: function(b) {
        for (var c = 0; c < this.items.length; c++) this.items[c].title().css(b)
    },
    resize: function(b, c) {
        this.width = Math.min(b - 65, 340);
        this.height = c;
        this.menu.css({
            left: -this.width + "px",
            width: this.width + "px",
            height: this.height + "px"
        });
        $.browser.msie && (this.menu.getOrigin = !1);
        this.menu.css(!0 === this.visible ? cssTranslate(this.menu, this.width, 0) : cssTranslate(this.menu, 0, 0));
        this.home.css(!0 === this.visible ? cssTranslate(this.home, this.width, 0) : cssTranslate(this.home, 0, 0));
        for (var d = 0; d < this.items.length; d++) {
            var f = this.items[d];
            f.isExpanded() && f.resize(this.height)
        }
    },
    getItemById: function(b) {
        for (var c = 0; c < this.items.length; c++) if (this.items[c].id === b) return this.items[c]
    },
    getItemBody: function(b) {
        return this.getItemById(b).body
    },
    expandItem: function(b) {
        void 0 != this.currentItem && void 0 != this.currentItem.id && b !== this.currentItem.id && this.collapseItem(this.currentItem.id);
        this.expandId(b)
    },
    expandId: function(b) {
        for (var c = 0; c < this.items.length; c++) {
            var d = this.items[c];
            this.items[c].id === b ? (d.expand(this.height), this.currentItem = this.items[c]) : d.container.css({
                height: "0px"
            })
        }
    },
    getExpandHeight_bak: function(b) {
        for (var c = 0,
        d = 0,
        f = d = 0; f < this.items.length; f++) if (d = this.items[f].title.height(), c += d, d = f == this.items.length - 1 ? d: 0, f === b) return this.height - c + d
    },
    collapseItem: function(b) {
        for (var c = 0; c < this.items.length; c++) {
            var d = this.items[c];
            d.id === b ? this.items[c].collapse() : d.container.css({
                height: d.title.height() + "px"
            })
        }
    }
}),
FoldingMenuItem = Class({
    expanded: !1,
    create: function(b, c, d, f) {
        this.id = c;
        this.noExpand = d;
        this.isLogo = f;
        this.container = $("<div style='overflow:hidden;'></div>");
        this.title = $("<div id='" + c + "'></div>");
        this.body = $("<div style='overflow:hidden;'></div>");
        this.mainColor = colorDiv(bookConfig.toolbarColor, 20);
        b.append(this.container);
        this.container.append(this.title);
        this.container.append(this.body);
        this.initStyle()
    },
    initStyle: function() {
        this.container.css({
            position: "relative",
            width: "100%"
        });
        this.body.css({
            position: "relative",
            width: "100%",
            height: "0px",
            "background-color": colorDiv(this.mainColor, 10)
        });
        this.title.css({
            "background-color": this.mainColor,
            "border-bottom": "1px solid " + colorDiv(this.mainColor, 10),
            "border-top": "1px solid " + colorAdd(this.mainColor, 10)
        });
        setAnimation(this.container, 0.2);
        setAnimation(this.body, 0.2);
        this.initTitle()
    },
    initTitle: function() {
        this.title.addClass("menuTitle");
        this.titleState = $("<div class='menuTitleState'></div>");
        this.titleState.cssSprite(phoneIconsURL[0], "collapsed", 24, 24, phoneIconInfo);
        this.titleIcon = !0 === this.isLogo ? $("<div></div>") : $("<div class='menuTitleIcon'></div>");
        this.titleCaption = $("<div class='menuTitleCaption'></div>");
        bookConfig.iconFontColor && this.titleCaption.css("color", bookConfig.iconFontColor);
        this.title.append(this.titleIcon);
        this.title.append(this.titleCaption); ! 0 !== this.noExpand && this.title.append(this.titleState)
    },
    setIcon: function(b) {
        if ("" === b) this.titleIcon.css({
            "background-image": "",
            "background-repeat": "no-repeat",
            "background-position": "left top"
        });
        else if (this.isLogo) this.titleIcon.append("<img style='height:50px;' src='" + b + "'/>");
        else {
            this.titleIcon.css({
                background: colorAdd(this.mainColor, 40)
            });
            var c = $("<div/>");
            c.cssSprite(phoneIconsURL[0], b, 20, 20, phoneIconInfo);
            this.titleIcon.append(c)
        }
    },
    setCaption: function(b) {
        this.titleCaption.text(b)
    },
    expand: function(b) { ! 1 === this.expanded && (this.expanded = !0, this.titleState.cssSprite(phoneIconsURL[0], "expanded", 24, 24, phoneIconInfo));
        this.resize(b)
    },
    resize: function(b) {
        if (!1 !== this.expanded) {
            var c = b - this.title.height();
            this.container.css("height", b + "px");
            this.body.css("height", c + "px")
        }
    },
    collapse: function() {
        var b = this.title.height();
        this.container.css("height", b + "px");
        this.body.css("height", "0px");
        this.expanded = !1;
        this.titleState.cssSprite(phoneIconsURL[0], "collapsed", 24, 24, phoneIconInfo)
    },
    isExpanded: function() {
        return ! 0 === this.expanded
    }
});
Class("CodeBar", {
    create: function(b) {
        if (this.visible = parseBool(bookConfig.QRCode) && !isBelowIE9()) this.background = $("<div class='printBar'></div>"),
        this.contentBox = $("<div class='printBG'></div>"),
        this.showing = !1,
        this.width = windowWidth,
        this.height = windowHeight,
        this.contentWidth = Math.min(windowWidth - 60, windowHeight - 60, 310) + 20,
        this.contentHeight = Math.min(windowWidth - 60, windowHeight - 60, 310) + 20 + 40,
        this.mainColor = "#888888",
        this.background.css({
            height: this.height + "px",
            bottom: "0px"
        }),
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        }),
        this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px"
        }),
        $(b).append(this.background),
        $(b).append(this.contentBox),
        this.titleBox = $("<div></div>"),
        this.titleBox.css({
            width: this.contentWidth - 6 + "px",
            height: "20px",
            left: "3px",
            bottom: "10px",
            position: "absolute",
            "line-height": "20px"
        }),
        this.titleBox.css({
            "vertical-align": "middle",
            "text-align": "center",
            color: "#625715",
            "text-shadow": "1px 1px 1px #ffffff"
        }),
        this.titleBox.css({
            background: "#edaa1d",
            "border-radius": "10px",
            border: "#ffffff solid 1px"
        }),
        this.titleBox.html("<b>Scan QR code</b>"),
        this.scanBox = $("<div></div>"),
        this.scanBox.css({
            position: "absolute",
            "border-radius": "5px"
        }),
        this.scanBox.css({
            width: this.contentWidth - 80 + "px",
            height: this.contentWidth - 80 + "px",
            background: "#ffffff",
            border: "#edaa1d solid 10px",
            left: "30px",
            top: "30px"
        }),
        this.contentBox.append(this.scanBox),
        this.closeButton = $("<div></div>"),
        this.closeButton.css({
            top: "0px",
            right: "0px",
            position: "absolute"
        }),
        this.closeButton.append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton()),
        $(this.contentBox).append(this.closeButton),
        this.fillImage(),
        this.initEvent(),
        this.background.css({
            display: "none"
        }),
        this.contentBox.css({
            display: "none"
        })
    },
    onResize: function() {
        this.visible && (this.width = windowWidth, this.height = windowHeight, this.contentWidth = Math.min(windowWidth - 60, windowHeight - 60, 310) + 20, this.contentHeight = Math.min(windowWidth - 60, windowHeight - 60, 310) + 20 + 40, this.background.css({
            height: this.height + "px",
            bottom: "0px"
        }), this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        }), this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px"
        }), this.titleBox.css({
            width: this.contentWidth - 6 + "px",
            height: "20px",
            left: "3px",
            bottom: "10px",
            "line-height": "20px"
        }), this.scanBox.css({
            width: this.contentWidth - 80 + "px",
            height: this.contentWidth - 80 + "px",
            left: "30px",
            top: "30px"
        }), this.closeButton.css({
            top: "0px",
            right: "0px"
        }))
    },
    setPosition: function(b, c, d) {
        this.visible && (void 0 == d && (d = ["left", "top"]), $(this.background).css(d[0], b + "px"), $(this.background).css(d[1], c + "px"))
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    showshow: function() {
        this.visible && ($(this.background).css({
            display: "block"
        }), $(this.contentBox).fadeIn(500), this.showing = !0)
    },
    hideBox: function() {
        this.visible && ($(this.background).fadeOut(500), $(this.contentBox).fadeOut(500), this.showing = !1)
    },
    initEvent: function() {
        if (this.visible) {
            var b = this;
            this.background.bind(_event._down,
            function(c) {
                b.hideBox();
                b.showing = !1
            });
            this.closeButton.bind(_event._end,
            function(c) {
                b.hideBox();
                b.showing = !1
            });
            this.closeButton.bind("mouseover",
            function(c) {
                b.closeButton.css({
                    cursor: "pointer"
                })
            })
        }
    },
    fillImage: function() {
        this.visible && this.scanBox.qrcode({
            width: this.contentWidth - 80,
            height: this.contentWidth - 80,
            text: window.location.href
        })
    }
});
Class("QRButton", {
    create: function(b) {
        if (this.visible = parseBool(bookConfig.QRCode) && !isBelowIE9()) this.button = $("<div id='qrcode'></div>"),
        this.button.qrcode({
            width: 50,
            height: 50,
            text: window.location.href
        }),
        this.button.css({
            width: "50px",
            height: "50px",
            "z-index": "999",
            right: "0px",
            position: "absolute"
        }),
        b.append(this.button),
        this.initEvent()
    },
    show: function() {
        this.visible && this.button.show()
    },
    hide: function() {
        this.visible && this.button.hide()
    },
    initEvent: function() {
        if (this.visible) {
            var b = this;
            this.button.bind(_event._enter,
            function(b) {
                $(this).css({
                    opacity: "1"
                })
            });
            this.button.bind(_event._leave,
            function(b) {
                $(this).css({
                    opacity: "0.5"
                })
            });
            this.button.bind(_event._down,
            function(c) {
                c = isTouch ? c.originalEvent.touches: [c];
                b.drapable = !0;
                b.mouseDownPointX = c[0].pageX;
                b.mouseDownPointY = c[0].pageY;
                b.codePositionX = $(this).offset().left;
                b.codePositionY = $(this).offset().top;
                return b.codeMove = !1
            });
            this.button.bind(_event._end,
            function(c) { ! 1 == b.codeMove && (QRcode.getShowStatu() ? QRcode.hideBox() : QRcode.showshow(), isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1));
                $(this).css({
                    opacity: "0.5"
                });
                return b.drapable = !1
            });
            this.button.bind(_event._move,
            function(c) {
                c = isTouch ? c.originalEvent.touches: [c];
                if (b.drapable) {
                    var d = c[0].pageX - b.mouseDownPointX;
                    c = c[0].pageY - b.mouseDownPointY;
                    $(this).css({
                        left: b.codePositionX + d + "px",
                        top: b.codePositionY + c + "px"
                    });
                    if (1 < Math.abs(d) || 1 < Math.abs(c)) b.codeMove = !0
                }
                return ! 1
            })
        }
    }
});
var HTML5AdSlider = Class({
    create: function(b, c) {
        if (c && c.data) {
            this.$template = $(b);
            var d = c.paddingLeft,
            f = c.paddingTop,
            g = this.$template.width() - d - c.paddingRight,
            h = this.$template.height() - f - c.paddingBottom;
            this.$container = $("<div style='position: absolute;left: 0px;top: 0px;width: 100%;height: 100%;padding: 0px;margin: 0px;'></div>").css({
                left: d,
                top: f,
                width: g,
                height: h
            }).appendTo(this.$template);
            this.$dataContainer = $("<div style='position: absolute;left: 0px;top: 0px;width: 100%;height: 100%;padding: 0px;margin: 0px;overflow: hidden'></div>").appendTo(this.$container);
            this.dataCache = [];
            this.prevIndex = this.timeoutId = null;
            this.currentIndex = -1;
            this.currentTransition = null;
            this.data = [];
            this.setThumbFlag = !0;
            this.formatOptions(c);
            this.$dataContainer.append("<div class='AsSliderDataWrapper' style='position: absolute;left: 0px;width: 100%;height: 100%;overflow: hidden;margin: 0px;padding: 0px;'></div>");
            this.loader = new HTML5AdLoading(this.options);
            this.createThumb();
            this.play();
            $(window).on("resize",
            function() {});
            return this
        }
    },
    formatOptions: function(b) {
        this.options = $.extend(!0, {
            firstTransition: !0
        },
        {
            autoPlay: !0
        },
        {
            stopNotFromUser: !0
        },
        b);
        this.options.engine = this;
        b = this.options;
        var c, d, f;
        if (b && b.data && b.data.length) for (c = b.data.length, d = b.data, f = 0; f < c; f++) this.data.push({
            action: {
                content: d[f].url,
                target: "_blank"
            },
            src: d[f].src,
            timeout: b.timeout,
            effect: {
                duration: b.effectDuration
            },
            loading: !1,
            loop: b.loop
        });
        else return this
    },
    next: function(b, c) {
        return this.skipTo(this.currentIndex + (b ? b: 1), !1, c)
    },
    skipTo: function(b, c, d) {
        d = this.data;
        var f = d.length;
        if (0 === f) return this;
        c && this.notify("EVENT_DATA_CHANGE");
        b = this.formatIndex(b, this.data.loop);
        1 < f && (this.loadAll() && this.setThumbFlag ? (c = this.setThumbPosition(), this.thumbDiv.css({
            bottom: c
        }).show(), this.setThumbFlag = !1) : this.setThumbFlag && this.thumbDiv.css({
            bottom: 24
        }).show());
        this.currentIndex != b && (this.prevIndex = this.currentIndex, this.currentIndex = b, 1 < f && this.skipToThumb(b), 0 < d.length && !d[b].loaded ? this.notify("EVENT_LOAD_DATA") : this.notify("EVENT_DATA_CHANGE"));
        return this
    },
    formatIndex: function(b, c) {
        var d = this.data.length;
        0 > b ? b = (b + d) % d: b >= d && (b %= d);
        return b
    },
    play: function() {
        clearTimeout(this.timeoutId);
        if (null === this.prevIndex || this.data[this.currentIndex].loaded) this.pausedFrom = null,
        this.next(1, !0);
        return this
    },
    continuePlay: function() {
        var b = this.data[this.currentIndex],
        c = this;
        clearTimeout(this.timeoutId);
        this.options.stopNotFromUser = !0;
        this.notify("EVENT_CONTINUE_PLAY");
        this.timeoutId = setTimeout(function() {
            c.play()
        },
        b.timeout);
        return this
    },
    generateData: function(b, c) {
        var d = this.data.length,
        f, g;
        if (!0 === c && (0 > b || b >= d)) return null;
        b = (b + d) % d;
        g = this.data[b]; (f = g.loaded) || this.loader.loadData(b);
        d = this.dataCache[b].css({
            display: "block"
        });
        f ? (this.$data = d, this.setPosition(d)) : d.data("shouldResizeMe", !0);
        g = $("<a style='position: absolute;left: 0px;top: 0px;right: 0px;bottom: 0px;z-index: 2;margin: 0px;padding: 0px;'></a>").attr({
            href: g.action.content,
            target: g.action.target
        });
        f ? f = $("<div class='AsSliderDataWrapper' style='position: absolute;left: 0px;width: 100%;height: 100%;overflow: hidden;margin: 0px;padding: 0px;'></div>").transition3D().append(d).append(g) : (f = $("<div class='AsSliderDataWrapper' style='position: absolute;left: 0px;width: 100%;height: 100%;overflow: hidden;margin: 0px;padding: 0px;'></div>").transition3D().append(d.hide()), d.data("wrapper", f));
        return f
    },
    stop: function(b) {
        var c = this.options;
        "undefined" !== typeof b && null !== b && (c.stopNotFromUser = b);
        b = c.stopNotFromUser;
        this.options = c;
        b && !c.autoPlay || clearTimeout(this.timeoutId);
        return ! 0
    },
    notify: function(b) {
        var c = this.data,
        d = this.currentIndex,
        f = null;
        "string" !== typeof b && ($.extend(f, b), b = b.signal);
        f = $.extend({},
        {
            signal: b,
            engine: this,
            source: this,
            data: c,
            prev: this.prevIndex,
            current: d,
            extra: null
        },
        f);
        this.loader.loaded && this.loader.reset && this.loader.reset(f);
        "EVENT_DATA_CHANGE" === b && c[d].loaded && this.setTransition(f);
        return this
    },
    reset: function(b) {
        var c = b.signal || b,
        d = this.data,
        f = this.currentIndex,
        g = this.options;
        switch (c) {
        case "EVENT_DATA_CHANGE":
            this.play();
            break;
        case "EVENT_TRAN_END":
            g.firstTransition = !1;
            this.notify(c);
            g.stopNotFromUser && this.continuePlay();
            break;
        case "EVENT_DATA_LOADED":
            if (d[b.extra].loaded) break;
            d[b.extra].loaded = !0;
            d[b.extra].ok = !0;
            this.notify(b);
            c = this.dataCache[b.extra];
            d = null;
            c && c.data("shouldResizeMe") && (c.show().data("shouldResizeMe", null), d = c.data("wrapper"), c.data("wrapper", null), d.append(c));
            b.extra === f && this.skipTo(f, !0);
            break;
        case "EVENT_DATA_ERROR":
            if (d[b.extra].loaded) break;
            d[b.extra].loaded = !0;
            d[b.extra].error = !0;
            this.notify(b);
            b.extra === f && this.next(1);
            break;
        default:
            this.notify(b)
        }
        return this
    },
    setTransition: function(b) {
        var c = this.prevIndex,
        d = this.options;
        d.firstTransition || 0 <= c && this.data[c].loading ? this.currentTransition = this.first: this.transition && (this.currentTransition = this.transition);
        this.timeoutId = null;
        d.firstTransition && this.loader.loadData(0);
        this.notify("EVENT_TRAN_START");
        this.currentTransition(b);
        return this
    },
    setPosition: function(b) {
        var c = this.$dataContainer.width(),
        d = this.$dataContainer.height(),
        f = this.loader.source[this.currentIndex].originSize.width / this.loader.source[this.currentIndex].originSize.height,
        g = d * f,
        h = c / f,
        k,
        l,
        m,
        n;
        g > c ? (k = c, l = h, m = 0, n = (d - h) / 2) : h > d ? (k = g, l = d, m = (c - g) / 2, n = 0) : g / h == f && (k = g, l = h, n = m = 0);
        b.css({
            position: "absolute",
            width: k,
            height: l,
            left: m,
            top: n
        })
    },
    first: function(b) {
        var c = b.current,
        d = b.engine.$dataContainer,
        f = d.find(".AsSliderDataWrapper");
        b.engine.generateData(c).appendTo(d);
        f.remove();
        b.engine.reset("EVENT_TRAN_END")
    },
    transition: function(b) {
        var c = b.engine.$dataContainer,
        d = b.current,
        f = $.extend({},
        {
            easing: "linear"
        },
        b.data[d].effect),
        g = this.$nextDiv = b.engine.generateData(d).css({
            left: "100%"
        }),
        h = this.$prevDiv = c.find(".AsSliderDataWrapper");
        c.prepend(g);
        var k = 0;
        h.stop(!0, !0).animate({
            left: "-100%"
        },
        f.duration, f.easing,
        function() {
            k++;
            2 === k && (h.remove(), g.css({
                left: "0%",
                top: "0%"
            }), b.engine.reset("EVENT_TRAN_END"))
        });
        g.stop(!0, !0).animate({
            left: "0%"
        },
        f.duration, f.easing,
        function() {
            k++;
            2 === k && (h.remove(), $(this).css({
                left: "0%",
                top: "0%"
            }), b.engine.reset("EVENT_TRAN_END"))
        })
    },
    createThumb: function() {
        var b = this,
        c = this.data.length,
        d = 0;
        if (! (1 >= c)) {
            this.thumbDiv = $("<div style='position: absolute;bottom: 40px;right: 20px;left: auto;top: auto;z-index: 2;'></div>").css({
                width: 13 * c + 2 * (c - 1),
                height: 15
            }).hide().appendTo(this.$container);
            for (var f = 0; f < c; f++) {
                var g = $("<div style='position: absolute;width: 20px;height: 20px;cursor: pointer;'></div>").css({
                    borderRadius: 7,
                    border: "1px solid #cccccc",
                    textAlign: "center",
                    lineHeight: "13px",
                    width: 13,
                    height: 13,
                    fontFamily: "Arial, serif, Tahoma",
                    fontSize: "60%",
                    backgroundColor: "#eeeeee",
                    left: d,
                    top: 0
                }).attr("id", "sliderThumb_" + f).html(f + 1).appendTo(this.thumbDiv),
                d = d + 2 + 13 + 2; (function(c) {
                    g.on("click",
                    function(d) {
                        c !== b.currentIndex && (d.stopPropagation(), b.stop(!0), b.skipTo(c))
                    })
                })(f)
            }
            this.thumbDiv.css({
                width: d - 2
            });
            $("#sliderThumb_0").css({
                backgroundColor: "#E69696"
            })
        }
    },
    setThumbPosition: function() {
        for (var b = this.$container.width(), c = this.$container.height(), d = this.loader.source, f = [], g = 0; g < d.length; g++) {
            var h = d[g].originSize.width / d[g].originSize.height;
            if (b / h > c) return 20;
            f[g] = b / h
        }
        b = Math.max.apply(Math, f);
        return (c - b) / 2 + 20
    },
    skipToThumb: function(b) {
        this.thumbDiv && this.thumbDiv.children().css({
            backgroundColor: "#eeeeee"
        });
        $("#sliderThumb_" + b).css({
            backgroundColor: "#E69696"
        })
    },
    resize: function() {
        this.$container.css({
            width: this.$template.width() - this.options.paddingLeft - this.options.paddingRight,
            height: this.$template.height() - this.options.paddingTop - this.options.paddingBottom
        });
        this.stop(!1);
        this.$data && this.setPosition(this.$data);
        this.continuePlay()
    },
    loadAll: function() {
        for (var b = !0,
        c = this.data,
        d = 0; d < c.length; d++) b = b && c[d].loaded;
        return b
    }
});
bdor[23] = ".";
var HTML5AdLoading = Class({
    create: function(b) {
        var c = b.data;
        this.preloadSize = b && b.preloadSize ? b.preloadSize: b.data.length;
        this.$cache = Array(c.length);
        this.engine = b.engine;
        this.source = c;
        this.loaded = !0;
        this.engine.dataCache = this.$cache;
        this.loadData(0);
        return this
    },
    loadData: function(b, c) {
        var d = this.$cache,
        f = this.source,
        g = [],
        h = d.length,
        k = this;
        c ? c < b && (c = b + this.preloadSize) : (c = b + this.preloadSize, b = Math.max(b - this.preloadSize, 0));
        c = c >= h ? h - 1 : c;
        for (var l = 0 > b ? 0 : b; l <= c; ++l) g.push(l);
        l = 0;
        for (h = g.length; l < h; ++l) {
            var m = g[l],
            n = d[m],
            p = f[m],
            q = null;
            n || (n = d[m] = $("<img />"), p.loaded = !1, p.loading = !0, q = $(new Image), q.one({
                load: function(b) {
                    return function() {
                        k.reset({
                            signal: "EVENT_IMG_LOADED",
                            extra: b
                        })
                    }
                } (m),
                error: function(b) {
                    return function() {
                        k.reset({
                            signal: "EVENT_IMG_ERROR",
                            extra: b
                        })
                    }
                } (m)
            }), f[m].originalData = q[0], q.attr("src", p.src), n.attr("src", p.src), q = null);
            n = null
        }
    },
    reset: function(b) {
        var c = b.current,
        d = this.$cache,
        f = this.source,
        g = (b.current - 1 + d.length) % d.length,
        h = (g - 1 + d.length) % d.length,
        k = (b.current + 1) % d.length,
        l = (k + 1) % d.length,
        m = b.extra,
        f = this.source,
        n = this.engine,
        p = null;
        switch (b.signal) {
        case "EVENT_LOAD_DATA":
        case "EVENT_DATA_CHANGE":
            d[k] && d[c] && d[l] && d[g] && d[h] || this.loadData(c);
            break;
        case "EVENT_IMG_LOADED":
            p = f[m].originalData;
            f[m].loading = !1;
            this.source[m].originSize = {
                width: p.width,
                height: p.height
            };
            b.signal = "EVENT_DATA_LOADED";
            b.source = this;
            b.data = this.source;
            n.reset(b);
            break;
        case "EVENT_IMG_ERROR":
            b.signal = "EVENT_DATA_ERROR",
            this.source[m].originSize = {
                width: 18,
                height: 20
            },
            b.source = this,
            b.data = this.source,
            f[m].loading = !1,
            n.reset(b)
        }
    }
}); (function(b, c, d) {
    function f(b) {
        return document.createElementNS("http://www.w3.org/2000/svg", b)
    }
    function g(c) {
        if (document.getElementsByTagName("body")[0].contains(c)) {
            var d, f;
            d = c.parentNode;
            var g = c.style,
            h = b(c);
            f = 100 / d.offsetHeight;
            d = 100 / d.offsetWidth;
            g.width = h.width() * d + "%";
            g.height = h.height() * f + "%";
            g.left = c.offsetLeft * d + "%";
            g.top = c.offsetTop * f + "%"
        }
    }
    function h() {
        var b = f("svg");
        b.setAttribute("version", "1.1");
        b.setAttribute("xmlns", "http://www.w3.org/2000/svg");
        b.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
        return b
    }
    function k(b, c) {
        var d, f, g, h = [];
        g = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
        c = c || g.length;
        if (b) for (d = 0; d < b; d++) h[d] = g[0 | Math.random() * c];
        else for (h[8] = h[13] = h[18] = h[23] = "-", h[14] = "4", d = 0; 36 > d; d++) h[d] || (f = 0 | 16 * Math.random(), h[d] = g[19 == d ? f & 3 | 8 : f]);
        return h.join("")
    }
    var l, m = new(c({
        create: function() {
            var c, d, f, g, h = this,
            k = "#FF0000 #FF5555 #FF55AA #FF55FF #FFAA55 #FFAAAA #FFAAFF #FFFF55 #FFFFAA #FFFFFF #CC0000 #CC5555 #CC55AA #CC55FF #CCAA55 #CCAAAA #CCAAFF #CCFF55 #CCFFAA #CCFFFF #AA0000 #AA5555 #AA55AA #AA55FF #AAAA55 #AAAAAA #AAAAFF #AAFF55 #AAFFAA #AAFFFF #880000 #885555 #8855AA #8855FF #88AA55 #88AAAA #88AAFF #88FF55 #88FFAA #88FFFF #550000 #555555 #5555AA #5555FF #55AA55 #55AAAA #55AAFF #55FF55 #55FFAA #55FFFF #220000 #225555 #2255AA #2255FF #22AA55 #22AAAA #22AAFF #22FF55 #22FFAA #22FFFF #000000 #005555 #0055AA #0055FF #00AA55 #00AAAA #00AAFF #00FF55 #00FFAA #00FFFF".split(" "),
            l = document.createElement("table");
            c = h.container = document.createElement("a");
            var m = h.$container = b(c),
            n = document.createElement("input"),
            p = function() {
                n.value = n.style.backgroundColor = this.title.toUpperCase()
            },
            q = function() {
                m.trigger("colorSelected", [h.parseColorToRGBA(this.title, h.opacityValue)]);
                m.hide()
            };
            c.className = "flipHtml5AnnotationColorSelectorWrap";
            l.setAttribute("border", "1");
            c.style.display = "none";
            c.setAttribute("href", " javaScript:void(0)".replace(/\s+/g, ""));
            n.className = "flipHtml5AnnotationColorSelectorMessage";
            n.value = "#000000";
            n.setAttribute("disabled", "true");
            c.appendChild(n);
            c.appendChild(h.createOpacityBar());
            c.appendChild(l);
            h.setOpacity(1);
            for (f = 0; 7 > f; f++) {
                g = document.createElement("tr");
                for (d = 0; 10 > d; d++) c = document.createElement("td"),
                c.className = "flipHtml5AnnotationColorSelectorBlock",
                c.title = k[10 * f + d],
                c.style.backgroundColor = k[10 * f + d],
                b(c).on("mouseenter", p),
                b(c).on("click", q),
                g.appendChild(c);
                l.appendChild(g)
            }
            m.on("click",
            function(b) {
                b.stopPropagation()
            });
            b(document).on("click",
            function() {
                h.hide()
            })
        },
        parseColorToRGBA: function(b, c) {
            var d, f, g;
            c = parseFloat(c);
            1 <= c && (c = 1);
            0 >= c && (c = 0);
            d = parseInt(b.substring(1, 3), 16);
            f = parseInt(b.substring(3, 5), 16);
            g = parseInt(b.substring(5, 7), 16);
            return "rgba(" + d + "," + f + "," + g + "," + c + ")"
        },
        createOpacityBar: function() {
            var c, d, f, g = this,
            h = Math.floor,
            k = document.createElement("div"),
            l = g.cursor = document.createElement("div"),
            m = g.span = document.createElement("span"),
            n = this.px = "px",
            p = this.str = "Opacity: ",
            q = this.length = 145,
            r = b(document),
            s = b(l),
            t = g.$container;
            m.className = "flipHtml5AnnotationOpacitySpan";
            k.className = "flipHtml5AnnotationOpacity";
            l.className = "flipHtml5AnnotationOpacityCursor";
            k.appendChild(m);
            k.appendChild(l);
            s.on("mousedown touchstart",
            function(b) {
                b.preventDefault();
                var k, s = g.opacityValue,
                v = l.style,
                u = parseInt(v.left || 0, 10);
                c = u;
                d = u - (b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0);
                r.on("mousemove.flipHtml5AnnotationOpacity touchmove.flipHtml5AnnotationOpacity",
                function(g) {
                    b.preventDefault();
                    if (k = g.pageX ? g.pageX: g.originalEvent.touches ? g.originalEvent.touches[0].pageX: 0) f = h(d + k),
                    0 > f && (f = 0),
                    f > q && (f = q),
                    c !== f && (v.left = f + n, m.innerHTML = p + (f / q).toFixed(2), s = f / q),
                    t.trigger("opacityChanged", s.toFixed(2))
                });
                r.off("mouseup.opacityCursor touchend.opacityCursor").one("mouseup.opacityCursor touchend.opacityCursor",
                function() {
                    g.opacityValue = s;
                    r.off("mousemove.flipHtml5AnnotationOpacity touchmove.flipHtml5AnnotationOpacity")
                })
            });
            return k
        },
        setOpacity: function(b) {
            if (void 0 === b || 1 < b || isNaN(b)) b = 1;
            0 > b && (b = 0);
            this.cursor.style.left = b * this.length + this.px;
            this.span.innerHTML = this.str + b;
            this.opacityValue = b
        },
        on: function(b, c) {
            this.$container.off(b).on(b, c);
            return this
        },
        show: function() {
            this.$container.show();
            return this
        },
        hide: function() {
            this.$container.hide();
            return this
        }
    })),
    n = c({
        create: function(c) {
            var d = 0,
            f = c[d];
            this.container = document.createElement("div");
            this.$container = b(this.container);
            this.tools = {};
            for (this.container.className = "fliphtml5AnnotationLineToolsContainer"; f;) this.$container.append(this.createButtonByName(f)),
            d++,
            f = c[d];
            b(document).ready(function() {
                document.getElementsByTagName("body")[0].appendChild(this.container)
            }.bind(this));
            this.oneBindEvent()
        },
        createButtonByName: function(b) {
            var c = this,
            d, f;
            switch (b) {
            case "fill":
                this.tools.fill = {
                    type: "color",
                    container: d = c.createColorButton("fill", !1)
                };
                break;
            case "stroke":
                this.tools.stroke = {
                    type: "color",
                    container: d = c.createColorButton("stroke", !1)
                };
                break;
            case "stroke-dasharray":
                d = ["Straight", "Dotted", "Dashed", "Dotted & Dashed"];
                f = ["1", "2", "3", "4"];
                this.tools.strokeDasharray = {
                    type: "select",
                    value: f,
                    container: d = c.createSelect(d, f, "stroke-dasharray", !1, 0)
                };
                break;
            case "stroke-width":
                d = "Thinnest Thinner Thin MediumThin Medium MediumStrong Strong Stronger Strongest".split(" ");
                f = "1 2 3 4 5 7 9 12 16".split(" ");
                this.tools.strokeWidth = {
                    type: "select",
                    value: f,
                    container: d = c.createSelect(d, f, "stroke-width", !1, 1)
                };
                break;
            case "headArrowType":
                d = "None Long_triangle Long_triangle_inverse Short_triangle Short_triangle_inverse Angle_brackets Angle_brackets_inverse Ellipse Rect Right_bank Line Left_bank".split(" ");
                f = "0 1 2 3 4 5 6 7 8 9 10 11".split(" ");
                this.tools.headArrowType = {
                    type: "select",
                    value: f,
                    container: d = c.createSelect(d, f, b, !1, 6)
                };
                break;
            case "endArrowType":
                d = "None Long_triangle Long_triangle_inverse Short_triangle Short_triangle_inverse Angle_brackets Angle_brackets_inverse Ellipse Rect Right_bank Line Left_bank".split(" ");
                f = "0 1 2 3 4 5 6 7 8 9 10 11".split(" ");
                this.tools.endArrowType = {
                    type: "select",
                    value: f,
                    container: d = c.createSelect(d, f, b, !1, 11)
                };
                break;
            default:
                d = c.createButton(b),
                c.addClickEvent(d,
                function() {
                    c.exec(b)
                })
            }
            return d
        },
        createButton: function(b) {
            var c = document.createElement("a"),
            d = document.createElement("div");
            c.href = " javascript:void(0);".replace(/\s+/g, "");
            d.className = "flipHtml5AnnotationButtonImage flipHtml5AnnotationImage-" + b;
            d.title = b;
            c.appendChild(d);
            return c
        },
        addClickEvent: function(b, c) {
            b.className = "flipHtml5AnnotationClickButton";
            b.onclick = c
        },
        exec: function(b, c) {
            if (this.object) switch (b) {
            case "stroke":
                this.object.setStroke(c);
                break;
            case "stroke-dasharray":
                this.object.setDashArray(c);
                break;
            case "stroke-width":
                this.object.setStrokeWidth(c);
                break;
            case "fill":
                this.object.setFill(c);
                break;
            case "delete":
                this.object.destroy();
                l.save();
                break;
            case "headArrowType":
            case "endArrowType":
                this.object.setArrowType(b, c)
            }
        },
        oneBindEvent: function() {
            var c = this;
            b(document).on("keydown.flipHtml5AnnotationDelete",
            function(b) {
                var d = b.keyCode;
                b.altKey || b.ctrlKey || b.shiftKey || (c.editing && d === KEY_CODE_DELETE && c.currentEditor && (this.object.destroy(), l.save()), c.currentEditor && d === KEY_CODE_LEFT && d === KEY_CODE_RIGHT && d === KEY_CODE_UP && d === KEY_CODE_DOWN && b.stopPropagation())
            })
        },
        createColorButton: function(b, c) {
            var d = this,
            f, g = this.createButton(b),
            h = g.getElementsByTagName("div")[0];
            c && (f = document.createElement("div"), f.className = "flipHtml5AnnotationColorBar", g.appendChild(f));
            d.addClickEvent(g,
            function(c) {
                c.stopPropagation();
                m.container.style.left = this.offsetLeft + "px";
                m.container.style.top = this.offsetTop + 20 + "px";
                m.show();
                m.on("colorSelected",
                function(c, g) {
                    f ? f.style.backgroundColor = g: h.style.backgroundColor = g;
                    d.exec(b, g)
                });
                m.setOpacity(d.object.getOpacity(b));
                m.on("opacityChanged",
                function(c, f) {
                    d.object.setOpacity(b, f)
                })
            });
            return g
        },
        createSelect: function(b, c, d, f, g) {
            var h = document.createElement("select"),
            k = 0,
            l = this,
            m;
            h.className = "flipHtml5AnnotationSelect flipHtml5Annotation-" + d;
            for (f && (h.style[f] = c[g]); b[k];) m = document.createElement("option"),
            m.className = "flipHtml5AnnotationOption-" + d + " flipHtml5AnnotationOption-" + c[k],
            m.innerHTML = b[k],
            f && (m.style[f] = c[k]),
            k === g && m.setAttribute("selected", !0),
            h.appendChild(m),
            k++;
            h.onchange = function() {
                l.exec(d, c[this.selectedIndex]);
                f && (this.style[f] = c[this.selectedIndex])
            };
            return h
        },
        active: function(b) {
            if (b) {
                var c, d;
                this.object = b;
                b.toolbar.$container.append(m.container);
                for (c in this.tools) this.tools.hasOwnProperty(c) && (d = this.tools[c], "color" === d.type && (d.container.getElementsByTagName("div")[0].style.backgroundColor = b[c]), "select" === d.type && (d.container.selectedIndex = d.value.indexOf(b[c].toString())))
            }
            this.container.style.display = "block"
        },
        inactive: function() {
            this.container.style.display = "none";
            this.object = null
        }
    }),
    p = new n("stroke-width stroke-dasharray headArrowType endArrowType stroke delete".split(" ")),
    q = new n(["stroke-width", "stroke-dasharray", "stroke", "delete"]),
    t = new n(["stroke-width", "stroke-dasharray", "stroke", "fill", "delete"]),
    r = new(c({
        create: function() {
            var c, d = 1,
            f = this.sizeWrap = document.createElement("div"),
            g = this.sizePointArray = [];
            for (f.className = "flipHtml5AnnotationSizeWrap"; 9 > d;) c = document.createElement("div"),
            c.className = "flipHtml5SizePoint flipHtml5SizePoint" + d,
            f.appendChild(c),
            g.push(c),
            d++;
            this.$container = b(f);
            this.container = f
        },
        addEvents: function(c) {
            var f = this,
            h = f.sizeWrap,
            k = f.sizePointArray;
            f.sizeWrapStyle = h.style;
            c && (f.$context = c.add(t.$container).add(q.$container).add(p.$container));
            f.northResize(k[0]).westResize(k[0]);
            f.northResize(k[1]);
            f.eastResize(k[2]).northResize(k[2]);
            f.eastResize(k[3]);
            f.eastResize(k[4]).southResize(k[4]);
            f.southResize(k[5]);
            f.southResize(k[6]).westResize(k[6]);
            f.westResize(k[7]);
            b(h).off("mousedown touchstart").on("mousedown touchstart",
            function(b) {
                b.preventDefault();
                var c, k, l, m, n, p, x, q = Math.floor,
                r = f.sizeWrapStyle,
                s = h.offsetLeft,
                v = h.offsetTop,
                t = b.pageX || b.originalEvent.touches[0].pageX,
                u = b.pageY || b.originalEvent.touches[0].pageY;
                c = f.$context;
                c.off("mousemove.flipHtml5SizeWrap touchmove.flipHtml5SizeWrap").on("mousemove.flipHtml5SizeWrap touchmove.flipHtml5SizeWrap",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    k = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0;
                    l = b.pageY ? b.pageY: b.originalEvent.touches ? b.originalEvent.touches[0].pageY: 0;
                    if (k && (x = q(s - (t - k) / d.scale()), n !== x && (r.left = x + "px", n = x, f.onResize))) f.onResize(void 0, void 0, x, void 0);
                    if (l && (p = q(v - (u - l) / d.scale()), m !== p && (r.top = p + "px", m = p, f.onResize))) f.onResize(void 0, void 0, void 0, p)
                });
                f.$container.one("mouseup touchend",
                function(b) {
                    c.off("mousemove.flipHtml5SizeWrap touchmove.flipHtml5SizeWrap");
                    g(h);
                    if (f.onResizeEnd) f.onResizeEnd()
                })
            })
        },
        northResize: function(c) {
            var f = this;
            b(c).off("mousedown.north touchstart.north").on("mousedown.north touchstart.north",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                var c, h, k, l, m = Math.floor,
                n = f.sizeWrap,
                p = n.offsetTop,
                x = f.sizeWrapStyle,
                q = f.$context,
                r = n.offsetHeight || 11,
                s = p + r - 11,
                v = b.pageY || b.orginalEvent.touches[0].pageY;
                h = r;
                f.$container.one("mouseup touchend",
                function() {
                    q.off("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize");
                    g(n);
                    if (f.onResizeEnd) f.onResizeEnd()
                });
                q.on("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize",
                function(b) {
                    b.preventDefault();
                    b.pageY ? c = b.pageY: b.originalEvent.touches && (c = b.originalEvent.touches[0].pageY);
                    if (c && (k = m(h + (v - c) / d.scale()), r !== k && (l = p + (h - k), 11 > k && (k = 11), l > s && (l = s), x.top = l + "px", x.height = k + "px", r = k, f.onResize))) f.onResize(void 0, k, void 0, l)
                })
            });
            return this
        },
        westResize: function(c) {
            var f = this;
            b(c).off("mousedown.west touchstart.west").on("mousedown.west touchstart.west",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                var c, h, k, l, m = Math.floor,
                n = f.$context,
                p = f.sizeWrap,
                x = p.offsetLeft,
                q = f.sizeWrapStyle,
                r = p.offsetWidth || 11,
                s = x + r - 11,
                v = b.pageX || b.originalEvent.touches[0].pageX;
                k = r;
                f.$container.one("mouseup touchend",
                function() {
                    n.off("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize");
                    g(p);
                    if (f.onResizeEnd) f.onResizeEnd()
                });
                n.on("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize",
                function(b) {
                    b.preventDefault();
                    b.pageX ? c = b.pageX: b.originalEvent.touches && (c = b.originalEvent.touches[0].pageX);
                    if (c && (h = -m((c - v) / d.scale() - k), r !== h && (l = x + (k - h), 11 > h && (h = 11), l > s && (l = s), q.left = l + "px", q.width = h + "px", r = h, f.onResize))) f.onResize(h, void 0, l, void 0)
                })
            });
            return this
        },
        eastResize: function(c) {
            var f = this;
            b(c).off("mousedown.east touchstart.east").on("mousedown.east touchstart.east",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                var c, h, k, l = Math.floor,
                m = f.$context,
                n = f.sizeWrap,
                p = f.sizeWrapStyle,
                x = n.offsetWidth || 11,
                q = b.pageX || b.originalEvent.touches[0].pageX;
                f.$container.one("mouseup touchend",
                function() {
                    m.off("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize");
                    g(n);
                    if (f.onResizeEnd) f.onResizeEnd()
                });
                m.on("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize",
                function(b) {
                    b.preventDefault();
                    b.pageX ? c = b.pageX: b.originalEvent.touches && (c = b.originalEvent.touches[0].pageX);
                    if (c && (h = l(x - (q - c) / d.scale()), k !== h && (11 > h && (h = 11), p.width = h + "px", k = h, f.onResize))) f.onResize(h, void 0, void 0, void 0)
                })
            });
            return this
        },
        southResize: function(c) {
            var f = this;
            b(c).off("mousedown.south touchstart.south").on("mousedown.south touchstart.south",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                var c, h, k, l = Math.floor,
                m = f.$context,
                n = f.sizeWrap,
                p = f.sizeWrapStyle,
                x = n.offsetHeight,
                q = b.pageY || b.originalEvent.touches[0].pageY;
                f.$container.one("mouseup touchend",
                function() {
                    m.off("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize");
                    g(n);
                    if (f.onResizeEnd) f.onResizeEnd()
                });
                m.on("mousemove.fliphtml5AnnotationResize touchmove.fliphtml5AnnotationResize",
                function(b) {
                    b.preventDefault();
                    b.pageY ? c = b.pageY: b.originalEvent.touches && (c = b.originalEvent.touches[0].pageY);
                    if (c && (h = l(x - (q - c) / d.scale()), k !== h && (11 > h && (h = 11), p.height = h + "px", k = h, f.onResize))) f.onResize(void 0, h, void 0, void 0)
                })
            });
            return this
        },
        onResizeEnd: function() {},
        onResize: function(b, c, d, f) {},
        active: function() {
            this.container.style.display = "block";
            this.$container.on("click.sizewrap mousedown.sizewrap mouseup.sizewrap",
            function(b) {
                b.stopPropagation()
            })
        },
        inactive: function() {
            this.$container.off("click.sizewrap mousedown.sizewrap mouseup.sizewrap");
            this.container.style.display = "none"
        }
    })),
    s = c({
        create: function(c, d) {
            var f = this.svg = h(),
            g = this.container = document.createElement("div");
            c = c || [];
            this.$parent = d;
            f.style.position = "absolute";
            f.style.left = "0";
            f.style.top = "0";
            f.style.width = "100%";
            f.style.height = "100%";
            this.id = k(8, 10);
            this.$container = b(g);
            g.className = "flipHtml5SVGContainer";
            g.appendChild(f);
            d && (this._width = c[0] || 0, this._height = c[1] || 0, this._left = c[2] || 0, this._top = c[3] || 0);
            g.style.width = c[0] || 0;
            g.style.height = c[1] || 0;
            g.style.left = c[2] || 0;
            g.style.top = c[3] || 0;
            d && (this.prevWidth = parseFloat(c[0]) * d[0].offsetWidth / 100, this.prevHeight = parseFloat(c[1]) * d[0].offsetHeight / 100, this.prevLeft = parseFloat(c[2]) * d[0].offsetWidth / 100, this.prevTop = parseFloat(c[3]) * d[0].offsetHeight / 100);
            this.fill = c[4] || "transparent";
            this.fillOpacity = c[5] || 1;
            this.stroke = c[6] || "rgba(0, 0, 0, 1)";
            this.strokeDasharray = c[7] || "1";
            this.strokeOpacity = c[8] || "1";
            this.strokeWidth = c[9] || "2";
            this.createGraphics(c);
            this.setStrokeWidth(this.strokeWidth);
            this.setFill(this.fill);
            this.setFillOpacity(this.fillOpacity);
            this.setStroke(this.stroke);
            this.setDashArray(this.strokeDasharray);
            this.setStrokeOpacity(this.strokeOpacity);
            this.actived = !1;
            this.$container.on(_event._down,
            function(b) {
                b.stopPropagation();
                this.actived || (this.active(this.$parent), this.actived = !0)
            }.bind(this));
            if (d) this.$container.on("mousedown mouseup",
            function(b) {
                b.stopPropagation()
            })
        },
        active: function(b) {
            var c = this;
            l.activedShape && l.activedShape.inactive();
            l.activedShape = this;
            c.$container.after(r.$container);
            c.position();
            b && (c.$parent = b);
            r.addEvents(c.$parent);
            r.active();
            c.toolbar.active(c);
            if (b) b.off("mousedown.flipHtml5Graphic" + c.id + " touchstart.flipHtml5Graphic" + c.id).on("mousedown.flipHtml5Graphic" + c.id + " touchstart.flipHtml5Graphic" + c.id,
            function(d) {
                c.actived && d.target !== c.container && d.target !== c.toolbar.container && d.target !== r.container && (d.stopPropagation(), b.off("mousedown.flipHtml5Graphic" + c.id + " touchstart.flipHtml5Graphic" + c.id), c.inactive())
            });
            this.actived = !0
        },
        _parsePresentValue: function() {
            g(this.container);
            var b = this.container.style;
            this._width = b.width;
            this._height = b.height;
            this._left = b.left;
            this._top = b.top
        },
        inactive: function() {
            l && (l.save(), l.activedShape = null);
            this.toolbar.inactive();
            r.inactive();
            this.actived = !1
        },
        position: function() {
            var b = this,
            c = b.px,
            d = b.container,
            f = b.$container,
            g = r.container.style,
            h = b.toolbar.container.style;
            g.width = d.offsetWidth + 8 + c;
            g.height = d.offsetHeight + 8 + c;
            g.left = d.offsetLeft - 3 + c;
            g.top = d.offsetTop - 4 + c;
            h.left = f.offset().left - 8 + c;
            h.top = f.offset().top - 52 + c;
            r.onResize = function(d, g, k, l) {
                b.css(d - 8, g - 8, k + 3, l + 4);
                h.left = f.offset().left - 8 + c;
                h.top = f.offset().top - 52 + c
            };
            r.onResizeEnd = function() {
                b._parsePresentValue();
                l.save()
            }
        },
        setFill: function(b) {
            this.setStyle("fill", b);
            this.fill = b
        },
        setFillOpacity: function(b) {
            this.setStyle("fill", this.fill.replace(/,[0-9]+(\.[0-9]*)?\)/, "," + b + ")"));
            this.fillOpacity = parseFloat(b)
        },
        setStroke: function(b) {
            this.setStyle("stroke", b);
            this.stroke = b
        },
        setStrokeOpacity: function(b) {
            this.setStyle("stroke", this.stroke.replace(/,[0-9]+(\.[0-9]*)?\)/, "," + b + ")"));
            this.strokeOpacity = parseFloat(b)
        },
        setOpacity: function(b, c) {
            "fill" === b && this.setFillOpacity(c);
            "stroke" === b && this.setStrokeOpacity(c)
        },
        getOpacity: function(b) {
            return "fill" === b ? this.fillOpacity: this.strokeOpacity
        },
        setStrokeWidth: function(b) {
            this.setStyle("stroke-width", b);
            this.strokeWidth = parseInt(b, 10);
            this.setDashArray(this.strokeDasharray);
            this.shapeCss(this.prevWidth, this.prevHeight)
        },
        setDashArray: function(b) {
            this.strokeDasharray = b;
            b = "1" === b ? "0": "2" === b ? "1," + 2 * this.strokeWidth: "3" === b ? "1," + 2 * this.strokeWidth + ",1": 4 * this.strokeWidth + "," + 2 * this.strokeWidth + ",1," + 2 * this.strokeWidth;
            this.setStyle("stroke-dasharray", b)
        },
        shapeCss: function(b, c) {},
        css: function(b, c, d, f) {
            var g = this.container.style;
            b = Math.floor(b);
            d = Math.floor(d);
            c = Math.floor(c);
            f = Math.floor(f);
            b && (this.prevWidth = b, b < this.minWidth && (b = this.minWidth), g.width = b + "px", this.shapeCss(b, null));
            c && (this.prevHeight = c, c < this.minHeight && (c = this.minHeight), g.height = c + "px", this.shapeCss(null, c));
            d && (g.left = d + "px", this.prevLeft = d);
            this.prevWidth < this.minWidth && (g.left = this.prevLeft - 4 - (this.minWidth - this.prevWidth - 8) / 2 + "px");
            f && (g.top = f + "px", this.prevTop = f);
            this.prevHeight < this.minHeight && (g.top = this.prevTop - 3 - (this.minHeight - this.prevHeight - 6) / 2 + "px")
        },
        destroy: function() {
            this.inactive();
            this.$container.remove();
            l.removeGraphic(this)
        }
    }),
    n = c({
        name: "line",
        toolbar: q,
        createGraphics: function(b) {
            var c = f("line");
            c.setAttribute("stroke-linecap", "round");
            c.setAttribute("stroke-linejoin", "round");
            this.italic = parseInt(b[10] || 1, 10);
            this.svg.appendChild(c);
            this.line = c;
            this.px = "px"
        },
        setStyle: function(b, c) { (c || 0 === c) && this.line.setAttribute(b, c);
            return this
        },
        setStrokeWidth: function(b) {
            b = parseInt(b, 10);
            this._super(b);
            this.minHeight = this.minWidth = b
        },
        draw: function(b, c, d, f, g, h, k) {
            var l = this.strokeWidth / 2,
            m = this.strokeWidth,
            n, p = c - b,
            q = f - d;
            c > b ? (n = p + m, g = b - g - l) : (n = -p + m, g = c - g - l);
            f > d ? (b = q + m, h = d - h - l) : (b = -q + m, h = f - h - l);
            0 < p && 0 < q && (this.italic = 1);
            0 > p && 0 < q && (this.italic = 2);
            0 > p && 0 > q && (this.italic = 3);
            0 < p && 0 > q && (this.italic = 4);
            this.css(n / k, b / k, g / k, h / k)
        },
        shapeCss: function(b, c) {
            var d, f;
            1 === this.italic || 3 === this.italic ? (d = "x1", f = "x2") : (d = "x2", f = "x1");
            this.setStyle(d, this.strokeWidth / 2);
            b && this.setStyle(f, b - this.strokeWidth / 2);
            this.setStyle("y1", this.strokeWidth / 2);
            c && this.setStyle("y2", c - this.strokeWidth / 2)
        }
    }).extend(s),
    u = c({
        name: "ellipse",
        toolbar: t,
        createGraphics: function(b) {
            this.ellipse = f("ellipse");
            this.svg.appendChild(this.ellipse);
            this.px = "px";
            this.ellipse.setAttribute("stroke-linecap", "round");
            this.ellipse.setAttribute("stroke-linejoin", "round");
            this.ellipse.setAttribute("cx", "50%");
            this.ellipse.setAttribute("cy", "50%");
            this.setFillOpacity(b[5] || "0.5")
        },
        setStyle: function(b, c) {
            this.ellipse.setAttribute(b, c);
            return this
        },
        setStrokeWidth: function(b) {
            b = parseInt(b, 10);
            this._super(b);
            this.minWidth = 2 * b;
            this.minHeight = 2 * b
        },
        draw: function(b, c, d, f, g, h, k) {
            var l = this.strokeWidth / 2,
            m = this.strokeWidth,
            n;
            c > b ? (n = c - b + m, g = b - g - l) : (n = b - c + m, g = c - g - l);
            f > d ? (b = f - d + m, h = d - h - l) : (b = d - f + m, h = f - h - l);
            this.css(n / k, b / k, g / k, h / k)
        },
        shapeCss: function(b, c) {
            b && this.setStyle("rx", b / 2 - this.strokeWidth / 2);
            c && this.setStyle("ry", c / 2 - this.strokeWidth / 2)
        }
    }).extend(s),
    s = c({
        name: "rect",
        toolbar: t,
        createGraphics: function() {
            this.rect = f("rect");
            this.rect.setAttribute("stroke-linecap", "round");
            this.rect.setAttribute("stroke-linejoin", "round");
            this.svg.appendChild(this.rect);
            this.px = "px"
        },
        setStrokeWidth: function(b) {
            b = parseInt(b, 10);
            this._super(b);
            this.setStyle("x", b / 2);
            this.setStyle("y", b / 2);
            this.minWidth = 2 * b;
            this.minHeight = 2 * b
        },
        setStyle: function(b, c) {
            this.rect.setAttribute(b, c);
            return this
        },
        draw: function(b, c, d, f, g, h, k) {
            var l = this.strokeWidth / 2,
            m = this.strokeWidth,
            n;
            c > b ? (n = c - b + m, g = b - g - l) : (n = b - c + m, g = c - g - l);
            f > d ? (b = f - d + m, h = d - h - l) : (b = d - f + m, h = f - h - l);
            this.css(n / k, b / k, g / k, h / k)
        },
        shapeCss: function(b, c) {
            b && this.setStyle("width", b - this.strokeWidth);
            c && this.setStyle("height", c - this.strokeWidth)
        }
    }).extend(s),
    v = c({
        create: function(c, d, g) {
            var k = this.svg = h(),
            l = this.path = f("path"),
            m = this.line = f("line"),
            n = this.rect = f("rect"),
            p = this.ellipse = f("ellipse");
            k.style.position = "absolute";
            m.style.display = "none";
            n.style.display = "none";
            p.style.display = "none";
            k.appendChild(n);
            k.appendChild(l);
            k.appendChild(m);
            k.appendChild(p);
            this.container = k;
            this.$container = b(k);
            p.setAttribute("cx", "50%");
            p.setAttribute("cy", "50%");
            this.setStyle("stroke-linecap", "round");
            this.setStyle("stroke-linejoin", "round");
            this.type = 0;
            this.inverse = "true" == d;
            this.position = c;
            this.currentType = "path";
            this.setCurrentType(g[10] || "path");
            this.backgroundTransparent = !1;
            this.deg = g[11] || 0;
            this.italic = parseInt(g[12] || 1, 10)
        },
        setStyle: function(b, c) {
            this.path.setAttribute(b, c);
            this.line.setAttribute(b, c);
            this.ellipse.setAttribute(b, c);
            this.rect.setAttribute(b, c)
        },
        setStrokeWidth: function(b) {
            var c = b = parseInt(b, 10);
            this.lineStrokeWidth = b;
            this.strokeWidth = c;
            this.setType(this.type);
            this.setPosition(this.deg, this.italic);
            this.setStyle("stroke-width", c)
        },
        getDegByItalic: function(b, c) {
            var d = this.inverse ? 180 : 0;
            switch (c) {
            case 1:
                b += d;
                break;
            case 2:
                b = 180 - b + d;
                break;
            case 3:
                b = 180 + b + d;
                break;
            case 4:
                b = 360 - b + d
            }
            return b
        },
        setPosition: function(b, c) {
            var d = this.svg.style,
            f = ( - this.width - this.lineStrokeWidth / 2) / 2 + "px",
            g = ( - this.height - this.lineStrokeWidth / 2) / 2 + "px";
            this.italic = c;
            this.deg = b;
            for (var h = "rotate(" + this.getDegByItalic(b, c) + "deg)", k = 0, l = this.svg.style, m = ["transform", "webkitTransform", "mozTransform", "msTransform"]; m[k];) l[m[k]] = h,
            k++;
            this.position && (c = (c + 2) % 4, 0 === c && (c = 4));
            switch (c) {
            case 1:
                d.left = "100%";
                d.top = "100%";
                d.right = "auto";
                d.bottom = "auto";
                d.margin = g + " auto auto " + f;
                break;
            case 2:
                d.left = "auto";
                d.top = "100%";
                d.right = "100%";
                d.bottom = "auto";
                d.margin = g + " " + f + " auto auto";
                break;
            case 3:
                d.left = "auto";
                d.top = "auto";
                d.right = "100%";
                d.bottom = "100%";
                d.margin = "auto " + f + " " + g + " auto";
                break;
            case 4:
                d.left = "100%",
                d.top = "auto",
                d.right = "auto",
                d.bottom = "100%",
                d.margin = "auto auto " + g + " " + f
            }
        },
        setCurrentType: function(b) {
            var c, d;
            b !== this.currentType && (c = this.svg.getElementsByTagName(b)[0], d = this.svg.getElementsByTagName(this.currentType)[0], this.currentType = b, d.style.display = "none", c.style.display = "block")
        },
        setType: function(b) {
            this.type = parseInt(b, 10);
            this.inverse = !1;
            var c, d;
            b = this.strokeWidth;
            var f = this.path,
            g = b / 2;
            switch (this.type) {
            case 0:
                this.setCurrentType("path");
                c = d = 0;
                break;
            case 2:
                this.inverse = !0;
            case 1:
                this.setCurrentType("path");
                d = 20 + 5 * b;
                c = 30 + 4 * b;
                this.backgroundTransparent = !1;
                f.setAttribute("d", "M " + g + " " + 0.3 * c + " L " + (d - b / 2) + " " + 0.5 * c + " L " + g + " " + 0.7 * c + " Z");
                break;
            case 4:
                this.inverse = !0;
            case 3:
                this.setCurrentType("path");
                this.backgroundTransparent = !1;
                d = 5 + 4 * b;
                c = 20 + 5 * b;
                f.setAttribute("d", "M " + g + " " + 0.2 * c + " L " + (d - g) + " " + 0.5 * c + " L " + g + " " + 0.8 * c + " Z");
                break;
            case 6:
                this.inverse = !0;
            case 5:
                this.setCurrentType("path");
                this.backgroundTransparent = !0;
                d = 10 + 4 * b;
                c = 30 + 3 * b;
                this.path.setAttribute("d", "M " + g + " " + 0.2 * c + " L " + (d - b) / 2 + " " + 0.5 * c + " L " + g + " " + 0.8 * c);
                break;
            case 7:
                this.setCurrentType("ellipse");
                this.backgroundTransparent = !1;
                d = c = 10 + 4 * b;
                this.ellipse.setAttribute("rx", d / 2 - g);
                this.ellipse.setAttribute("ry", c / 2 - g);
                break;
            case 8:
                this.setCurrentType("rect");
                this.backgroundTransparent = !1;
                d = c = 10 + 4 * b;
                this.rect.setAttribute("x", g);
                this.rect.setAttribute("y", g);
                this.rect.setAttribute("width", d - b);
                this.rect.setAttribute("height", c - b);
                break;
            case 9:
                this.setCurrentType("line");
                this.backgroundTransparent = !0;
                d = c = 10 + 4 * b;
                this.line.setAttribute("x1", g);
                this.line.setAttribute("y1", g);
                this.line.setAttribute("x2", d - g);
                this.line.setAttribute("y2", c - g);
                break;
            case 10:
                this.setCurrentType("line");
                this.backgroundTransparent = !0;
                d = c = 10 + 4 * b;
                this.line.setAttribute("x1", d / 2 - g);
                this.line.setAttribute("y1", g);
                this.line.setAttribute("x2", d / 2 - g);
                this.line.setAttribute("y1", c - g);
                break;
            case 11:
                this.setCurrentType("line"),
                this.backgroundTransparent = !0,
                d = c = 10 + 4 * b,
                this.line.setAttribute("x1", g),
                this.line.setAttribute("y2", g),
                this.line.setAttribute("x2", d - g),
                this.line.setAttribute("y1", c - g)
            }
            this.svg.setAttribute("width", d);
            this.svg.setAttribute("height", c);
            this.width = d;
            this.height = c;
            this.setColor(this.color);
            this.setPosition(this.deg, this.italic)
        },
        setColor: function(b) {
            this.color = b;
            this.setStyle("stroke", b);
            this.backgroundTransparent ? this.setStyle("fill", "transparent") : this.setStyle("fill", b)
        }
    }),
    w = c({
        name: "arrow",
        toolbar: p,
        createGraphics: function(b) {
            this._super(b);
            this.italic = parseInt(b[12] || 1, 10);
            this.headArrow = new v(!1, "false", b);
            this.endArrow = new v(!0, "false", b);
            this.deg = parseInt(b[11], 10);
            this.headArrow.setPosition(this.deg, this.italic);
            this.endArrow.setPosition(this.deg, this.italic);
            this.container.appendChild(this.headArrow.container);
            this.container.appendChild(this.endArrow.container);
            this.setStrokeWidth(b[9] || "1");
            this.setStroke(b[6] || "rgba(0, 0, 0, 1)");
            this.setArrowType("endArrowType", b[14] || 10);
            this.setArrowType("headArrowType", b[13] || 5)
        },
        setArrowType: function(b, c) {
            var d;
            "endArrowType" === b ? (d = this.endArrow, this.endArrowType = c) : (d = this.headArrow, this.headArrowType = c);
            d.setType(c);
            d.setStrokeWidth(this.strokeWidth)
        },
        setStroke: function(b) {
            this._super(b);
            this.headArrow.setColor(b);
            this.endArrow.setColor(b)
        },
        setStrokeWidth: function(b) {
            b = parseInt(b, 10);
            this._super(b);
            this.headArrow.setStrokeWidth(b);
            this.endArrow.setStrokeWidth(b)
        },
        css: function(b, c, d, f) {
            this._super(b, c, d, f);
            b = 180 * Math.atan(this.prevHeight / this.prevWidth) / Math.PI;
            this.prevHeight <= this.minHeight && (b = 0);
            this.prevWidth <= this.minWidth && (b = 90);
            this.deg = b;
            this.headArrow.setPosition(b, this.italic);
            this.endArrow.setPosition(b, this.italic)
        }
    }).extend(n),
    y = {
        shapes: {
            ellipse: u,
            rect: s,
            line: n,
            arrow: w
        },
        getShape: function(b, c, d) {
            return this.shapes[b] ? new this.shapes[b](c, d) : null
        }
    };
    c = c({
        create: function() {
            this.containerArray = {};
            this.graphics = {};
            this.activedShape = null
        },
        bindOnCreated: function(b, c) {
            this.onCreated = [b, c]
        },
        addEvent: function(b, c, f) {
            var g = this,
            h = y.getShape(f);
            this.containers = this.containers ? this.containers.add(c) : c;
            c.css("cursor", "crosshair");
            c.one("contextmenu.draw",
            function(b) {
                b.preventDefault();
                return ! 1
            });
            c.off("mousedown.draw touchstart.draw").one("mousedown.draw touchstart.draw",
            function(f) {
                f.stopPropagation();
                f.preventDefault();
                var k, l, m, n, p, q = f.button,
                r = c.offset().top,
                s = c.offset().left;
                if (!document.implementation.hasFeature("MouseEvents", "2.0")) switch (event.button) {
                case 0:
                case 1:
                case 3:
                case 5:
                case 7:
                    q = 0;
                    break;
                case 2:
                case 6:
                    q = 2;
                    break;
                case 4:
                    q = 1
                }
                q ? (h._parsePresentValue(), g.delEvents(), g.popUpButton()) : (f.pageX ? (k = f.pageX, l = f.pageY) : f.originalEvent.touches && (p = !0, k = f.originalEvent.touches[0].pageX, l = f.originalEvent.touches[0].pageY), c.append(h.$container), g.groupGraphicByIndex(b, h), h.draw(k, k, l, l, s, r), c.off("mousemove.draw touchmove.draw").on("mousemove.draw touchmove.draw",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    p ? (m = b.originalEvent.touches[0].pageX, n = b.originalEvent.touches[0].pageY) : (m = b.pageX, n = b.pageY);
                    h.draw(k, m, l, n, s, r, d.scale())
                }), c.off("mouseup.draw touchend.draw").one("mouseup.draw touchend.draw",
                function() {
                    h._parsePresentValue();
                    g.delEvents();
                    g.popUpButton();
                    h.active(c);
                    h.$container.on("mousedown mouseup",
                    function(b) {
                        b.stopPropagation()
                    });
                    g.save()
                }))
            })
        },
        groupGraphicByIndex: function(b, c) {
            this.graphics[b] || (this.graphics[b] = []);
            this.graphics[b].push(c)
        },
        removeGraphicByIndex: function(b) {
            var c, d = this.graphics,
            f, g;
            for (c in d) if (d.hasOwnProperty(c) && c == b) {
                g = d[c];
                for (f = 0; g[f];) g[f].$container.remove(),
                f++;
                d[c] = []
            }
        },
        removeGraphic: function(b) {
            var c, d, f, g = this.graphics;
            for (d in g) if (g.hasOwnProperty(d) && g[d]) for (c = 0, f = g[d]; f[c];) f[c] === b && f.splice(c, 1),
            c++
        },
        popUpButton: function() {
            this.onCreated && this.onCreated[1].call(this.onCreated[0])
        },
        delEvents: function() {
            this.containers && this.containers.off("mousedown.draw touchstart.draw contextmenu.draw mousemove.draw touchmove.draw").css("cursor", "auto");
            this.containers = null
        },
        getPageContent: function(b) {
            for (var c, d = 0,
            f, g, h, k, l = this.graphics[b]; l && (c = l[d]);) {
                switch (c.name) {
                case "line":
                    b = [c._width, c._height, c._left, c._top, c.fill, c.fillOpacity, c.stroke, c.strokeDasharray, c.strokeOpacity, c.strokeWidth, c.italic];
                    f || (f = []);
                    f.push(b.join("$$"));
                    break;
                case "arrow":
                    b = [c._width, c._height, c._left, c._top, c.fill, c.fillOpacity, c.stroke, c.strokeDasharray, c.strokeOpacity, c.strokeWidth, c.currentType, c.deg, c.italic, c.headArrowType, c.endArrowType];
                    g || (g = []);
                    g.push(b.join("$$"));
                    break;
                case "rect":
                    b = [c._width, c._height, c._left, c._top, c.fill, c.fillOpacity, c.stroke, c.strokeDasharray, c.strokeOpacity, c.strokeWidth];
                    h || (h = []);
                    h.push(b.join("$$"));
                    break;
                case "ellipse":
                    b = [c._width, c._height, c._left, c._top, c.fill, c.fillOpacity, c.stroke, c.strokeDasharray, c.strokeOpacity, c.strokeWidth],
                    k || (k = []),
                    k.push(b.join("$$"))
                }
                d++
            }
            b = [f && f.join("@@"), g && g.join("@@"), h && h.join("@@"), k && k.join("@@")];
            return b.join("##")
        },
        saveByIndex: function(b) {
            var c = new Date,
            d = this.getPageContent(b) || "";
            try {
                window.localStorage ? (window.localStorage.removeItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Shapes" + b), "" !== d && "######" !== d && window.localStorage.setItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Shapes" + b, d)) : ("" === d || "######" === d ? c = new Date("01 Jan 1970 00:00:01") : (c = new Date, c.setDate(c.getDate() + this.expires)), document.cookie = window.location.href.replace(window.location.hash, "") + "flipHtml5Shapes" + b + "=" + d + ";expires=" + c.toUTCString() + ";")
            } catch(f) {}
        },
        save: function() {
            var b, c = d.getCurrentPages();
            for (b = 0; b < c.length; b++) this.containerArray[d.getBookType()][c[b]] && this.saveByIndex(c[b])
        },
        restoreByIndex: function(b, c) {
            var d, f;
            this.removeGraphicByIndex(b);
            try {
                if (window.localStorage ? d = window.localStorage.getItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Shapes" + b) || "": (f = RegExp("(?:(?:^|.*;\\s*)" + window.location.href.replace(window.location.hash, "") + "flipHtml5Shapes" + b + "\\s*\\=\\s*([^;]*).*$)|^.*$"), d = (document.cookie || "").replace(f, "$1")), d && 0 !== d.length) {
                    var g, h;
                    f = 0;
                    for (var k = d.split("##"), l = k[0].split("@@"), m = k[1].split("@@"), n = k[2].split("@@"), p = k[3].split("@@"); g = l[f++];) h = y.getShape("line", g.split("$$"), c),
                    c.append(h.container),
                    this.groupGraphicByIndex(b, h);
                    for (f = 0; g = m[f++];) h = y.getShape("arrow", g.split("$$"), c),
                    c.append(h.container),
                    this.groupGraphicByIndex(b, h);
                    for (f = 0; g = n[f++];) h = y.getShape("rect", g.split("$$"), c),
                    c.append(h.container),
                    this.groupGraphicByIndex(b, h);
                    for (f = 0; g = p[f++];) h = y.getShape("ellipse", g.split("$$"), c),
                    c.append(h.container),
                    this.groupGraphicByIndex(b, h)
                }
            } catch(q) {
                throw q;
            }
        },
        restore: function(b, c, f) {
            var g = this.containerArray;
            r.inactive();
            t.inactive();
            q.inactive();
            p.inactive();
            g[b] || (g[b] = {});
            g[b][c] = f;
            b === d.getBookType() && this.restoreByIndex(c, f)
        },
        setContainers: function(b, c, d) {
            document.createElementNS && this.restore(b, c, d)
        },
        addEvents: function(b) {
            var c, f = -1,
            g = d.getCurrentPages(),
            h = this.containerArray[d.getBookType()];
            if (document.createElementNS && h) for (; f++<g.length;) c = g[f],
            h[c] && this.addEvent(c, h[c], b)
        }
    });
    l = window.AnnotationShapes = new c
})(window.jQuery, window.Class, window.BookInfo);
var NoteCookie = Class({
    statics: {
        noteCookie: function(b) {
            void 0 == this._noteCookie && (this._noteCookie = new NoteCookie(b));
            return this._noteCookie
        }
    },
    create: function(b) {
        this.noteImgs = {};
        this.rowObjs = {};
        this.noteTexts = {};
        this.svgObjs = {};
        this.notes = [];
        this.cookieName = window.location.href.replace(window.location.hash, "") + "NoteCookie";
        this.rows = [];
        this.noteImgContainers = {};
        this.showFlag = !1;
        this.container = b;
        this.address = uiBaseURL;
        this.noteButtonIsShow = !0;
        this.createNote(b);
        this.bindEvents()
    },
    createNote: function(b) {
        var c = this;
        this.note = $("<div class='noteCookie-note'></div>").css({
            left: "40%"
        }).appendTo(b).hide();
        this.noteTitle = $("<div class='noteCookie-noteTitle'></div>").append($("<span class='noteCookie-noteTitle-text'></span>").html("Notes")).appendTo(this.note);
        this.noteTitleShowBtn = $("<div class='noteCookie-noteTitle-showBtn'></div>").css({
            right: 32
        }).attr("title", "Minimize").append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "note_narrow.png")).appendTo(this.noteTitle);
        this.noteTitleCloseBtn = $("<div class='noteCookie-noteTitle-closeBtn'></div>").css({
            right: 3
        }).attr("title", "Close").append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "note_close.png")).appendTo(this.noteTitle);
        this.noteButton = $("<div class='noteCookie-noteButton'></div>").appendTo(this.note);
        var d = $("<div style='position: relative;width: 100%;height: 158px;'></div>").appendTo(this.noteButton);
        this.noteBottomTop = $("<div class='noteCookie-noteButton-top'></div>").appendTo(d);
        this.inputText = $("<textarea class='noteCookie-noteButton-inputText'></textarea>").appendTo(this.noteBottomTop);
        this.addBtn = $("<div class='noteCookie-noteButton-addBtn'></div>").css({
            left: 10
        }).html("Add").appendTo(this.noteBottomTop);
        this.removeAllBtn = $("<div class='noteCookie-noteButton-removeAllBtn'></div>").css({
            left: "auto",
            right: 20
        }).html("Remove All").appendTo(this.noteBottomTop);
        this.noteLists = $("<div class='noteCookie-noteList'></div>").appendTo(this.noteButton);
        var d = $("<div class='noteCookie-noteTable-row-th'></div>"),
        f = $("<span class='noteCookie-noteTable-cellLeft-th'></span>").html("Page"),
        g = $("<div class='noteCookie-noteTable-cellRight-th'></div>");
        g.append($("<div style='position: absolute;width: 1px;height: 22px;left: 0px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 319px;height: 100%;left: 1px;text-indent: 6px;'></span>").html("Title")).append($("<div style='position: absolute;width: 1px;height: 22px;left: auto;right: 89px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 34px;height: 100%;left: auto;right: 55px;text-indent: 4px;'></span>").html("Edit")).append($("<div style='position: absolute;width: 1px;height: 22px;left: auto;right: 54px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 54px;height: 100%;left: auto;right: 0px;text-indent: 4px;'></span>").html("Delete"));
        d.append(f).append(g);
        this.noteLists.append(d);
        this.noteTable = $("<div class='noteCookie-noteTable'></div>").css({
            maxHeight: 188
        }).appendTo(this.noteLists);
        this.noteTableInner = $("<div class='noteCookie-noteTable-inner'></div>").appendTo(this.noteTable);
        isTouch || this.note.transition3D();
        this.createScrollBar(this.noteTable);
        try {
            var h = this.getLocalStorage(this.cookieName),
            k = eval(h);
            if (k) for (this.downJSonArrByKey(k, "page"), h = 0; h < k.length; h++) this.addListData($.extend(k[h], {
                firstDown: !0
            }))
        } catch(l) {}
        for (h = 0; h < this.rows.length; h++) this.rows[h].rowObj.css({
            backgroundColor: 0 == h % 2 ? "": "#bababa"
        });
        this.scrollBarShowHide();
        var m, n;
        this.noteTitle.on("mousedown touchstart",
        function(d) {
            d.preventDefault();
            d.stopPropagation();
            d = d.originalEvent.touches ? d.originalEvent.touches[0] : d;
            m = d.clientX - c.note.position().left;
            n = d.clientY - c.note.position().top;
            b.add(c.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(c.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).on("mousemove.noteMove touchmove.noteMove",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                c.noteTitle.css({
                    cursor: "move"
                });
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                c.note.css({
                    left: b.clientX - m,
                    top: b.clientY - n
                })
            });
            b.on("mouseup.noteMove touchend.noteMove",
            function(d) {
                d.preventDefault();
                d.stopPropagation();
                c.noteTitle.css({
                    cursor: "default"
                });
                b.add(c.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(c.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).off("mousemove.noteMove touchmove.noteMove");
                b.off("mouseup.noteMove touchend.noteMove")
            });
            return ! 1
        })
    },
    isNoteListShowHide: function() {
        0 < this.noteTableInner.children("div").length ? this.noteLists.show() : this.noteLists.hide()
    },
    updateListDataText: function(b, c) {
        var d = this.noteTexts[b],
        f = this.noteImgs[b].find(".noteCookie-eachNote-img"),
        d = d.find(".noteCookie-eachNote-textList-text");
        f.attr("title", c);
        d.val(c)
    },
    updateNoteImgText: function(b, c) {
        this.rowObjs[b].find(".noteCookie-noteTable-cellRight-text").val(c)
    },
    deleteListData: function(b) {
        var c = this.noteTexts[b],
        d = this.svgObjs[b];
        this.noteImgs[b].remove();
        c.remove();
        d.remove();
        delete this.noteImgs[b];
        delete this.rowObjs[b];
        delete this.noteTexts[b];
        delete this.svgObjs[b]
    },
    deleteNoteImg: function(b) {
        this.rowObjs[b].remove();
        delete this.noteImgs[b];
        delete this.rowObjs[b]
    },
    revertNoteImgText: function(b) {
        var c = this.noteTexts[b].find(".noteCookie-eachNote-textList-text");
        b = this.rowObjs[b].find(".noteCookie-noteTable-cellRight-text");
        c.val(b.val())
    },
    addListData: function(b) {
        var c = this,
        d = !0,
        f = $("<div class='noteCookie-noteTable-row' style='position: relative;cursor: pointer;'></div>").css({
            height: 28
        }).attr("data-key", b.key).attr("data-page", b.page).append($("<span class='noteCookie-noteTable-cellLeft'></span>").html(b.page)).appendTo(c.noteTableInner),
        g = $("<span class='noteCookie-noteTable-cellRight' style=' position: absolute;width: 410px;height: 100%;left: 54px;z-index: 2;'></span>").appendTo(f),
        h = $("<input class='noteCookie-noteTable-cellRight-text' disabled='true'/>").attr("disabled", d).val(b.value).appendTo(g),
        k = $("<div class='noteCookie-noteTable-cellRight-edit'></div>").css({
            right: 60
        }).attr("title", "Edit").append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", c.address + "note_edit.png")).appendTo(g);
        $("<div class='noteCookie-noteTable-cellRight-del'></div>").css({
            right: 15
        }).attr("title", "Delete").append($("<img style='margin-left: 0px;margin-top: 3px;'/>").attr("src", c.address + "note_del.png")).appendTo(g).on("click touchend",
        function(b) {
            f.remove();
            var d = f.attr("data-key");
            c.deleteListData(d);
            c.delArrayOrderKey(c.rows, d);
            c.delArrayOrderKey(c.notes, d);
            c.addLocalStorage(c.cookieName, c.parseJSONArrayToString(c.notes));
            for (d = 0; d < c.rows.length; d++) c.rows[d].rowObj.css({
                backgroundColor: 0 == d % 2 ? "": "#bababa"
            });
            c.scrollBarShowHide();
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        f.on("click touchend",
        function(b) {
            gotoPageFun($(this).attr("data-page"))
        });
        k.on("click touchend",
        function(b) {
            if (d) d = !1,
            h.css({
                backgroundColor: "#ffffff",
                color: "#000000"
            }),
            k.children("img").attr("src", c.address + "note_save.png"),
            h.attr("disabled", d),
            h[0].focus(),
            k.attr("title", "Save");
            else {
                d = !0;
                h.css({
                    backgroundColor: "transparent",
                    color: "#1a1a1a"
                });
                h.attr("disabled", d);
                k.attr("title", "Edit");
                var g = h.val();
                k.children("img").attr("src", c.address + "note_edit.png");
                var n = f.attr("data-key");
                c.updateListDataText(n, g);
                c.updateArrayOrderKey(c.notes, n, {
                    value: g
                });
                c.addLocalStorage(c.cookieName, c.parseJSONArrayToString(c.notes))
            }
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        c.rows.push($.extend(b, {
            rowObj: f
        }));
        c.rowObjs[b.key] = f;
        c.scrollBarShowHide();
        c.notes.push(b);
        c.addLocalStorage(c.cookieName, c.parseJSONArrayToString(c.notes))
    },
    addNoteImg: function(b, c) {
        var d = this,
        f = !0,
        g = $("<div class='noteCookie-eachNote'></div>").attr("data-key", b.key).attr("data-page", b.page).css({
            left: "" + b.left + "",
            top: "" + b.top + ""
        }).appendTo(c),
        h = $("<img class='noteCookie-eachNote-img' style=' position: absolute;width: 56px;height: 56px;z-index: 2;'/>").attr("src", d.address + "note.png").attr("title", b.value).attr("data-key", b.key).attr("data-page", b.page).appendTo(g);
        isTouch || g.transition3D();
        try {
            var k = $(document.createElementNS("http://www.w3.org/2000/svg", "svg")).css({
                zIndex: 140,
                position: "absolute"
            }).attr("class", "noteCookie-eachNote-svg noteCookie-eachNote-svg" + b.page).appendTo(BookInfo.container()),
            l = $(document.createElementNS("http://www.w3.org/2000/svg", "path")).css({
                fill: "#FFF4A1",
                stroke: "#C99F1D",
                strokeWidth: 1
            }).appendTo(k)
        } catch(m) {
            k = $("<svg></svg>").css({
                zIndex: 140,
                position: "absolute"
            }).attr("class", "noteCookie-eachNote-svg noteCookie-eachNote-svg" + b.page).appendTo(BookInfo.container()),
            l = $("<path></path>").css({
                fill: "#FFF4A1",
                stroke: "#C99F1D",
                strokeWidth: 1
            }).appendTo(k)
        }
        k.css({
            left: 0,
            top: 0,
            width: 0,
            height: 0
        }).hide();
        var n = $("<div class='noteCookie-eachNote-textList noteCookie-eachNote-text" + b.page + "'></div>").attr("data-key", b.key).attr("data-page", b.page).hide().appendTo(BookInfo.container());
        n.css({
            left: g.offset().left,
            top: g.offset().top
        });
        n.on("click mousedown touchstart",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        var p = $("<div class='noteCookie-eachNote-textList-top' style='position: absolute;width: 100%;height: 20px;left: 0px;top: 0px;background-color: #373737;border-top-left-radius: 2px;border-top-right-radius: 2px;z-index: 2;'></div>").appendTo(n),
        q = $("<div style='position: absolute;left: 4px;top: 0px;width: 24px;height: 20px;cursor: pointer;'></div>").append($("<img style='margin-top: 2px;margin-left: 4px;'/>").attr("src", d.address + "showNoteList.png")).appendTo(p),
        t = $("<div class='noteCookie-eachNote-textList-topClose'></div>").css({
            right: 2
        }).attr("title", "Close").append($("<img style='margin-top: 1px;margin-left: 1px;'/>").attr("src", d.address + "noteImg_close.png")).appendTo(p),
        r = $("<div class='noteCookie-eachNote-textList-topSave'></div>").css({
            right: 24
        }).attr("title", "Save").append($("<img style='margin-top: 1px;margin-left: 0px;'/>").attr("src", d.address + "noteImg_save.png")).appendTo(p),
        s = $("<div class='noteCookie-eachNote-textList-topDel'></div>").css({
            right: 46
        }).attr("title", "Delete").append($("<img style='margin-top: 1px;margin-left: 0px;'/>").attr("src", d.address + "noteImg_del.png")).appendTo(p),
        u = $("<div class='noteCookie-eachNote-textList-textDiv' style='height: 120px;position: absolute;width: 100%;left: 0px;top: 20px;margin: 0px;border: 0px;padding: 0px;border-bottom-left-radius: 2px;border-bottom-right-radius: 2px;background-color: #FFF4A1;z-index: 2;'></div>").appendTo(n),
        v = $("<textarea class='noteCookie-eachNote-textList-text'></textarea>").val(b.value).appendTo(u);
        $("<span class='noteCookie-eachNote-textList-topTitle'></span>").html(b.time).appendTo(u);
        v.on("mousedown click",
        function(b) {
            b.stopPropagation()
        });
        isTouch || n.transition3D();
        q.on("click touchend",
        function() {
            d.noteButtonIsShow && d.showFlag ? (d.hide(), d.showFlag = !1) : (d.show(), d.showFlag = !0)
        });
        var w, y, x, A, E, F;
        p.on("mousedown.note touchstart.note",
        function(b) {
            x = g.offset().left;
            A = g.offset().top;
            E = n.offset().left;
            F = n.offset().top;
            w = (b.pageX || b.originalEvent.touches[0].pageX) - E;
            y = (b.pageY || b.originalEvent.touches[0].pageY) - F;
            BookInfo.container().add(k).add(d.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(d.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).on("mousemove.noteB touchmove.noteB",
            function(b) {
                p.css({
                    cursor: "move"
                });
                b = isTouch ? b.originalEvent.touches[0] : b;
                n.css({
                    left: Math.floor(b.clientX - w),
                    top: b.clientY - y
                });
                d.drawSVG(x, A, n.offset().left, n.offset().top, k, l)
            });
            BookInfo.container().add(k).add(p).on("mouseup.noteB touchend.noteB",
            function() {
                p.css({
                    cursor: "default"
                });
                BookInfo.container().add(k).add(d.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(d.noteImgContainers[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).off("mousemove.noteB touchmove.noteB");
                BookInfo.container().add(k).add(p).off("mouseup.noteB touchend.noteB")
            });
            b.stopPropagation();
            b.preventDefault();
            return ! 1
        });
        var z, C, B;
        t.on("click touchend",
        function(b) {
            d.revertNoteImgText(g.attr("data-key"));
            n.hide();
            k.hide();
            D = !1
        });
        r.on("click touchend",
        function(b) {
            b = v.val();
            h.attr("title", b);
            var c = g.attr("data-key");
            d.updateNoteImgText(c, b);
            d.updateArrayOrderKey(d.notes, c, {
                value: b
            });
            d.addLocalStorage(d.cookieName, d.parseJSONArrayToString(d.notes));
            n.hide();
            k.hide();
            D = !1
        });
        s.on("click touchend",
        function(b) {
            z || (z = $("<div class='noteCookie-eachNote-textList-textDiv-bg' style='height: 100%;position: absolute;width: 100%;left: 0px;top: 0px;margin: 0px;border: 0px;padding: 0px;cursor: default;border-bottom-left-radius: 5px;border-bottom-right-radius: 5px;background-color: #cccccc;z-index: 2;'></div>").appendTo(u), $("<span class='noteCookie-eachNote-textList-textDiv-bgText' style=' position: absolute;left: 0px;top: 36px;font-family: Arial;font-size: 11px;width: 100%;text-align: center;height: 20px;line-height: 20px;color: #0A0A0A;z-index: 2;'></span>").html("Delete This Note!").appendTo(z), C = $("<div class='noteCookie-eachNote-textList-textDiv-bgYes'></div>").css({
                left: 40
            }).html("Yes").appendTo(z), B = $("<div class='noteCookie-eachNote-textList-textDiv-bgNo'></div>").css({
                left: 97
            }).html("No").appendTo(z), C.on("click touchend",
            function(b) {
                b = g.attr("data-key");
                d.deleteNoteImg(b);
                n.remove();
                k.remove();
                g.remove();
                b = g.attr("data-key");
                d.delArrayOrderKey(d.rows, b);
                d.delArrayOrderKey(d.notes, b);
                d.addLocalStorage(d.cookieName, d.parseJSONArrayToString(d.notes));
                d.scrollBarShowHide();
                for (b = 0; b < d.rows.length; b++) d.rows[b].rowObj.css({
                    backgroundColor: 0 == b % 2 ? "": "#bababa"
                });
                z = null
            }), B.on("click touchend",
            function() {
                z.remove();
                z = null
            }))
        });
        var K = b.firstDown ? !1 : !0,
        D = !1,
        I = !1;
        h.on("mouseup.noteImgShowHide touchend.noteImgShowHide",
        function(b) {
            if (isTouch || 1 == b.which) if (K) K = !1;
            else return I ? I = !1 : D ? (n.hide(), k.hide(), D = !1) : (f && (n.css({
                left: g.offset().left,
                top: g.offset().top
            }), f = !1), n.show(), k.show(), D = !0, d.drawSVG(g.offset().left, g.offset().top, n.offset().left, n.offset().top, k, l)),
            b.preventDefault(),
            b.stopPropagation(),
            !1
        });
        $(document).add(c).on("mousedown.noteImgShowHide touchstart.noteImgShowHide",
        function() {
            D && (n.hide(), k.hide(), D = !1)
        });
        n.add(k).on("mousedown.noteImgShowHide touchstart.noteImgShowHide",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        var H, G, M, J, ia, W = !1;
        h.bind(_event._down,
        function(b) {
            b.stopPropagation();
            b.preventDefault();
            b = isTouch ? b.originalEvent.touches[0] : b;
            H = parseFloat(g[0].offsetLeft);
            G = parseFloat(g[0].offsetTop);
            M = b.clientX;
            J = b.clientY;
            ia = h.attr("data-key");
            W = !0;
            if (D) var f = n.offset().left,
            l = n.offset().top,
            m = k.offset().left,
            p = k.offset().top;
            c.on("mousemove.noteObj touchmove.noteObj",
            function(b) {
                b.stopPropagation();
                b.preventDefault();
                if (W) {
                    g.css({
                        cursor: "move"
                    });
                    b = isTouch ? b.originalEvent.touches[0] : b;
                    var h = H * BookInfo.scale() - (M - b.clientX),
                    q = G * BookInfo.scale() - (J - b.clientY),
                    h = h / (c.width() * BookInfo.scale()) * 100 + "%",
                    q = q / (c.height() * BookInfo.scale()) * 100 + "%";
                    g.css({
                        left: h,
                        top: q
                    });
                    D && (n.css({
                        left: f + (b.clientX - M),
                        top: l + (b.clientY - J)
                    }), k.css({
                        left: m + (b.clientX - M),
                        top: p + (b.clientY - J)
                    }));
                    if (8 < Math.abs(b.clientX - M) || 8 < Math.abs(b.clientY - J)) I = !0;
                    d.updateArrayOrderKey(d.notes, ia, {
                        left: h,
                        top: q
                    });
                    d.addLocalStorage(d.cookieName, d.parseJSONArrayToString(d.notes))
                }
            });
            c.add(h).on("mouseup.noteObj touchend.noteObj",
            function(b) {
                W && (g.css({
                    cursor: "default"
                }), I = W = !1, c.off("mousemove.noteObj touchmove.noteObj"), c.add(h).off("mouseup.noteObj touchend.noteObj"))
            });
            return ! 1
        });
        p.bind(_event._down,
        function() {
            $(".noteCookie-eachNote-textList").removeClass("noteCookie-eachNote-textList-current");
            $(".noteCookie-eachNote").removeClass("noteCookie-eachNote-textList-current");
            n.addClass("noteCookie-eachNote-textList-current");
            g.addClass("noteCookie-eachNote-textList-current")
        });
        d.noteImgs[b.key] = g;
        d.noteTexts[b.key] = n;
        d.svgObjs[b.key] = k
    },
    addNoteImgByPageIndex: function(b, c) {
        c.find(".noteCookie-eachNote").remove();
        $(".noteCookie-eachNote-text" + b).remove();
        $(".noteCookie-eachNote-svg" + b).remove();
        for (var d = 0; d < this.notes.length; d++) this.notes[d].page === b && this.addNoteImg(this.notes[d], c)
    },
    addListDataAndNoteImg: function(b, c) {
        this.addListData(b);
        this.addNoteImg(b, c)
    },
    drawSVG: function(b, c, d, f, g, h) {
        var k, l, m, n, p, q;
        b + 28 >= d + 90.5 && c + 28 <= f ? (q = c + 28, f -= q, b + 28 <= d + 109 ? (p = b + 28, n = d + 181 - 24 - b + 28, c = b = 0, k = d + 181 - 24 - 48 - p, l = f, d = d + 181 - 24 - p) : (p = d + 109, d + 181 - 24 >= b + 28 ? (n = 48, b = b + 28 - p) : b = n = b + 28 - p, k = c = 0, l = f, d = 48), m = f) : b + 28 < d + 90.5 && c + 28 <= f ? (q = c + 28, f -= q, b + 28 <= d + 24 ? (p = b + 28, n = d + 24 + 48 - p, c = b = 0, k = n - 48, l = f, d = n) : (p = d + 24, d + 24 + 48 <= b + 28 ? b = n = b + 28 - p: (n = 48, b = b + 28 - p), k = c = 0, l = f, d = 48), m = f) : b + 28 >= d + 90.5 && c >= f + 141 - 28 ? (q = f + 141, f = c + 28 - q, b + 28 <= d + 109 ? (p = b + 28, n = d + 181 - 24 - b + 28, b = 0, c = f, k = d + 181 - 24 - 48 - p, l = 0, d = d + 181 - 24 - p) : (p = d + 109, d + 181 - 24 >= b + 28 ? (n = 48, b = b + 28 - p) : b = n = b + 28 - p, c = f, l = k = 0, d = 48), m = 0) : b + 28 < d + 90.5 && c >= f + 141 - 28 ? (q = f + 141, f = c + 28 - q, b + 28 <= d + 24 ? (p = b + 28, n = d + 24 + 48 - p, b = 0, c = f, k = n - 48, l = 0, d = n) : (p = d + 24, d + 24 + 48 <= b + 28 ? b = n = b + 28 - p: (n = 48, b = b + 28 - p), c = f, l = k = 0, d = 48), m = 0) : d + 181 <= b + 28 && c + 28 >= f && c + 28 <= f + 70.5 ? (p = d + 181, n = b + 28 - p, c + 28 <= f + 20 ? (q = c + 28, f = f + 20 + 48 - q, b = n, k = c = 0, l = f - 48, d = 0, m = f) : f + 20 + 48 <= c + 28 ? (q = f + 20, f = c + 28 - q, b = n, c = f, d = l = k = 0, m = 48) : (q = f + 20, f = 48, b = n, c = c + 28 - q, d = l = k = 0, m = f)) : d + 181 <= b + 28 && c + 28 <= f + 141 && c + 28 >= f + 70.5 ? (p = d + 181, n = b + 28 - p, c + 28 <= f + 141 - 20 - 48 ? (q = c + 28, f = f + 141 - 20 - q, b = n, k = c = 0, l = f - 48, d = 0, m = f) : f + 141 - 20 <= c + 28 ? (q = f + 141 - 68, f = c + 28 - q, b = n, c = f, d = l = k = 0, m = 48) : (q = f + 141 - 68, f = 48, b = n, c = c + 28 - q, d = l = k = 0, m = f)) : d >= b + 28 && c + 28 >= f && c + 28 <= f + 70.5 ? (p = b + 28, n = d - p, c + 28 <= f + 20 ? (q = c + 28, f = f + 20 + 48 - q, c = b = 0, k = n, l = f - 48, d = n, m = f) : f + 20 + 48 <= c + 28 ? (q = f + 20, f = c + 28 - q, b = 0, c = f, k = n, l = 0, d = n, m = 48) : (q = f + 20, f = 48, b = 0, c = c + 28 - q, k = n, l = 0, d = n, m = f)) : d >= b + 28 && c + 28 <= f + 141 && c + 28 >= f + 70.5 ? (p = b + 28, n = d - p, c + 28 <= f + 141 - 20 - 48 ? (q = c + 28, f = f + 141 - 20 - q, c = b = 0, k = n, l = f - 48, d = n, m = f) : f + 141 - 20 <= c + 28 ? (q = f + 141 - 68, f = c + 28 - q, b = 0, c = f, k = n, l = 0, d = n, m = 48) : (q = f + 141 - 68, f = 48, b = 0, c = c + 28 - q, k = n, l = 0, d = n, m = f)) : (l = k = c = b = n = f = q = p = 0, d = 48, m = 0);
        g.show().css({
            width: n,
            height: f,
            left: p,
            top: q
        });
        h.attr("d", "M" + d + "," + m + " L" + b + "," + c + " L" + k + "," + l)
    },
    bindEvents: function() {
        var b = this,
        c = !1,
        d = function() {
            $.each(BookInfo.getCurrentPages(),
            function(c, d) {
                if (b.noteImgContainers[BookInfo.getBookType()]) {
                    var h = b.noteImgContainers[BookInfo.getBookType()][d];
                    h && (h.css({
                        cursor: ""
                    }), h.off("mousedown.addNote touchstart.addNote"))
                }
            });
            c = !1
        };
        BookInfo.container().on("mousedown.addNote touchstart.addNote",
        function() {
            d()
        });
        b.addBtn.bind(_event._end,
        function(f) {
            var g = b.inputText.val();
            if (g) {
                b.noteButtonIsShow = !1;
                b.noteTitleShowBtn.children("img").attr("src", b.address + "note_revert.png");
                b.noteButton.css({
                    maxHeight: 0,
                    paddingBottom: 0
                });
                c = !0;
                var h = BookInfo.getCurrentPages();
                $.each(h,
                function(f, h) {
                    var m = b.noteImgContainers[BookInfo.getBookType()][h];
                    if (m) m.css({
                        cursor: "url(" + b.address + "note.png),auto"
                    }).on(_event._down,
                    function(f) {
                        b.noteButtonIsShow = !1;
                        b.noteTitleShowBtn.children("img").attr("src", b.address + "note_revert.png");
                        b.noteButton.css({
                            maxHeight: 0
                        });
                        if (c) {
                            if (!f.which || 3 != f.which) {
                                var k = (f.pageX || f.originalEvent.touches[0].pageX) - m.offset().left;
                                f = (f.pageY || f.originalEvent.touches[0].pageY) - m.offset().top;
                                k = k / (m.width() * BookInfo.scale()) * 100 + "%";
                                f = f / (m.height() * BookInfo.scale()) * 100 + "%";
                                k = {
                                    key: (new Date).getTime(),
                                    time: (new Date).format("yyyy-MM-dd hh:mm:ss", !0),
                                    value: g,
                                    left: k,
                                    top: f,
                                    page: h
                                };
                                b.addListDataAndNoteImg(k, $(this));
                                b.downJSonArrByKey(b.rows, "page");
                                $(".noteCookie-noteTable-row").detach();
                                for (k = 0; k < b.rows.length; k++) b.rows[k].rowObj.css({
                                    backgroundColor: 0 == k % 2 ? "": "#bababa"
                                }),
                                b.rows[k].rowObj.appendTo(b.noteTableInner);
                                b.scrollBarShowHide();
                                b.inputText.val("")
                            }
                            d()
                        }
                    })
                })
            }
            f.preventDefault();
            f.stopPropagation();
            return ! 1
        });
        b.noteTitleShowBtn.on(_event._down,
        function() {
            b.noteButtonIsShow ? (b.noteButtonIsShow = !1, b.noteTitleShowBtn.children("img").attr("src", b.address + "note_revert.png"), b.noteButton.css({
                maxHeight: 0,
                paddingBottom: 0
            })) : (b.noteButtonIsShow = !0, b.noteTitleShowBtn.children("img").attr("src", b.address + "note_narrow.png"), b.noteButton.css({
                maxHeight: 9999,
                paddingBottom: 6
            }))
        });
        b.noteTitleCloseBtn.on("click.note touchend.note",
        function(c) {
            void 0 != b.onCreated ? b.onCreated[1].call(b.onCreated[0]) : b.hide();
            c.preventDefault();
            c.stopPropagation();
            return ! 1
        });
        b.removeAllBtn.on("click.note touchend.note",
        function() {
            $(".noteCookie-eachNote").remove();
            $(".noteCookie-eachNote-svg").remove();
            $(".noteCookie-eachNote-textList").remove();
            $(".noteCookie-noteTable-row").remove();
            b.notes = [];
            b.rowObjs = {};
            b.noteImgs = {};
            b.noteTexts = {};
            b.svgObjs = {};
            b.rows = [];
            b.addLocalStorage(b.cookieName, b.parseJSONArrayToString(b.notes));
            b.scrollBarShowHide()
        })
    },
    setContainers: function(b, c, d) {
        void 0 == this.noteImgContainers[b] && (this.noteImgContainers[b] = {});
        this.noteImgContainers[b][c] = d;
        b == BookInfo.getBookType() && ($(".noteCookie-eachNote-textList").hide(), $(".noteCookie-eachNote-svg").hide(), this.addNoteImgByPageIndex(c, d))
    },
    show: function() {
        this.showFlag = !0;
        this.note.show();
        parseInt(this.note.css("left")) > this.container.width() && this.note.css({
            left: "50%"
        });
        0 > parseInt(this.note.css("top")) && this.note.css({
            top: 24
        });
        this.noteButtonIsShow = !0;
        this.noteTitleShowBtn.children("img").attr("src", this.address + "note_narrow.png");
        this.noteButton.css({
            maxHeight: 9999,
            paddingBottom: 6
        });
        this.scrollBarShowHide()
    },
    hide: function() {
        this.showFlag = !1;
        this.note.hide()
    },
    bindOnCreated: function(b, c) {
        this.onCreated = [b, c]
    },
    showHide: function() {
        this.showFlag ? this.hide() : this.show()
    },
    parseJSONArrayToString: function(b) {
        if (0 != b.length) {
            for (var c = "[",
            d = 0; d < b.length; d++) c += "{key:'" + b[d].key + "',value:'" + b[d].value + "',page:" + b[d].page + ",time:'" + b[d].time + "',left:'" + b[d].left + "',top:'" + b[d].top + "'},";
            c = c.substring(0, c.length - 1);
            return c + "]"
        }
    },
    delArrayOrderKey: function(b, c) {
        if (b) for (var d = 0; d < b.length; d++) b[d].key && b[d].key == c && b.remove(d)
    },
    updateArrayOrderKey: function(b, c, d) {
        if (b) for (var f = 0; f < b.length; f++) b[f].key && b[f].key == c && $.extend(b[f], d)
    },
    downJSonArrByKey: function(b, c) {
        b.sort(function(b, f) {
            return parseInt(b[c]) > parseInt(f[c]) ? 1 : parseInt(b[c]) == parseInt(f[c]) ? 0 : -1
        })
    },
    isArray: function(b) {
        return "[object Array]" == Object.prototype.toString.call(b)
    },
    getLocalStorage: function(b) {
        try {
            if (window.localStorage) return window.localStorage.getItem(b);
            for (var c = document.cookie.split("; "), d = 0; d < c.length; d++) {
                var f = c[d].split("=");
                if (f[0] == b) return unescape(f[1])
            }
            return ""
        } catch(g) {}
    },
    addLocalStorage: function(b, c) {
        try {
            if (window.localStorage) window.localStorage.setItem(b, c);
            else {
                var d = b + "=" + escape(c),
                f = new Date;
                f.setTime(f.getTime() + 864E8);
                d += "; expires=" + f.toGMTString();
                document.cookie = d
            }
        } catch(g) {}
    },
    createScrollBar: function(b) {
        b = $("<div>", {
            "class": "ScrollBar",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                backgroundColor: "#a8a8a8",
                borderRadius: 0,
                right: 0,
                top: 0,
                zIndex: 99,
                borderLeft: "1px solid #ffffff"
            }
        }).appendTo(b);
        var c = $("<div>", {
            "class": "OuterScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                left: 0,
                top: 0,
                backgroundColor: "transparent",
                borderRadius: 0,
                overflow: "hidden",
                cursor: "pointer"
            }
        }).appendTo(b);
        $("<div>", {
            "class": "InnerScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                marginLeft: 0,
                marginRight: 0,
                left: 0,
                top: 0,
                backgroundColor: "#5e5e5e",
                borderRadius: 0,
                cursor: "pointer"
            }
        }).appendTo(c);
        this.scrollBar = b;
        this.outerScroll = c;
        this.bindScrollBarEvents(b, c, this.noteTable, this.noteTableInner)
    },
    scrollBarShowHide: function() {
        var b = this.noteTable.outerHeight() * this.scrollBar.outerHeight() / this.noteTableInner.outerHeight();
        this.outerScroll.css({
            height: b
        });
        this.isNoteListShowHide();
        this.noteTable.height() >= this.noteTableInner.height() ? (this.scrollBar.hide(), this.noteTableInner.css({
            top: 0
        })) : (this.scrollBar.show(), Math.abs(parseFloat(this.noteTableInner.css("top"))) > this.noteTableInner.outerHeight() - this.noteTable.outerHeight() && (this.noteTableInner.css({
            top: -(this.noteTableInner.outerHeight() - this.noteTable.outerHeight())
        }), this.outerScroll.css({
            top: this.scrollBar.outerHeight() - this.outerScroll.outerHeight()
        })))
    },
    bindScrollBarEvents: function(b, c, d, f) {
        var g = this;
        c.on(_event._down,
        function(b) {
            var d = b || event,
            l = d.clientY - g.outerScroll.position().top,
            m = b.which;
            b.stopPropagation();
            1 == m && ($(document).on("mousemove.scrollBar touchmove.scrollBar",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                d = b || event;
                b = d.clientY - l;
                0 >= b ? b = 0 : b >= g.scrollBar.outerHeight() - g.outerScroll.outerHeight() && (b = g.scrollBar.outerHeight() - g.outerScroll.outerHeight());
                c.css({
                    top: b
                });
                f.css({
                    top: -b / (g.scrollBar.outerHeight() - g.outerScroll.outerHeight()) * (g.noteTableInner.outerHeight() - g.noteTable.outerHeight())
                })
            }), $(document).on("mouseup.scrollBar touchend.scrollBar",
            function(b) {
                b = b || event;
                b.preventDefault();
                b.stopPropagation();
                $(document).off("mousemove.scrollBar touchmove.scrollBar");
                $(document).off("mouseup.scrollBar touchend.scrollBar")
            }))
        });
        d.bind($.browser.mozilla ? "DOMMouseScroll": "mousewheel",
        function(g) {
            if (! (d.outerHeight() >= f.outerHeight())) {
                var k = g.originalEvent,
                k = k.wheelDelta || -k.detail,
                l = f.position().top,
                m;
                f.stop(!1, !1);
                0 < k ? m = 0 > l + d.outerHeight() / 11 ? l + d.outerHeight() / 11 : 0 : 0 > k && (m = f.outerHeight() - d.outerHeight() > -(l - d.outerHeight() / 11) ? l - d.outerHeight() / 11 : -(f.outerHeight() - d.outerHeight()));
                f.css({
                    top: m
                });
                c.css({
                    top: -m / (f.outerHeight() - d.outerHeight()) * (b.outerHeight() - c.outerHeight())
                });
                g.stopPropagation();
                g.preventDefault();
                return ! 1
            }
        })
    }
}),
Signature = Class({
    statics: {
        signature: function(b) {
            void 0 == this._signature && (this._signature = new Signature(b));
            return this._signature
        }
    },
    create: function(b) {
        this.container = b;
        this.address = uiBaseURL;
        this.disableCss = {
            boxShadow: "rgba(0, 0, 0, 0.6) 0px 1px 4px inset",
            backgroundColor: "#cccccc",
            textShadow: "0 1px 1px white",
            color: "rgb(165, 148, 148)",
            cursor: "default"
        };
        this.normalCss = {
            boxShadow: "inset 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 1px 2px rgba(0, 0, 0, 0.2)",
            backgroundColor: "#E4E4E4",
            color: "#464343",
            textShadow: "",
            cursor: "pointer"
        };
        this.overCss = {};
        this.downCss = {
            backgroundColor: "#E4E4E4",
            color: "#374f00",
            boxShadow: "inset 0px 1px 3px rgba(0, 0, 0, 0.3), 0px 1px 0px white",
            textShadow: "0px 1px 0px rgba(255, 255, 255, 0.4)"
        };
        this.natureMessage = "Welcome to the signature manager! Here, you can draw,type, or upload signatures to use on the PDF documents you sign.";
        this.writeMessage = 'Type your signature below, then press the "Save" or "Save & Use" button to proceed.';
        this.drawMessage = 'Draw your signature below, then press the "Save" or "Save & Use" button to proceed.';
        this.redoIsUse = this.undoIsUse = this.clearAllFalg = this.hasDrawFlag = this.showFlag = this.hasAndChangeText = !1;
        this.drawOldData = this.currentDrawDel = this.currentDrawEdit = this.currentDrawSave = this.currentWriteDel = this.currentWriteEdit = this.currentWriteSave = null;
        this.drawOldPoints = [];
        this.savePoints = [];
        this.saveText = null;
        this.signatureName = window.location.href.replace(window.location.hash, "") + "Signature";
        this.signatureCookies = [];
        this.currentObj = null;
        this.signatureContexts = {};
        try {
            this.createSignature(b)
        } catch(c) {}
        this.toolBar = this.createToolBar(b)
    },
    createToolBar: function(b) {
        var c = this;
        this.showTimeFalg = {};
        this.oldData = {};
        var d = $("<div class='flipHTML5Signature-toolBar' style='position: absolute;width: 144px;height: 32px;background-color: rgba(0, 0, 0, 0.8);border-radius: 4px;z-index: 9998;'></div>").appendTo(b).hide();
        b = $("<div class='flipHTML5Signature-toolBar-del'></div>").css({
            left: 4
        }).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "signature_del.png")).appendTo(d);
        var f = $("<div class='flipHTML5Signature-toolBar-up'></div>").css({
            left: 32
        }).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "signature_up.png")).appendTo(d),
        g = $("<div class='flipHTML5Signature-toolBar-down'></div>").css({
            left: 60
        }).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "signature_down.png")).appendTo(d),
        h = $("<div class='flipHTML5Signature-toolBar-revert'></div>").css({
            left: 88
        }).append($("<img style='margin-left: 2px;margin-top: 4px;'/>").attr("src", this.address + "signature_revert.png")).appendTo(d),
        k = $("<div class='flipHTML5Signature-toolBar-date'></div>").css({
            left: 116
        }).append($("<img style='margin-left: 3px;margin-top: 4px;'/>").attr("src", this.address + "signature_date.png")).appendTo(d);
        b.on("click touchend",
        function(b) {
            c.currentObj && (c.currentObj.remove(), d.hide(), b = c.currentObj.attr("data-key"), delete c.showTimeFalg[b], delete c.oldData[b], c.delArrayOrderKey(c.signatureCookies, b), c.addLocalStorage(c.signatureName, c.parseToString(c.signatureCookies)))
        });
        f.on("click touchend",
        function() {
            if (c.currentObj) {
                var b = c.currentObj.width(),
                d = c.currentObj.height(),
                f = b + 11;
                c.currentObj.css({
                    width: f,
                    height: f / (b / d)
                });
                b = c.currentObj.attr("data-key");
                d = c.parseObject(c.currentObj[0]);
                c.updateArrayOrderKey(c.signatureCookies, b, {
                    width: d.width,
                    height: d.height
                });
                c.addLocalStorage(c.signatureName, c.parseToString(c.signatureCookies));
                c.showTimeFalg[b] && c.reviseDateTag()
            }
        });
        g.on("click touchend",
        function() {
            if (c.currentObj) {
                var b = c.currentObj.width(),
                d = c.currentObj.height(),
                f = 0 >= b - 11 ? 5 : b - 11;
                c.currentObj.css({
                    width: f,
                    height: f / (b / d)
                });
                b = c.currentObj.attr("data-key");
                d = c.parseObject(c.currentObj[0]);
                c.updateArrayOrderKey(c.signatureCookies, b, {
                    width: d.width,
                    height: d.height
                });
                c.addLocalStorage(c.signatureName, c.parseToString(c.signatureCookies));
                c.showTimeFalg[b] && c.reviseDateTag()
            }
        });
        h.on("click touchend",
        function() {
            if (c.currentObj) {
                var b = c.currentObj.attr("data-key");
                c.currentObj.css({
                    width: c.oldData[b].width,
                    height: c.oldData[b].height
                });
                c.showTimeFalg[b] && c.reviseDateTag();
                var d = c.parseObject(c.currentObj[0]);
                c.updateArrayOrderKey(c.signatureCookies, b, {
                    width: d.width,
                    height: d.height
                });
                c.addLocalStorage(c.signatureName, c.parseToString(c.signatureCookies))
            }
        });
        k.on("click touchend",
        function() {
            var b = c.currentObj.attr("data-key");
            c.showTimeFalg[b] ? (c.currentObj.find(".flipHTML5Signature-eachDate").hide(), c.showTimeFalg[b] = !1) : (c.reviseDateTag(), c.currentObj.find(".flipHTML5Signature-eachDate").show(), c.showTimeFalg[b] = !0)
        });
        d.on("mousedown touchstart",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.container.add($(document)).add(BookInfo.container()).on("mousedown.hideToolBar touchstart.hideToolBar",
        function() {
            d.hide()
        });
        return d
    },
    createSignature: function(b) {
        var c = this;
        this.$signature = $("<div class='flipHTML5Signature'></div>").css({
            width: 560
        }).appendTo(b).hide();
        this.$signatureTitle = $("<div class='flipHTML5Signature-title'></div>").append($("<span class='flipHTML5Signature-titleText'></span>").html("Signature Manager")).appendTo(this.$signature);
        this.$closeBtn_title = $("<div class='flipHTML5Signature-titleClose' style='right: 6px;top: 4px;width: 20px;height: 20px;'></div>").append($("<img style='margin-left: 2px;margin-top: 2px;'/>").attr("src", this.address + "signature_close.png")).appendTo(this.$signatureTitle);
        try {
            var d = this.getLocalStorage(this.signatureName);
            this.signatureCookies = d && "undefined" != d ? eval(d) : []
        } catch(f) {}
        var g, h;
        this.$signatureTitle.on("mousedown touchstart",
        function(d) {
            d.preventDefault();
            d.stopPropagation();
            d = d.originalEvent.touches ? d.originalEvent.touches[0] : d;
            g = d.clientX - c.$signature.position().left;
            h = d.clientY - c.$signature.position().top;
            b.add($(document)).add(c.signatureContexts[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(c.signatureContexts[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).on("mousemove.signatureMove touchmove.signatureMove",
            function(b) {
                c.$signatureTitle.css({
                    cursor: "move"
                });
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                c.$signature.css({
                    left: b.clientX - g,
                    top: b.clientY - h
                })
            });
            b.add($(document)).on("mouseup.signatureMove touchend.signatureMove",
            function() {
                c.$signatureTitle.css({
                    cursor: "default"
                });
                b.add($(document)).add(c.signatureContexts[BookInfo.getBookType()][BookInfo.getCurrentPages()[0]]).add(c.signatureContexts[BookInfo.getBookType()][BookInfo.getCurrentPages()[1]]).off("mousemove.signatureMove touchmove.signatureMove");
                b.add($(document)).off("mouseup.signatureMove touchend.signatureMove")
            });
            return ! 1
        });
        this.createSignatureUnder(this.$signature);
        this.createWriteTypeUnder(this.$signature);
        this.createDrawTypeUnder(this.$signature)
    },
    createSignatureUnder: function(b) {
        var c = this;
        this.$signatureUnder = $("<div class='flipHTML5Signature-nuder' style='position: relative;left: 0px;width: 100%;height: 260px;background-color: #C7C7C7;'></div>").append($("<div class='flipHTML5Signature-nuderMessage'></div>").html(this.natureMessage)).appendTo(b);
        this.$underClose = $("<div class='flipHTML5Signature-nuderClose'></div>").html("Close").appendTo(this.$signatureUnder);
        this.$closeBtn_title.add(this.$underClose).on("click.signature touchend.signature",
        function() {
            void 0 != c.onCreated ? c.onCreated[1].call(c.onCreated[0]) : c.hide()
        });
        this.createEachTypes(this.$signatureUnder)
    },
    createEachTypes: function(b) {
        var c = this,
        d = {
            width: 52,
            left: 57,
            borderTopLeftRadius: 5,
            borderBottomLeftRadius: 5
        },
        f = {
            width: 70,
            left: 111,
            borderTopRightRadius: 5,
            borderBottomRightRadius: 5
        };
        b = $("<div class='flipHTML5Signature-nuderTypes' style='  position: absolute;left: 15px;top: 60px;width: 530px;height: 145px;'></div>").css({
            boxShadow: "inset 1px 1px 0px #a6a6a6, 1px 1px 0px #f6f6f6"
        }).appendTo(b);
        var g = $("<div class='flipHTML5Signature-nuderTypes-type' style=' position: absolute;left: 17px;top: 6px;width: 240px;height: 134px;'></div>").css({
            boxShadow: "0px 0px 1px #000000"
        }).append($("<span class='flipHTML5Signature-typeTitle'></span>").html("Type on Keyboard")).css({
            left: 17
        }).appendTo(b),
        g = $("<div class='flipHTML5Signature-typeUnder'></div>").appendTo(g),
        h = $("<div class='flipHTML5Signature-typeMid'></div>").appendTo(g),
        k = $("<div class='flipHTML5Signature-typeEdit-typeDel'></div>").css(d).html("Edit").appendTo(g).hide(),
        l = $("<div class='flipHTML5Signature-typeEdit-typeDel'></div>").css(f).html("Delete").appendTo(g).hide();
        b = $("<div class='flipHTML5Signature-nuderTypes-type' style=' position: absolute;left: 17px;top: 6px;width: 240px;height: 134px;'></div>").css({
            boxShadow: "0px 0px 1px #000000"
        }).append($("<span class='flipHTML5Signature-typeTitle'></span>").html("Draw with Mouse")).css({
            left: "auto",
            right: 17
        }).appendTo(b);
        b = $("<div class='flipHTML5Signature-typeUnder'></div>").appendTo(b);
        var m = $("<div class='flipHTML5Signature-typeMid'></div>").appendTo(b),
        n = $("<div class='flipHTML5Signature-typeEdit-typeDel'></div>").css(d).html("Edit").appendTo(b).hide(),
        p = $("<div class='flipHTML5Signature-typeEdit-typeDel'></div>").css(f).html("Delete").appendTo(b).hide();
        h.on("mouseover.signature touchstart.signature",
        function() {
            h.css({
                borderColor: "#ff0000"
            })
        });
        h.on("mouseout.signature touchend.signature",
        function() {
            h.css({
                borderColor: "#cccccc"
            })
        });
        h.on(_event._down,
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        h.on(_event._end,
        function(b) {
            var d = $(this).html();
            d ? (c.$writeText.val(d), c.saveAndUseWrite(d)) : (c.writeSave.add(c.writeSaveAndUse).removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss), c.hasAndChangeText = !1, c.$signatureUnder.hide(), c.$drawTypeUnder.hide(), c.$writeTypeUnder.show(), c.$writeText.focus(), c.currentWriteSave = h, c.currentWriteEdit = k, c.currentWriteDel = l);
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        k.on("click.signature touchend.signature",
        function() {
            c.currentWriteSave = h;
            c.currentWriteEdit = k;
            c.currentWriteDel = l;
            c.$writeText.val(h.html());
            c.writeSave.add(c.writeSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss);
            c.hasAndChangeText = !1;
            c.$signatureUnder.hide();
            c.$drawTypeUnder.hide();
            c.$writeTypeUnder.show()
        });
        l.on("click.signature touchend.signature",
        function() {
            c.currentWriteSave = h;
            c.currentWriteEdit = k;
            c.currentWriteDel = l;
            c.writeSave.add(c.writeSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss);
            c.hasAndChangeText = !1;
            h.html("");
            c.$writeText.val("");
            k.hide();
            l.hide()
        });
        m.on("mouseover.signature touchstart.signature",
        function() {
            m.css({
                borderColor: "#ff0000"
            })
        });
        m.on("mouseout.signature touchend.signature",
        function() {
            m.css({
                borderColor: "#cccccc"
            })
        });
        m.on(_event._down,
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        m.on(_event._end,
        function(b) {
            m.children("img").length ? c.saveAndUseDraw(c.drawOldData) : (c.$signatureUnder.hide(), c.$writeTypeUnder.hide(), c.$drawTypeUnder.show(), c.currentDrawSave = m, c.currentDrawEdit = n, c.currentDrawDel = p);
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        n.on("click.signature touchend.signature",
        function() {
            c.currentDrawSave = m;
            c.currentDrawEdit = n;
            c.currentDrawDel = p;
            c.$signatureUnder.hide();
            c.$writeTypeUnder.hide();
            c.$drawTypeUnder.show()
        });
        p.on("click.signature touchend.signature",
        function() {
            try {
                c.currentDrawSave = m,
                c.currentDrawEdit = n,
                c.currentDrawDel = p,
                c.undo.add(c.redo).add(c.clearAllBtn).add(c.drawSave).add(c.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss),
                c.undoIsUse = !1,
                c.redoIsUse = !1,
                c.clearAllFalg = !1,
                c.hasDrawFlag = !1,
                n.hide(),
                p.hide(),
                c.currentDrawSave && c.currentDrawSave.empty(),
                c.context.clearRect(0, 0, c.canvas.width, c.canvas.height),
                c.previewContext.clearRect(0, 0, c.previewCanvas.width, c.previewCanvas.height),
                c.drawOldPoints = [],
                c.points = [],
                c.drawOldPoints.push([])
            } catch(b) {}
        })
    },
    createWriteTypeUnder: function(b) {
        var c = this,
        d = !1,
        f;
        this.$writeTypeUnder = $("<div class='flipHTML5Signature-writeType' style='position: relative;left: 0px;width: 100%;height: 170px;background-color: #C7C7C7;'></div>").append($("<div class='flipHTML5Signature-nuderMessage'></div>").html(this.writeMessage)).appendTo(b).hide();
        this.$writeText = $("<input type='text' class='flipHTML5Signature-writeType-text' maxlength='35' style='position: absolute;width: 450px;height: 60px;left: 63px;top: 64px;font-family: Mistral;font-size: 28px;text-align: center;color: #000000;'/>").css({
            boxShadow: "rgb(166, 166, 166) 1px 1px 0px inset, rgb(246, 246, 246) 1px 1px 0px"
        }).appendTo(this.$writeTypeUnder);
        this.writeSave = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-save' style='left: 161px;'></div>").html("Save").appendTo(this.$writeTypeUnder);
        this.writeSaveAndUse = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-save-use' style='left: 275px;'></div>").html("Save & Use").appendTo(this.$writeTypeUnder);
        b = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-cancel'></div>").html("Cancel").appendTo(this.$writeTypeUnder);
        f = this.$writeText.val();
        this.writeSave.add(this.writeSaveAndUse).css(this.disableCss);
        b.on("click touchend",
        function(b) {
            c.$writeText.val(f);
            c.$writeTypeUnder.hide();
            c.$drawTypeUnder.hide();
            c.$signatureUnder.show();
            b.preventDefault()
        });
        this.writeSaveAndUse.on(_event._down,
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.writeSaveAndUse.on(_event._end,
        function(b) {
            if (c.hasAndChangeText) {
                var h = c.$writeText.val(); (f = h) && d && (c.saveText = h, c.saveAndUseWrite(h))
            }
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.writeSave.on("click touchend",
        function(b) {
            c.hasAndChangeText && (f = b = c.$writeText.val()) && d && (c.saveText = b, c.saveWrite(b))
        });
        c.writeSave.on("mouseover.signature touchstart.signature",
        function(b) {
            c.hasAndChangeText && c.writeSave.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        c.writeSaveAndUse.on("mouseover.signature touchstart.signature",
        function(b) {
            c.hasAndChangeText && c.writeSaveAndUse.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        c.writeSave.on("mouseout.signature touchend.signature",
        function(b) {
            c.hasAndChangeText && c.writeSave.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.writeSaveAndUse.on("mouseout.signature touchend.signature",
        function(b) {
            c.hasAndChangeText && c.writeSaveAndUse.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.writeSave.on("mousedown.signature",
        function(b) {
            c.hasAndChangeText && c.writeSave.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        c.writeSaveAndUse.on("mousedown.signature",
        function(b) {
            c.hasAndChangeText && c.writeSaveAndUse.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        c.writeSave.add($(document)).on("mouseup.signature",
        function(b) {
            c.hasAndChangeText && c.writeSave.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.writeSaveAndUse.add($(document)).on("mouseup.signature",
        function(b) {
            c.hasAndChangeText && c.writeSaveAndUse.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        this.$writeText.on("input propertychange",
        function(b) {
            b = c.$writeText.val();
            d = !0;
            b && d ? (c.writeSave.add(c.writeSaveAndUse).css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover"), c.hasAndChangeText = !0) : (c.hasAndChangeText = !1, c.writeSave.add(c.writeSaveAndUse).removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss))
        })
    },
    createDrawTypeUnder: function(b) {
        var c = this;
        this.$drawTypeUnder = $("<div class='flipHTML5Signature-drawType' style='position: relative;left: 0px;width: 100%;height: 340px;background-color: #C7C7C7;'></div>").append($("<div class='flipHTML5Signature-nuderMessage'></div>").html(this.drawMessage)).appendTo(b).hide();
        this.drawSave = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-save' style='left: 161px;'></div>").html("Save").appendTo(this.$drawTypeUnder);
        this.drawSaveAndUse = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-save-use' style='left: 275px;'></div>").html("Save & Use").appendTo(this.$drawTypeUnder);
        b = $("<div class='flipHTML5Signature-typeBtn flipHTML5Signature-type-cancel'></div>").html("Cancel").appendTo(this.$drawTypeUnder);
        this.drawSave.add(this.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(this.disableCss);
        this.drawSave.on("click touchend",
        function() {
            if (c.hasDrawFlag) {
                var b = c.trimCanvas(y);
                c.savePoints = c.points.concat();
                c.savePoints.push({
                    color: c.drawColor
                });
                c.saveDraw(b)
            }
        });
        this.drawSaveAndUse.on(_event._down,
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.drawSaveAndUse.on(_event._end,
        function(b) {
            if (c.hasDrawFlag) {
                var d = c.trimCanvas(y);
                c.savePoints = c.points.concat();
                c.savePoints.push({
                    color: c.drawColor
                });
                c.saveAndUseDraw(d)
            }
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        c.drawSave.on("mouseover.signature touchstart.signature",
        function(b) {
            c.hasDrawFlag && c.drawSave.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        c.drawSaveAndUse.on("mouseover.signature touchstart.signature",
        function(b) {
            c.hasDrawFlag && c.drawSaveAndUse.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        c.drawSave.on("mouseout.signature touchend.signature",
        function(b) {
            c.hasDrawFlag && c.drawSave.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.drawSaveAndUse.on("mouseout.signature touchend.signature",
        function(b) {
            c.hasDrawFlag && c.drawSaveAndUse.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.drawSave.on("mousedown.signature",
        function(b) {
            c.hasDrawFlag && c.drawSave.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        c.drawSaveAndUse.on("mousedown.signature",
        function(b) {
            c.hasDrawFlag && c.drawSaveAndUse.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        c.drawSave.add($(document)).on("mouseup.signature",
        function(b) {
            c.hasDrawFlag && c.drawSave.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        c.drawSaveAndUse.add($(document)).on("mouseup.signature",
        function(b) {
            c.hasDrawFlag && c.drawSaveAndUse.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        b.on("click touchend",
        function() {
            c.$writeTypeUnder.hide();
            c.$drawTypeUnder.hide();
            c.$signatureUnder.show()
        });
        b = $("<div class='flipHTML5Signature-drawTypeMid' style='position: absolute;left: 10px;top: 53px;width: 540px;height: 90px;'></div>").css({
            boxShadow: "rgb(166, 166, 166) 1px 1px 0px inset, rgb(246, 246, 246) 1px 1px 0px"
        }).appendTo(this.$drawTypeUnder);
        var d = $("<div class='flipHTML5Signature-drawTypeMid-lineWidth' style='position: absolute;width: 180px;height: 16px;left: 20px;top: 15px;'></div>").appendTo(b).append($("<img>").attr("src", this.address + "pen.png")),
        f = $("<div style='position: absolute;width: 100px;height: 4px; background-color: #E0E0E0;left: 20px;top: 6px;border-radius: 2px;'></div>").css({
            boxShadow: "rgb(166, 166, 166) 1px 1px 0px inset, rgb(246, 246, 246) 1px 1px 0px"
        }).appendTo(d),
        g = $("<div style='position: absolute;cursor:pointer;width: 0px; height: 0px;border-bottom-width: 11px;border-style: solid;border-left-width: 6px;border-right-width: 6px;top: -3px;border-color: transparent;border-bottom-color: #373737;left: -4px;'></div>").appendTo(f),
        h = $("<input type='text' style='position: absolute;width: 40px;height: 13px;left: 130px;top: 0px;'/>").appendTo(d),
        k = $("<div class='flipHTML5Signature-drawTypeMid-undo'></div>").css({
            left: 28
        }).appendTo(b).html("UNDO"),
        l = $("<div class='flipHTML5Signature-drawTypeMid-redo'></div>").css({
            left: 80
        }).appendTo(b).html("REDO"),
        m = $("<div class='flipHTML5Signature-drawTypeMid-clearAll'></div>").css({
            left: 152,
            width: 78
        }).html("Clear All").appendTo(b);
        this.clearAllBtn = m;
        k.add(l).add(m).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(this.disableCss);
        this.undo = k;
        this.redo = l;
        k.on("mouseover.signature touchstart.signature",
        function(b) {
            c.undoIsUse && k.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        l.on("mouseover.signature touchstart.signature",
        function(b) {
            c.redoIsUse && l.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        m.on("mouseover.signature touchstart.signature",
        function(b) {
            c.clearAllFalg && m.removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(c.overCss)
        });
        k.on("mouseout.signature touchend.signature",
        function(b) {
            c.undoIsUse && k.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        l.on("mouseout.signature touchend.signature",
        function(b) {
            c.redoIsUse && l.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        m.on("mouseout.signature touchend.signature",
        function(b) {
            c.clearAllFalg && m.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        k.on("mousedown.signature",
        function(b) {
            c.undoIsUse && k.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        l.on("mousedown.signature",
        function(b) {
            c.redoIsUse && l.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        m.on("mousedown.signature",
        function(b) {
            c.clearAllFalg && m.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.downCss)
        });
        k.add($(document)).on("mouseup.signature",
        function(b) {
            c.undoIsUse && k.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        l.add($(document)).on("mouseup.signature",
        function(b) {
            c.redoIsUse && l.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        m.add($(document)).on("mouseup.signature",
        function(b) {
            c.clearAllFalg && m.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss)
        });
        var n = $("<div class='flipHTML5Signature-drawTypeMid-preview'></div>").html("Preview").appendTo(b),
        p = 60 / 140 * 16,
        q = document.createElement("canvas"),
        t = q.getContext("2d"),
        r = $(q).css({
            position: "absolute",
            left: 0,
            top: -Math.floor(p)
        });
        n.append(r);
        this.previewCanvas = q;
        this.previewContext = t;
        q.width = 234;
        q.height = 60 + Math.ceil(p) + 10;
        b = this.colorPicker(b);
        b.container.css({
            left: 220,
            top: 11
        });
        var s, u, v;
        h[0].value = parseFloat((7 * (parseInt(g.css("left")) + 4) + 1).toFixed(2));
        g.on("mousedown touchstart",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            s = b.clientX - g.position().left;
            f.add(d).add($(document)).on("mousemove.lineWidth touchmove.lineWidth",
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                u = b.clientX - s;
                u = -4 >= u ? -4 : 93 <= u ? 93 : u;
                g.css({
                    left: u
                });
                v = (u + 4) / 97 * 7 + 1;
                v = parseFloat(v.toFixed(2));
                h[0].value = v
            });
            d.add($(document)).on("mouseup.lineWidth touchend.lineWidth",
            function() {
                c.changeLineWidth(v);
                f.add(d).add($(document)).off("mousemove.lineWidth touchmove.lineWidth");
                d.add($(document)).off("mouseup.lineWidth touchend.lineWidth")
            });
            return ! 1
        });
        f.on("mousedown touchstart",
        function(b) {
            b = b.clientX - f.offset().left;
            b = 0 >= b ? 0 : 97 <= b ? 97 : b;
            g.css({
                left: b - 4
            });
            v = b / 97 * 7 + 1;
            v = parseFloat(v.toFixed(2));
            h[0].value = v;
            c.changeLineWidth(v)
        });
        h.on("change",
        function() {
            var b = h[0].value;
            isNaN(b) ? h[0].value = parseFloat(((g.position().left + 4) / 97 * 7 + 1).toFixed(2)) : (1 > b ? (h[0].value = 1, g.css({
                left: -4
            })) : 8 < b ? (h[0].value = 8, g.css({
                left: 93
            })) : (h[0].value = b, g.css({
                left: (b - 1) / 7 * 97 - 4
            })), c.changeLineWidth(h[0].value))
        });
        m.on("click touchend",
        function() {
            c.clearAllFalg && (A.clearRect(0, 0, y.width, y.height), t.clearRect(0, 0, q.width, q.height), c.drawSave.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss), c.hasDrawFlag = !1, c.redoIsUse = !0, l.css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover"), c.undoIsUse = !1, k.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss), w = c.drawOldPoints.length - 1, m.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss), c.clearAllFalg = !1, c.points = [])
        });
        var w = 0;
        k.on("mousedown.signature touchstart.signature",
        function(b) {
            if (c.undoIsUse) {
                c.redoIsUse = !0;
                l.css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover");
                w += 1;
                w = w >= c.drawOldPoints.length ? c.drawOldPoints.length - 1 : w;
                A.clearRect(0, 0, y.width, y.height);
                t.clearRect(0, 0, q.width, q.height);
                var d = c.drawOldPoints[c.drawOldPoints.length - 1 - w];
                c.points = d.concat();
                c.draw(y, A, c.drawOldPoints[c.drawOldPoints.length - 1 - w], c.drawColor, c.lineWidth);
                c.drawPreview(q, t, d, c.drawColor, c.lineWidth);
                c.drawSave.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss);
                c.hasDrawFlag = !0;
                m.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss);
                c.clearAllFalg = !0;
                w == c.drawOldPoints.length - 1 && (c.undoIsUse = !1, k.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss), c.drawSave.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss), c.hasDrawFlag = !1, m.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-normal flipHTML5Signature-hover").css(c.disableCss), c.clearAllFalg = !1);
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            }
        });
        l.on("mousedown.signature touchstart.signature",
        function(b) {
            if (c.redoIsUse) {
                c.undoIsUse = !0;
                k.css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover");
                w -= 1;
                w = 0 >= w ? 0 : w;
                A.clearRect(0, 0, y.width, y.height);
                t.clearRect(0, 0, q.width, q.height);
                var d = c.drawOldPoints[c.drawOldPoints.length - 1 - w];
                c.points = d.concat();
                c.draw(y, A, c.drawOldPoints[c.drawOldPoints.length - 1 - w], c.drawColor, c.lineWidth);
                c.drawPreview(q, t, d, c.drawColor, c.lineWidth);
                c.drawSave.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss);
                c.hasDrawFlag = !0;
                m.add(c.drawSaveAndUse).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss);
                c.clearAllFalg = !0;
                0 == w && (c.redoIsUse = !1, l.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss));
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            }
        });
        c.drawOldPoints.push([]);
        n = $("<div class='flipHTML5Signature-drawTypeBottom-out' style='position: absolute;left: 0px;top: 150px;width: 100%;height: 124px;'></div>").appendTo(this.$drawTypeUnder);
        p = $("<div class='flipHTML5Signature-drawTypeBottom' style='position: absolute;left: 9px;top: 0px;width: 540px;height: 140px;border: 1px solid #cccccc;background-color: #ffffff;'></div>").css({
            boxShadow: "rgb(166, 166, 166) 1px 1px 0px inset, rgb(246, 246, 246) 1px 1px 0px"
        }).appendTo(n);
        n.css({
            cursor: "url(" + c.address + "pen.png),auto"
        });
        var y = document.createElement("canvas"),
        x = window.canvas = $(y);
        p.append(x);
        y.width = 540;
        y.height = 158;
        $(y).css({
            position: "absolute",
            left: 0,
            top: -16
        });
        var A = y.getContext("2d");
        this.canvas = y;
        this.context = A;
        this.points = [];
        this.drawColor = b.message[0].style.backgroundColor;
        this.lineWidth = 1;
        var E, F;
        x.on(_event._down,
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            if (c.redoIsUse) {
                var d = c.drawOldPoints.length;
                c.drawOldPoints.length = d - w;
                c.points = c.drawOldPoints[d - w - 1].concat();
                w = 0
            }
            c.undoIsUse = !0;
            k.css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover");
            c.redoIsUse = !1;
            l.removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(c.disableCss);
            c.clearAllFalg = !0;
            m.removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(c.normalCss);
            c.hasDrawFlag = !0;
            c.drawSave.add(c.drawSaveAndUse).css(c.normalCss).addClass("flipHTML5Signature-normal").removeClass("flipHTML5Signature-hover");
            E = {
                x: b.clientX - x.offset().left + 0,
                y: b.clientY - x.offset().top + 16,
                t: 0,
                w: c.lineWidth
            };
            c.points.push(E);
            x.on(_event._move,
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                F = {
                    x: b.clientX - x.offset().left + 0,
                    y: Math.min(b.clientY - x.offset().top + 16, 156),
                    t: 1
                };
                c.points.push(F);
                c.draw(y, A, c.points, c.drawColor, c.lineWidth);
                c.drawPreview(q, t, c.points, c.drawColor, c.lineWidth)
            });
            x.add($(document)).on("mouseup.signature touchend.signature",
            function() {
                c.drawOldPoints.push(c.points.concat());
                x.off(_event._move);
                x.add($(document)).off("mouseup.signature touchend.signature")
            });
            return ! 1
        })
    },
    addSignatureImg: function(b, c, d) {
        var f = this;
        b.on("mousedown.hideToolBar touchstart.hideToolBar",
        function(b) {
            f.toolBar && f.toolBar.hide()
        });
        b.css({
            cursor: "pointer"
        });
        void 0 != f.onCreated ? f.onCreated[1].call(f.onCreated[0]) : f.hide();
        b.off("mousedown.signature touchstart.signature");
        b.on("mousedown.signature touchstart.signature",
        function(g) {
            b.off("mousedown.signature touchstart.signature");
            if (isTouch || 1 === g.which) {
                var h = new Date,
                k = h.getTime(),
                h = h.format("MM/dd/yyyy hh:mm:ss");
                f.showTimeFalg[k] = !1;
                var l = (g.pageX || g.originalEvent.touches[0].pageX) / BookInfo.scale() - b.offset().left,
                m = (g.pageY || g.originalEvent.touches[0].pageY) / BookInfo.scale() - b.offset().top,
                l = f.parseData({
                    left: l,
                    top: m,
                    width: c.width,
                    height: c.height
                },
                b[0].offsetWidth, b[0].offsetHeight),
                m = $.extend({},
                c, {
                    width: l.width,
                    height: l.height
                });
                f.oldData[k] = m;
                f.createSignatureImg(b, m, d, l.left, l.top, k, h);
                f.signatureCookies.push({
                    type: m.type,
                    data: 0 === c.type ? f.saveText: f.savePoints,
                    key: k,
                    page: d,
                    currentTime: h,
                    left: l.left,
                    top: l.top,
                    width: m.width,
                    height: m.height
                });
                f.addLocalStorage(f.signatureName, f.parseToString(f.signatureCookies));
                g.preventDefault();
                g.stopPropagation();
                return ! 1
            }
        });
        b.add($(document)).add(BookInfo.container()).on("mouseup.signature touchend.signature",
        function(c) {
            $.each(BookInfo.getCurrentPages(),
            function(b, c) {
                var d = f.signatureContexts[BookInfo.getBookType()][c];
                d && (d.css({
                    cursor: ""
                }), d.off("mousedown.signature touchstart.signature"))
            });
            b.off("mousedown.signature touchstart.signature");
            b.add($(document)).add(BookInfo.container()).off("mousedown.signature touchstart.signature")
        })
    },
    createSignatureImg: function(b, c, d, f, g, h, k) {
        var l = this;
        b.on("mousedown.hideToolBar touchstart.hideToolBar",
        function() {
            l.toolBar && l.toolBar.hide()
        });
        var m = $("<div class='flipHTML5Signature-eachSignatureImg' style='cursor: move;'></div>").append($("<img style='width: 100%;height: 100%;position: absolute;left: 0px;top: 0px;'/>").attr("src", c.url)).attr("data-key", h).attr("data-page", d).css({
            position: "absolute",
            width: c.width,
            height: c.height,
            left: f,
            top: g
        }).appendTo(b),
        n = $("<div class='flipHTML5Signature-eachDate' style='position: absolute;width: 180px;height: 45px;border: 1px dashed #2F2F2F;top: -24px;'></div>").css({
            left: c.width + 2
        }).hide().html(k);
        c = $("<img/>").attr("src", l.address + "signature_dateClose.png").css({
            position: "absolute",
            top: 0,
            right: 0,
            cursor: "pointer"
        });
        n.appendTo(m).append(c);
        c.off("mousedown touchstart");
        c.on("mousedown touchstart",
        function() {
            var b = l.currentObj.attr("data-key");
            n.hide();
            l.showTimeFalg[b] = !1
        });
        n.off("mousedown touchstart");
        n.on("mousedown touchstart",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        m.off("mouseover.signature touchstart.signature");
        m.on("mouseover.signature touchstart.signature",
        function() {
            m.css({
                border: "1px solid #ff0000"
            })
        });
        m.off("mouseout.signature touchend.signature");
        m.on("mouseout.signature touchend.signature",
        function() {
            m.css({
                border: 0
            })
        });
        m.off("mousedown.getObj touchstart.getObj");
        m.on("mousedown.getObj touchstart.getObj",
        function(b) {
            $(".flipHTML5Signature-eachSignatureImg").css({
                zIndex: 1
            });
            m.css({
                zIndex: 4
            });
            l.currentObj = m;
            l.toolBar.css({
                left: m.offset().left - l.container.offset().left,
                top: m.offset().top - l.container.offset().top - l.toolBar.outerHeight()
            }).show()
        });
        var p = !1;
        m.off("mousedown.signatureImg touchstart.signatureImg");
        m.on("mousedown.signatureImg touchstart.signatureImg",
        function(c) {
            var d = c.pageX || c.originalEvent.touches[0].pageX,
            f = c.pageY || c.originalEvent.touches[0].pageY,
            k = m[0].offsetLeft,
            n = m[0].offsetTop;
            b.on("mousemove.signatureImg touchmove.signatureImg",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                p = !0;
                var c = k - (d - (b.pageX || b.originalEvent.touches[0].pageX)) / BookInfo.scale();
                g = n - (f - (b.pageY || b.originalEvent.touches[0].pageY)) / BookInfo.scale();
                m.css({
                    left: c,
                    top: g
                });
                l.toolBar.css({
                    left: m.offset().left - l.container.offset().left,
                    top: m.offset().top - l.container.offset().top - l.toolBar.outerHeight()
                }).show();
                l.showTimeFalg[h] && l.reviseDateTag()
            });
            m.add(b).add($(document)).on("mouseup.signatureImg touchend.signatureImg",
            function() {
                b.off("mousemove.signatureImg touchmove.signatureImg");
                m.add(b).add($(document)).off("mouseup.signatureImg touchend.signatureImg");
                if (p) {
                    var c = m.attr("data-key"),
                    d = l.parseObject(l.currentObj[0]);
                    l.updateArrayOrderKey(l.signatureCookies, c, {
                        left: d.left,
                        top: d.top
                    });
                    l.addLocalStorage(l.signatureName, l.parseToString(l.signatureCookies))
                }
            });
            c.preventDefault();
            c.stopPropagation();
            return ! 1
        });
        b.css({
            cursor: ""
        })
    },
    draw: function(b, c, d, f, g) {
        var h = -1,
        k = d.length;
        c.clearRect(0, 0, b.width, b.height);
        c.save();
        c.beginPath();
        c.lineJoin = "round";
        c.strokeStyle = f;
        for (c.lineWidth = g; ++h < k;) b = d[h],
        0 === b.t ? (c.stroke(), c.beginPath(), c.lineWidth = b.w, c.moveTo(b.x, b.y)) : c.lineTo(b.x, b.y);
        c.stroke();
        c.restore()
    },
    drawPreview: function(b, c, d, f, g) {
        var h = -1,
        k = d.length,
        l = 140 / 60,
        m = 540 / 234;
        c.clearRect(0, 0, b.width, b.height);
        c.save();
        c.beginPath();
        c.lineJoin = "round";
        c.strokeStyle = f;
        for (c.lineWidth = g; ++h < k;) b = d[h],
        0 === b.t ? (c.stroke(), c.beginPath(), c.lineWidth = b.w / l, c.moveTo(b.x / m, b.y / l)) : c.lineTo(b.x / m, b.y / m);
        c.stroke();
        c.restore()
    },
    trimCanvas: function(b) {
        var c = b.getContext("2d"),
        d = document.createElement("canvas").getContext("2d"),
        f = c.getImageData(0, 0, b.width, b.height),
        g = f.data.length,
        h,
        k = null,
        l = null,
        m = null,
        n = null,
        p,
        q;
        for (h = 0; h < g; h += 4) 0 !== f.data[h + 3] && (p = h / 4 % b.width, q = ~~ (h / 4 / b.width), null === k && (k = q), null === l ? l = p: p < l && (l = p), null === m ? m = p: m < p && (m = p), null === n ? n = q: n < q && (n = q));
        b = n - k;
        m -= l;
        c = c.getImageData(l, k, m, b);
        d.canvas.width = m;
        d.canvas.height = b;
        d.putImageData(c, 0, 0);
        return {
            url: d.canvas.toDataURL("image/png"),
            width: m,
            height: b
        }
    },
    saveDraw: function(b) {
        if (this.currentDrawSave) {
            this.currentDrawSave.empty();
            var c = this.currentDrawSave.width(),
            d = this.currentDrawSave.height(),
            f = c / d,
            g = b.width,
            h = b.height,
            k = g / h;
            c > g && d > h ? (f = g, c = (c - f) / 2, d = (d - h) / 2) : c > g && d < h ? (f = d * k, h = d, c = (c - f) / 2, d = (d - h) / 2) : c < g && d > h ? (f = c, h = c / k, c = (c - f) / 2, d = (d - h) / 2) : f > k ? (h = d, f = d * k, c = (c - f) / 2, d = 0) : f < k ? (f = c, h = c / k, c = 0, d = (d - h) / 2) : (f = c, h = d, d = c = 0);
            this.currentDrawSave.append($("<img/>").css({
                position: "absolute",
                width: f,
                height: h,
                left: c,
                top: d
            }).attr("src", b.url))
        }
        this.drawOldData = b;
        this.currentDrawEdit.show();
        this.currentDrawDel.show();
        this.$writeTypeUnder.hide();
        this.$drawTypeUnder.hide();
        this.$signatureUnder.show()
    },
    saveAndUseDraw: function(b) {
        var c = this,
        d = BookInfo.getCurrentPages();
        $.each(d,
        function(d, g) {
            var h = c.signatureContexts[BookInfo.getBookType()][g];
            h && (b.type = 1, c.addSignatureImg(h, b, g))
        });
        c.saveDraw(b)
    },
    saveWrite: function(b) {
        this.currentWriteSave.html(b);
        this.currentWriteEdit.show();
        this.currentWriteDel.show();
        this.$writeTypeUnder.hide();
        this.$drawTypeUnder.hide();
        this.$signatureUnder.show()
    },
    saveAndUseWrite: function(b) {
        var c = this,
        d = c.drawTextByDiv(b, "38px", "Mistral", "#000000"),
        f = BookInfo.getCurrentPages();
        $.each(f,
        function(b, f) {
            var k = c.signatureContexts[BookInfo.getBookType()][f];
            k && (d.type = 0, k.css({
                cursor: ""
            }), c.addSignatureImg(k, d, f))
        });
        c.saveWrite(b)
    },
    drawTextByDiv: function(b, c, d, f) {
        var g = document.createElement("canvas"),
        h = window.context = g.getContext("2d");
        h.fillStyle = f;
        h.font = "" + c + " " + d + "";
        var k = h.measureText(b).width + 8;
        g.width = k;
        g.height = 54;
        h.fillStyle = f;
        h.font = "" + c + " " + d + "";
        h.textBaseline = "top";
        h.fillText(b, 3, 0);
        return {
            url: g.toDataURL("image/png"),
            width: k,
            height: 54
        }
    },
    parseObject: function(b) {
        if (document.getElementsByTagName("body")[0].contains(b)) {
            var c, d, f;
            f = b.parentNode;
            var g = b.style,
            h = $(b);
            d = 100 / f.offsetHeight;
            c = 100 / f.offsetWidth;
            f = b.offsetLeft * c + "%";
            b = b.offsetTop * d + "%";
            c = h.width() * c + "%";
            d = h.height() * d + "%";
            g.width = c;
            g.height = d;
            g.left = f;
            g.top = b;
            return {
                width: c,
                height: d,
                left: f,
                top: b
            }
        }
    },
    parseData: function(b, c, d) {
        d = 100 / d;
        c = 100 / c;
        return {
            width: b.width * c + "%",
            height: b.height * d + "%",
            left: b.left * c + "%",
            top: b.top * d + "%"
        }
    },
    close: function() {
        this.$signature.hide();
        this.$signatureUnder.show();
        this.$writeTypeUnder.hide();
        this.$drawTypeUnder.hide();
        this.showFlag = !1
    },
    show: function() {
        this.$signature.show();
        this.$signatureUnder.show();
        this.$writeTypeUnder.hide();
        this.$drawTypeUnder.hide();
        this.showFlag = !0
    },
    hide: function() {
        this.close()
    },
    showHide: function() {
        this.showFlag ? this.hide() : this.show()
    },
    changeColor: function(b) {
        this.drawColor = b;
        this.draw(this.canvas, this.context, this.points, b, this.lineWidth);
        this.drawPreview(this.previewCanvas, this.previewContext, this.points, this.drawColor, this.lineWidth);
        return b
    },
    changeLineWidth: function(b) {
        return this.lineWidth = b
    },
    colorPicker: function(b) {
        var c, d, f, g = this,
        h = "#FF0000 #FF5555 #FF55AA #FF55FF #FFAA55 #FFAAAA #FFAAFF #FFFF55 #FFFFAA #FFFFFF #CC0000 #CC5555 #CC55AA #CC55FF #CCAA55 #CCAAAA #CCAAFF #CCFF55 #CCFFAA #CCFFFF #AA0000 #AA5555 #AA55AA #AA55FF #AAAA55 #AAAAAA #AAAAFF #AAFF55 #AAFFAA #AAFFFF #880000 #885555 #8855AA #8855FF #88AA55 #88AAAA #88AAFF #88FF55 #88FFAA #88FFFF #550000 #555555 #5555AA #5555FF #55AA55 #55AAAA #55AAFF #55FF55 #55FFAA #55FFFF #220000 #225555 #2255AA #2255FF #22AA55 #22AAAA #22AAFF #22FF55 #22FFAA #22FFFF #000000 #005555 #0055AA #0055FF #00AA55 #00AAAA #00AAFF #00FF55 #00FFAA #00FFFF".split(" "),
        k = document.createElement("table");
        c = document.createElement("a");
        var l = $(c),
        m = document.createElement("input"),
        n = function() {},
        p = function() {
            k.style.display = "none";
            m.value = m.style.backgroundColor = this.title.toUpperCase();
            g.changeColor(this.title.toUpperCase())
        };
        l.appendTo(b);
        c.className = "flipHtml5ColorSelectorWrap";
        k.setAttribute("border", "1");
        c.style.position = "absolute";
        c.href = "javascript:void(0);";
        m.type = "text";
        m.className = "flipHtml5ColorSelectorMessage";
        m.style.width = "20px";
        m.style.height = "20px";
        m.value = m.style.backgroundColor = "#000000";
        m.style.cursor = "pointer";
        m.style.padding = "0px";
        c.appendChild(m);
        c.appendChild(k);
        k.style.display = "none";
        k.style.position = "relative";
        k.style.zIndex = 9999;
        k.style.backgroundColor = "#ffffff";
        for (d = 0; 7 > d; d++) {
            f = document.createElement("tr");
            f.style.position = "relative";
            for (c = 0; 10 > c; c++) b = document.createElement("td"),
            b.className = "flipHtml5ColorSelectorBlock",
            b.style.position = "relative",
            b.style.width = "14px",
            b.style.height = "14px",
            b.title = h[10 * d + c],
            b.style.backgroundColor = h[10 * d + c],
            $(b).on("mouseenter", n),
            $(b).on("click touchstart", p),
            f.appendChild(b);
            k.appendChild(f)
        }
        $(m).on("click touchstart",
        function(b) {
            k.style.display = "table-cell";
            b.stopPropagation();
            b.stopPropagation();
            return ! 1
        });
        $(document).on("click touchstart",
        function() {
            k.style.display = "none"
        });
        return {
            container: l,
            message: $(m)
        }
    },
    setContainers: function(b, c, d) {
        void 0 == this.signatureContexts[b] && (this.signatureContexts[b] = {});
        this.signatureContexts[b][c] = d;
        b == BookInfo.getBookType() && (this.toolBar.hide(), this.addSignatureByPageIndex(c, d))
    },
    addSignatureByPageIndex: function(b, c) {
        c.find(".flipHTML5Signature-eachSignatureImg").remove();
        for (var d = 0; d < this.signatureCookies.length; d++) {
            var f = this.signatureCookies[d];
            if (f.page === b) {
                var g = f.left,
                h = f.top,
                k = f.key,
                l = f.currentTime;
                if (0 == f.type) var m = this.drawTextByDiv(f.data, "38px", "Mistral", "#000000"),
                n = this.parseData({
                    left: g,
                    top: h,
                    width: m.width,
                    height: m.height
                },
                c[0].offsetWidth, c[0].offsetHeight);
                else {
                    m = document.createElement("canvas");
                    m.width = 540;
                    m.height = 158;
                    $(m).css({
                        position: "absolute",
                        left: 0,
                        top: -16
                    });
                    var n = m.getContext("2d"),
                    p = f.data.concat(),
                    q = p.pop();
                    this.draw(m, n, p, q.color, 1);
                    m = this.trimCanvas(m);
                    n = this.parseData({
                        left: g,
                        top: h,
                        width: m.width,
                        height: m.height
                    },
                    c[0].offsetWidth, c[0].offsetHeight)
                }
                this.oldData[k] = $.extend({},
                m, {
                    width: n.width,
                    height: n.height
                });
                m = $.extend({},
                m, {
                    width: f.width,
                    height: f.height
                });
                this.createSignatureImg(c, m, f.page, g, h, k, l)
            }
        }
    },
    getLocalStorage: function(b) {
        try {
            if (window.localStorage) return window.localStorage.getItem(b);
            for (var c = document.cookie.split("; "), d = 0; d < c.length; d++) {
                var f = c[d].split("=");
                if (f[0] == b) return unescape(f[1])
            }
            return ""
        } catch(g) {}
    },
    addLocalStorage: function(b, c) {
        try {
            if (window.localStorage) window.localStorage.setItem(b, c);
            else {
                var d = b + "=" + escape(c),
                f = new Date;
                f.setTime(f.getTime() + 864E8);
                d += "; expires=" + f.toGMTString();
                document.cookie = d
            }
        } catch(g) {}
    },
    parseToString: function(b) {
        if (0 == b.length) return "";
        for (var c = "[",
        d = 0; d < b.length; d++) c = 0 == b[d].type ? c + ("{type:" + b[d].type + ",key:" + b[d].key + ",data:'" + b[d].data + "',page:" + b[d].page + ",currentTime:'" + b[d].currentTime + "',left:'" + b[d].left + "',top:'" + b[d].top + "',width:'" + b[d].width + "',height:'" + b[d].height + "'},") : c + ("{type:" + b[d].type + ",key:" + b[d].key + ",data:" + this.parsePointsToString(b[d].data) + ",page:" + b[d].page + ",currentTime:'" + b[d].currentTime + "',left:'" + b[d].left + "',top:'" + b[d].top + "',width:'" + b[d].width + "',height:'" + b[d].height + "'},");
        c = c.substring(0, c.length - 1);
        return c + "]"
    },
    parsePointsToString: function(b) {
        if (0 != b.length) {
            for (var c = "[",
            d = 0; d < b.length - 1; d++) c += "{x:" + b[d].x + ",y:" + b[d].y + ",t:" + b[d].t + ",w:" + b[d].w + "},";
            c += "{color:'" + b[b.length - 1].color + "'}";
            return c + "]"
        }
    },
    delArrayOrderKey: function(b, c) {
        if (b) for (var d = 0; d < b.length; d++) b[d].key && b[d].key == c && b.remove(d)
    },
    updateArrayOrderKey: function(b, c, d) {
        if (b) for (var f = 0; f < b.length; f++) b[f].key && b[f].key == c && $.extend(b[f], d)
    },
    createCursorImg: function(b, c, d) {
        var f = $("<img/>").attr("src", b.url).css({
            position: "absolute",
            width: b.width,
            height: b.height,
            left: c + 10,
            top: d + 10
        }).appendTo(this.container);
        f.on("mousemove touchmove",
        function(b) {
            f.css({
                left: b.clientX + 10,
                top: b.clientY + 10
            })
        });
        return f
    },
    reviseDateTag: function() {
        if (this.currentObj) {
            var b = this.currentObj.find(".flipHTML5Signature-eachDate"),
            c = this.currentObj.parent(),
            d = parseInt(this.currentObj.css("left")),
            f = parseInt(this.currentObj.css("top"));
            this.currentObj.position();
            var g = this.currentObj.outerWidth(),
            h = this.currentObj.outerHeight(),
            k = c.width();
            c.height();
            var c = b.outerWidth(),
            l = b.outerHeight(),
            m = this.toolBar.height();
            d + g + 2 + c <= k ? b.css({
                left: g + 2,
                top: -24
            }) : l + m <= f ? b.css({
                left: g - c,
                top: -(l + m)
            }) : b.css({
                left: g - c,
                top: h + 18
            })
        }
    },
    bindOnCreated: function(b, c) {
        this.onCreated = [b, c]
    }
}); (function(b, c, d) {
    window.Remark = c({
        statics: {},
        create: function() {
            this.expires = 30;
            this.currentEditor = b("<div>");
            this.backgroundColor = "rgba(255, 255, 85, 0.5)";
            this.highlightBackcolor = "rgba(2, 255, 245, 0.5)";
            this.fontSize = 5;
            this.fontName = "Times";
            this.$bookContainer = d.container();
            this.fontColor = "black";
            this.title = "#00000";
            this.opacity = "1.0";
            this.noteImgContainers = {};
            this.$document = b(document);
            this.newSizeWrap();
            var c = this.createToolbar(),
            g = this.createHighlightToolbar();
            c.appendChild(this.createColorSelector());
            document.getElementsByTagName("body")[0].appendChild(c).appendChild(g);
            document.getElementsByTagName("body")[0].appendChild(g);
            b(window).on("beforeunload",
            function() {
                this.save()
            }.bind(this));
            this.oneBindEvent()
        },
        bindOnCreated: function(b, c) {
            this.onCreated = [b, c]
        },
        bindCreateEvents: function(c, g, h) {
            var k, l, m, n, p, q, t, r = this,
            s = Math.floor,
            u = c.offset().left,
            v = c.offset().top,
            w = function(b) {
                b.preventDefault();
                m = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0;
                n = b.pageY ? b.pageY: b.originalEvent.touches ? b.originalEvent.touches[0].pageY: 0;
                m && (0 > m - k ? (q.left = s((m - u) / d.scale()) + "px", q.width = s((k - m) / d.scale()) + "px") : (q.left = s((k - u) / d.scale()) + "px", q.width = s((m - k) / d.scale()) + "px"));
                n && (0 > b.pageY - l ? (q.top = s((n - v) / d.scale()) + "px", q.height = s((l - n) / d.scale()) + "px") : (q.top = s((l - v) / d.scale()) + "px", q.height = s((n - l) / d.scale()) + "px"));
                h && h.draw(k, l, m, n)
            };
            c.css("cursor", "crosshair");
            c.off("mousedown.fliphtml5Remark touchstart.fliphtml5Remark").one("mousedown.fliphtml5Remark touchstart.fliphtml5Remark",
            function(y) {
                r.unbindCreateEvents();
                var x = y.button;
                if (!document.implementation.hasFeature("MouseEvents", "2.0")) switch (event.button) {
                case 0:
                case 1:
                case 3:
                case 5:
                case 7:
                    x = 0;
                    break;
                case 2:
                case 6:
                    x = 2;
                    break;
                case 4:
                    x = 1
                }
                if (!x) {
                    y.stopPropagation();
                    p = document.createElement("div");
                    t = b(p).css({
                        webkitUserSelect: "text",
                        mozUserSelect: "text",
                        msUserSelect: "text",
                        oUserSelect: "text",
                        userSelect: "text"
                    });
                    q = p.style;
                    h ? (t.append(h), p.className = "flipHtml5Shape flipHtml5Store") : (q.backgroundColor = g ? "rgba(0, 71, 255, 0.33)": r.highlightBackcolor, p.className = (g ? "flipHtml5Remark flipHtml5Store": "flipHtml5Highlight flipHtml5Store") + " flipHtml5RemarkCurrentEditor", p.setAttribute("contenteditable", g));
                    c.find(".flipHtml5RemarkCurrentEditor").removeClass("flipHtml5RemarkCurrentEditor");
                    c.append(p);
                    if (x = y.originalEvent.changedTouches) {
                        var A = x[0].identifier;
                        k = m = x[0].pageX;
                        l = n = x[0].pageY
                    } else k = m = y.pageX,
                    l = n = y.pageY;
                    r.reBindEvent(t, g);
                    c.on("mousemove.fliphtml5Remark touchmove.fliphtml5Remark", w);
                    c.off("mouseup.fliphtml5Remark touchend.fliphtml5Remark").one("mouseup.fliphtml5Remark touchend.fliphtml5Remark",
                    function(b) {
                        var h = b.originalEvent.changedTouches;
                        if (h) {
                            if (A !== h[0].identifier) return;
                            m = h[0].pageX;
                            n = h[0].pageY
                        } else m = b.pageX,
                        n = b.pageY;
                        c.off("mousemove.fliphtml5Remark touchmove.fliphtml5Remark");
                        if (10 > Math.abs(m - k) || 10 > Math.abs(n - l)) q.left = s((m - u) / d.scale()) + "px",
                        q.top = s((n - v) / d.scale()) + "px",
                        q.width = "280px",
                        q.height = "28px";
                        r.parsePresentValue(p);
                        r.parsePresentValue(r.sizeWrap);
                        t.css({
                            outline: "none",
                            backgroundColor: g ? r.backgroundColor: r.highlightBackcolor,
                            color: r.fontColor
                        });
                        t.trigger(_event._down);
                        void 0 != r.onCreated && r.onCreated[1].call(r.onCreated[0]);
                        r.save()
                    })
                }
            })
        },
        oneBindEvent: function() {
            var b = this;
            this.$document.on("keydown.flipHtml5RemarkDelete",
            function(c) {
                var d = c.keyCode;
                c.altKey || c.ctrlKey || c.shiftKey || (b.editing && d === KEY_CODE_DELETE && b.currentEditor && "flipHtml5Remark flipHtml5Store" !== b.currentEditor[0].className && (b.currentEditor.remove(), b.removeSizeWrap(), b.save()), b.currentEditor && d === KEY_CODE_LEFT && d === KEY_CODE_RIGHT && d === KEY_CODE_UP && d === KEY_CODE_DOWN && c.stopPropagation())
            })
        },
        parsePresentValue: function(c) {
            if (document.getElementsByTagName("body")[0].contains(c)) {
                var d, h;
                d = c.parentNode;
                var k = c.style,
                l = b(c);
                h = 100 / d.offsetHeight;
                d = 100 / d.offsetWidth;
                k.width = l.width() * d + "%";
                k.height = l.height() * h + "%";
                k.left = c.offsetLeft * d + "%";
                k.top = c.offsetTop * h + "%"
            }
        },
        reBindEvent: function(c, d) {
            var h = this,
            k;
            c.on(_event._down,
            function(k) {
                k.stopPropagation();
                b(this).css({
                    outline: "none"
                });
                h.removeSizeWrap();
                h.addSizeWrap(this, d);
                c.on("mousedown.flipHtml5Annotation touchstart.flipHtml5Annotation",
                function(b) {
                    b.stopPropagation()
                })
            }).on("mousedown mouseup touchend",
            function(b) {
                b.stopPropagation()
            });
            c.on("sizeChange",
            function(b, c, f, p, q) {
                k = this.style;
                c && (k.width = c - 16 + "px");
                f && (k.height = f - 16 + "px");
                p && (k.left = p + 8 + "px");
                q && (k.top = q + 8 + "px");
                h.showToolbar(this, d)
            });
            c.on("change cut drop paste keydown",
            function(b) {
                if (! (b.altKey || b.ctrlKey || b.shiftKey)) {
                    var c = this,
                    d = c.offsetHeight,
                    f = c.style,
                    g = f.height;
                    setTimeout(function() {
                        f.height = "auto";
                        f.height = c.scrollHeight > d ? 100 * c.scrollHeight / c.parentNode.offsetHeight + "%": g
                    },
                    0)
                }
            })
        },
        unbindCreateEvents: function() {
            this.contextArray && (this.contextArray.css("cursor", "auto"), this.contextArray.off("mousedown.fliphtml5Remark touchstart.fliphtml5Remark"))
        },
        newSizeWrap: function() {
            var c, g, h, k, l, m, n, p, q = this,
            t = 1,
            r = q.sizeWrap = document.createElement("div"),
            s = [],
            u = Math.floor,
            v = q.sizeWrapStyle = r.style;
            for (r.className = "flipHtml5SizeWrap"; 9 > t;) c = document.createElement("div"),
            c.className = "flipHtml5SizePoint flipHtml5SizePoint" + t,
            r.appendChild(c),
            s.push(c),
            t++;
            q.northResize(s[0]).westResize(s[0]);
            q.northResize(s[1]);
            q.eastResize(s[2]).northResize(s[2]);
            q.eastResize(s[3]);
            q.eastResize(s[4]).southResize(s[4]);
            q.southResize(s[5]);
            q.southResize(s[6]).westResize(s[6]);
            q.westResize(s[7]);
            b(r).on("mousedown.flipHtml5SizeWrap touchstart.flipHtml5SizeWrap",
            function(c) {
                c.preventDefault();
                c.stopPropagation();
                p = q.currentEditor;
                var f = r.offsetLeft,
                s = r.offsetTop,
                t = c.pageX || c.originalEvent.touches[0].pageX,
                E = c.pageY || c.originalEvent.touches[0].pageY;
                b.each([q.$context, b(q.toolbarContainer), b(q.highlightToolbarContainer)],
                function(c, w) {
                    w.on("mousemove.flipHtml5SizeWrap touchmove.flipHtml5SizeWrap",
                    function(b) {
                        b.preventDefault();
                        b.stopPropagation();
                        g = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0;
                        h = b.pageY ? b.pageY: b.originalEvent.touches ? b.originalEvent.touches[0].pageY: 0;
                        g && (n = u(f - (t - g) / d.scale()), l !== n && (v.left = n + "px", l = n, p.trigger("sizeChange", [0, 0, n, 0])));
                        h && (m = u(s - (E - h) / d.scale()), k !== m && (v.top = m + "px", k = m, p.trigger("sizeChange", [0, 0, 0, m])))
                    });
                    w.one("mouseup.flipHtml5SizeWrap touchend.flipHtml5SizeWrap",
                    function() {
                        b.each([q.$context, b(q.toolbarContainer), b(q.highlightToolbarContainer)],
                        function() {
                            this.off("mouseup.flipHtml5SizeWrap touchend.flipHtml5SizeWrap");
                            this.off("mousemove.flipHtml5SizeWrap touchmove.flipHtml5SizeWrap")
                        });
                        q.parsePresentValue(p[0]);
                        q.parsePresentValue(r);
                        q.save()
                    })
                })
            }).on(_event._down,
            function(b) {
                b.preventDefault();
                b.stopPropagation()
            });
            return r
        },
        addSizeWrap: function(c, d) {
            var h = this.sizeWrap,
            k = this.sizeWrap.style;
            d ? (c.style.zIndex = 999, k.zIndex = 998) : (c.style.zIndex = 998, k.zIndex = 999);
            k.width = c.offsetWidth + 16 + "px";
            k.height = c.offsetHeight + 16 + "px";
            k.left = c.offsetLeft - 8 + "px";
            k.top = c.offsetTop - 8 + "px";
            k.display = "block";
            c = b(c);
            this.$context = c.parent();
            c.before(h);
            this.parsePresentValue(h);
            this.currentEditor = c;
            this.showToolbar(c, d);
            this.editing = !0
        },
        removeSizeWrap: function() {
            this.currentEditor[0].style.zIndex = "2";
            this.sizeWrapStyle.zIndex = "1";
            this.sizeWrapStyle.display = "none";
            this.hideToolbar();
            this.editing = !1
        },
        hideToolbar: function() {
            this.toolbarContainer.style.display = "none";
            this.highlightToolbarContainer.style.display = "none"
        },
        showToolbar: function(c, d) {
            var h = d ? this.toolbarContainer: this.highlightToolbarContainer,
            k = h.style,
            l = b(c),
            m = l.css("backgroundColor").replace(/\s+/g, "");
            0 <= m.indexOf("rgba") && (m = m.replace(/a/, "").replace(/\,[0-9]+(\.[0-9]*)?\)/, ")"));
            b(h).find(".flipHtml5RemarkImage-backcolor").css("backgroundColor", m);
            this.currentEditor = l;
            k.left = l.offset().left - 8 + "px";
            k.top = l.offset().top - (d ? 80 : 30) + "px";
            k.display = "block"
        },
        createToolbar: function() {
            for (var c = this.toolbarContainer = document.createElement("div"), d = 0, h = "bold italic strikeThrough underline forecolor backcolor blockquote insertUnorderedList insertOrderedList justifyLeft justifyCenter justifyRight createLink removeFormat outdent indent undo redo delete paragraph fontsize fontname".split(" "); h[d];) c.appendChild(this.createButton(h[d])),
            d++;
            c.className = "fliphtml5RemarkToolbarContainer";
            b(c).on(_event._down,
            function(b) {
                b.preventDefault();
                b.stopPropagation()
            });
            return c
        },
        createHighlightToolbar: function() {
            for (var c = this.highlightToolbarContainer = document.createElement("div"), d = 0, h = ["backcolor", "delete"]; h[d];) c.appendChild(this.createButton(h[d], !0)),
            d++;
            c.className = "fliphtml5RemarkHighlightToolbarContainer";
            b(c).on(_event._down,
            function(b) {
                b.preventDefault();
                b.stopPropagation()
            });
            return c
        },
        createButton: function(c, d) {
            var h = this,
            k, l;
            switch (c) {
            case "hr":
                return l = document.createElement("hr"),
                l.className = "flipHtml5RemarkHr",
                l;
            case "paragraph":
                return k = "Paragraph;Address;Preformatted;Title 1;Title 2;Title 3;Title 4;Title 5;Title 6".split(";"),
                l = "p address pre h1 h2 h3 h4 h5 h6".split(" "),
                l = h.createSelect(k, l, c);
            case "fontname":
                return k = "Arial Century Courier Gentium Georgiae Impact King Lalit Modena Papyrus Tahoma TeX Times Verdana Verona cursive fantasy monospace serif".split(" "),
                l = "Arial Century Courier Gentium Georgiae Impact King Lalit Modena Papyrus Tahoma TeX Times Verdana Verona cursive fantasy monospace serif".split(" "),
                l = h.createSelect(k, l, c, "fontFamily");
            case "fontsize":
                return k = [1, 2, 3, 4, 5, 6, 7],
                l = [1, 2, 3, 4, 5, 6, 7],
                l = h.createSelect(k, l, c, "fontSize");
            case "forecolor":
                return h.createColorButton(c);
            case "backcolor":
                return h.createColorButton(c, d);
            default:
                return k = document.createElement("a"),
                k.href = "javascript:void(0);",
                l = document.createElement("div"),
                l.className = "flipHtml5RemarkButtonImage flipHtml5RemarkImage-" + c,
                l.title = c,
                k.className = "flipHtml5RemarkButton",
                b(k).on(_event._down,
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    h.exec(c)
                }),
                k.appendChild(l),
                k
            }
        },
        createColorButton: function(c, d) {
            var h, k, l, m, n = this,
            p;
            h = document.createElement("a");
            h.href = "javascript:void(0);";
            k = document.createElement("div");
            k.className = "flipHtml5RemarkButtonImage flipHtml5RemarkImage-" + c;
            k.title = c;
            h.className = "flipHtml5RemarkButton";
            l = document.createElement("div");
            l.className = "flipHtml5RemarkColorBar";
            "backcolor" === c && (l.style.display = "none");
            b(h).on(_event._down,
            function(q) {
                q.preventDefault();
                q.stopPropagation();
                p = n.opacityHandel;
                m = n.colorSelector;
                b(h).after(m);
                m.style.left = this.offsetLeft + "px";
                m.style.top = this.offsetTop + 22 + "px";
                m.style.display = "block";
                "forecolor" === c && (p.hide(), n.opacity = 1);
                "backcolor" === c && (n.opacity = p.val(), p.show());
                p.setOpacity(parseFloat(parseFloat(n.currentEditor.css("backgroundColor").replace(/\s*\)*/g, "").split(",")[3]).toFixed(2)));
                n.$context.one(_event._down,
                function(b) {
                    b.preventDefault();
                    m.style.display = "none"
                });
                n.currentEditor.one(_event._down,
                function(b) {
                    b.preventDefault();
                    m.style.display = "none"
                });
                n.$bookContainer.one(_event._down,
                function(b) {
                    b.preventDefault();
                    m.style.display = "none"
                });
                n.$colorSelector.off("colorSelected").one("colorSelected",
                function(b, h) {
                    b.preventDefault();
                    "backcolor" === c ? k.style.backgroundColor = h: l.style.backgroundColor = h;
                    m.style.display = "none";
                    n.exec(c, h, d)
                })
            });
            h.appendChild(l);
            h.appendChild(k);
            return h
        },
        createSelect: function(b, c, d, k, l) {
            var m = document.createElement("select"),
            n = 0,
            p = this,
            q;
            m.className = "flipHtml5RemarkSelect flipHtml5Remark-" + d;
            for (m.style[k] = c[1]; b[n];) q = document.createElement("option"),
            q.className = "flipHtml5RemarkOption-" + d + " flipHtml5RemarkOption-" + c[n],
            q.innerHTML = b[n],
            q.value = c[n],
            q.style[k] = c[n],
            0 === n && (q.setAttribute("selected", !0), l && (q.style.display = "none")),
            m.appendChild(q),
            n++;
            m.onchange = k ?
            function() {
                p.exec(d, this[this.selectedIndex].value);
                this.style[k] = this[this.selectedIndex].value;
                l && (this.selectedIndex = 0)
            }: function() {
                p.exec(this[this.selectedIndex].value);
                l && (this.selectedIndex = 0)
            };
            return m
        },
        createColorSelector: function() {
            var c, d, h, k, l = this,
            m = "#FF0000 #FF5555 #FF55AA #FF55FF #FFAA55 #FFAAAA #FFAAFF #FFFF55 #FFFFAA #FFFFFF #CC0000 #CC5555 #CC55AA #CC55FF #CCAA55 #CCAAAA #CCAAFF #CCFF55 #CCFFAA #CCFFFF #AA0000 #AA5555 #AA55AA #AA55FF #AAAA55 #AAAAAA #AAAAFF #AAFF55 #AAFFAA #AAFFFF #880000 #885555 #8855AA #8855FF #88AA55 #88AAAA #88AAFF #88FF55 #88FFAA #88FFFF #550000 #555555 #5555AA #5555FF #55AA55 #55AAAA #55AAFF #55FF55 #55FFAA #55FFFF #220000 #225555 #2255AA #2255FF #22AA55 #22AAAA #22AAFF #22FF55 #22FFAA #22FFFF #000000 #005555 #0055AA #0055FF #00AA55 #00AAAA #00AAFF #00FF55 #00FFAA #00FFFF".split(" "),
            n = document.createElement("table"),
            p = this.colorSelector = document.createElement("a"),
            q = this.$colorSelector = b(p),
            t = document.createElement("input"),
            r = l.createOpacityPlugin(),
            s = function() {
                t.value = t.style.backgroundColor = this.title.toUpperCase()
            },
            u = function() {
                q.trigger("colorSelected", [l.parseColorToRGBA(this.title, r.val())])
            };
            p.className = "flipHtml5RemarkColorSelectorWrap";
            n.setAttribute("border", "1");
            p.style.display = "none";
            p.href = "javascript:void(0);";
            t.className = "flipHtml5RemarkColorSelectorMessage";
            t.value = "#000000";
            t.setAttribute("disabled", "true");
            p.appendChild(t);
            p.appendChild(r.container);
            p.appendChild(n);
            q.on(_event._down,
            function(b) {
                b.preventDefault();
                b.stopPropagation()
            });
            for (h = 0; 7 > h; h++) {
                k = document.createElement("tr");
                for (d = 0; 10 > d; d++) c = document.createElement("td"),
                c.className = "flipHtml5RemarkColorSelectorBlock",
                c.title = m[10 * h + d],
                c.style.backgroundColor = m[10 * h + d],
                b(c).on(_event._over, s),
                b(c).on(_event._down, u),
                k.appendChild(c);
                n.appendChild(k)
            }
            return p
        },
        createOpacityPlugin: function() {
            var c, d, h, k, l, m, n = 0.5,
            p = this,
            q = Math.floor,
            t = document.createElement("div"),
            r = document.createElement("div"),
            s = document.createElement("span"),
            u = r.style,
            v,
            w = p.$document,
            y = p.changeOpacity,
            x = b(r),
            A = b(t);
            s.className = "flipHtml5RemarkOpacitySpan";
            t.className = "flipHtml5RemarkOpacity";
            t.style.height = "3px";
            t.style.top = "4px";
            r.className = "flipHtml5RemarkOpacityCursor";
            r.style.top = "-5px";
            t.appendChild(s);
            t.appendChild(r);
            A.on(_event._down,
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                v = p.currentEditor;
                if (d = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0) h = d - A.offset().left,
                0 > h && (h = 0),
                145 < h && (h = 145),
                u.left = h + "px",
                v.css("backgroundColor", y(v, h / 145)),
                s.innerHTML = "Opacity: " + (h / 145).toFixed(2),
                n = h / 145
            });
            x.on("mousedown touchstart",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                v = p.currentEditor;
                h = k = parseInt(u.left, 10);
                c = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0;
                l = h - c;
                w.on("mousemove.flipHtml5RemarkOpacity touchmove.flipHtml5RemarkOpacity",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    if (d = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0) m = q(l + d),
                    0 > m && (m = 0),
                    145 < m && (m = 145),
                    k !== m && (u.left = m + "px", v.css("backgroundColor", y(v, m / 145)), s.innerHTML = "Opacity: " + (m / 145).toFixed(2), n = m / 145)
                });
                w.one("mouseup touchend",
                function() {
                    w.off("mousemove.flipHtml5RemarkOpacity touchmove.flipHtml5RemarkOpacity")
                })
            });
            return this.opacityHandel = {
                val: function(b) {
                    b && (b = parseInt(b, 10) || 1, 1 < b && (b = 1), 0 > b && (b = 0), this.setOpacity(b), n = b);
                    return n
                },
                container: t,
                show: function() {
                    t.style.display = ""
                },
                hide: function() {
                    t.style.display = "none"
                },
                setOpacity: function(b) {
                    if (void 0 === b || 1 < b || isNaN(b)) b = 1;
                    0 > b && (b = 0);
                    u.left = 145 * b + "px";
                    s.innerHTML = "Opacity: " + b;
                    n = b
                }
            }
        },
        changeOpacity: function(b, c) {
            var d = b.css("backgroundColor").replace(/\s*/g, "");
            0 <= d.indexOf("rgba") && (0 <= d.indexOf(",0)") || 0 <= d.indexOf(",1)")) ? b.css("backgroundColor", d.replace(/b\(/, "ba(").replace(/,\d*\)$/, "," + c + ")")) : b.css("backgroundColor", d.replace(/b\(/, "ba(").replace(/d*\)$/, "," + c + ")").replace(/\d*\.\d*,/g, ""))
        },
        parseColorToRGBA: function(b, c) {
            var d, k, l;
            c = parseFloat(c);
            1 <= c && (c = 1);
            0 >= c && (c = 0);
            d = parseInt(b.substring(1, 3), 16);
            k = parseInt(b.substring(3, 5), 16);
            l = parseInt(b.substring(5, 7), 16);
            return "rgba(" + d + "," + k + "," + l + "," + c + ")"
        },
        exec: function(b, c, d) {
            switch (b) {
            case "h1":
            case "h2":
            case "h3":
            case "h4":
            case "h5":
            case "h6":
            case "address":
            case "pre":
            case "p":
            case "blockquote":
                document.execCommand("formatBlock", !1, b);
                break;
            case "createLink":
                (b = prompt("Enter a URL here", "http://")) && "" !== b && "http://" !== b && (0 > b.indexOf("http") && (b = "http://" + b), document.execCommand("createLink", !0, b));
                break;
            case "fontsize":
                document.execCommand(b, !1, c);
                break;
            case "fontname":
                document.execCommand(b, !1, c);
                this.fontName = c;
                break;
            case "forecolor":
                document.execCommand(b, !1, c);
                this.fontColor = c;
                break;
            case "backcolor":
                this.currentEditor[0].style.backgroundColor = c;
                d ? this.highlightBackcolor = c: this.backgroundColor = c;
                break;
            case "delete":
                this.removeSizeWrap();
                this.currentEditor.remove();
                this.save();
                break;
            default:
                document.execCommand(b, !1, null)
            }
            this.currentEditor.trigger(_event._down)
        },
        northResize: function(c) {
            var g, h, k, l, m, n = this,
            p = Math.floor,
            q, t;
            b(c).on("mousedown.fliphtml5RemarkResize touchstart.fliphtml5RemarkResize",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                h = n.currentEditor;
                q = n.sizeWrap;
                t = n.sizeWrapStyle;
                m = n.$context;
                var c = q.offsetHeight || 20,
                f = b.pageY || b.originalEvent.touches[0].pageY;
                m.one("mouseup.fliphtml5RemarkResize touchend.fliphtml5RemarkResize",
                function() {
                    m.off("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize");
                    n.parsePresentValue(h[0]);
                    n.parsePresentValue(q);
                    n.save()
                });
                m.on("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    b.pageY ? g = b.pageY: b.originalEvent.touches && (g = b.originalEvent.touches[0].pageY);
                    g && (l = p(c + (f - g) / d.scale()), k !== l && 20 < l && (t.top = g - m.offset().top + "px", t.height = l + "px", k = l, h.trigger("sizeChange", [0, l, 0, g - m.offset().top])))
                })
            });
            return this
        },
        westResize: function(c) {
            var g, h, k, l, m, n = this,
            p = Math.floor,
            q, t;
            b(c).on("mousedown.fliphtml5RemarkResize touchstart.fliphtml5RemarkResize",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                m = n.$context;
                q = n.sizeWrap;
                t = n.sizeWrapStyle;
                l = n.currentEditor;
                var c = q.offsetWidth || 40,
                f = b.pageX || b.originalEvent.touches[0].pageX;
                m.one("mouseup.fliphtml5RemarkResize touchend.fliphtml5RemarkResize",
                function() {
                    m.off("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize");
                    n.parsePresentValue(l[0]);
                    n.parsePresentValue(q);
                    n.save()
                });
                m.on("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation(); ! (g = b.pageX) && b.originalEvent.touches && (g = b.originalEvent.touches[0].pageX);
                    g && (k = p(c + (f - g) / d.scale()), h !== k && 40 < k && (t.left = g - m.offset().left + "px", t.width = k + "px", h = k, l.trigger("sizeChange", [k, 0, g - m.offset().left])))
                })
            });
            return this
        },
        eastResize: function(c) {
            var g, h, k, l, m, n = this,
            p = Math.floor,
            q, t;
            b(c).on("mousedown.fliphtml5RemarkResize touchstart.fliphtml5RemarkResize",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                k = n.currentEditor;
                m = n.$context;
                q = n.sizeWrap;
                t = n.sizeWrapStyle;
                var c = q.offsetWidth || 40,
                f = b.pageX || b.originalEvent.touches[0].pageX;
                m.one("mouseup.fliphtml5RemarkResize touchend.fliphtml5RemarkResize",
                function() {
                    m.off("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize");
                    n.parsePresentValue(k[0]);
                    n.parsePresentValue(q);
                    n.save()
                });
                m.on("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    b.pageX ? g = b.pageX: b.originalEvent.touches && (g = b.originalEvent.touches[0].pageX);
                    g && (h = p(c - (f - g) / d.scale()), l !== h && 40 < h && (t.width = h + "px", l = h, k.trigger("sizeChange", [h])))
                })
            });
            return this
        },
        southResize: function(c) {
            var g, h, k, l, m = this,
            n = Math.floor,
            p, q, t;
            b(c).on("mousedown.fliphtml5RemarkResize touchstart.fliphtml5RemarkResize",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                l = m.$context;
                t = m.sizeWrap;
                q = m.sizeWrapStyle;
                h = m.currentEditor;
                var c = t.offsetHeight || 20,
                f = b.pageY || b.originalEvent.touches[0].pageY;
                l.one("mouseup.fliphtml5RemarkResize touchend.fliphtml5RemarkResize",
                function() {
                    l.off("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize");
                    m.parsePresentValue(h[0]);
                    m.parsePresentValue(t);
                    m.save()
                });
                l.on("mousemove.fliphtml5RemarkResize touchmove.fliphtml5RemarkResize",
                function(b) {
                    b.preventDefault();
                    b.stopPropagation();
                    b.pageY ? g = b.pageY: b.originalEvent.touches && (g = b.originalEvent.touches[0].pageY);
                    g && (k = n(c - (f - g) / d.scale()), p !== k && 20 < k && (q.height = k + "px", p = k, h.trigger("sizeChange", [0, k])))
                })
            });
            return this
        },
        parseRemark: function(c, d) {
            var h, k = this,
            l;
            d.find(".flipHtml5Store").remove();
            k.removeSizeWrap();
            this.sizeWrapStyle && (this.sizeWrapStyle.display = "none", b(this.sizeWrap).remove());
            k.newSizeWrap();
            k.contextArray = k.contextArray ? k.contextArray.add(d) : d;
            try {
                window.localStorage ? h = window.localStorage.getItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Remark" + c) || "": (l = RegExp("(?:(?:^|.*;\\s*)" + window.location.href.replace(window.location.hash, "") + "flipHtml5Remark" + c + "\\s*\\=\\s*([^;]*).*$)|^.*$"), h = (document.cookie || "").replace(l, "$1")),
                d.append(h.replace(/#@&/g, ";")),
                d.find(".flipHtml5Remark").each(function() {
                    k.reBindEvent(b(this), !0)
                }),
                d.find(".flipHtml5Highlight").each(function() {
                    k.reBindEvent(b(this), !1)
                }),
                d.on("mousedown.fliphtml5remarkHide touchstart.fliphtml5remarkHide",
                function() {
                    k.save();
                    k.removeSizeWrap();
                    k.currentEditor.blur();
                    k.currentEditor.off("mousedown.flipHtml5Annotation touchstart.flipHtml5Annotation")
                })
            } catch(m) {}
        },
        getPageContent: function(c) {
            var d = 0,
            h, k = "";
            for (c = c.find(".flipHtml5Store"); h = c[d];) if (d++, "" !== h.innerHTML && "" !== b(h).text() || "" !== h.style.backgroundColor && "transparent" !== h.style.backgroundColor && 0 !== parseFloat(h.style.backgroundColor.split(",")[3])) k += h.outerHTML;
            return k.replace(/\s*\n\s*/g, "").replace(/;/g, "#@&")
        },
        storageByIndex: function(b, c) {
            var d, k = this.getPageContent(c);
            try {
                window.localStorage ? (window.localStorage.removeItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Remark" + b), k && window.localStorage.setItem(window.location.href.replace(window.location.hash, "") + "flipHtml5Remark" + b, k)) : (k ? (d = new Date, d.setDate(d.getDate() + this.expires)) : d = new Date("01 Jan 1970 00:00:01"), document.cookie = window.location.href.replace(window.location.hash, "") + "flipHtml5Remark" + b + "=" + k + ";expires=" + d.toUTCString() + ";")
            } catch(l) {
                throw l;
            }
            return k
        },
        save: function() {
            var b, c = d.getCurrentPages();
            for (b = 0; b < c.length && this.noteImgContainers[d.getBookType()]; b++) this.noteImgContainers[d.getBookType()][c[b]] && this.storageByIndex(c[b], this.noteImgContainers[d.getBookType()][c[b]])
        },
        restoreRemark: function(b, c, h) {
            void 0 !== b && (this.noteImgContainers[b] || (this.noteImgContainers[b] = {}), this.noteImgContainers[b][c] = h, b == d.getBookType() && (this.removeSizeWrap(), this.parseRemark(c, this.noteImgContainers[d.getBookType()][c])))
        },
        setContainers: function(b, c, d) {
            this.restoreRemark(b, c, d)
        },
        addHighlightEvent: function() {
            this.unbindCreateEvents();
            this.addEvents(!0)
        },
        addEvents: function(b) {
            var c = 0,
            d, k = this.contextArray;
            for (this.unbindCreateEvents(); d = k.eq(c++), 0 < d.length;) this.bindCreateEvents(d, !b)
        },
        destroy: function(b) {
            if (b) try {
                window.localStorage.clear()
            } catch(c) {
                throw c;
            }
            this.$document.off("keydown.flipHtml5RemarkDelete");
            return this.unbindCreateEvents()
        }
    })
})(window.jQuery, window.Class, window.BookInfo);
var BookMark = Class({
    create: function(b) {
        this.disableCss = {
            boxShadow: "rgba(0, 0, 0, 0.69) 0px 1px 2px inset",
            backgroundColor: "#cccccc",
            textShadow: "0 1px 1px white",
            color: "rgb(165, 148, 148)",
            cursor: "default"
        };
        this.normalCss = {
            boxShadow: "inset 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 1px 2px rgba(0, 0, 0, 0.2)",
            backgroundColor: "#E4E4E4",
            color: "#464343",
            textShadow: "",
            cursor: "pointer"
        };
        this.overCss = {};
        this.downCss = {
            backgroundColor: "#E4E4E4",
            color: "#374f00",
            boxShadow: "inset 0px 1px 3px rgba(0, 0, 0, 0.3), 0px 1px 0px white",
            textShadow: "0px 1px 0px rgba(255, 255, 255, 0.4)"
        };
        this.bookMarkName = window.location.href.replace(window.location.hash, "") + getLanguage("btnBookMark", "BookMark");
        this.bookMarkShowFalg = !1;
        this.addRightBtnFalg = this.addLeftBtnFalg = !0;
        this.hasTextValue = !1;
        this.bottomShow = !0;
        this.$container = b;
        this.bookMarkContexts = {};
        this.address = uiBaseURL;
        this.serverBookMark = [];
        this.cookieBookMark = [];
        this.totalBookMark = [];
        for (var c = 0; c < bmtConfig.length; c++) {
            var d = bmtConfig[c];
            this.serverBookMark.push({
                isCookie: 0,
                text: d.caption,
                page: d.pageIndex,
                color: d.color,
                key: 11
            })
        }
        this.totalPageMark = [];
        this.leftPageMark = [];
        this.rigntPageMark = [];
        this.lists = [];
        this.serverLists = [];
        this.cookieLists = [];
        this.addedPages = [];
        this.cookiePage = [];
        this.serverPage = [];
        for (c = 0; c < this.serverBookMark.length; c++) this.serverPage.push(this.serverBookMark[c].page);
        this.createBookMark(b)
    },
    createBookMark: function(b) {
        var c = this;
        this.bookMark = $("<div class='flipHTML5BookMark'></div>").css({
            maxHeight: 600
        }).hide().appendTo(b);
        var d = $("<div class='flipHTML5BookMark-top' style='position: relative;height: 30px;width: 100%;left: 0px;top: 0px;background-color: #373737;'></div>").append($("<span class='flipHTML5BookMark-topText' style='left:10px;'></span>").html(getLanguage("btnBookMark", "BookMark"))).appendTo(this.bookMark);
        this.shrink = $("<div class='flipHTML5BookMark-topShrink'></div>").css({
            right: 32
        }).append($("<img style='margin-left: 2px;margin-top: 2px;'/>").attr("src", this.address + "note_narrow.png")).appendTo(d);
        this.close = $("<div class='flipHTML5BookMark-topClose'></div>").css({
            right: 3
        }).append($("<img style='margin-left: 2px;margin-top: 2px;'/>").attr("src", this.address + "note_close.png")).appendTo(d);
        this.bookMarkBottom = $("<div class='flipHTML5BookMark-bottom'></div>").css({
            maxHeight: 570
        }).appendTo(this.bookMark);
        var f = $("<div style='position: relative;width: 100%;height: 94px;'></div>").appendTo(this.bookMarkBottom);
        this.bookMarkText = $("<input type='text' class='flipHTML5BookMark-saveText'/>").appendTo(f);
        var g = this.colorPicker(f);
        g.container.css({
            top: 11,
            left: 453
        });
        this.selectColor = g.message.css({
            width: 24,
            height: 24
        });
        rightToLeft && (this.bookMarkText.attr("dir", "rtl"), horizontalMirror(d), horizontalMirror(d.find("span")), d.css("text-align", "right"));
        this.addLeftMark = $("<div class='flipHTML5BookMark-addLeftMark'></div>").css({
            width: 100,
            left: 18
        }).html(getLanguage("lblAddToPage", "Add To Page")).appendTo(f);
        this.addRightMark = $("<div class='flipHTML5BookMark-addRightMark'></div>").css({
            width: 100,
            left: "auto",
            right: 18
        }).html(getLanguage("lblAddToPage", "Add To Page")).appendTo(f);
        this.bookMarkList = $("<div class='flipHTML5BookMark-list' style=' position: relative;width: 464px;left: 18px;margin: 0px;border: 0px;padding-bottom: 18px;'></div>").appendTo(this.bookMarkBottom);
        var f = $("<div class='flipHTML5BookMark-row-th'></div>"),
        g = $("<span class='flipHTML5BookMark-cellLeft-th'></span>").html(getLanguage("lblPage", "Page")),
        h = $("<div class='flipHTML5BookMark-cellRight-th'></div>").append($("<div style='position: absolute;width: 1px;height: 22px;left: 0px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 307px;height: 100%;left: 1px;text-indent: 6px;'></span>").html(getLanguage("lblTitle", "Title"))).append($("<div style='position: absolute;width: 1px;height: 22px;left: auto;right: 101px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 50px;height: 100%;left: auto;right: 51px;text-indent: 10px;'></span>").html(getLanguage("lblEdit", "Edit"))).append($("<div style='position: absolute;width: 1px;height: 22px;left: auto;right: 50px;top: 3px;background-color: #FFFFFF;'></div>")).append($("<span style='position: absolute;width: 50px;height: 100%;left: auto;right: 0px;text-indent: 6px;'></span>").html(getLanguage("lblDelete", "Delete")));
        f.append(g).append(h);
        this.bookMarkList.append(f);
        this.bookMarkTable = $("<div class='flipHTML5BookMark-table'></div>").css({
            maxHeight: 224
        }).appendTo(this.bookMarkList);
        this.bookMarkLists = $("<div class='flipHTML5BookMark-table-lists'></div>").appendTo(this.bookMarkTable);
        this.createScrollBar(this.bookMarkTable);
        this.removeAllMark = $("<div class='flipHTML5BookMark-removeBookMark'></div>").css({
            position: "relative",
            width: 462,
            left: 18,
            top: 0
        }).html(getLanguage("lblRemoveAll", "Remove All")).appendTo(this.bookMarkBottom);
        var k, l;
        d.on("mousedown touchstart",
        function(f) {
            f = isTouch ? f.originalEvent.touches[0] : f;
            k = f.clientX - c.bookMark.position().left;
            l = f.clientY - c.bookMark.position().top;
            d.css({
                cursor: "move"
            });
            b.on("mousemove.bookmarkMove touchmove.bookmarkMove",
            function(b) {
                b = isTouch ? b.originalEvent.touches[0] : b;
                c.bookMark.css({
                    left: b.clientX - k,
                    top: b.clientY - l
                })
            });
            b.add($(document)).on("mouseup.bookmarkMove touchend.bookmarkMove",
            function() {
                d.css({
                    cursor: "default"
                });
                b.off("mousemove.bookmarkMove touchmove.bookmarkMove");
                b.add($(document)).off("mouseup.bookmarkMove touchend.bookmarkMove")
            });
            f.preventDefault();
            f.stopPropagation();
            return ! 1
        });
        this.addCookieMark();
        this.registerEvents()
    },
    isListShowHide: function() {
        0 < this.bookMarkLists.children("div").length ? (this.bookMarkList.show(), this.removeAllMark.show()) : (this.bookMarkList.hide(), this.removeAllMark.hide())
    },
    addCookieMark: function() {
        try {
            var b = this.getLocalStorage(this.bookMarkName),
            c = eval(b),
            d = this.serverBookMark.concat(),
            b = [];
            c ? (this.cookieBookMark = c.concat(), b = c.concat(d)) : b = d;
            if (b) for (this.downJSonArrByKey(b, "page"), c = 0; c < b.length; c++) this.addBookMarkList(b[c])
        } catch(f) {}
        for (c = 0; c < this.lists.length; c++) this.lists[c].rowObj.css({
            backgroundColor: 0 == c % 2 ? "": "#bababa"
        });
        this.scrollBarShowHide();
        this.updateBookMarkConfig()
    },
    registerEvents: function() {
        var b = this;
        this.shrink.on("click",
        function() {
            b.bottomShow ? (b.bottomShow = !1, b.shrink.children("img").attr("src", b.address + "note_revert.png"), b.bookMarkBottom.css({
                maxHeight: 0,
                paddingBottom: 0
            })) : (b.bookMarkText[0].focus(), b.bottomShow = !0, b.shrink.children("img").attr("src", b.address + "note_narrow.png"), b.bookMarkBottom.css({
                maxHeight: 570,
                paddingBottom: 6
            }))
        });
        this.close.on("click touchend",
        function() {
            b.hide()
        });
        this.addLeftMark.on({
            "mouseover touchstart": function() {
                b.addLeftBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(b.overCss)
            },
            "mouseout touchend": function() {
                b.addLeftBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(b.normalCss)
            },
            "mousedown touchstart": function() {
                b.addLeftBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(b.downCss)
            },
            "mouseup touchend": function() {
                b.addLeftBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(b.normalCss)
            },
            "click touchend": function() {
                var c = b.bookMarkText.val();
                if (b.addLeftBtnFalg && c && b.hasTextValue) {
                    b.bookMarkText.val("");
                    var d = BookInfo.getCurrentPages(),
                    f = b.selectColor.attr("data-color"),
                    d = BookInfo.isRightToLeft() ? Math.max.apply(Math, d) : Math.min.apply(Math, d),
                    c = {
                        page: d,
                        color: f,
                        text: c,
                        isCookie: 1,
                        key: (new Date).getTime()
                    };
                    b.addBookMarkList(c);
                    b.downJSonArrByKey(b.lists, "page");
                    $(".flipHTML5BookMark-table-row").detach();
                    for (f = 0; f < b.lists.length; f++) b.lists[f].rowObj.css({
                        backgroundColor: 0 == f % 2 ? "": "#bababa"
                    }),
                    b.lists[f].rowObj.appendTo(b.bookMarkLists);
                    b.cookiePage.push(d);
                    b.cookieBookMark.push(c);
                    b.addLocalStorage(b.bookMarkName, b.parseToString(b.cookieBookMark));
                    b.setRandomColor();
                    b.selectRadio()
                }
            }
        });
        this.addRightMark.on({
            "mouseover touchstart": function() {
                b.addRightBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-normal").addClass("flipHTML5Signature-hover").css(b.overCss)
            },
            "mouseout touchend": function() {
                b.addRightBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(b.normalCss)
            },
            "mousedown touchstart": function() {
                b.addRightBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover flipHTML5Signature-normal").css(b.downCss)
            },
            "mouseup touchend": function() {
                b.addRightBtnFalg && b.hasTextValue && $(this).removeClass("flipHTML5Signature-hover").addClass("flipHTML5Signature-normal").css(b.normalCss)
            },
            "click touchend": function() {
                var c = b.bookMarkText.val();
                if (b.addRightBtnFalg && c && b.hasTextValue) {
                    b.bookMarkText.val("");
                    var d = BookInfo.getCurrentPages(),
                    f = b.selectColor.attr("data-color"),
                    d = BookInfo.isRightToLeft() ? Math.min.apply(Math, d) : Math.max.apply(Math, d),
                    c = {
                        page: d,
                        color: f,
                        text: c,
                        isCookie: 1,
                        key: (new Date).getTime()
                    };
                    b.addBookMarkList(c);
                    b.downJSonArrByKey(b.lists, "page");
                    $(".flipHTML5BookMark-table-row").detach();
                    for (f = 0; f < b.lists.length; f++) b.lists[f].rowObj.css({
                        backgroundColor: 0 == f % 2 ? "": "#bababa"
                    }),
                    b.lists[f].rowObj.appendTo(b.bookMarkLists);
                    b.cookiePage.push(d);
                    b.cookieBookMark.push(c);
                    b.addLocalStorage(b.bookMarkName, b.parseToString(b.cookieBookMark));
                    b.setRandomColor();
                    b.selectRadio()
                }
            }
        });
        this.bookMarkText.on("input propertychange change",
        function() {
            $(this).val() ? b.hasTextValue = !0 : b.hasTextValue = !1;
            b.selectRadio()
        });
        this.removeAllMark.on("click touchend",
        function() {
            $(".flipHTML5BookMark-table-row-cookie").remove();
            b.cookieLists = [];
            b.lists = [];
            b.lists = b.serverLists.concat();
            b.downJSonArrByKey(b.lists, "page");
            $(".flipHTML5BookMark-table-row").detach();
            for (var c = 0; c < b.lists.length; c++) b.lists[c].rowObj.css({
                backgroundColor: 0 == c % 2 ? "": "#bababa"
            }),
            b.lists[c].rowObj.appendTo(b.bookMarkLists);
            b.cookiePage = [];
            b.addedPages = [];
            b.addedPages = b.serverPage.concat();
            b.selectRadio();
            b.cookieBookMark = [];
            b.totalBookMark = [];
            b.totalBookMark = b.serverBookMark.concat();
            b.addLocalStorage(b.bookMarkName, b.parseToString(b.cookieBookMark));
            b.scrollBarShowHide();
            b.updateBookMarkConfig()
        })
    },
    updateBookMarkConfig: function() {
        this.downJSonArrByKey(this.totalBookMark, "page");
        bmtConfig = [];
        for (var b = 0; b < this.totalBookMark.length; b++) {
            var c = this.totalBookMark[b],
            d = c.page;
            0 <= d && d <= BookInfo.getPageCount() && bmtConfig.push({
                caption: c.text,
                color: c.color,
                pageIndex: c.page
            })
        }
        BookInfo.getBookType() === BookType.normal_book && BookInfo.getBook().bmt.refresh()
    },
    addBookMarkList: function(b) {
        if (! (0 > b.page || b.page > BookInfo.getPageCount())) {
            var c = this,
            d = !0,
            f = b.text,
            g = b.color,
            h = $("<div style='position: relative;height: 28px;cursor: pointer;'></div>").css({
                height: 28
            }).addClass(1 === b.isCookie ? "flipHTML5BookMark-table-row flipHTML5BookMark-table-row-cookie": "flipHTML5BookMark-table-row").attr({
                "data-key": b.key,
                "data-page": b.page
            }).appendTo(c.bookMarkLists);
            $("<span class='flipHTML5BookMark-table-cellLeft'></span>").html(b.page).appendTo(h);
            var k = $("<span class='flipHTML5BookMark-table-cellRight' style=' position: absolute;width: 410px;height: 100%;left: 54px;'></span>").appendTo(h),
            l = $("<div style='position: absolute;left: 0px;top: 0px;height: 100%;width: 100%;'></div>").appendTo(k),
            m = $("<div style='position: absolute;left: 0px;top: 0px;height: 100%;'></div>").css({
                width: 1 === b.isCookie ? "309px": "100%"
            }).appendTo(l),
            n = $("<input class='flipHTML5BookMark-table-cellRight-text' disabled='true'/>").css({
                width: 1 === b.isCookie ? "283px": "100%"
            }).attr("disabled", d).val(b.text).appendTo(m),
            p,
            q;
            1 === b.isCookie && (l = this.colorPicker(m), p = l.message, q = l.container, p.css({
                width: 20,
                height: 20,
                backgroundColor: b.color
            }).attr("data-color", b.color), q.css({
                top: 2,
                left: 284
            }).hide());
            var t = $("<div class='flipHTML5BookMark-table-cellRight-edit'></div>").css({
                display: 1 === b.isCookie ? "block": "none",
                right: 64
            }).attr("title", getLanguage("lblEdit", "Edit")).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", c.address + "note_edit.png")).appendTo(k),
            r = $("<div class='flipHTML5BookMark-table-cellRight-cancel'></div>").css({
                right: 51
            }).attr("title", "Cancel").append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", c.address + "bookMark_cancel.png")).appendTo(k).hide(),
            k = $("<div class='flipHTML5BookMark-table-cellRight-del'></div>").css({
                display: 1 === b.isCookie ? "block": "none",
                right: 14
            }).attr("title", getLanguage("lblDelete", "Delete")).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", c.address + "note_del.png")).appendTo(k);
            n.attr("title", n.val());
            r.on("click touchend",
            function(b) {
                d = !0;
                m.css({
                    backgroundColor: "transparent"
                });
                n.css({
                    backgroundColor: "transparent",
                    color: "#1a1a1a"
                });
                n.attr("disabled", d);
                t.attr("title", getLanguage("lblEdit", "Edit")).css({
                    right: 64
                });
                t.children("img").attr("src", c.address + "note_edit.png");
                q && q.hide();
                n.val(f);
                p.attr("data-color", g).css({
                    backgroundColor: g
                });
                r.hide();
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            });
            h.on("click touchend",
            function(b) {
                d && gotoPageFun($(this).attr("data-page"))
            });
            k.on("click touchend",
            function(b) {
                h.remove();
                var d = h.attr("data-page");
                c.addedPages.splice(c.addedPages.indexOf(d), 1);
                c.cookiePage.splice(c.cookiePage.indexOf(d), 1);
                c.selectRadio();
                c.delArrayByKeyAndValue(c.totalBookMark, "page", d);
                c.delArrayByKeyAndValue(c.cookieBookMark, "page", d);
                c.addLocalStorage(c.bookMarkName, c.parseToString(c.cookieBookMark));
                c.delArrayByKeyAndValue(c.lists, "page", d);
                c.delArrayByKeyAndValue(c.cookieLists, "page", d);
                for (d = 0; d < c.lists.length; d++) c.lists[d].rowObj.css({
                    backgroundColor: 0 == d % 2 ? "": "#bababa"
                });
                c.scrollBarShowHide();
                c.updateBookMarkConfig();
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            });
            t.on("click touchend",
            function(b) {
                if (d) d = !1,
                m.css({
                    backgroundColor: "#ffffff"
                }),
                n.css({
                    backgroundColor: "#ffffff",
                    color: "#000000"
                }),
                t.children("img").attr("src", c.address + "note_save.png"),
                n.attr("disabled", d),
                t.attr("title", "Save").css({
                    right: 77
                }),
                n[0].focus(),
                r.show(),
                q && q.show();
                else if (n.val()) {
                    d = !0;
                    m.css({
                        backgroundColor: "transparent"
                    });
                    n.css({
                        backgroundColor: "transparent",
                        color: "#1a1a1a"
                    });
                    n.attr("disabled", d);
                    t.attr("title", getLanguage("lblEdit", "Edit")).css({
                        right: 64
                    });
                    t.children("img").attr("src", c.address + "note_edit.png");
                    r.hide();
                    var k = h.attr("data-key"),
                    l = n.val();
                    f = l;
                    var w = p.attr("data-color");
                    g = w;
                    n.attr("title", n.val());
                    c.updateArrayByKeyValue(c.cookieBookMark, "key", k, {
                        text: l,
                        color: w
                    });
                    c.updateArrayByKeyValue(c.totalBookMark, "key", k, {
                        text: l,
                        color: w
                    });
                    c.addLocalStorage(c.bookMarkName, c.parseToString(c.cookieBookMark));
                    q && q.hide();
                    c.updateBookMarkConfig()
                } else alert("Can not leave the text box blank!"),
                n.val(f);
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            });
            this.scrollBarShowHide();
            1 === b.isCookie ? this.cookieLists.push($.extend({},
            b, {
                rowObj: h
            })) : this.serverLists.push($.extend({},
            b, {
                rowObj: h
            }));
            this.lists.push($.extend({},
            b, {
                rowObj: h
            }));
            this.addedPages.push(b.page);
            this.totalBookMark.push(b);
            this.updateBookMarkConfig()
        }
    },
    addBookMarkPage: function() {},
    selectRadio: function() {
        var b = this.addLeftMark,
        c = this.addRightMark,
        d = this.bookMarkText[0],
        f = d.value,
        g = BookInfo.getCurrentPages(),
        h = BookInfo.getPageCount();
        this.hasTextValue = f ? !0 : !1;
        0 <= g.indexOf(0) ? this.contains(this.addedPages, Math.max.apply(Math, g)) ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addRightBtnFalg = this.addLeftBtnFalg = !1, d.readOnly = !0, b.add(c).hide()) : (f ? BookInfo.isRightToLeft() ? (c.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), b.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), c.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : BookInfo.isRightToLeft() ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))), d.readOnly = !1, d.focus()) : 0 <= g.indexOf(h) && Math.min.apply(Math, g) == h ? this.contains(this.addedPages, h) ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addRightBtnFalg = this.addLeftBtnFalg = !1, d.readOnly = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : (f ? BookInfo.isRightToLeft() ? (b.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), c.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (c.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), b.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : BookInfo.isRightToLeft() ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))), d.readOnly = !1, d.focus()) : Math.min.apply(Math, g) > h ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addRightBtnFalg = this.addLeftBtnFalg = !1, d.readOnly = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : this.contains(this.addedPages, Math.min.apply(Math, g)) || this.contains(this.addedPages, Math.max.apply(Math, g)) ? !this.contains(this.addedPages, Math.min.apply(Math, g)) && this.contains(this.addedPages, Math.max.apply(Math, g)) ? (f ? BookInfo.isRightToLeft() ? (b.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), c.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (c.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), b.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : BookInfo.isRightToLeft() ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))), d.readOnly = !1, d.focus()) : this.contains(this.addedPages, Math.min.apply(Math, g)) && !this.contains(this.addedPages, Math.max.apply(Math, g)) ? (f ? BookInfo.isRightToLeft() ? (c.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), b.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), c.removeClass("flipHTML5BookMark-normal").css(this.normalCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : BookInfo.isRightToLeft() ? (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !0, this.addRightBtnFalg = !1, b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addLeftBtnFalg = !1, this.addRightBtnFalg = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))), d.readOnly = !1, d.focus()) : (b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addRightBtnFalg = this.addLeftBtnFalg = !1, d.readOnly = !0, b.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.hide().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))) : (f ? c.add(b).removeClass("flipHTML5BookMark-normal").css(this.normalCss) : b.add(c).removeClass("flipHTML5BookMark-normal flipHTML5BookMark-hover").css(this.disableCss), this.addRightBtnFalg = this.addLeftBtnFalg = !0, BookInfo.isRightToLeft() ? (b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g))) : (b.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.min.apply(Math, g)), c.show().html(getLanguage("lblAddToPage", "Add To Page") + " " + Math.max.apply(Math, g))), d.readOnly = !1, d.focus())
    },
    colorPicker: function(b) {
        var c, d, f, g = "#FF0000 #FF5555 #FF55AA #FF55FF #FFAA55 #FFAAAA #FFAAFF #FFFF55 #FFFFAA #FFFFFF #CC0000 #CC5555 #CC55AA #CC55FF #CCAA55 #CCAAAA #CCAAFF #CCFF55 #CCFFAA #CCFFFF #AA0000 #AA5555 #AA55AA #AA55FF #AAAA55 #AAAAAA #AAAAFF #AAFF55 #AAFFAA #AAFFFF #880000 #885555 #8855AA #8855FF #88AA55 #88AAAA #88AAFF #88FF55 #88FFAA #88FFFF #550000 #555555 #5555AA #5555FF #55AA55 #55AAAA #55AAFF #55FF55 #55FFAA #55FFFF #220000 #225555 #2255AA #2255FF #22AA55 #22AAAA #22AAFF #22FF55 #22FFAA #22FFFF #000000 #005555 #0055AA #0055FF #00AA55 #00AAAA #00AAFF #00FF55 #00FFAA #00FFFF".split(" "),
        h = document.createElement("table");
        c = document.createElement("a");
        var k = $(c),
        l = document.createElement("input"),
        m = function() {
            var b = this.title.toUpperCase();
            l.style.backgroundColor = b;
            $(l).attr("data-color", b)
        },
        n = function() {
            h.style.display = "none"
        };
        k.appendTo(b);
        c.className = "flipHtml5ColorSelectorWrap-bookMark";
        h.setAttribute("border", "1");
        c.style.position = "absolute";
        c.href = "javascript:void(0);";
        l.type = "text";
        l.className = "flipHtml5ColorSelectorMessage-bookMark";
        b = this.getRandomColor();
        l.style.backgroundColor = b;
        $(l).attr("data-color", b);
        l.style.cursor = "pointer";
        l.style.borderWidth = "2px";
        l.style.padding = "0px";
        c.appendChild(l);
        this.$container[0].appendChild(h);
        h.style.display = "none";
        h.style.position = "absolute";
        h.style.zIndex = 9999;
        h.style.width = "204px";
        h.style.backgroundColor = "#ffffff";
        for (d = 0; 7 > d; d++) {
            f = document.createElement("tr");
            f.style.position = "relative";
            for (b = 0; 10 > b; b++) c = document.createElement("td"),
            c.className = "flipHtml5ColorSelectorBlock",
            c.style.position = "relative",
            c.style.width = "14px",
            c.style.height = "14px",
            c.title = g[10 * d + b],
            c.style.backgroundColor = g[10 * d + b],
            $(c).on("mouseenter", m),
            $(c).on("click touchstart", n),
            f.appendChild(c);
            h.appendChild(f)
        }
        $(l).on("click touchstart",
        function(b) {
            $(h).css({
                left: $(l).offset().left,
                top: $(l).offset().top + $(l).outerHeight()
            });
            h.style.display = "table-cell";
            b.stopPropagation();
            b.stopPropagation();
            return ! 1
        });
        $(document).on("click touchstart",
        function() {
            h.style.display = "none"
        });
        return {
            container: k,
            message: $(l)
        }
    },
    getRandomColor: function() {
        return "#" + Math.floor(2236962 + 7829367 * Math.random()).toString(16)
    },
    setRandomColor: function() {
        var b = this.getRandomColor();
        this.selectColor.css({
            backgroundColor: b
        }).attr("data-color", b)
    },
    show: function() {
        this.bookMarkShowFalg = !0;
        this.bookMark.show();
        this.bookMarkText[0].focus();
        this.scrollBarShowHide();
        this.bottomShow = !0;
        this.shrink.children("img").attr("src", this.address + "note_narrow.png");
        this.bookMarkBottom.css({
            maxHeight: 570,
            paddingBottom: 6
        })
    },
    hide: function() {
        this.bookMarkShowFalg = !1;
        this.bookMark.hide()
    },
    showHide: function() {
        this.bookMarkShowFalg ? this.hide() : this.show()
    },
    setContainers: function(b, c, d) {
        BookInfo.getBookType() === b && this.selectRadio()
    },
    parseToString: function(b) {
        if (0 != b.length) {
            for (var c = "[",
            d = 0; d < b.length; d++) c += "{key:'" + b[d].key + "',text:'" + b[d].text + "',page:" + b[d].page + ",color:'" + b[d].color + "',isCookie:" + b[d].isCookie + "},";
            c = c.substring(0, c.length - 1);
            return c + "]"
        }
    },
    downJSonArrByKey: function(b, c) {
        b.sort(function(b, f) {
            return parseInt(b[c]) > parseInt(f[c]) ? 1 : parseInt(b[c]) == parseInt(f[c]) ? 0 : -1
        })
    },
    delArrayByKeyAndValue: function(b, c, d) {
        if (b) for (var f = 0; f < b.length; f++) b[f][c] && b[f][c] == d && b.remove(f)
    },
    updateArrayByKeyValue: function(b, c, d, f) {
        if (b) for (var g = 0; g < b.length; g++) b[g][c] && b[g][c] == d && $.extend(b[g], f)
    },
    getLocalStorage: function(b) {
        try {
            if (window.localStorage) return window.localStorage.getItem(b);
            for (var c = document.cookie.split("; "), d = 0; d < c.length; d++) {
                var f = c[d].split("=");
                if (f[0] == b) return unescape(f[1])
            }
            return ""
        } catch(g) {}
    },
    addLocalStorage: function(b, c) {
        try {
            if (window.localStorage) window.localStorage.setItem(b, c);
            else {
                var d = b + "=" + escape(c),
                f = new Date;
                f.setTime(f.getTime() + 864E8);
                d += "; expires=" + f.toGMTString();
                document.cookie = d
            }
        } catch(g) {}
    },
    contains: function(b, c) {
        for (var d = 0; d < b.length; d++) if (b[d] === c) return ! 0;
        return ! 1
    },
    createScrollBar: function(b) {
        b = $("<div>", {
            "class": "ScrollBar",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                backgroundColor: "#a8a8a8",
                borderRadius: 0,
                right: 0,
                top: 0,
                borderLeft: "1px solid #ffffff"
            }
        }).appendTo(b);
        var c = $("<div>", {
            "class": "OuterScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                left: 0,
                top: 0,
                backgroundColor: "transparent",
                borderRadius: 0,
                overflow: "hidden",
                cursor: "pointer"
            }
        }).appendTo(b);
        $("<div>", {
            "class": "InnerScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                marginLeft: 0,
                marginRight: 0,
                left: 0,
                top: 0,
                backgroundColor: "#5e5e5e",
                borderRadius: 0,
                cursor: "pointer"
            }
        }).appendTo(c);
        this.scrollBar = b;
        this.outerScroll = c;
        this.bindScrollBarEvents(b, c, this.bookMarkTable, this.bookMarkLists)
    },
    scrollBarShowHide: function() {
        var b = this.bookMarkTable.outerHeight() * this.scrollBar.outerHeight() / this.bookMarkLists.outerHeight();
        this.outerScroll.css({
            height: b
        });
        this.bookMarkTable.height() >= this.bookMarkLists.height() ? (this.scrollBar.hide(), this.bookMarkLists.css({
            top: 0
        })) : (this.scrollBar.show(), Math.abs(parseFloat(this.bookMarkLists.css("top"))) > this.bookMarkLists.outerHeight() - this.bookMarkTable.outerHeight() && (this.bookMarkLists.css({
            top: -(this.bookMarkLists.outerHeight() - this.bookMarkTable.outerHeight())
        }), this.outerScroll.css({
            top: this.scrollBar.outerHeight() - this.outerScroll.outerHeight()
        })));
        this.isListShowHide()
    },
    bindScrollBarEvents: function(b, c, d, f) {
        var g = this;
        c.on(_event._down,
        function(b) {
            var k = b || event,
            l = k.clientY - g.outerScroll.position().top,
            m = b.which;
            b.stopPropagation();
            1 == m && ($(document).on("mousemove.scrollBar touchmove.scrollBar",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                k = b || event;
                b = k.clientY - l;
                0 >= b ? b = 0 : b >= g.scrollBar.outerHeight() - g.outerScroll.outerHeight() && (b = g.scrollBar.outerHeight() - g.outerScroll.outerHeight());
                c.css({
                    top: b
                });
                f.css({
                    top: -b / (g.scrollBar.outerHeight() - g.outerScroll.outerHeight()) * (f.outerHeight() - d.outerHeight())
                })
            }), $(document).on("mouseup.scrollBar touchend.scrollBar",
            function(b) {
                b = b || event;
                b.preventDefault();
                b.stopPropagation();
                $(document).off("mousemove.scrollBar touchmove.scrollBar");
                $(document).off("mouseup.scrollBar touchend.scrollBar")
            }))
        });
        d.bind($.browser.mozilla ? "DOMMouseScroll": "mousewheel",
        function(g) {
            if (! (d.outerHeight() >= f.outerHeight())) {
                var k = g.originalEvent,
                k = k.wheelDelta || -k.detail,
                l = f.position().top,
                m;
                f.stop(!1, !1);
                0 < k ? m = 0 > l + d.outerHeight() / 11 ? l + d.outerHeight() / 11 : 0 : 0 > k && (m = f.outerHeight() - d.outerHeight() > -(l - d.outerHeight() / 11) ? l - d.outerHeight() / 11 : -(f.outerHeight() - d.outerHeight()));
                f.css({
                    top: m
                });
                c.css({
                    top: -m / (f.outerHeight() - d.outerHeight()) * (b.outerHeight() - c.outerHeight())
                });
                g.stopPropagation();
                g.preventDefault();
                return ! 1
            }
        })
    }
}),
PhoneBookMark = Class({
    create: function(b) {
        this.bookMarkName = window.location.href.replace(window.location.hash, "") + getLanguage("btnBookMark", "BookMark");
        this.parent = b;
        this.parent.addClass("phoneBookmark");
        this.scrollBox = $("<div class='scrollBox'></div>");
        this.parent.append(this.scrollBox);
        this.initData();
        this.showForm()
    },
    onResize: function() {},
    initData: function() {
        this.serverBookMark = [];
        this.pagePool = [];
        for (var b = 0; b < bmtConfig.length; b++) {
            var c = bmtConfig[b],
            d = c.pageIndex; - 1 < this.pagePool.indexOf(d) || (this.pagePool.push(d), this.serverBookMark.push({
                isCookie: 0,
                text: c.caption,
                page: c.pageIndex,
                color: c.color,
                key: 11
            }))
        }
        this.initCookie()
    },
    initCookie: function() {
        this.cookieBookMark = [];
        var b = eval(this.getLocalStorage(this.bookMarkName));
        if (b) for (var c = 0; c < b.length; c++) {
            var d = b[c],
            f = d.page; - 1 < this.pagePool.indexOf(f) || (this.pagePool.push(f), this.cookieBookMark.push({
                isCookie: 1,
                text: d.text,
                page: d.page,
                color: d.color,
                key: d.key
            }))
        }
    },
    showForm: function() {
        this.showing = !0;
        this.addContentDown || (this.addContentDown = !1);
        if (!1 == this.addContentDown) try {
            this.createInterface(),
            clearProgressBar(this.scrollBox),
            this.addContentDown = !0
        } catch(b) {}
    },
    createInterface: function() {
        for (var b = 0; b < this.serverBookMark.length; b++) this.addItem(this.serverBookMark[b]);
        if (this.cookieBookMark && 0 != this.cookieBookMark.length) for (b = 0; b < this.cookieBookMark.length; b++) this.addItem(this.cookieBookMark[b])
    },
    addItem: function(b) {
        if (b) {
            var c = $("<div class='item'></div>"),
            d = $("<span class='page'>P:" + b.page + "</span>"),
            f = $("<img src='" + getPageDir(b.page, "thumb", originTotalPageCount) + "'/>"),
            g = $("<span class='title'>" + b.text + "</span>"),
            h = $("<div class='close'></div>");
            this.mainColor = colorDiv(bookConfig.toolbarColor, 30);
            var k = colorDiv(this.mainColor, 20),
            l = colorAdd(this.mainColor, 20);
            c.css({
                "background-color": this.mainColor,
                "border-bottom": "1px solid " + k,
                "border-top": "1px solid " + l
            });
            c.append(d);
            c.append(f);
            c.append(g);
            c.append(h);
            this.scrollBox.append(c);
            h.bind(_event._end,
            function() {
                this.removeBookmark(b, !0);
                c.remove()
            }.bind(this));
            c.bind(_event._end,
            function() {
                gotoPageFun(b.page)
            })
        }
    },
    removeBookmark: function(b) { - 1 < BookInfo.getCurrentPages().indexOf(b.page) && toolBar.changeBookmarkIcon(!0);
        this.removeElement(b)
    },
    addBookmark: function(b) { - 1 < this.pagePool.indexOf(b.page) || ( - 1 < BookInfo.getCurrentPages().indexOf(b.page) && toolBar.changeBookmarkIcon(!1), this.pagePool.push(b.page), this.cookieBookMark.push(b), this.addLocalStorage(this.bookMarkName, this.parseToString(this.cookieBookMark)), this.addItem(b))
    },
    removeElement: function(b) {
        this.pagePool.removeElement(b.page);
        for (var c = 0; c < this.serverBookMark.length; c++) if (b.page == this.serverBookMark[c].page) {
            this.serverBookMark.remove(c);
            return
        }
        for (c = 0; c < this.cookieBookMark.length; c++) if (b.page == this.cookieBookMark[c].page) {
            this.cookieBookMark.remove(c);
            this.addLocalStorage(this.bookMarkName, this.parseToString(this.cookieBookMark));
            break
        }
    },
    lightBookmarkButton: function(b) {
        b = BookInfo.getCurrentPages();
        for (var c = 0; c < b.length; c++) if ( - 1 < this.pagePool.indexOf(b[c])) {
            toolBar.changeBookmarkIcon(!1);
            return
        }
        toolBar.changeBookmarkIcon(!0)
    }
}).extend(BookMark);
function grayBackground(b, c, d, f, g) {
    this.sw = f;
    this.sh = g;
    this.background = $("<div ></div>");
    this.background.css({
        width: f + "px",
        height: g + "px",
        background: c,
        opacity: d,
        "z-index": 200,
        position: "absolute",
        left: "0px",
        top: "0px"
    });
    b.append(this.background)
}
grayBackground.prototype.onResize = function(b, c) {
    this.sw = b;
    this.sh = c;
    this.background.css({
        width: b + "px",
        height: c + "px"
    })
};
bdor[25] = "i";
grayBackground.prototype.setPosition = function(b, c, d) {
    void 0 == d && (d = ["left", "top"]);
    this.background.css(d[0], b + "px");
    this.background.css(d[1], c + "px")
};
grayBackground.prototype.show = function() {
    this.father.append(this.background)
};
grayBackground.prototype.hide = function() {
    this.background.remove()
};
grayBackground.prototype.setZindex = function(b) {
    this.background.css({
        "z-index": b
    })
};
grayBackground.prototype.onMouseUp = function(b, c) {
    $(this.background).bind(_event._down,
    function(d) {
        c.call(b)
    })
};
var textWidth = function(b, c) {
    var d = $("<pre>" + b + "</pre>").css({
        color: bookConfig.iconColor,
        display: "none",
        "font-size": c.size,
        "font-family": c.fontName
    });
    $("body").append(d);
    var f = Point(d.width(), d.height());
    d.remove();
    return f
};
function label(b, c) {
    this.labelBox = $('<div style = "position : absolute;font-family:Tahoma,Georgia,Serif;font-size:12px">' + b + "</div>");
    this.caption = b;
    this.fontSize = "12px";
    this.fontColor = "#f0f0f0";
    this.fontName = "Tahoma";
    var d = textWidth(b, {
        size: this.fontSize,
        fontName: this.fontName
    });
    this.width = d.x;
    this.height = d.y;
    c.append(this.labelBox)
}
label.prototype.getWidth = function() {
    return this.width
};
bdor[27] = "f";
label.prototype.getHeight = function() {
    return this.height
};
label.prototype.getCaption = function() {
    return this.caption
};
label.prototype.setCaption = function(b) {
    this.caption = b;
    this.labelBox[0].innerHTML = b;
    b = textWidth(b, {
        size: this.fontSize,
        fontName: this.fontName
    });
    this.width = b.x;
    this.height = b.y
};
label.prototype.setLabelPosition = function(b, c, d) {
    void 0 == d && (d = ["left", "top"]);
    this.labelBox.css(d[0], b + "px");
    this.labelBox.css(d[1], c + "px")
};
label.prototype.onResize = function(b, c) {
    this.width = b;
    this.height = c;
    this.labelBox.css({
        width: b + "px",
        height: c + "px"
    })
};
label.prototype.setFont = function(b, c, d) {
    null == b ? b = this.fontSize: this.fontSize = b;
    null == c ? c = this.fontColor: this.fontColor = c;
    null == d ? d = this.fontName: this.fontName = d;
    this.labelBox.css({
        "font-size": b,
        color: c,
        "font-family": d
    });
    b = textWidth(this.caption, {
        size: b,
        fontName: d
    });
    this.width = b.x;
    this.height = b.y
};
label.prototype.setFontSize = function(b) {
    null == b ? b = this.fontSize: this.fontSize = b;
    this.labelBox.css({
        "font-size": b
    });
    b = textWidth(this.caption, {
        size: b,
        fontName: this.fontName
    });
    this.width = b.x;
    this.height = b.y
};
label.prototype.riseAWord = function(b) {
    var c = this.caption; - 1 == c.indexOf(b) && (b = b.toLowerCase()); - 1 != c.indexOf(b) && (newCaption = c.replaceAll(b, "<font color=red><strong>" + b + "</strong></font>"), this.labelBox[0].innerHTML = newCaption)
};
label.prototype.shortWord = function(b) {
    this.caption.length > b && (this.caption = this.caption.substring(0, b) + "..", this.setCaption(this.caption))
};
label.prototype.setCSS = function(b) {
    this.labelBox.css(b)
};
label.prototype.setClass = function(b) {
    this.labelBox.attr("class", b)
};
var tipsBox = Class({
    create: function(b, c) {
        this.visible = !1;
        this.caption = b;
        this.background = $("<span class='tipsBox tipsBoxShadow tipsBoxRadius'></span>");
        $(c).append(this.background)
    },
    setTimer: function() {
        this.timer = window.setInterval(function() {
            this.hideTipsBox();
            window.clearInterval(this.timer)
        }.bind(this), 1500)
    },
    resetTimer: function() {
        window.clearInterval(this.timer);
        this.setTimer()
    },
    setPosition: function(b, c, d) {},
    onResize: function(b, c) {},
    getWidth: function() {
        return this.background.width()
    },
    getHeight: function() {
        return this.background.height()
    },
    setCaption: function(b) {
        this.background.html(b)
    },
    showTipsBox: function() {
        this.visible ? this.resetTimer() : (this.setTimer(), this.visible = !0, $(this.background).show(), $(this.background).animate({
            opacity: 0.5
        },
        300))
    },
    hideTipsBox: function() {
        this.visible && (this.visible = !1, $(this.background).animate({
            opacity: 0
        },
        300,
        function() {
            $(this.background).hide()
        }.bind(this)))
    }
});
function initProgressBar(b, c) {
    this.width = 60;
    this.height = 30;
    this.progress = new label("Loading", b);
    this.caption = this.originCaption = c;
    this.captionLength = this.caption.length;
    this.progress.setCSS({
        display: "none"
    })
}
initProgressBar.prototype.setPosition = function(b, c) {
    this.progress.setLabelPosition((b - this.width) / 2, (c - this.height) / 2)
};
initProgressBar.prototype.addTimer = function() {
    var b = this;
    this.timerId = window.setInterval(function() {
        b.caption += ".";
        b.caption.length > b.captionLength + 3 && (b.caption = originCaption);
        b.progress.setCaption(b.caption)
    },
    600)
};
initProgressBar.prototype.removeTimer = function() {
    window.clearInterval(this.timerId)
};
initProgressBar.prototype.show = function() {
    this.progress.setCSS({
        display: "block"
    });
    this.caption = this.originCaption;
    this.addTimer()
};
initProgressBar.prototype.hide = function() {
    this.progress.setCSS({
        display: "none"
    });
    this.removeTimer()
};
initProgressBar.prototype.setIndex = function(b) {
    this.progress.setCSS({
        "z-index": b
    })
};
var BookShadow = Class({
    create: function(b) {
        this.background = $("<div class='bookShadow'></div>");
        $(b).append(this.background);
        this.visible = !0
    },
    doubleWidth: function(b) {
        $(this.background).attr("class", b ? "doubleWidth": "singleWidth");
        $(this.background).addClass("bookShadow")
    },
    right: function(b) {
        $(this.background).css({
            right: "auto"
        });
        b && $(this.background).css({
            right: "0px"
        })
    },
    show: function() {
        this.visible || ($(this.background).show(), this.visible = !0)
    },
    hide: function() {
        this.visible && ($(this.background).hide(), this.visible = !1)
    }
});
bdor[26] = "h";
function bookMarkTab(b, c, d, f) {
    this.fnShow = c;
    this.fnHide = d;
    this.maxWidth = f ? f: 80;
    this.minWidth = 60;
    this.config = $.extend({
        caption: "",
        color: "#888"
    },
    b);
    this.bg = $("<div style='border-top-left-radius: 3px;border-top-right-radius: 3px;overflow: hidden;'></div>"); ! this.config.pageIndex || "" == this.config.caption || this.config.pageIndex > originTotalPageCount || (this.caption = new label(this.config.caption, this.bg), this.width = this.caption.getWidth() + 30, this.width = this.width > this.maxWidth ? this.maxWidth: this.width < this.minWidth ? this.minWidth: this.width, this.height = 60, this.hiding = this.showing = !1, b = colorDiv(this.config.color, 10), this.bg.css({
        color: "#EEEEEE",
        "font-family": "arial,tahoma,sans-serif",
        "font-size": "12px",
        position: "absolute",
        "z-index": "-1",
        width: this.width + "px",
        height: this.height + "px",
        "background-color": this.config.color,
        border: "1px solid " + b,
        cursor: "pointer"
    }), b = getRealPage(this.config.pageIndex), this.bg.append(this.caption), this.bg.append($("<div style='position: absolute;top: 30px;width: 100%;text-align: center;'></div>").html(b)), this.caption.setLabelPosition(0, 8), this.caption.setClass("bookMarkText"), this.caption.setCSS({
        width: "100%",
        textOverflow: "ellipsis",
        whiteSpace: "nowrap",
        overflow: "hidden",
        textAlign: "center"
    }), this.initEvent())
}
bdor[18] = "t";
bookMarkTab.prototype.resize = function(b, c) {
    b > this.maxWidth && (b = this.maxWidth);
    this.width = b;
    this.height = c;
    this.bg.css({
        width: b + "px",
        height: c + "px"
    })
};
bookMarkTab.prototype.setPosition = function(b, c, d) {
    d ? this.bg.css({
        top: c + "px",
        right: b + "px",
        left: "auto"
    }) : this.bg.css({
        top: c + "px",
        left: b + "px",
        right: "auto"
    })
};
bookMarkTab.prototype.show = function() {
    if (!this.showing) {
        this.showing = !0;
        var b = this;
        this.bg.animate({
            top: 0
        },
        150,
        function() {
            b.showing = !1
        })
    }
};
bookMarkTab.prototype.hide = function() {
    if (!this.hiding) {
        this.hiding = !0;
        var b = this;
        this.bg.animate({
            top: 30
        },
        150,
        function() {
            b.hiding = !1
        })
    }
};
bdor[19] = "c";
bookMarkTab.prototype.setMaxWidth = function(b) {
    this.maxWidth = b;
    this.resize(this.width, this.height)
};
bookMarkTab.prototype.getWidth = function() {
    return this.width
};
bookMarkTab.prototype.initEvent = function() {
    var b = this;
    this.bg.on("mouseover",
    function(c) {
        $(this).attr("title", b.bg.find(".bookMarkText").html());
        b.show()
    });
    this.bg.on("mouseleave",
    function(c) {
        b.hide()
    });
    this.bg.bind(_event._down,
    function(c) {
        gotoPageFun(b.config.pageIndex);
        c.stopPropagation();
        c.stopPropagation();
        return ! 1
    });
    this.bg.on("mouseup touchend",
    function(b) {
        b.stopPropagation();
        b.stopPropagation();
        return ! 1
    })
};
function tabBox(b) {
    this.tabArray = [];
    this.bg = $("<div id='bg'></div>");
    this.width = 400;
    this.height = 60;
    this.tipBoxHeight = this.tipBoxWidth = 70;
    this.bg.css({
        position: "absolute",
        width: this.width + "px",
        height: this.height + "px",
        overflow: "hidden",
        "z-index": 0,
        "font-family": "arial,tahoma,sans-serif",
        "font-size": "12px"
    });
    this.bg.bind(_event._end,
    function() {
        return ! 1
    });
    this.bg.bind(_event._down,
    function() {
        return ! 1
    });
    this.bg.bind(_event._move,
    function() {
        return ! 1
    });
    b.append(this.bg)
}
tabBox.prototype.resize = function(b, c, d) {
    this.width = b;
    this.height = c;
    this.bg.css({
        width: this.width + "px",
        height: this.height + "px"
    });
    this.setTabPosition(d)
};
bdor[20] = "b";
tabBox.prototype.setZIndex = function(b) {
    this.bg.css({
        "z-index": b
    })
};
tabBox.prototype.setPosition = function(b, c) {
    this.bg.css({
        left: b + "px",
        top: c + "px"
    })
};
tabBox.prototype.rotate = function(b) {
    b = rotate(b);
    this.bg.css({
        "-webkit-transform-origin": "0% 0%",
        "-moz-transform-origin": "0% 0%",
        "-ms-transform-origin": "0% 0%",
        "-o-transform-origin": "0% 0%",
        "transform-origin": "0% 0%",
        "-webkit-transform": b,
        "-moz-transform": b,
        "-ms-transform": b,
        "-o-transform": b,
        transform: b
    })
};
tabBox.prototype.show = function() {
    0 == this.tabArray.length ? this.hide() : this.bg.css({
        display: "block"
    })
};
tabBox.prototype.hide = function() {
    this.bg.css({
        display: "none"
    })
};
tabBox.prototype.setItem = function(b) {
    this.tabArray = b || [];
    this.setTabPosition()
};
tabBox.prototype.initItem = function(b) {
    for (var c = 0; c < this.tabArray.length; c++) this.bg.append(this.tabArray[c].bg);
    this.setTabPosition(b);
    0 == this.tabArray.length ? this.hide() : this.show()
};
tabBox.prototype.refresh = function() {
    this.bg.empty()
};
tabBox.prototype.setTabPosition = function(b) {
    for (var c = 0,
    d = 0,
    f = 0; f < this.tabArray.length; f++) c += this.tabArray[f].getWidth(),
    this.bg.append(this.tabArray[f]);
    if (c <= this.width) for (c = 0; c < this.tabArray.length; c++) this.tabArray[c].setPosition(d, 30, b),
    d = d + this.tabArray[c].getWidth() + 2;
    else for (f = 0; f < this.tabArray.length; f++) this.tabArray[f].setPosition(d, 30, b),
    d += this.tabArray[f].getWidth() * this.width / c
};
function initBookMarkTab(b, c) {
    this.isRight = c;
    this.tabArray = [];
    this.leftBox = new tabBox(b);
    this.rightBox = new tabBox(b);
    this.leftTabArr = [];
    this.rightTabArr = [];
    this.tipBox = $("<div id='tipbox'></div>");
    this.tipImg = $("<img />");
    this.tipLabel = new label("page 1", this.tipBox);
    b.append(this.tipBox);
    this.tipBox.append(this.tipImg);
    this.tipBoxHeight = this.tipBoxWidth = 70;
    this.tipBox.css({
        width: this.tipBoxWidth + "px",
        height: this.tipBoxHeight + "px",
        position: "absolute",
        left: (windowWidth - this.tipBoxWidth) / 2 + "px",
        top: (windowHeight - this.tipBoxHeight) / 2 - 200 + "px",
        opacity: 0,
        display: "none",
        background: "#ff0000",
        "z-index": 0
    });
    this.tipImg.attr({
        src: ""
    });
    this.tipLabel.setLabelPosition(5, this.tipBoxHeight - 25);
    0 != bmtConfig.length && (this.setPosition(), this.resort(), this.initItem())
}
initBookMarkTab.prototype.resize = function(b, c) {
    this.leftBox.resize(b, c, !0);
    this.rightBox.resize(b, c, !1);
    this.setPosition()
};
bdor[21] = "f";
initBookMarkTab.prototype.setPosition = function() {
    void 0 != BookInfo.getBook() && (this.leftBox.setPosition( - 60, BookInfo.getBook().height), this.rightBox.setPosition(BookInfo.getBook().width + 60, 0), this.leftBox.rotate( - 90), this.rightBox.rotate(90))
};
initBookMarkTab.prototype.refresh = function() {
    this.resort();
    this.tabArray = [];
    this.leftTabArr = [];
    this.rightTabArr = [];
    this.leftBox.refresh();
    this.rightBox.refresh();
    this.initItem()
};
initBookMarkTab.prototype.resort = function() {
    void 0 != bmtConfig && bmtConfig.sort(createComparisonFunction("pageIndex"))
};
bdor.m = bdor[7];
function createComparisonFunction(b) {
    return function(c, d) {
        var f = c[b],
        g = d[b];
        return f < g ? -1 : f > g ? 1 : 0
    }
}
initBookMarkTab.prototype.initItem = function() {
    for (var b = 0; b < bmtConfig.length; b++) {
        var c = new bookMarkTab(bmtConfig[b], this.showTipBox, this.hideTipBox);
        this.tabArray.push(c)
    }
    this.isRight ? (this.leftBox.tabArray = this.tabArray, this.leftBox.initItem(!0)) : (this.rightBox.tabArray = this.tabArray, this.rightBox.initItem(!1));
    void 0 != BookInfo.getBook() && this.separated(BookInfo.getBook().currentPageIndex)
};
initBookMarkTab.prototype.showTipBox = function(b) {
    this.tipLabel.setCaption("page " + b);
    b = (windowHeight - this.tipBoxHeight) / 2;
    this.tipBox.css({
        display: "block"
    });
    this.tipBox.animate({
        opacity: 1,
        top: b
    },
    {
        duration: 300
    })
};
initBookMarkTab.prototype.hideTipBox = function() {
    var b = this,
    c = (windowHeight - this.tipBoxHeight) / 2 - 200;
    this.tipBox.css({
        display: "none"
    });
    this.tipBox.animate({
        opacity: 0
    },
    300,
    function() {
        b.tipBox.css({
            top: c + "px"
        })
    })
};
initBookMarkTab.prototype.separated = function(b) {
    this.leftTabArr = [];
    this.rightTabArr = [];
    if (this.isRight) for (var c = 0; c < this.tabArray.length; c++) this.tabArray[c].config.pageIndex >= Math.max.apply(Math, BookInfo.getCurrentPages()) ? this.leftTabArr.push(this.tabArray[c]) : this.rightTabArr.push(this.tabArray[c]);
    else for (c = 0; c < this.tabArray.length; c++) this.tabArray[c].config.pageIndex >= Math.max.apply(Math, BookInfo.getCurrentPages()) ? this.rightTabArr.push(this.tabArray[c]) : this.leftTabArr.push(this.tabArray[c]);
    this.leftBox.tabArray = this.leftTabArr;
    this.rightBox.tabArray = this.rightTabArr;
    this.leftBox.initItem(!0);
    this.rightBox.initItem(!1);
    rightToLeft ? (this.leftBox.setZIndex(1), this.rightBox.setZIndex(3), b == totalPageCount && this.rightBox.setZIndex(1)) : (this.leftBox.setZIndex(3), this.rightBox.setZIndex(1), b == totalPageCount && this.leftBox.setZIndex(1))
};
initBookMarkTab.prototype.show = function() {
    this.leftBox.show();
    this.rightBox.show()
};
initBookMarkTab.prototype.hide = function() {
    this.leftBox.hide();
    this.rightBox.hide()
};
function treeNode(b, c, d, f) {
    this.config = $.extend({
        caption: "untitled",
        page: 0,
        width: 240,
        height: 35,
        backColor: d,
        fontColor: bookConfig.bookmarkFontColor,
        level: 0,
        padding: 10
    },
    b);
    var g = this;
    this.background = $('<div style="position:relative; overflow : hidden;"></div>');
    this.contentBox = $("<div id='tableOfContent'></div>");
    b = this.config.caption.HTMLLabel2Text();
    this.textField = $("<p>" + b + "</p>");
    this.expandButton = $("<div style='width:35px;height:35px;z-index:2;' class='flip-action'></div>");
    this.expandButton.css({
        background: "url(" + uiBaseURL + "closed.png) no-repeat center left"
    });
    this.children = [];
    this.opened = this.hasChild = !1;
    this.totalHeight = 0;
    this.isDrag = this.showing = !1;
    this.expandButton.hide();
    $(this.contentBox).append(this.textField);
    $(this.contentBox).append(this.expandButton);
    $(this.background).append(this.contentBox);
    $(c).append(this.background);
    this.textField.css({
        "font-size": "12px",
        padding: "10px 0",
        "margin-left": 12 * Math.max(f ? parseInt(this.config.level) + 1 : this.config.level, 0) + 5 + "px"
    });
    this.expandButton.css({
        position: "absolute",
        top: "0px",
        left: 12 * (Math.max(f ? parseInt(this.config.level) + 1 : this.config.level, 0) - 1) + "px"
    });
    $(this.contentBox).css({
        width: "100%",
        color: this.config.fontColor,
        cursor: "pointer",
        "font-family": "arial,tahoma,sans-serif"
    });
    $(this.background).css({
        margin: "0 20px 0 10px",
        "background-color": this.config.backColor,
        "-moz-border-radius": "5px",
        "-webkit-border-radius": "5px",
        "border-radius": "5px",
        "border-left": "0px solid #CCCCCC",
        "border-right": "0px solid #CCCCCC",
        "border-bottom": "0px solid #CCCCCC",
        "font-family": "arial,tahoma,sans-serif",
        "font-size": "12px"
    });
    this.fontColor = bookConfig.bookmarkFontColor;
    this.downBackColor = this.config.backColor;
    this.textShadow = "";
    this.expandButton.bind(_event._end, this.onExpand.bind(this));
    $(this.contentBox).bind(_event._end,
    function(b) {
        if (global.phoneTableOfContent && !global.phoneTableOfContent.isDrag || !global.phoneTableOfContent && !isBookmarkDrag) g.config.url ? window.open(g.config.url, "_blank") : gotoPageFun(g.config.page)
    });
    $(this.contentBox).bind(_event._down,
    function(b) {
        isTouch || (b = colorAdd(g.config.backColor, 50), $(g.background).css({
            "background-color": b
        }), $(g.contentBox).css({
            color: "#8c97cb"
        }), $(g.contentBox).css({
            "text-shadow": "0 0 30px #8c97cb, 0 0 70px #8c97cb"
        }))
    });
    $(this.background).bind(_event._enter,
    function(b) {
        isTouch || (b = colorAdd(g.config.backColor, 50), $(g.background).css({
            "background-color": b
        }), $(g.contentBox).css({
            color: "#8c97cb"
        }), $(g.contentBox).css({
            "text-shadow": "0 0 30px #8c97cb, 0 0 70px #8c97cb"
        }))
    });
    $(this.background).bind(_event._end,
    function(b) {
        isTouch || ($(g.background).css({
            "background-color": g.downBackColor
        }), $(g.contentBox).css({
            color: g.fontColor
        }), $(g.contentBox).css({
            "text-shadow": g.textShadow
        }))
    });
    $(this.background).bind(_event._leave,
    function(b) {
        isTouch || ($(g.background).css({
            "background-color": g.downBackColor
        }), $(g.contentBox).css({
            color: g.fontColor
        }), $(g.contentBox).css({
            "text-shadow": g.textShadow
        }))
    }); ! rightToLeft || isPhone() || isPad() || global.foldingMenu || horizontalMirror(this.background)
}
treeNode.prototype.setBorderTop = function(b) {
    $(this.background).css("border-top", "0px solid #CCCCCC")
};
treeNode.prototype.setButtonVisible = function(b) {
    this.expandButton.css("display", b ? "block": "none")
};
treeNode.prototype.setHasChildren = function(b) { (this.hasChild = b) && $(this.contentBox).css({
        "font-weight": "bold"
    })
};
treeNode.prototype.setVisible = function(b) {
    $(this.background).css({
        display: b ? "block": "none"
    })
};
treeNode.prototype.getIsExpand = function() {
    return this.opened
};
treeNode.prototype.setIsExpand = function(b) {
    this.opened = b
};
treeNode.prototype.getBackground = function() {
    return this.background
};
treeNode.prototype.getWidth = function() {
    return this.config.width
};
treeNode.prototype.getHeight = function() {
    return this.config.height
};
treeNode.prototype.setCaption = function(b) {
    this.config.caption = b.HTMLLabel2Text()
};
treeNode.prototype.setColor = function(b) {};
treeNode.prototype.setPosition = function(b, c, d) {
    void 0 == d && (d = ["left", "top"]);
    $(this.background).css(d[0], b + "px");
    $(this.background).css(d[1], c + "px")
};
treeNode.prototype.onResize = function(b, c) {};
treeNode.prototype.getTotalHeight = function() {
    return this.totalHeight
};
treeNode.prototype.expand = function() {
    if (this.hasChild) {
        this.expandButton.css({
            background: "url(" + uiBaseURL + "opened.png) no-repeat center left"
        });
        for (var b = 0; b < this.children.length; b++) this.children[b].setVisible(!0),
        this.children[b].getIsExpand() ? this.children[b].expand() : this.children[b].bookMarkEnter();
        $(this.contentBox).css({
            color: bookConfig.bookmarkFontColor
        });
        this.fontColor = bookConfig.bookmarkFontColor;
        this.downBackColor = this.config.backColor;
        this.textShadow = ""
    } else this.expandButton.css({
        background: "url(" + uiBaseURL + "bookMarkEnter.png) no-repeat center left"
    })
};
treeNode.prototype.bookMarkEnter = function() {
    this.hasChild || this.expandButton.css({
        background: "url(" + uiBaseURL + "bookMarkEnter.png) no-repeat center left"
    })
};
treeNode.prototype.collapse = function() {
    if (this.hasChild) {
        this.expandButton.css({
            background: "url(" + uiBaseURL + "closed.png) no-repeat center left"
        });
        for (var b = 0; b < this.children.length; b++) this.children[b].setVisible(!1),
        this.children[b].collapse();
        $(this.contentBox).css({
            color: bookConfig.bookmarkFontColor
        });
        this.fontColor = bookConfig.bookmarkFontColor;
        this.downBackColor = this.config.backColor;
        this.textShadow = ""
    }
};
treeNode.prototype.onExpand = function() {
    this.opened ? this.collapse() : this.expand();
    this.opened = !this.opened;
    $(this.background).css({
        "background-color": this.config.backColor
    });
    return ! 1
};
treeNode.prototype.addChildren = function(b) {
    this.children.push(b)
};
treeNode.prototype.addNode = function(b) {
    b = new treeNode(b, this.background);
    this.children.push(b)
};
treeNode.prototype.deleteNode = function() {};
treeNode.prototype.getPageIndex = function() {
    return this.config.page
};
var isBookmarkDrag = !1,
tableContent = Class({
    create: function(b) {
        var c = {
            caption: getLanguage("frmBookMark", "Table of Content"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.bookmarkBackground,
            fontColor: bookConfig.bookmarkFontColor
        };
        this._super(c, b);
        this.scrollMask = $('<div style = "position : absolute;"></div>');
        this.scrollBox = $('<div style = "position : absolute; width : 190px; height : 300px; overflow-y : auto;"></div>');
        this.scrollMouseDown = !1;
        this.mouseDownY = -1;
        this.changeScrollHeight = !1;
        this.height = this.width = 200;
        this.showing = !1;
        this.itemArr = [];
        isPhone() || isPad() ? this.scrollMask.css({
            "overflow-y": "scroll",
            "overflow-x": "hidden",
            "-webkit-overflow-scrolling": "touch"
        }) : (b = $("<link rel='stylesheet' href='" + bookConfig.UIBaseURL + "style/scrollbar.css'/>"), $("body").append(b));
        $(this.contentBox).append(this.scrollMask);
        $(this.contentBox).append(this.scrollBox);
        this.captionBox.setFont("12px", "#cccccc", "arial");
        this.captionBox.setCaption("<strong>" + getLanguage("frmToc", "Table of Content") + "</strong>");
        this.initScrollEvent();
        b = windowWidth / 4 + this.formConfig.scrollbarWidth;
        b = Math.max(300, b);
        this.formBackground.css({
            opacity: 1,
            "z-index": 99,
            top: "10px",
            left: -b - 20 + "px",
            width: "200px"
        });
        this.scrollMask.css({
            "border-top": "1px solid " + colorAdd(bookConfig.bookmarkBackground, 40)
        });
        this.captionBox.setFontSize(16);
        this.contentColor = bookConfig.bookmarkBackground
    },
    addContent: function(b, c, d, f) {
        addProgressBar(this.contentBox, this.width, this.height);
        for (var g = 0; g < b.length; g++) {
            var h = 0 == parseInt(b[g].level) || f ? !0 : !1,
            k = new treeNode(b[g], this.scrollBox, this.contentColor, h);
            this.itemArr.push(k);
            c || 0 != g || k.setBorderTop();
            c && (d.addChildren(k), k.setVisible(!1));
            1 <= b[g].children.length ? (k.setButtonVisible(!0), k.setHasChildren(!0), this.addContent(b[g].children, !0, k, h)) : (k.setButtonVisible(!0), k.bookMarkEnter())
        }
    },
    onResize: function(b, c) {
        this.width = 100 > b ? 100 : b;
        this.height = 100 > c ? 100 : c;
        this.showing || this.formBackground.css({
            left: -(this.width + this.formConfig.scrollbarWidth + 20) + "px"
        });
        this.setWidth(b);
        this.setHeight(c);
        $(this.scrollMask).css({
            width: this.width + "px",
            height: this.height - this.titleBox.height() + "px"
        });
        $(this.scrollBox).css({
            width: this.width + this.formConfig.scrollbarWidth + "px",
            height: this.height - this.titleBox.height() - 15 + "px",
            top: "1px"
        });
        for (var d = 0; d < this.itemArr.length; d++) this.itemArr[d].onResize(this.width - 30)
    },
    showForm: function() {
        var b = this;
        this.formBackground.animate({
            left: 10
        },
        400,
        function() {
            b.showing = !0;
            if (void 0 == b.addContentDown || null == b.addContentDown) b.addContentDown = !1;
            if (!1 == b.addContentDown) try {
                b.addContent(ols, !1),
                clearProgressBar(b.contentBox),
                b.addContentDown = !0
            } catch(c) {
                $("#btnTableOfContent").css({
                    display: "none"
                }),
                bookConfig.TableOfContentButtonVisible = !1
            }
        })
    },
    closeForm: function() {
        var b = this,
        c = windowWidth / 4 + this.formConfig.scrollbarWidth,
        c = Math.max(300, c);
        this.formBackground.animate({
            left: -(b.width + b.formConfig.scrollbarWidth + 20)
        },
        400,
        function() {
            b.showing = !1
        })
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.formBackground).css(d[0], b + "px");
        $(this.formBackground).css(d[1], c + "px")
    },
    initScrollEvent: function() {
        var b = this;
        $(this.scrollBox).bind(_event._down,
        function(c) {
            b.scrollMouseDown = !0;
            isBookmarkDrag = !1;
            c = isTouch ? c.originalEvent.touches: [c];
            b.mouseDownY = c[0].pageY;
            $.browser.msie ? event.cancelBubble = !0 : event.stopPropagation()
        });
        $(this.scrollBox).bind(_event._move,
        function(c) {
            b.scrollMouseDown && (c = isTouch ? c.originalEvent.touches: [c], Math.abs(b.mouseDownY - c[0].pageY))
        });
        $(this.scrollBox).bind(_event._end,
        function(c) {
            b.scrollMouseDown = !1
        })
    }
}).extend(form),
phoneTableContent = Class({
    create: function(b, c) {
        this.contentBox = c;
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miTableOfContent").title.height();
        this.formConfig = $.extend({
            width: this.width,
            height: this.height,
            scrollbarWidth: 13
        },
        b);
        this.scrollMouseDown = !1;
        this.mouseDownY = -1;
        this.changeScrollHeight = !0;
        this.contentBac = colorDiv(bookConfig.toolbarColor, 30);
        this.showing = !1;
        this.itemArr = [];
        this.scrollMask = $("<div id='scrollMask' style = \"position : absolute;overflow:hidden;\"></div>");
        this.scrollBox = $("<div id='scrollBox'></div>");
        $(this.contentBox).append(this.scrollMask);
        $(this.scrollMask).append(this.scrollBox);
        this.scrollBox.css({
            width: this.width + "px",
            background: this.contentBac
        });
        this.scrollMask.css({
            width: this.width + "px",
            height: this.height + "px",
            background: this.contentBac
        });
        this.initScrollEvent();
        this.scrollMask.css({
            "border-top": "1px solid " + colorAdd(bookConfig.toolbarColor, 40)
        });
        this.contentColor = this.contentBac;
        this.showForm();
        this.isDrag = !1
    },
    initStyle: function() {},
    onResize: function(b, c) {
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miTableOfContent").title.height();
        this.scrollBox.css({
            width: this.width + "px"
        });
        this.scrollMask.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        for (var d = 0; d < this.itemArr.length; d++) this.itemArr[d].onResize(this.width - 30)
    },
    showForm: function() {
        this.showing = !0;
        if (void 0 == this.addContentDown || null == this.addContentDown) this.addContentDown = !1;
        if (!1 == this.addContentDown) try {
            this.addContent(ols, !1),
            clearProgressBar(this.contentBox),
            this.addContentDown = !0
        } catch(b) {
            $("#btnTableOfContent").css({
                display: "none"
            }),
            bookConfig.TableOfContentButtonVisible = !1
        }
    },
    initScrollEvent: function() {
        if (isPhone() || isPad()) this.scrollMask.css({
            "overflow-y": "auto",
            "overflow-x": "hidden",
            "-webkit-overflow-scrolling": "touch"
        });
        else {
            var b = $("<link rel='stylesheet' href='" + bookConfig.UIBaseURL + "style/scrollbar.css'/>");
            $("body").append(b);
            this.scrollMask.css({
                overflow: "hidden"
            });
            ScrollFunction(this.scrollMask, this.scrollBox, this)
        }
    }
}).extend(tableContent);
bdor.l = bdor.i(10);
Class("Thickness", {
    create: function(b, c, d) {
        this.thicknessObj = $('<div style="overflow:hidden"></div>');
        this.parent = b;
        this.isRightToLeftBook = parseBool(bookConfig.RightToLeft);
        this.evenPageCount = bookConfig.totalPageCount;
        1 == this.evenPageCount % 2 && this.evenPageCount++;
        this.imageWidth = c;
        this.getMaxWidth();
        this.scale = 1;
        this.visible = !0;
        this.hint = null;
        this.isSingleBook = !!d;
        this.init();
        this.initShadow();
        this.initHint()
    },
    getMaxWidth: function() {
        var b = Math.min(bookConfig.totalPageCount, 100);
        this.maxWidth = $.easing.easeOutQuad(null, b, 0, this.imageWidth, 100);
        this.maxWidth = Math.floor(this.maxWidth);
        this.maxWidthZoom = 1
    },
    getWidth: function() {
        return this.visible ? Math.ceil(this.thicknessWidth * this.scale) : 0
    },
    init: function() {
        this.topPart = $("<div style='position:relative;height:50px;width:" + this.imageWidth + "px;overflow:hidden;'></div>");
        this.centerPart = $("<div style='position:relative;height:auto;width:" + this.imageWidth + "px;overflow:hidden;'></div>");
        this.bottomPart = $("<div style='position:relative;height:50px;width:" + this.imageWidth + "px;overflow:hidden;'></div>");
        this.fillThicknessImage();
        this.thicknessObj.append(this.topPart);
        this.thicknessObj.append(this.centerPart);
        this.thicknessObj.append(this.bottomPart);
        this.parent.append(this.thicknessObj)
    },
    fillThicknessImage: virtual_function,
    initHint: function() {
        this.thicknessObj.bind("mousemove",
        function(b) {
            $(b.target);
            var c = b.offsetX;
            void 0 == c && (c = b.pageX - this.thicknessObj.offset().left);
            c = this.pageIndexByPosition(c);
            if ( - 1 != c) {
                var c = " " + getShownPageNumber(c) + " ",
                d = b.pageX;
                b = b.pageY - 30;
                null == this.hint && (this.hint = new divHint(c, d, b));
                this.hint.setText(c);
                this.hint.show(d, b);
                this.hint.moveto(d, b)
            } else null != this.hint && this.hint.hide()
        }.bind(this));
        this.thicknessObj.bind("mouseleave",
        function() {
            null != this.hint && this.hint.hide()
        }.bind(this));
        this.thicknessObj.bind("click",
        function(b) {
            $(b.target);
            var c = b.offsetX;
            void 0 == c && (c = b.pageX - this.thicknessObj.offset().left);
            b = this.pageIndexByPosition(c);
            c = BookInfo.getBook().currentPageIndex;
            bookType == BookType.single_book && (c = singlePageBook.currentPageIndex);
            var d = c + 1;
            bookType == BookType.single_book && (d = -1); - 1 != b && b != c && b != d && gotoPageFun(b)
        }.bind(this))
    },
    pageIndexByPosition: virtual_function,
    initShadow: function() {
        this.shadowContent = $("<div></div>");
        this.shadowContent.css({
            perspective: 500,
            "-webkit-perspective": 500,
            "-moz-perspective": 500,
            "-ms-perspective": 500,
            top: "3px"
        });
        this.shadowObj = $('<div style="width:100%;height:100%;"></div>');
        this.shadowObj.css({
            "transform-style": "preserve-3d",
            "-webkit-transform-style": "preserve-3d",
            "-moz-transform-style": "preserve-3d",
            "-ms-transform-style": "preserve-3d",
            "background-color": "#CCCCCC"
        });
        this.initShadowStyle();
        this.shadowContent.append(this.shadowObj);
        this.parent.append(this.shadowContent);
        $.browser.msie && 11 > $.browser.version && this.shadowContent.css({
            display: "none"
        })
    },
    initShadowStyle: virtual_function,
    onResize: function() {
        this.contentWidth = $(this.parent).width();
        this.contentHeight = $(this.parent).height();
        this.maxWidthZoom = Math.min(1, this.contentHeight / 800);
        this.maxWidthZoom = $.easing.swing(null, Math.max(this.maxWidth - 8, 0), 1, this.maxWidthZoom - 1, this.imageWidth - 8);
        this.thicknessObj.css({
            height: this.contentHeight
        });
        this.shadowContent.css({
            height: this.contentHeight - 6
        });
        this.centerPart.css({
            height: Math.max(0, this.contentHeight - 100)
        });
        this.centerPart.find("img").css({
            height: this.contentHeight
        });
        var b = this.getPageIndex();
        this.resetPosition(b);
        this.resetScale(b)
    },
    getPageIndex: function() {
        var b = 1;
        BookInfo.getBook() && (b = BookInfo.getBook().currentPageIndex);
        return b
    },
    getThicknessWidth: virtual_function,
    resetPosition: virtual_function,
    resetScale: virtual_function,
    setMinScale: function(b) {
        this.minScale = Math.min(b / this.maxWidth, 1)
    },
    setScale: function(b) {
        this.scale = b;
        this.scaleThickness()
    },
    doResetScale: function(b, c) {
        this.scale = c ? 1 == b ? this.minScale: 1 : b == this.evenPageCount ? this.minScale: 1;
        this.scaleThickness()
    },
    doSetMovingScale: function(b, c, d, f) {
        if (1 != this.minScale) {
            if (f) {
                if (1 != b && 1 != c) return;
                1 == b ? (b = this.minScale, c = 1) : (b = 1, c = this.minScale)
            } else {
                if (b != this.evenPageCount && c != this.evenPageCount) return;
                b == this.evenPageCount ? (b = this.minScale, c = 1) : (b = 1, c = this.minScale)
            }
            f = this.contentWidth;
            this.isSingleBook && (b = this.minScale, c = 1, f = 2 * this.contentWidth);
            void 0 == d && (d = f);
            isNaN(d) || (d = $.easing.easeInOutSine(null, d, b, c - b, f), this.setScale(d))
        }
    },
    scaleThickness: virtual_function,
    hide: function() {
        this.thicknessObj.css("display", "none");
        this.shadowContent.css("display", "none");
        this.visible = !1
    },
    show: function() {
        this.thicknessObj.css("display", "block");
        this.shadowContent.css("display", "block");
        this.visible = !0
    },
    setVisible: function(b) {
        b ? this.show() : this.hide()
    }
});
Class("LeftThickness", {
    initShadowStyle: function(b) {
        void 0 == b && (b = 1);
        this.shadowObj.css({
            transform: "rotateY(-20deg) scaleX(" + b + ") scaleZ(1)",
            "-webkit-transform": "rotateY(-20deg) scaleX(" + b + ") scaleZ(1)",
            "-moz-transform": "rotateY(-20deg) scaleX(" + b + ") scaleZ(1)",
            "-ms-transform": "rotateY(-20deg) scaleX(" + b + ") scaleZ(1)",
            "-webkit-box-shadow": "-3px 0px 6px rgba(125, 125, 125, 0.7)",
            "-moz-box-shadow": "-3px 0px 6px rgba(125, 125, 125, 0.7)",
            "-ms-box-shadow": "-3px 0px 6px rgba(125, 125, 125, 0.7)",
            "box-shadow": "-3px 0px 6px rgba(125, 125, 125, 0.7)"
        })
    },
    scaleThickness: function() {
        var b = {
            "-webkit-transform-origin": "100% 0%",
            "-moz-transform-origin": "100% 0%",
            "-ms-transform-origin": "100% 0%",
            "-o-transform-origin": "100% 0%",
            "transform-origin": "100% 0%",
            transform: "scaleX(" + this.scale + ") scaleZ(1)",
            "-webkit-transform": "scaleX(" + this.scale + ") scaleZ(1)",
            "-moz-transform": "scaleX(" + this.scale + ") scaleZ(1)",
            "-ms-transform": "scaleX(" + this.scale + ") scaleZ(1)"
        };
        this.thicknessObj.css(b);
        this.shadowContent.css(b);
        this.initShadowStyle(this.scale)
    },
    fillThicknessImage: function() {
        this.topPart.append("<img src='" + uiBaseURL + "thickness_left.png' style='position:absolute;width:100%;top:0px;' />");
        this.centerPart.append("<img src='" + uiBaseURL + "thickness_left.png' style='position:absolute;width:100%;top:-50px;' />");
        this.bottomPart.append("<img src='" + uiBaseURL + "thickness_left.png' style='position:absolute;width:100%;bottom:0px;' />")
    },
    getThicknessWidth: function(b) {
        var c = bookConfig.totalPageCount,
        d = Math.floor(this.maxWidth * this.maxWidthZoom);
        b = this.isRightToLeftBook ? c - b: b;
        bookConfig.HardPageEnable && 5 >= b && (b = 0);
        this.thicknessWidth = Math.floor(d * b / c);
        this.thicknessWidth = Math.max(this.thicknessWidth, 0);
        windowWidth < windowHeight && (this.thicknessWidth = 0)
    },
    resetPosition: function(b) {
        this.getThicknessWidth(b);
        b = transformCSS({
            tran: {
                x: this.thicknessWidth - this.imageWidth,
                y: 0
            }
        });
        this.topPart.css(b);
        this.centerPart.css(b);
        this.bottomPart.css(b);
        this.thicknessObj.css({
            width: this.thicknessWidth + "px",
            left: -this.thicknessWidth + "px",
            position: "absolute",
            "z-index": 0
        });
        b = Math.floor(this.thicknessWidth / Math.sin(7 * Math.PI / 18));
        this.shadowContent.css({
            width: b + "px",
            left: -this.thicknessWidth + 1 + "px",
            position: "absolute",
            "z-index": -1
        })
    },
    resetScale: function(b) {
        this.doResetScale(b, this.isRightToLeftBook)
    },
    setMovingScale: function(b, c, d) {
        this.doSetMovingScale(b, c, d, this.isRightToLeftBook)
    },
    pageIndexByPosition: function(b) {
        b = b + this.thicknessWidth - this.imageWidth;
        var c = this.thicknessWidth;
        if (0 < c - b && c - b <= c) {
            var d = bookConfig.totalPageCount,
            f = BookInfo.getBook().currentPageIndex;
            bookType == BookType.single_book && (f = singlePageBook.currentPageIndex); ! 0 == rightToLeft ? (b = Math.floor((d - f - 1) * (1 - (b - (c - c)) / c)), b += f + 1) : (b = Math.floor((f - 1) * (b - (c - c)) / c), b++);
            return b
        }
        return - 1
    }
}).extend(Thickness);
Class("RightThickness", {
    initShadowStyle: function(b) {
        void 0 == b && (b = 1);
        this.shadowObj.css({
            transform: "rotateY(20deg) scaleX(" + b + ") scaleZ(1)",
            "-webkit-transform": "rotateY(20deg) scaleX(" + b + ") scaleZ(1)",
            "-moz-transform": "rotateY(20deg) scaleX(" + b + ") scaleZ(1)",
            "-ms-transform": "rotateY(20deg) scaleX(" + b + ") scaleZ(1)",
            "-webkit-box-shadow": "3px 0px 6px rgba(125, 125, 125, 0.7)",
            "-moz-box-shadow": "3px 0px 6px rgba(125, 125, 125, 0.7)",
            "-ms-box-shadow": "3px 0px 6px rgba(125, 125, 125, 0.7)",
            "box-shadow": "3px 0px 6px rgba(125, 125, 125, 0.7)"
        })
    },
    scaleThickness: function() {
        var b = {
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            transform: "scaleX(" + this.scale + ") scaleZ(1)",
            "-webkit-transform": "scaleX(" + this.scale + ") scaleZ(1)",
            "-moz-transform": "scaleX(" + this.scale + ") scaleZ(1)",
            "-ms-transform": "scaleX(" + this.scale + ") scaleZ(1)"
        };
        this.thicknessObj.css(b);
        this.shadowContent.css(b);
        this.initShadowStyle(this.scale)
    },
    fillThicknessImage: function() {
        this.topPart.append("<img src='" + uiBaseURL + "thickness.png' style='position:absolute;width:100%;top:0px;' />");
        this.centerPart.append("<img src='" + uiBaseURL + "thickness.png' style='position:absolute;width:100%;top:-50px;' />");
        this.bottomPart.append("<img src='" + uiBaseURL + "thickness.png' style='position:absolute;width:100%;bottom:0px;' />")
    },
    getThicknessWidth: function(b) {
        var c = bookConfig.totalPageCount,
        d = Math.floor(this.maxWidth * this.maxWidthZoom);
        b = this.isRightToLeftBook ? b: c - b;
        bookConfig.HardPageEnable && 5 >= b && (b = 0);
        this.thicknessWidth = Math.floor(d * b / c);
        this.thicknessWidth = Math.max(this.thicknessWidth, 0);
        windowWidth < windowHeight && (this.thicknessWidth = 0)
    },
    resetPosition: function(b) {
        this.getThicknessWidth(b);
        var c = this.contentWidth;
        1 != b || this.isRightToLeftBook || (c = this.contentWidth - 1);
        this.thicknessObj.css({
            width: this.thicknessWidth + "px",
            left: c + "px",
            position: "absolute",
            "z-index": 0
        });
        this.shadowContent.css({
            width: this.thicknessWidth + "px",
            left: this.contentWidth - 1 + "px",
            position: "absolute",
            "z-index": -1
        })
    },
    resetScale: function(b) {
        this.doResetScale(b, !this.isRightToLeftBook)
    },
    setMovingScale: function(b, c, d) {
        this.doSetMovingScale(b, c, d, !this.isRightToLeftBook)
    },
    pageIndexByPosition: function(b) {
        var c = this.thicknessWidth;
        if (0 < b && b <= c) {
            var d = bookConfig.totalPageCount,
            f = BookInfo.getBook().currentPageIndex; ! 0 == rightToLeft ? (b = Math.floor((f - 1) * (1 - b / c)), b++) : (b = Math.floor((d - f - 1) * b / c), b += f + 1);
            return b
        }
        return - 1
    }
}).extend(Thickness);
var flipShotBar = Class({
    create: function(b) {
        this.flipShotObj = $("<div id='flipShotObj' class='flipShotObj'></div>");
        b ? (this.prevDiv = $("<div class='flipShot'></div>"), this.firstDiv = $("<div class='flipShot'></div>"), this.prevDiv.append("<div class='flipShotBackground'></div>"), this.firstDiv.append("<div class='flipShotBackground'></div>"), this.prevDiv.append("<img src='" + uiBaseURL + "slide_leftButton.png' />"), this.firstDiv.append("<img src='" + uiBaseURL + "slide_firstButton.png' />")) : (this.prevDiv = $("<div class='flipShot'></div>"), this.firstDiv = $("<div class='flipShot'></div>"), this.prevDiv.append("<div class='flipShotBackground'></div>"), this.firstDiv.append("<div class='flipShotBackground'></div>"), this.prevDiv.append("<img src='" + uiBaseURL + "slide_rightButton.png'/>"), this.firstDiv.append("<img src='" + uiBaseURL + "slide_lastButton.png'/>"));
        this.flipShotObj.append(this.firstDiv);
        this.flipShotObj.append(this.prevDiv);
        this.isLeft = b;
        this.visible = !0;
        this.init();
        this.initEvents()
    },
    init: function() {
        this.enterCss = {
            background: "#ffffff",
            "-webkit-box-shadow": "0 0 15px rgba(255, 255, 255, 1)",
            "-moz-box-shadow": "0 0 15px rgba(255, 255, 255, 1)",
            "-o-box-shadow": "0 0 15px rgba(255, 255, 255, 1)",
            "-ms-box-shadow": "0 0 15px rgba(255, 255, 255, 1)",
            "box-shadow": "0 0 15px rgba(255, 255, 255, 1)"
        };
        this.leaveCss = {
            background: "#727272",
            "-webkit-box-shadow": "0 0 15px rgba(114, 114, 114, 1)",
            "-moz-box-shadow": "0 0 15px rgba(114, 114, 114, 1)",
            "-o-box-shadow": "0 0 15px rgba(114, 114, 114, 1)",
            "-ms-box-shadow": "0 0 15px rgba(114, 114, 114, 1)",
            "box-shadow": "0 0 15px rgba(114, 114, 114, 1)"
        };
        this.prevDiv.css({
            width: "100%",
            height: "80%",
            position: "relative",
            "border-radius": "0px 0px 0px 5px"
        });
        this.firstDiv.css({
            width: "100%",
            height: "20%",
            position: "relative",
            "border-bottom": "1px solid #ffffff"
        });
        this.prevDiv.find("div").css(this.leaveCss);
        this.firstDiv.find("div").css(this.leaveCss);
        this.isLeft ? (this.firstDiv.find("div").css({
            "border-radius": "5px 0px 0px 0px"
        }), this.prevDiv.find("div").css({
            "border-radius": "0px 0px 0px 5px"
        })) : (this.firstDiv.find("div").css({
            "border-radius": "0px 5px 0px 0px"
        }), this.prevDiv.find("div").css({
            "border-radius": "0px 0px 5px 0px"
        }))
    },
    onResize: function(b, c) {
        var d = Math.min(50, 0.7 * c / 8),
        f = Math.min(0.7 * c, 310);
        this.width = d;
        this.height = f;
        this.flipShotObj.css({
            width: d,
            height: f
        });
        this.setThicknessPosition(b, c)
    },
    setThicknessPosition: function(b, c) {
        this.flipShotObj.css({
            left: this.isLeft ? 1 - this.width: "100%",
            top: (c - this.height) / 2,
            position: "absolute"
        })
    },
    hideThickness: function() {
        this.flipShotObj.css("display", "none")
    },
    showThickness: function() {
        this.flipShotObj.css("display", "block")
    },
    setVisible: function(b) {
        this.flipShotObj.css({
            display: b ? "block": "none"
        });
        this.visible = b
    },
    getContainer: function() {
        return this.flipShotObj
    },
    initEvents: function() {
        this.isLeft ? (this.prevDiv.bind(_event._end,
        function(b) {
            rightToLeft ? nextPageFun() : previousPageFun()
        }), this.firstDiv.bind(_event._end,
        function(b) {
            rightToLeft ? lastPageFun() : firstPageFun()
        })) : (this.prevDiv.bind(_event._end,
        function(b) {
            rightToLeft ? previousPageFun() : nextPageFun()
        }), this.firstDiv.bind(_event._end,
        function(b) {
            rightToLeft ? firstPageFun() : lastPageFun()
        }));
        this.prevDiv.bind(_event._down + " " + _event._enter,
        function() {
            this.prevDiv.find("div").css(this.enterCss)
        }.bind(this));
        this.firstDiv.bind(_event._down + " " + _event._enter,
        function() {
            this.firstDiv.find("div").css(this.enterCss)
        }.bind(this));
        this.prevDiv.bind(_event._leave,
        function() {
            this.prevDiv.find("div").css(this.leaveCss)
        }.bind(this));
        this.firstDiv.bind(_event._leave,
        function() {
            this.firstDiv.find("div").css(this.leaveCss)
        }.bind(this));
        isTouch && (this.prevDiv.bind(_event._end,
        function() {
            this.prevDiv.find("div").css(this.leaveCss)
        }.bind(this)), this.firstDiv.bind(_event._end,
        function() {
            this.firstDiv.find("div").css(this.leaveCss)
        }.bind(this)))
    },
    setScale: function(b) {
        this.width *= b;
        this.height *= b;
        this.flipShotObj.css({
            width: this.width,
            height: this.height
        })
    }
}),
VideoGallery = Class({
    create: function(b, c) {
        this.videoGalleryFlag = !1;
        this.newVideoData = [];
        this.setDataFalg = [];
        c || (c = []);
        this.videoData = this.formatData(c);
        this.createVideoGallery(b)
    },
    formatData: function(b) {
        for (var c = [], d = 0; d < b.length; d++) {
            this.setDataFalg[d] = !1;
            var f = b[d];
            c.push({
                type: f.type,
                id: f.id,
                src: f.thumbnail,
                des: this.encodeHTML(f.description),
                title: this.encodeHTML(f.title)
            })
        }
        return c
    },
    createVideoGallery: function(b) {
        var c = this;
        this.videoBG = $("<div style='position: absolute; left: 0px;top: 0px;bottom: 0px;right: 0px; z-index: 9999;'></div>").hide().append($("<div class='flipHTML5VideoGallery-BG'></div>")).appendTo(b);
        this.videoGallery = $("<div class='flipHTML5VideoGallery'></div>").appendTo(this.videoBG);
        b = $("<div style='position: absolute;left: 0px;top: 0px;width: 100%;height: 34px;background-color: #373737;'></div>").appendTo(this.videoGallery);
        var d = $("<div class='flipHTML5VideoGallery-close' style='width: 26px;height: 26px;bottom: 4px;right: 4px;'></div>").attr("title", "Close").append($("<img style='margin-left: 4px;margin-top: 4px;'/>").attr("src", uiBaseURL + "note_close.png")).appendTo(b),
        f = $("<span class='flipHTML5VideoGallery-closeTitle'></span>").html("close").hide().appendTo(this.videoBG);
        this.videoTitle = $("<span class='flipHTML5VideoGallery-videoTitle'></span>").appendTo(b);
        this.videoGallery.on({
            "mouseover touchstart": function(b) {
                f.hide();
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            },
            "mouseout touchend": function(b) {
                f.hide();
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            },
            "mousemove touchmove": function(b) {
                f.hide();
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            },
            "click touchend": function(b) {
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            }
        });
        this.videoBG.add(d).on({
            "mouseover touchstart": function(b) {
                try {
                    var d = b.pageY || b.originalEvent.touches[0].pageY;
                    f.css({
                        left: (b.pageX || b.originalEvent.touches[0].pageX) - 17,
                        top: d + 28 > c.videoBG.height() - 15 ? d - 28 : d + 28
                    }).show()
                } catch(k) {
                    Log.error(k)
                }
            },
            "mouseout touchend": function(b) {
                f.hide()
            },
            "mousemove touchmove": function(b) {
                try {
                    var d = b.pageY || b.originalEvent.touches[0].pageY;
                    f.css({
                        left: (b.pageX || b.originalEvent.touches[0].pageX) - 17,
                        top: d + 28 > c.videoBG.height() - 15 ? d - 28 : d + 28
                    })
                } catch(k) {
                    Log.error(k)
                }
            },
            "click touchend": function(b) {
                c.hide()
            }
        });
        b = $("<div style='position: absolute;width: 100%;left: 0px;top: 34px;height: 388px;background-color: #C7C7C7;'></div>").appendTo(this.videoGallery);
        d = $("<div class='flipHTML5VideoGallery-videoDiv'></div>").appendTo(b);
        d.append("<div class='flipHTML5Loading' style='width: 100%;height: 100%;position: absolute;left: 0px;top: 0px;'></div>");
        this.videoFrame = $("<iframe type='text/html' name='iName' id='iId' width='504' height='370' src='' allowfullscreen frameborder='0' style='position: absolute;left: 0px;top: 0px;background-color: #222222;z-index: 2;'></iframe>").appendTo(d);
        this.videoListDiv = $("<div class='flipHTML5VideoGallery-videoListDiv'></div>").appendTo(b);
        this.createVideoList(this.videoListDiv)
    },
    createVideoList: function(b) {
        var c = this.videoData,
        d = c.length,
        f = 72 * d + 6 * (d - 1),
        f = 0 < f ? f: 0;
        this.videoListDiv.css({
            height: 370 < f ? 370 : f
        });
        b = $("<div class='flipHTML5VideoGallery-videoListTable' style='position: absolute;width: 100%;height: 100%;left: 0px;top: 0px;overflow: hidden;'></div>").appendTo(b);
        f = $("<div class='flipHTML5VideoGallery-videoList' style='position: absolute;left: 0px;top: 0px;'></div>").css({
            width: 313,
            height: f
        }).appendTo(b);
        this.table = b;
        this.list = f;
        this.createScrollBar(b, b, f);
        for (var g = 0; g < d; g++) this.createEachList(f, g, c[g]);
        this.scrollBarShowHide(b, f)
    },
    createEachList: function(b, c, d) {
        var f = this; (function(c) {
            var h = $("<div class='flipHTML5VideoGallery-eachVideo' style='position: absolute;cursor: pointer;'></div>").css({
                width: 320,
                height: 72,
                left: 0,
                top: 78 * c
            }).attr("id", "flipHTML5VideoGallery-eachVideo" + c).appendTo(b),
            k = $("<div class='flipHTML5Loading' style='position: absolute;width: 68px; height: 68px; top: 1px;left: 2px;border: 1px solid #ffffff;background-color: #E2E2E2;'></div>").append($("<img style='position: absolute;width: 100%;height: 100%;left: 0px;top: 0px;'/>").attr("id", "flipHTML5VideoGallery-eachImg" + c)).appendTo(h),
            l = $("<div style='position: absolute;width: 247px;height: 100%;left: 72px;overflow: hidden;'></div>").append($("<span class='flipHTML5VideoGallery-eachVideoDes'></span>").attr("id", "flipHTML5VideoGallery-eachDes" + c)).appendTo(h),
            m = f.videoData[c];
            m.src && m.des && m.title ? (f.setDataFalg[c] = !0, h.on("click touchend",
            function() {
                f.setVideoID(m)
            }), l.children("span").html(m.des).attr("title", m.des), f.loadImg(m.src, k.children("img"), 68, 68)) : f.getVideoData(d.type, d.id,
            function(b) {
                f.setDataFalg[c] = !0;
                h.on("click touchend",
                function() {
                    f.setVideoID({
                        type: b.type,
                        id: b.id,
                        src: m.src || b.src,
                        des: m.des || b.des,
                        title: m.title || b.title
                    })
                });
                l.children("span").html(m.des || b.des).attr("title", m.des || b.des);
                f.loadImg(m.src || b.src, k.children("img"), 68, 68)
            })
        })(c)
    },
    setEachListData: function() {
        for (var b = this,
        c = 0; c < this.videoData.length; c++)(function(c) {
            if (!b.setDataFalg[c]) {
                var f = b.videoData[c],
                g = b.videoData[c];
                f.src && f.des && f.title ? (b.setDataFalg[c] = !0, b.list.find("#flipHTML5VideoGallery-eachVideo" + c).on("click touchend",
                function() {
                    b.setVideoID(f)
                }), b.list.find("#flipHTML5VideoGallery-eachDes" + c).html(f.des).attr("title", f.des), b.loadImg(f.src, b.list.find("#flipHTML5VideoGallery-eachImg" + c), 68, 68)) : b.getVideoData(g.type, g.id,
                function(g) {
                    b.setDataFalg[c] = !0;
                    b.list.find("#flipHTML5VideoGallery-eachVideo" + c).on("click touchend",
                    function() {
                        b.setVideoID({
                            type: g.type,
                            id: g.id,
                            src: f.src || g.src,
                            des: f.des || g.des,
                            title: f.title || g.title
                        })
                    });
                    b.list.find("#flipHTML5VideoGallery-eachDes" + c).html(f.des || g.des).attr("title", f.des || g.des);
                    b.loadImg(f.src || g.src, b.list.find("#flipHTML5VideoGallery-eachImg" + c), 68, 68)
                })
            }
        })(c)
    },
    loadImg: function(b, c, d, f) {
        var g = new Image;
        g.onload = function() {
            g.onload = g.onerror = null;
            c.parent().removeClass("flipHTML5Loading");
            var b = this.width / this.height,
            k = f * b,
            l = d / b;
            k > f ? c.css({
                width: f,
                height: l,
                top: (f - l) / 2,
                left: 0
            }) : l > f ? c.css({
                width: k,
                height: f,
                left: (f - k) / 2,
                top: 0
            }) : k / l == b && c.css({
                width: k,
                height: l,
                left: 0,
                top: 0
            })
        };
        g.onerror = function() {
            g.onload = g.onerror = null;
            c.parent().removeClass("flipHTML5Loading");
            c.css({
                width: 18,
                height: 20,
                left: (d - 18) / 2,
                top: (f - 20) / 2
            })
        };
        c[0].src = b;
        g.src = b
    },
    setVideoID: function(b) {
        var c;
        "youtube" === b.type && (c = "http://www.youtube.com/embed/" + b.id + "?autoplay=1&wmode=transparent");
        "vimeo" === b.type && (c = "http://player.vimeo.com/video/" + b.id + "?autoplay=1&wmode=transparent&portrait=0");
        this.videoFrame[0].src = c;
        this.videoTitle.html(b.title)
    },
    getVideoData: function(b, c, d) {
        "youtube" === b ? this.getYouTubeData(c, d) : "vimeo" === b && this.getVimeoData(c, d)
    },
    getYouTubeData: function(b, c) {
        $.getJSON("http://gdata.youtube.com/feeds/api/videos/" + b + "?v=2&alt=jsonc",
        function(b) {
            b = b.data;
            c({
                type: "youtube",
                id: b.id,
                title: b.title,
                des: b.description,
                src: b.thumbnail.sqDefault
            })
        })
    },
    getVimeoData: function(b, c) {
        $.getJSON("http://www.vimeo.com/api/v2/video/" + b + ".json?callback=?", {
            format: "json"
        },
        function(b) {
            b = b[0];
            c({
                type: "vimeo",
                id: b.id,
                title: b.title,
                des: b.description,
                src: b.thumbnail_medium
            })
        })
    },
    hide: function() {
        this.videoGalleryFlag = !1;
        this.videoBG.hide();
        this.videoFrame[0].src = ""
    },
    show: function() {
        var b = this;
        this.videoGalleryFlag = !0;
        this.setEachListData();
        if (0 < this.videoData.length) {
            var c = this.videoData[0];
            c.src && c.des && c.title ? b.setVideoID(c) : b.getVideoData(c.type, c.id,
            function(d) {
                b.setVideoID({
                    type: d.type,
                    id: d.id,
                    src: c.src || d.src,
                    des: c.des || d.des,
                    title: c.title || d.title
                })
            })
        }
        this.videoBG.show();
        this.scrollBarShowHide(this.table, this.list)
    },
    showHide: function() {
        this.videoGalleryFlag ? this.hide() : this.show()
    },
    createScrollBar: function(b, c, d) {
        b = $("<div>", {
            "class": "ScrollBar",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                backgroundColor: "#a8a8a8",
                borderRadius: 0,
                right: 0,
                top: 0,
                borderLeft: "1px solid #ffffff"
            }
        }).appendTo(b);
        var f = $("<div>", {
            "class": "OuterScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                left: 0,
                top: 0,
                backgroundColor: "transparent",
                borderRadius: 0,
                overflow: "hidden",
                cursor: "pointer"
            }
        }).appendTo(b);
        $("<div>", {
            "class": "InnerScroll",
            css: {
                position: "absolute",
                width: 6,
                height: "100%",
                marginLeft: 0,
                marginRight: 0,
                left: 0,
                top: 0,
                backgroundColor: "#5e5e5e",
                borderRadius: 0,
                cursor: "pointer"
            }
        }).appendTo(f);
        this.scrollBar = b;
        this.outerScroll = f;
        this.bindScrollBarEvents(b, f, c, d)
    },
    scrollBarShowHide: function(b, c) {
        var d = b.outerHeight() * this.scrollBar.outerHeight() / c.outerHeight();
        this.outerScroll.css({
            height: d
        });
        b.height() >= c.height() ? (this.scrollBar.hide(), c.css({
            top: 0
        }), $(".flipHTML5VideoGallery-eachVideoDes").css({
            width: 231
        })) : (this.scrollBar.show(), $(".flipHTML5VideoGallery-eachVideoDes").css({
            width: 224
        }), Math.abs(parseFloat(c.css("top"))) > c.outerHeight() - b.outerHeight() && (c.css({
            top: -(c.outerHeight() - b.outerHeight())
        }), this.outerScroll.css({
            top: this.scrollBar.outerHeight() - this.outerScroll.outerHeight()
        })))
    },
    bindScrollBarEvents: function(b, c, d, f) {
        var g = this;
        c.on(_event._down,
        function(b) {
            var k = b || event,
            l = k.clientY - g.outerScroll.position().top,
            m = b.which;
            b.stopPropagation();
            1 == m && ($(document).add(g.outerScroll).add(g.videoGallery).on("mousemove.scrollBar touchmove.scrollBar",
            function(b) {
                b.preventDefault();
                b.stopPropagation();
                k = b || event;
                b = k.clientY - l;
                0 >= b ? b = 0 : b >= g.scrollBar.outerHeight() - g.outerScroll.outerHeight() && (b = g.scrollBar.outerHeight() - g.outerScroll.outerHeight());
                c.css({
                    top: b
                });
                f.css({
                    top: -b / (g.scrollBar.outerHeight() - g.outerScroll.outerHeight()) * (f.outerHeight() - d.outerHeight())
                })
            }), $(document).add(g.outerScroll).add(g.videoGallery).on("mouseup.scrollBar touchend.scrollBar",
            function(b) {
                b = b || event;
                b.preventDefault();
                b.stopPropagation();
                $(document).add(g.outerScroll).add(g.videoGallery).off("mousemove.scrollBar touchmove.scrollBar");
                $(document).add(g.outerScroll).add(g.videoGallery).off("mouseup.scrollBar touchend.scrollBar")
            }))
        });
        d.bind($.browser.mozilla ? "DOMMouseScroll": "mousewheel",
        function(g) {
            if (! (d.outerHeight() >= f.outerHeight())) {
                var k = g.originalEvent,
                k = k.wheelDelta || -k.detail,
                l = f.position().top,
                m;
                f.stop(!1, !1);
                0 < k ? m = 0 > l + d.outerHeight() / 11 ? l + d.outerHeight() / 11 : 0 : 0 > k && (m = f.outerHeight() - d.outerHeight() > -(l - d.outerHeight() / 11) ? l - d.outerHeight() / 11 : -(f.outerHeight() - d.outerHeight()));
                f.css({
                    top: m
                });
                c.css({
                    top: -m / (f.outerHeight() - d.outerHeight()) * (b.outerHeight() - c.outerHeight())
                });
                g.stopPropagation();
                g.preventDefault();
                return ! 1
            }
        });
        g.list.on("mousedown.pad touchstart.pad",
        function(b) {
            var c = parseInt(g.list.css("top")),
            d = g.table.height(),
            f = g.list.outerHeight(),
            n = b.pageY || b.originalEvent.touches[0].pageY;
            g.table.on("mousemove.pad touchmove.pad",
            function(b) {
                b = c + ((b.pageY || b.originalEvent.touches[0].pageY) - n);
                b = 0 < b ? 0 : b < d - f ? d - f: b;
                g.list.css({
                    top: b
                })
            });
            g.table.on("mouseup.pad touchend.pad",
            function(b) {
                g.table.off("mousemove.pad touchmove.pad");
                g.table.off("mouseup.pad touchend.pad")
            })
        })
    },
    encodeHTML: function(b) {
        return b ? b.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\\/g, "&#92;").replace(/"/g, "&quot;").replace(/'/g, "&#39;").replace(/\n/g, "<br>") : b
    }
}),
PhotoGallery = Class({
    create: function(b, c) {
        this.$container = b;
        this.photoArr = this.formatData(c);
        this.currentIndex = 0;
        this.photoFlag = !1;
        this.originals = [];
        this.createPhotoGallery(b)
    },
    formatData: function(b) {
        for (var c = [], d = 0; d < b.length; d++) {
            var f = b[d];
            c.push({
                src: f,
                thumbSrc: f,
                title: this.getFileNameByFilePath(f)
            })
        }
        return c
    },
    getFileNameByFilePath: function(b) {
        var c = b.lastIndexOf("/"),
        d = b.lastIndexOf("\\"),
        c = Math.max(c, d);
        if (0 > c) return c = b.lastIndexOf("."),
        b.substring(0, c);
        b = b.substring(c + 1);
        c = b.lastIndexOf(".");
        return b.substring(0, c)
    },
    createPhotoGallery: function(b) {
        var c = this;
        this.photoBG = $("<div style='position: absolute; left: 0px;top: 0px;bottom: 0px;right: 0px; z-index: 9999;'></div>").append($("<div class='flipHTML5PhotoGallery-BG'></div>").css({
            opacity: 0.5
        })).hide().appendTo(b);
        this.closeBtn = $("<div style='position: absolute;left: auto;right: 0px;top: 0px;cursor: pointer;'></div>").append($("<img/>").attr("src", uiBaseURL + "photoGallery_close.png")).appendTo(this.photoBG);
        this.outPhotoGallery = $("<div class='flipHTML5PhotoGallery'></div>").css({
            left: (this.photoBG.width() - 328) / 2,
            top: (this.photoBG.height() - 328) / 2
        }).appendTo(this.photoBG);
        this.photoGallery = $("<div class='flipHTML5Loading' style='position: absolute;left: 0px;top: 0px;right: 0px;bottom: 0px;overflow: hidden;'></div>").appendTo(this.outPhotoGallery);
        this.mimCloseBtn = $("<div style='position: absolute;left: auto;right: -20px;top: -20px;cursor: pointer;'></div>").append($("<img/>").attr("src", uiBaseURL + "close.png")).appendTo(this.outPhotoGallery);
        this.photoImg = $("<img class='flipHTML5PhotoGallery-img' style='position: absolute;'/>").appendTo(this.photoGallery);
        this.prevBtn = $("<div class='flipHTML5PhotoGallery-prevBtn'></div>").css({
            left: -32
        }).append($("<img/>").attr("src", uiBaseURL + "photo_prev.png")).appendTo(this.photoGallery);
        this.nextBtn = $("<div class='flipHTML5PhotoGallery-nextBtn'></div>").css({
            right: -32
        }).append($("<img style='margin-top: 1px;'/>").attr("src", uiBaseURL + "photo_next.png")).appendTo(this.photoGallery);
        this.closeTitle = $("<span class='flipHTML5PhotoGallery-closeTitle'></span>").html("close").hide().appendTo(this.photoBG);
        this.mimCloseBtn.on({
            "mouseover touchstart": function(b) {
                c.mimCloseBtn.children("img")[0].src = uiBaseURL + "close_down.png";
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            },
            "mouseout touchend": function(b) {
                c.mimCloseBtn.children("img")[0].src = uiBaseURL + "close.png";
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            }
        });
        this.mimCloseBtn.on("click mousemove touchmove",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.prevBtn.on("click",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            c.prev(1);
            return ! 1
        });
        this.nextBtn.on("click",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            c.next(1);
            return ! 1
        });
        this.outPhotoGallery.on({
            "mouseover touchstart": function(b) {
                c.closeTitle.hide();
                b.preventDefault();
                b.stopPropagation();
                try {
                    var f = $(this).position().left,
                    g = (b.pageX || b.originalEvent.touches[0].pageX) - f,
                    h = $(this).outerWidth() / 2;
                    g <= h ? (c.prevBtn.stop(!1, !1).animate({
                        left: 0
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }), c.nextBtn.stop(!1, !1).animate({
                        right: -32
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    })) : (c.prevBtn.stop(!1, !1).animate({
                        left: -32
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }), c.nextBtn.stop(!1, !1).animate({
                        right: 0
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }))
                } catch(k) {
                    Log.error(k)
                }
                return ! 1
            },
            "mouseout touchend": function(b) {
                b.preventDefault();
                b.stopPropagation();
                c.closeTitle.hide();
                c.prevBtn.stop(!1, !1).animate({
                    left: -32
                },
                {
                    duration: 60,
                    easing: "linear"
                });
                c.nextBtn.stop(!1, !1).animate({
                    right: -32
                },
                {
                    duration: 60,
                    easing: "linear"
                });
                return ! 1
            },
            "mousemove touchmove": function(b) {
                b.preventDefault();
                b.stopPropagation();
                c.closeTitle.hide();
                try {
                    var f = $(this).position().left,
                    g = (b.pageX || b.originalEvent.touches[0].pageX) - f,
                    h = $(this).outerWidth() / 2;
                    g <= h ? (c.prevBtn.stop(!1, !1).animate({
                        left: 0
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }), c.nextBtn.stop(!1, !1).animate({
                        right: -32
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    })) : (c.prevBtn.stop(!1, !1).animate({
                        left: -32
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }), c.nextBtn.stop(!1, !1).animate({
                        right: 0
                    },
                    {
                        duration: 60,
                        easing: "linear"
                    }))
                } catch(k) {
                    Log.error(k)
                }
                return ! 1
            },
            click: function(b) {
                b.preventDefault();
                b.stopPropagation();
                try {
                    var f = c.outPhotoGallery.position().left,
                    g = (b.pageX || b.originalEvent.touches[0].pageX) - f,
                    h = c.outPhotoGallery.outerWidth() / 2;
                    g <= h ? c.prev(1) : c.next(1)
                } catch(k) {
                    Log.error(k)
                }
                return ! 1
            }
        });
        this.photoBG.add(this.mimCloseBtn).on({
            "mouseover touchstart": function(b) {
                try {
                    c.closeTitle.show();
                    var f = b.pageY || b.originalEvent.touches[0].pageY;
                    c.closeTitle.css({
                        left: (b.pageX || b.originalEvent.touches[0].pageX) - 17,
                        top: f + 28 > c.photoBG.height() - 15 ? f - 28 : f + 28
                    }).show()
                } catch(g) {
                    Log.error(g)
                }
            },
            "mouseout touchend": function(b) {
                c.closeTitle.hide()
            },
            "mousemove touchmove": function(b) {
                try {
                    var f = b.pageY || b.originalEvent.touches[0].pageY;
                    c.closeTitle.css({
                        left: (b.pageX || b.originalEvent.touches[0].pageX) - 17,
                        top: f + 28 > c.photoBG.height() - 15 ? f - 28 : f + 28
                    })
                } catch(g) {
                    Log.error(g)
                }
            },
            "click touchstart": function() {
                c.hide()
            }
        });
        this.createThumbs(this.photoBG);
        0 < this.photoArr.length && this.skipTo(0);
        window.onresize = function() {
            c.outPhotoGallery.css({
                left: (c.photoBG.width() - c.outPhotoGallery.outerWidth()) / 2,
                top: (c.photoBG.height() - c.outPhotoGallery.outerHeight()) / 2
            });
            if (0 < c.photoArr.length) {
                c.reviseThumb();
                c.thumbList && c.moveThumb(c.currentIndex);
                var b = c.photoBG.width(),
                f = c.photoBG.height() - 64,
                g = c.originals[c.currentIndex],
                h = c.resizeImgSize(b, f, g.width, g.height),
                g = h.width,
                h = h.height;
                c.photoImg.css({
                    left: 0,
                    top: 0,
                    width: g,
                    height: h
                });
                c.outPhotoGallery.css({
                    left: (b - g - 16) / 2,
                    top: (f - h - 16) / 2,
                    width: g,
                    height: h
                })
            }
        }
    },
    loadImg: function(b) {
        var c = this,
        d = c.photoBG.width(),
        f = c.photoBG.height() - 64,
        g = new Image;
        g.onload = function() {
            g.onload = g.onerror = null;
            var b = this.width,
            k = this.height,
            l = c.resizeImgSize(d, f, b, k);
            c.originals[c.currentIndex] = {
                width: b,
                height: k
            };
            c.photoImg.attr({
                originalWidth: b,
                originalHeight: k
            });
            b = l.width;
            k = l.height;
            c.photoImg.css({
                left: 0,
                top: 0,
                width: b,
                height: k
            });
            c.outPhotoGallery.stop(!1, !1).animate({
                left: (d - b - 16) / 2,
                top: (f - k - 16) / 2,
                width: b,
                height: k
            },
            {
                duration: 240,
                easing: "linear",
                complete: function() {
                    c.photoGallery.removeClass("flipHTML5Loading");
                    c.photoImg.fadeIn(500)
                }
            })
        };
        g.onerror = function() {
            g.onload = g.onerror = null;
            c.photoImg.css({
                left: (c.outPhotoGallery.width() - 18) / 2,
                top: (c.outPhotoGallery.height() - 20) / 2
            });
            c.originals[c.currentIndex] = {
                width: 18,
                height: 20
            };
            c.photoGallery.removeClass("flipHTML5Loading");
            c.photoImg.show().attr("src", b)
        };
        g.src = b;
        c.photoImg.attr("src", b)
    },
    resizeImgSize: function(b, c, d, f) {
        var g = d / f;
        d + 16 >= b && f + 16 >= c ? g >= b / c ? (d = b - 16, f = d / g) : (f = c - 16, d = f * g) : d + 16 >= b && f + 16 < c ? (d = b - 16, f = d / g) : d + 16 < b && f + 16 >= c && (f = c - 16, d = f * g);
        return {
            width: d,
            height: f
        }
    },
    next: function(b) {
        this.skipTo(this.currentIndex + (b ? b: 1))
    },
    prev: function(b) {
        this.skipTo(this.currentIndex - (b ? b: 1))
    },
    skipTo: function(b) {
        0 >= this.photoArr.length || (this.photoGallery.addClass("flipHTML5Loading"), this.photoImg.hide().attr("src", ""), b = this.formatIndex(b), this.loadImg(this.photoArr[b].src), this.currentIndex = b, this.thumbSkipTo(b))
    },
    formatIndex: function(b) {
        var c = this.photoArr.length;
        0 > b ? b = (b + c) % c: b >= c && (b %= c);
        return b
    },
    createThumbs: function(b) {
        var c = this,
        d = this.photoArr,
        f = d.length,
        g = 0 < f ? 54 * f + 4 * (f - 1) : 0;
        b = $("<div class='flipHTML5PhotoGallery-thumb'></div>").appendTo(b);
        var h = $("<div class='flipHTML5PhotoGallery-thumbView'></div>").appendTo(b),
        k = $("<div class='flipHTML5PhotoGallery-thumbList'></div>").css({
            width: g
        }).appendTo(h),
        l = $("<span class='flipHTML5PhotoGallery-thumbTitle'></span>").appendTo(b).hide();
        k.on({
            "mouseover touchstart": function(b) {
                c.closeTitle.hide()
            },
            "mousemove touchmove": function(b) {
                c.closeTitle.hide()
            },
            "click touchstart": function(b) {
                b.preventDefault();
                b.stopPropagation();
                return ! 1
            }
        });
        this.thumb = b;
        this.thumbView = h;
        this.thumbList = k;
        this.reviseThumb();
        this.mouseThumb();
        for (var m = 0; m < f; m++)(function(b) {
            var f = 58 * b,
            g = $("<div style='position: absolute;top: 0px;overflow: hidden;border: 2px solid #cccccc;cursor: pointer;'></div>").attr({
                id: "flipHTML5PhotoThumb" + b,
                "class": "flipHTML5Loading flipHTML5PhotoThumb"
            }).css({
                width: 50,
                height: 54,
                left: f
            }).appendTo(k),
            h = $("<img style='position: absolute;'/>").css({
                opacity: 0
            }).appendTo(g),
            r = $("<div style='position: absolute;left: 0px;right: 0px;top: 0px;bottom: 0px;background-color: #000000;'></div>").attr({
                id: "flipHTML5PhotoThumbBG" + b,
                "class": "flipHTML5PhotoThumbBG"
            }).css({
                opacity: 0.5
            }).appendTo(g),
            s = new Image;
            s.onload = function() {
                s.onload = s.onerror = null;
                var b = this.width / this.height,
                c = 54 * b,
                d = 50 / b;
                50 < c ? h.css({
                    width: 50,
                    height: d,
                    top: (54 - d) / 2,
                    left: 0
                }) : 54 < d ? h.css({
                    width: c,
                    height: 54,
                    left: (50 - c) / 2,
                    top: 0
                }) : c / d == b && h.css({
                    width: c,
                    height: d,
                    left: 0,
                    top: 0
                });
                h.css({
                    opacity: 1
                });
                g.removeClass("flipHTML5Loading")
            };
            s.onerror = function() {
                s.onload = s.onerror = null;
                h.css({
                    left: 16,
                    top: 17
                }).css({
                    opacity: 1
                });
                g.removeClass("flipHTML5Loading")
            };
            h[0].src = d[m].thumbSrc;
            s.src = d[m].thumbSrc;
            g.on({
                "click touchend": function() {
                    c.currentIndex !== b && c.skipTo(b)
                },
                "mouseover touchstart": function(d) {
                    try {
                        c.currentIndex !== b && (g.css({
                            borderColor: "#1ECC21"
                        }), r.css({
                            opacity: 0
                        }))
                    } catch(f) {
                        Log.error(f)
                    }
                },
                "mousemove touchmove": function(b) {},
                "mouseout touchend": function() {
                    l.hide();
                    c.currentIndex !== b && (g.css({
                        borderColor: "#ffffff"
                    }), r.css({
                        opacity: 0.5
                    }))
                }
            })
        })(m)
    },
    thumbSkipTo: function(b) {
        this.thumbList && (this.thumbList.find(".flipHTML5PhotoThumbBG").css({
            opacity: 0.5
        }), this.thumbList.find(".flipHTML5PhotoThumb").css({
            borderColor: "#ffffff"
        }), this.thumbList.find("#flipHTML5PhotoThumbBG" + b).css({
            opacity: 0
        }), this.thumbList.find("#flipHTML5PhotoThumb" + b).css({
            borderColor: "#f00"
        }), this.moveThumb(b))
    },
    reviseThumb: function() {
        var b = this.thumb.width(),
        c = b / 2,
        d = this.thumbList.width();
        this.thumbView.css({
            width: c,
            left: b / 4
        });
        c >= d ? this.thumbList.css({
            left: (c - d) / 2
        }) : this.thumbList.css({
            left: 0
        })
    },
    mouseThumb: function() {
        var b = this,
        c = !1;
        this.thumbView.on({
            "mouseenter touchstart": function(d) {
                try {
                    var f = b.thumbView.width(),
                    g = b.thumbList.width(),
                    h = g - f,
                    k = b.thumbView.offset().left,
                    l = (d.pageX || d.originalEvent.touches[0].pageX) - k - 24;
                    g > f && (d = (0 >= l ? 0 : l > f - 24 ? f - 48 : l) / (f - 48) * h, b.thumbList.animate({
                        left: -(0 > d ? 0 : d > h ? h: d)
                    },
                    {
                        duration: 400,
                        easing: "linear",
                        complete: function() {
                            c = !0
                        }
                    }))
                } catch(m) {
                    Log.error(m)
                }
            },
            "mousemove touchmove": function(d) {
                if (c) try {
                    var f = b.thumbView.width(),
                    g = b.thumbList.width(),
                    h = g - f,
                    k = b.thumbView.offset().left,
                    l = (d.pageX || d.originalEvent.touches[0].pageX) - k - 24;
                    g > f && (d = (0 >= l ? 0 : l > f - 24 ? f - 48 : l) / (f - 48) * h, d = 0 > d ? 0 : d > h ? h: d, b.thumbList.stop(!0, !0).animate({
                        left: -d
                    },
                    {
                        duration: 400,
                        easing: "linear"
                    }))
                } catch(m) {
                    Log.error(m)
                }
            },
            "mouseleave touchend": function(b) {
                c = !1
            }
        })
    },
    moveThumb: function(b) {
        var c = this.thumbView.width(),
        d = this.thumbList.outerWidth(),
        f = d - c,
        g = this.thumbList.position().left;
        b = this.thumbList.find("#flipHTML5PhotoThumb" + b).position().left;
        var h = b + g,
        k = (c - 54) / 2;
        d > c ? (h = Math.abs(b) - Math.abs(g), c = h - k + Math.abs(g), c = c >= f ? f: 0 >= c ? 0 : c, this.thumbList.stop(!0, !0).animate({
            left: -c
        },
        {
            duration: 240,
            easing: "linear"
        })) : this.thumbList.css({
            left: (c - d) / 2
        })
    },
    show: function() {
        this.photoFlag = !0;
        this.photoBG.show();
        this.reviseThumb();
        this.skipTo(0)
    },
    hide: function() {
        this.photoFlag = !1;
        this.photoBG.hide();
        this.photoGallery.addClass("flipHTML5Loading");
        this.outPhotoGallery.css({
            left: (this.photoBG.width() - 328) / 2,
            top: (this.photoBG.height() - 328) / 2,
            width: 320,
            height: 320
        })
    },
    showHide: function() {
        this.photoFlag ? this.hide() : this.show()
    }
}),
AddImageFile = Class({
    create: function(b) {
        this.container = b;
        this.addContexts = {};
        this.address = uiBaseURL;
        this.currentObject = $("<div><div/>").attr("data-key", "114");
        this.imageDatas = {};
        this.fileName = window.location.href.replace(window.location.hash, "") + "LocalFile";
        this.fileCookies = [];
        this.createZoomFrame();
        this.toolBar = this.createToolBar(b);
        this.getCookieFile()
    },
    createToolBar: function(b) {
        var c = this,
        d = $("<div class='flipHTML5LocalFile-toolBar' style='position: absolute;width: 60px;height: 32px;background-color: rgba(0, 0, 0, 0.8);border-radius: 4px;z-index: 9999;'></div>").appendTo(b).hide();
        b = $("<div class='flipHTML5LocalFile-toolBar-del'></div>").css({
            left: 4
        }).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "signature_del.png")).appendTo(d);
        var f = $("<div class='flipHTML5LocalFile-toolBar-update'></div>").css({
            left: 32
        }).append($("<img style='margin-left: 3px;margin-top: 3px;'/>").attr("src", this.address + "ImgFile_update.png")).appendTo(d);
        b.on("click touchend",
        function(b) {
            c.currentObject && (c.currentObject.remove(), d.hide(), c.zoomFrame && c.zoomFrame.hide(), b = c.currentObject.attr("data-key"), delete c.imageDatas[b], c.delArrayOrderKey(c.fileCookies, b), c.addLocalStorage(c.fileName, c.parseJSON(c.fileCookies)))
        });
        f.on(_event._down,
        function() {
            c.currentObject && c.currentObject.find(".TextFile") && c.currentObject.find(".TextFile")[0].click()
        });
        d.on("mousedown touchstart",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            return ! 1
        });
        this.container.add($(document)).add(BookInfo.container()).on("mousedown.hideToolBar touchstart.hideToolBar",
        function() {
            d.hide()
        });
        return d
    },
    createZoomFrame: function() {
        var b = $("<div class='flipHTML5ZoomFrame' style='position: absolute;'></div>"),
        c = [];
        this.zoomFrame = b;
        for (var d = 0; 9 > d; d++) {
            var f = $("<div></div>").addClass("flipHTML5Point flipHTML5ZoomPoint" + d).appendTo(b);
            c.push(f)
        }
        this.westZoom(c[7]);
        this.northZoom(c[1]);
        this.southZoom(c[5]);
        this.eastZoom(c[3]);
        this.westZoom(c[0]).northZoom(c[0]);
        this.northZoom(c[2]).eastZoom(c[2]);
        this.westZoom(c[6]).southZoom(c[6]);
        this.southZoom(c[4]).eastZoom(c[4]);
        this.container.add($(document)).add(BookInfo.container()).on("mousedown.hideToolBar touchstart.hideToolBar",
        function() {
            b.hide()
        })
    },
    getCookieFile: function() {
        try {
            var b = this.getLocalStorage(this.fileName),
            c = eval(b)
        } catch(d) {}
        if (c) for (b = 0; b < c.length; b++) {
            var f = c[b];
            this.fileCookies.push({
                key: f.key,
                page: f.page,
                fileLeft: f.fL,
                fileTop: f.fT,
                fileWidth: f.fW,
                fileHeight: f.fH,
                imgWidth: f.iW,
                imgHeight: f.iH,
                src: f.src
            });
            this.imageDatas[f.key] = {
                width: f.iW,
                height: f.iH
            }
        }
    },
    addFile: function(b, c) {
        var d = b.src,
        f = b.imgWidth,
        g = b.imgHeight,
        h = b.key,
        k = $("<div class='flipHTML5AddFile' style='position: absolute;cursor: move;'></div>").css({
            width: b.fileWidth,
            height: b.fileHeight,
            left: b.fileLeft,
            top: b.fileTop
        }).attr("data-key", h).append($("<input type='file' class='TextFile' style='position: absolute;left: 0px;top: 0px;width: 100%;height: 100%;cursor: move;z-index: 2;'/>").css({
            opacity: 0
        })).appendTo(c);
        this.bindFileDivEvents(k, c);
        f && g && d && this.addImage(k, d, f, g, h)
    },
    addCreateEvents: function() {
        var b = 0,
        c, d = this.contextArray;
        if (d) for (this.offCreateEvents(); c = d.eq(b++), 0 < c.length;) this.bindCreateFileEvent(c, parseInt(c.attr("data-page")))
    },
    offCreateEvents: function() {
        this.contextArray && (this.contextArray.css({
            cursor: ""
        }), this.contextArray.off("mousedown.addLocalFile touchstart.addLocalFile"))
    },
    bindCreateFileEvent: function(b, c) {
        var d = this;
        b.css("cursor", "crosshair");
        b.off("mousedown.addLocalFile touchstart.addLocalFile").one("mousedown.addLocalFile touchstart.addLocalFile",
        function(f) {
            f.stopPropagation();
            f.preventDefault();
            var g = (new Date).getTime(),
            h,
            k,
            l,
            m,
            n,
            p,
            q,
            t,
            r,
            s = b.offset().left,
            u = b.offset().top;
            $(".flipHTML5LocalFile-current").removeClass("flipHTML5LocalFile-current");
            h = $("<div style='position: absolute;cursor: move;'></div>").attr("data-key", g).addClass("flipHTML5AddFile flipHTML5LocalFile-current").append($("<input type='file' class='TextFile' style='position: absolute;left: 0px;top: 0px;width: 100%;height: 100%;cursor: move;z-index: 2;'/>").css({
                opacity: 0
            })).appendTo(b);
            k = m = f.pageX || f.originalEvent.touches[0].pageX;
            l = n = f.pageY || f.originalEvent.touches[0].pageY;
            d.bindFileDivEvents(h, b);
            $(document).add(b).off("mousemove.addLocalFile touchmove.addLocalFile").on("mousemove.addLocalFile touchmove.addLocalFile",
            function(b) {
                m = b.pageX ? b.pageX: b.originalEvent.touches ? b.originalEvent.touches[0].pageX: 0;
                n = b.pageY ? b.pageY: b.originalEvent.touches ? b.originalEvent.touches[0].pageY: 0;
                m && (0 > m - k ? (p = Math.floor((m - s) / BookInfo.scale()), t = Math.floor((k - m) / BookInfo.scale())) : (p = Math.floor((k - s) / BookInfo.scale()), t = Math.floor((m - k) / BookInfo.scale())));
                n && (0 > b.pageY - l ? (q = Math.floor((n - u) / BookInfo.scale()), r = Math.floor((l - n) / BookInfo.scale())) : (q = Math.floor((l - u) / BookInfo.scale()), r = Math.floor((n - l) / BookInfo.scale())));
                h.css({
                    left: p,
                    top: q,
                    width: t,
                    height: r
                });
                d.resizeZoomFrame(h)
            });
            $(document).add(b).off("mouseup.addLocalFile touchend.addLocalFile").one("mouseup.addLocalFile touchend.addLocalFile",
            function(f) {
                d.offCreateEvents();
                $(document).add(b).off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(b).off("mouseup.addLocalFile touchend.addLocalFile");
                if (h) {
                    f = h.width();
                    var k = h.height();
                    32 > f && h.width(32);
                    12 > k && h.height(12);
                    h.find(".TextFile")[0].click();
                    d.resizeZoomFrame(h);
                    f = d.parseObject(h[0]);
                    d.parseObject(d.zoomFrame[0]);
                    d.fileCookies.push({
                        key: g,
                        page: c,
                        fileLeft: f.left,
                        fileTop: f.top,
                        fileWidth: f.width,
                        fileHeight: f.height,
                        imgWidth: null,
                        imgHeight: null,
                        src: null
                    });
                    d.addLocalStorage(d.fileName, d.parseJSON(d.fileCookies))
                }
                void 0 != d.onCreated && d.onCreated[1].call(d.onCreated[0])
            })
        })
    },
    addImage: function(b, c, d, f, g) {
        b.find(".LocalImage") && b.find(".LocalImage").remove();
        var h = b.width() || 40,
        k = b.height() || 40;
        d = this.resizeImage("autoFit", d, f, h, k);
        $("<img class='LocalImage' style='position: absolute;z-index: 2;'/>").attr("data-key", g).css({
            width: d.width,
            height: d.height,
            left: d.left,
            top: d.top
        }).attr("src", c).appendTo(b)
    },
    resizeImage: function(b, c, d, f, g) {
        c /= d;
        d = 0 === g ? 1 : f / g;
        var h = g * c,
        k = f / c,
        l;
        switch (b) {
        case "autoFit":
            l = h > f ? {
                width: f,
                height: k,
                top: (g - k) / 2,
                left: 0
            }: k > g ? {
                width: h,
                height: g,
                left: (f - h) / 2,
                top: 0
            }: h / k == c ? {
                width: h,
                height: k,
                left: 0,
                top: 0
            }: {
                width: 1,
                height: 1,
                left: 0,
                top: 0
            };
            break;
        case "scale":
            l = {
                left: 0,
                top: 0,
                width: f,
                height: g
            };
            break;
        case "fullFill":
            c > d ? l = {
                left: (f - g * c) / 2,
                top: 0,
                width: g * c,
                height: g
            }: c < d ? l = {
                left: 0,
                top: (g - f / c) / 2,
                width: f,
                height: f / c
            }: c == d && (l = {
                left: 0,
                top: 0,
                width: f,
                height: g
            })
        }
        return l
    },
    bindFileDivEvents: function(b, c) {
        var d = this,
        f = !1,
        g = b.attr("data-key");
        b.off("mousedown.addLocalFile touchstart.addLocalFile").on("mousedown.addLocalFile touchstart.addLocalFile",
        function(h) {
            h.preventDefault();
            h.stopPropagation();
            h = h.originalEvent.touches ? h.originalEvent.touches[0] : h;
            var k, l, m, n, p, q;
            m = b[0].offsetLeft;
            n = b[0].offsetTop;
            k = h.pageX;
            l = h.pageY;
            d.resizeZoomFrame(b);
            c.off("mousemove.addLocalFile touchmove.addLocalFile").on("mousemove.addLocalFile touchmove.addLocalFile",
            function(c) {
                c = c.originalEvent.touches ? c.originalEvent.touches[0] : c;
                if (3 <= Math.abs(c.pageX - k) || 3 <= Math.abs(c.pageY - l)) f = !0;
                p = m - (k - c.pageX) / BookInfo.scale();
                q = n - (l - c.pageY) / BookInfo.scale();
                b.css({
                    left: p,
                    top: q
                });
                d.moveFileDiv(p, q)
            });
            $(document).add(c).off("mouseup.addLocalFile touchend.addLocalFile").one("mouseup.addLocalFile touchend.addLocalFile",
            function() {
                c.off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(c).off("mouseup.addLocalFile touchend.addLocalFile");
                setTimeout(function() {
                    f = !1
                },
                200);
                var h = d.parseObject(b[0]);
                d.parseObject(d.zoomFrame[0]);
                d.updateArrayOrderKey(d.fileCookies, g, {
                    fileLeft: h.left,
                    fileTop: h.top
                });
                d.addLocalStorage(d.fileName, d.parseJSON(d.fileCookies))
            })
        });
        b.find(".TextFile").on({
            change: function(c) {
                try {
                    var f = c.target.files[0];
                    if (f) if (f.type.match("image.*")) {
                        var l = new FileReader;
                        l.onload = function(c) {
                            c = c.target.result;
                            var f = new Image;
                            f.src = c;
                            var h = f.width,
                            f = f.height;
                            d.imageDatas[g] = {
                                width: h,
                                height: f,
                                src: c
                            };
                            d.addImage(b, c, h, f, g);
                            d.updateArrayOrderKey(d.fileCookies, g, {
                                imgWidth: h,
                                imgHeight: f,
                                src: c
                            });
                            d.addLocalStorage(d.fileName, d.parseJSON(d.fileCookies))
                        };
                        l.readAsDataURL(f)
                    } else alert("not image!")
                } catch(m) {
                    alert("Does not support HTML5 FileReader!")
                }
            },
            click: function(b) {
                f && b.preventDefault()
            }
        })
    },
    moveFileDiv: function(b, c) {
        var d = this.zoomFrame;
        d && (d.css({
            left: b - 4 - 1,
            top: c - 4 - 1
        }), this.toolBar && this.toolBar.css({
            left: d.offset().left - this.container.offset().left + 3,
            top: d.offset().top - this.container.offset().top - this.toolBar.outerHeight() - 2
        }))
    },
    resizeZoomFrame: function(b) {
        var c = this.zoomFrame;
        c.css({
            width: b.width() + 8,
            height: b.height() + 8,
            left: parseInt(b.css("left")) - 4 - 1,
            top: parseInt(b.css("top")) - 4 - 1
        }).show();
        this.toolBar && this.toolBar.css({
            left: b.offset().left - 8 - this.container.offset().left + 3,
            top: b.offset().top - 8 - this.container.offset().top - this.toolBar.outerHeight() - 2
        }).show();
        b.before(c);
        $(".flipHTML5LocalFile-current").removeClass("flipHTML5LocalFile-current");
        this.currentObject = b.addClass("flipHTML5LocalFile-current")
    },
    resizeFileDiv: function(b, c, d, f) {
        var g = this.currentObject,
        h = this.zoomFrame,
        k = g.attr("data-key");
        this.toolBar && this.toolBar && this.toolBar.css({
            left: h.offset().left - this.container.offset().left + 3,
            top: h.offset().top - this.container.offset().top - this.toolBar.outerHeight() - 2
        });
        if (g) {
            b && (h.css({
                left: b
            }), g.css({
                left: b + 4 + 1
            }));
            c && (h.css({
                top: c
            }), g.css({
                top: c + 4 + 1
            }));
            d && 40 <= d && (h.css({
                width: d
            }), g.css({
                width: d - 8
            }));
            f && 20 <= f && (h.css({
                height: f
            }), g.css({
                height: f - 8
            }));
            try {
                var l = g.find(".LocalImage"),
                m = this.imageDatas[k],
                n = this.resizeImage("autoFit", m.width, m.height, g.width(), g.height());
                l.css({
                    width: n.width,
                    height: n.height,
                    left: n.left,
                    top: n.top
                })
            } catch(p) {}
            n = this.parseObject(g[0]);
            this.parseObject(h[0]);
            this.updateArrayOrderKey(this.fileCookies, k, {
                fileLeft: n.left,
                fileTop: n.top,
                fileWidth: n.width,
                fileHeight: n.height
            })
        }
    },
    eastZoom: function(b) {
        var c = this,
        d = b.parent();
        b.on("mousedown.addLocalFile touchstart.addLocalFile",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            var g = d.parent(),
            h = d.width(),
            k = b.pageX;
            $(document).add(g).on("mousemove.addLocalFile touchmove.addLocalFile",
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                var d = b.clientX - k + h,
                d = Math.floor(h - (k - b.pageX) / BookInfo.scale());
                c.resizeFileDiv(0, 0, d, 0)
            });
            $(document).add(g).on("mouseup.addLocalFile touchend.addLocalFile",
            function() {
                c.addLocalStorage(c.fileName, c.parseJSON(c.fileCookies));
                $(document).add(g).off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(g).off("mouseup.addLocalFile touchend.addLocalFile")
            })
        });
        return this
    },
    southZoom: function(b) {
        var c = this,
        d = b.parent();
        b.on("mousedown.addLocalFile touchstart.addLocalFile",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            var g = d.parent(),
            h = d.height(),
            k = b.pageY;
            $(document).add(g).on("mousemove.addLocalFile touchmove.addLocalFile",
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                var d = b.clientY - k + h,
                d = Math.floor(h - (k - b.pageY) / BookInfo.scale());
                c.resizeFileDiv(0, 0, 0, d)
            });
            $(document).add(g).on("mouseup.addLocalFile touchend.addLocalFile",
            function() {
                c.addLocalStorage(c.fileName, c.parseJSON(c.fileCookies));
                $(document).add(g).off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(g).off("mouseup.addLocalFile touchend.addLocalFile")
            })
        });
        return this
    },
    westZoom: function(b) {
        var c = this,
        d = b.parent();
        b.on("mousedown.addLocalFile touchstart.addLocalFile",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            var g = d.parent(),
            h = d.width(),
            k = d[0].offsetLeft,
            l = b.clientX;
            $(document).add(g).on("mousemove.addLocalFile touchmove.addLocalFile",
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                var d = b.pageX,
                f = k + d - l,
                g = -(d - l) + h,
                f = k + (d - l) / BookInfo.scale(),
                g = Math.floor(h + (l - b.pageX) / BookInfo.scale());
                c.resizeFileDiv(f, 0, g, 0)
            });
            $(document).add(g).on("mouseup.addLocalFile touchend.addLocalFile",
            function() {
                c.addLocalStorage(c.fileName, c.parseJSON(c.fileCookies));
                $(document).add(g).off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(g).off("mouseup.addLocalFile touchend.addLocalFile")
            })
        });
        return this
    },
    northZoom: function(b) {
        var c = this,
        d = b.parent();
        b.on("mousedown.addLocalFile touchstart.addLocalFile",
        function(b) {
            b.preventDefault();
            b.stopPropagation();
            b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
            var g = d.parent(),
            h = d.height(),
            k = d[0].offsetTop,
            l = b.pageY;
            $(document).add(g).on("mousemove.addLocalFile touchmove.addLocalFile",
            function(b) {
                b = b.originalEvent.touches ? b.originalEvent.touches[0] : b;
                b = b.pageY;
                var d = k + b - l,
                f = -(b - l) + h,
                d = k + (b - l) / BookInfo.scale(),
                f = Math.floor(h + (l - b) / BookInfo.scale());
                c.resizeFileDiv(0, d, 0, f)
            });
            $(document).add(g).on("mouseup.addLocalFile touchend.addLocalFile",
            function() {
                c.addLocalStorage(c.fileName, c.parseJSON(c.fileCookies));
                $(document).add(g).off("mousemove.addLocalFile touchmove.addLocalFile");
                $(document).add(g).off("mouseup.addLocalFile touchend.addLocalFile")
            })
        });
        return this
    },
    bindOnCreated: function(b, c) {
        this.onCreated = [b, c]
    },
    parseObject: function(b) {
        if (document.getElementsByTagName("body")[0].contains(b)) {
            var c, d, f;
            f = b.parentNode;
            var g = b.style,
            h = $(b);
            d = 100 / f.offsetHeight;
            c = 100 / f.offsetWidth;
            f = b.offsetLeft * c + "%";
            b = b.offsetTop * d + "%";
            c = h.width() * c + "%";
            d = h.height() * d + "%";
            g.width = c;
            g.height = d;
            g.left = f;
            g.top = b;
            return {
                width: c,
                height: d,
                left: f,
                top: b
            }
        }
    },
    addLocalFileByPage: function(b, c) {
        c.find(".flipHTML5AddFile").remove();
        this.toolBar && this.toolBar.hide();
        this.zoomFrame && this.zoomFrame.hide();
        c.attr("data-page", b);
        this.contextArray = this.contextArray ? this.contextArray.add(c) : c;
        this.zoomFrame && this.zoomFrame.remove();
        this.createZoomFrame();
        for (var d = 0; d < this.fileCookies.length; d++) this.fileCookies[d].page == b && this.addFile(this.fileCookies[d], c)
    },
    setContainers: function(b, c, d) {
        void 0 == this.addContexts[b] && (this.addContexts[b] = {});
        this.addContexts[b][c] = d;
        b == BookInfo.getBookType() && this.addLocalFileByPage(c, this.addContexts[BookInfo.getBookType()][c])
    },
    getLocalStorage: function(b) {
        try {
            if (window.localStorage) return window.localStorage.getItem(b);
            for (var c = document.cookie.split("; "), d = 0; d < c.length; d++) {
                var f = c[d].split("=");
                if (f[0] == b) return unescape(f[1])
            }
            return ""
        } catch(g) {}
    },
    addLocalStorage: function(b, c) {
        try {
            if (window.localStorage) window.localStorage.setItem(b, c);
            else {
                var d = b + "=" + escape(c),
                f = new Date;
                f.setTime(f.getTime() + 864E8);
                d += "; expires=" + f.toGMTString();
                document.cookie = d
            }
        } catch(g) {}
    },
    delArrayOrderKey: function(b, c) {
        if (b) for (var d = 0; d < b.length; d++) b[d].key && b[d].key == c && b.remove(d)
    },
    updateArrayOrderKey: function(b, c, d) {
        if (b) for (var f = 0; f < b.length; f++) b[f].key && b[f].key == c && $.extend(b[f], d)
    },
    parseJSON: function(b) {
        if (0 != b.length) {
            for (var c = "[",
            d = 0; d < b.length; d++) c += "{key:'" + b[d].key + "',page:" + b[d].page + ",src:'" + b[d].src + "',iW:" + b[d].imgWidth + ",iH:" + b[d].imgHeight + ",fW:'" + b[d].fileWidth + "',fH:'" + b[d].fileHeight + "',fL:'" + b[d].fileLeft + "',fT:'" + b[d].fileTop + "'},";
            c = c.substring(0, c.length - 1);
            return c + "]"
        }
    }
});
Class("VolumeControlBar", {
    create: function(b) {
        bgSound && bgSound.sound && !isPhone() && (this.volumeBackground = $("<div class='volume-bar'></div>"), this.volumeIcon = $("<div class='volume-icon volume-icon-open'></div>"), this.volumeBar = $('<div class="volume-pgress"><span></span></div><p></p>'), this.volumeClose = $("<div class='volume-close volume-close-leave'></div>"), b.append(this.volumeBackground), this.volumeBackground.append(this.volumeIcon), this.volumeBackground.append(this.volumeBar), this.volumeBackground.append(this.volumeClose), this.initCloseEvent(), this.initBarEvent())
    },
    initCloseEvent: function() {
        this.volumeClose.bind(_event._enter,
        function() {
            this.volumeClose.removeClass("volume-close-leave");
            this.volumeClose.addClass("volume-close-enter")
        }.bind(this));
        this.volumeClose.bind(_event._end,
        function() {
            this.volumeBackground.hide()
        }.bind(this));
        this.volumeClose.bind(_event._leave,
        function() {
            this.volumeClose.removeClass("volume-close-enter");
            this.volumeClose.addClass("volume-close-leave")
        }.bind(this))
    },
    initBarEvent: function() {
        this.xpos = 0;
        this.startpops;
        this.istouch;
        $("body").bind(_event._move,
        function(b) {
            this.scrollbarMove(b)
        }.bind(this));
        $(".volume-pgress span").bind(_event._down,
        function() {
            this.xpos = $(".volume-pgress span").position().left;
            this.istouch = !0
        }.bind(this));
        $("body").bind(_event._end,
        function() {
            this.istouch = !1
        }.bind(this))
    },
    scrollbarMove: function(b) {
        this.istouch && (this.startpops && (this.xpos += b.pageX - this.startpops, 0 <= this.xpos && this.xpos < $(".volume-pgress").width() - 4 && ($(".volume-pgress span").css("left", this.xpos + "px"), this.setVolume(this.xpos / ($(".volume-pgress").width() - 4)))), this.startpops = b.pageX)
    },
    setVolume: function(b) {
        if (bgSound && bgSound.sound && !isPhone()) {
            bgSound.sound[0].volume = b;
            var c = {
                background: "url(" + uiBaseURL + "volume-bar.png) -30px -2px no-repeat"
            };
            this.volumeIcon.css({
                background: "url(" + uiBaseURL + "volume-bar.png) -2px -2px no-repeat"
            });
            0 >= b && this.volumeIcon.css(c)
        }
    }
});
function Advertisement() {
    var b = getAdvertisementHomePage();
    b && ($ = window.jQuery, $(function() {
        function c(b) {
            var c = {
                container: $("body"),
                data: {
                    img: "",
                    url: ""
                }
            };
            this.options = $.extend({},
            c, b);
            c = this.options.data.width ? this.options.data.width: 672;
            this.boxContainer = $("<div class='ad-box-container'></div>");
            this.boxContainer.css({
                "max-width": c + "px"
            }); (isPhone() || isPad()) && this.boxContainer.css({
                bottom: "0"
            });
            this.adImage = $("<img class='ad-box-image' src='" + this.options.data.img + "'/>");
            this.cancelIcon = $("<img class='ad-box-cancel' src='" + uiBaseURL + "ad_close.png'/>");
            this.boxContainer.append(this.adImage).append(this.cancelIcon).appendTo(b.container);
            this.boxContainer.bind("mousedown touchstart",
            function(b) {
                b.stopPropagation()
            });
            this.boxContainer.bind(_event._move,
            function(b) {
                b.stopPropagation()
            });
            this.cancelIcon.on("click",
            function() {
                this.cancel()
            }.bind(this));
            this.cancelIcon.hover(function() {
                this.cancelIcon.attr("src", uiBaseURL + "ad_close_down.png")
            }.bind(this),
            function() {
                this.cancelIcon.attr("src", uiBaseURL + "ad_close.png")
            }.bind(this));
            this.adImage.on("click",
            function() {
                this.options.data.url && window.open(this.options.data.url, "_blank")
            }.bind(this));
            this.launch()
        }
        $.ajax({
            url: b,
            type: "GET",
            dataType: "jsonp",
            data: {
                link: location.href,
                domain: document.domain
            },
            beforeSend: function() {},
            success: function(b) {
                1 == b.status && b.data.img && new c({
                    data: b.data,
                    container: $("body")
                })
            },
            error: function() {}
        });
        c.prototype = {
            launch: function() {
                this.boxContainer.fadeIn(1E3)
            },
            cancel: function() {
                this.boxContainer.fadeOut(400,
                function() {
                    this.boxContainer.remove()
                }.bind(this))
            }
        }
    }))
}
function getAdvertisementHomePage() {
    for (var b = "",
    c = !1,
    d = [{
        key: "fliphtml5.com",
        homePage: "http://fliphtml5.com/hostInfo/get-ad-banner.php"
    }], f = window.location.host, g = 0; g < d.length; g++) 0 <= f.indexOf(d[g].key) && (c = !0, b = d[g].homePage);
    if (c) return b
};
Class("Item", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.parent = b;
        this.config = this.parseConfig(c);
        this.pageWidth = d;
        this.pageHeight = f;
        this.pw = d;
        this.ph = f;
        this.type = this.config.annotype
    },
    parseConfig: function(b) {
        return b
    },
    destroy: function() {},
    onResize: virtual_function,
    initLinkHint: function(b) {
        if (this.config.hint && this.config.hint.text && "null" != this.config.hint.text.toLowerCase()) {
            var c = null,
            c = "2" == this.config.hint.hintShapeType ? new NormalLinkHint: new BubbleLinkHint,
            d = c.build(this.config);
            d && (this.parent.append(d), d[0].hasChildNodes() && d[0].removeChild(d[0].firstChild), d.hide(), b.bind("mouseenter",
            function(b) {
                d.show();
                d.css({
                    left: this.left + (this.width - d.width()) / 2 + "px",
                    top: Math.max(2, this.top - d.height()) + "px"
                })
            }.bind(this)), b.bind(isTouch ? _event._end: "mouseleave",
            function(b) {
                d.hide()
            }.bind(this)))
        }
    },
    addActionEvent: function(b) { (new ActionManager(b, this.config)).addAction()
    },
    imageReflection: function(b) { ! 0 == supports("boxReflect") && this.addCSSReflection(b)
    },
    addCSSReflection: function(b) {
        "1" == this.config.reflectionType && b.css({
            "-webkit-box-reflect": "below 0px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.7, transparent), to(white))",
            "-o-box-reflect": "below 0px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.7, transparent), to(white))"
        });
        "6" == this.config.reflectionType && b.css({
            "-webkit-box-reflect": "below -6px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.5, transparent), to(white))",
            "-o-box-reflect": "below -6px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.5, transparent), to(white))"
        });
        "3" == this.config.reflectionType && b.css({
            "-webkit-box-reflect": "below 0px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.5, transparent), to(white))",
            "-o-box-reflect": "below 0px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.5, transparent), to(white))"
        });
        "4" == this.config.reflectionType && b.css({
            "-webkit-box-reflect": "below -10px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.7, transparent), to(white))",
            "-o-box-reflect": "below -10px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.7, transparent), to(white))"
        });
        "5" == this.config.reflectionType && b.css({
            "-webkit-box-reflect": "below -10px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.6, transparent), to(white))",
            "-o-box-reflect": "below -10px -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(0.6, transparent), to(white))"
        })
    },
    addShadow: function(b) {
        if (this.config.hasShadow) {
            var c = this.config.shadow,
            d = Color(c.shadowColor);
            b.css({
                "box-shadow": c.shadowBlurX + "px " + c.shadowBlurY + "px " + c.shadowDistance + "px " + d,
                "-moz-box-shadow": c.shadowBlurX + "px " + c.shadowBlurY + "px " + c.shadowDistance + "px " + d,
                "-webkit-box-shadow": c.shadowBlurX + "px " + c.shadowBlurY + "px " + c.shadowDistance + "px " + d,
                "-ms-box-shadow": c.shadowBlurX + "px " + c.shadowBlurY + "px " + c.shadowDistance + "px " + d,
                "-o-box-shadow": c.shadowBlurX + "px " + c.shadowBlurY + "px " + c.shadowDistance + "px " + d
            })
        }
    },
    setRotation: function(b, c) {
        0 != parseInt(c) && b.css({
            transform: "rotate(" + c + "deg)",
            "-webkit-transform": "rotate(" + c + "deg)",
            "-ms-transform": "rotate(" + c + "deg)",
            "-o-transform": "rotate(" + c + "deg)",
            "-moz-transform": "rotate(" + c + "deg)",
            "transform-origin": "0 0",
            "-webkit-transform-origin": "0 0",
            "-ms-transform-origin": "0 0",
            "-o-transform-origin": "0 0",
            "-moz-transform-origin": "0 0"
        })
    }
});
Class("NormalLinkHint", {
    build: function(b, c, d) {
        c = (new TextFormatAnalyzer(b.hint.text)).getText();
        if (!c) return null;
        c = $("<div>" + c + "</div>");
        d = Color(b.hint.hintShapeColor);
        parseBool(b.hint.hintAuto) ? c.css({
            padding: "5px",
            "border-radius": "5px"
        }) : c.css({
            width: b.hint.hintW + "px",
            height: b.hint.hintH + "px",
            "line-height": b.hint.hintH + "px"
        });
        c.css({
            position: "absolute",
            background: d.rgba(b.hint.hintShapeAlpha),
            "border-radius": "5px",
            color: "white"
        });
        return c
    }
});
Class("BubbleLinkHint", {
    build: function(b, c, d) {
        c = new TextFormatAnalyzer(b.hint.text);
        var f = c.getText();
        if (!f) return null;
        d = Number(b.hint.hintW);
        var g = Number(b.hint.hintH); ! 0 == parseBool(b.hint.hintAuto) && (g = c.getFontSize(), d = g * f.length, g *= 2);
        var h = g + 10,
        f = h / 2,
        k = getInnerHtml(b.hint.text).$text,
        h = $("<canvas width=" + d + ", height=" + h + "></canvas>"),
        l = h[0].getContext("2d");
        l.beginPath();
        l.globalAlpha = b.hint.hintShapeAlpha;
        l.moveTo(0, 0);
        l.lineTo(d, 0);
        l.lineTo(d, g);
        l.lineTo(d / 2 + 8, g);
        l.lineTo(d / 2, g + 8);
        l.lineTo(d / 2 - 8, g);
        l.lineTo(0, g);
        d = l.createLinearGradient(0, 0, 0, g);
        d.addColorStop(0, Color(b.hint.hintShapeColor).toString());
        d.addColorStop(1, Color(b.hint.hintShapeColor2).toString());
        l.fillStyle = d;
        l.fill();
        l.stroke();
        l.closePath();
        l.font = "" + c.getFontSize() + "px Arial";
        l.fillStyle = c.getFontColor();
        l.fillText(k[0].innerText, 0, f);
        h.css({
            position: "absolute"
        });
        return h
    }
});
Class("ActionManager", {
    create: function(b, c) {
        this.element = b;
        this.config = c;
        this.action = c.action;
        this.initAction();
        this.initActionEvent()
    },
    initAction: function() {
        if (this.action) {
            if (this.action instanceof Array) {
                if (0 == this.action.length) {
                    this.action = null;
                    return
                }
                this.action = this.action[0]
            }
            this.linkURL = this.action.url;
            null != this.linkURL && "www" == this.linkURL.toLowerCase().substr(0, 3) && (this.linkURL = "http://" + this.linkURL);
            this.linkPageIndex = null;
            this.action.actionType == PageEditor.ActionType.GOTO_PAGE && (this.linkPageIndex = this.action.pageIndex);
            this.eventType = null;
            this.action.triggerEventType && (this.eventType = this.action.triggerEventType);
            $.system.name == $.system.IOS && (this.eventType == PageEditor.TriggerEventType.MouseDown && (void 0 == this.action.linkTarget && (this.action.linkTarget = "_self"), "_blank" == this.action.linkTarget && (this.eventType = PageEditor.TriggerEventType.MouseUp), "Blank" == this.action.linkTarget && (this.eventType = PageEditor.TriggerEventType.MouseUp)), null != this.linkURL && "tel:" == this.linkURL.toLowerCase().substr(0, 4) && (this.eventType = PageEditor.TriggerEventType.MouseUp))
        }
    },
    initActionEvent: function() {
        if (this.action) switch (this.eventName = "", this.eventType) {
        case PageEditor.TriggerEventType.MouseDown:
            this.eventName = _event._down;
            break;
        case PageEditor.TriggerEventType.MouseOver:
            this.eventName = _event._over;
            break;
        case PageEditor.TriggerEventType.MouseOut:
            this.eventName = _event._out;
            break;
        case PageEditor.TriggerEventType.MouseUp:
            this.eventName = _event._end;
            break;
        case PageEditor.TriggerEventType.MouseMove:
            this.eventName = _event._move;
            break;
        case PageEditor.TriggerEventType.MouseLeave:
            this.eventName = _event._leave
        }
    },
    addAction: function() {
        this.action && this.element && "" != this.eventName && (this.element.css({
            cursor: "pointer"
        }), this.element.bind(this.eventName,
        function(b) {
            this.onAction();
            b.stopPropagation()
        }.bind(this)), this.element.addClass("flip-action"))
    },
    onAction: function() {
        this.action.actionType == PageEditor.ActionType.GOTO_PAGE && (gotoPageFun(this.linkPageIndex), this.element.addClass("slider-action"));
        if (this.action.actionType == PageEditor.ActionType.OPEN_URL) {
            void 0 == this.action.linkTarget && (this.action.linkTarget = "_blank");
            if ("tel:" == this.linkURL.substr(0, 4)) this.linkURL = this.linkURL.trim(),
            window.open(this.linkURL);
            else {
                var b = this.action.linkTarget,
                c = function(c) {
                    return null == b ? !1 : 0 <= b.trim().toLowerCase().indexOf(c)
                };
                if (c("self")) return window.location = this.linkURL,
                !1;
                if (c("blank")) return window.open(this.linkURL),
                !1;
                if (c("parent")) return parent.location = this.linkURL,
                !1;
                if (c("top")) {
                    for (c = window; c.parent != c;) c = c.parent;
                    c.location = this.linkURL;
                    return ! 1
                } (c = window.frames[b]) ? c.location = this.linkURL: window.location = this.linkURL
            }
            this.element.addClass("slider-action")
        }
        this.action.actionType == PageEditor.ActionType.OPEN_WINDOW && (c = {
            width: this.action.windowWidth,
            height: this.action.windowHeight,
            src: this.action.resourceContent,
            caption: this.action.caption
        },
        this.action.windowType == PageEditor.WindowType.OPEN_VIDEO && (this.video = $.browser.device == $.browser.DEVICE_PHONE ? new MobileVideo(tmpContainer, c, bookContainer.width(), bookContainer.height(), "video") : new PageItem.VideoForm(tmpContainer, c, bookContainer.width(), bookContainer.height(), "video")), this.action.windowType == PageEditor.WindowType.OPEN_FLASH && (this.video = new PageItem.VideoForm(tmpContainer, c, bookContainer.width(), bookContainer.height(), "flash")), this.action.windowType == PageEditor.WindowType.OPEN_SHOW_TEXT && (this.video = $.browser.device == $.browser.DEVICE_PHONE ? new TextLightBox(tmpContainer, c, bookContainer.width(), bookContainer.height(), "text") : new PageItem.VideoForm(tmpContainer, c, bookContainer.width(), bookContainer.height(), "text")), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.SLIDE_SHOW && (this.slide = new PageItem.SlideShow(tmpContainer, this.action.photos, bookContainer.width(), bookContainer.height()), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.PLAY_AUDIO && (this.audios || (this.audios = new AudioEditor(tmpContainer, this.action.audioURL, this.action.autoPlay)), !1 == this.audios.isPlaying ? this.audios.play() : this.audios.pause(), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.ACTION_JS && (null != this.action.scriptFun && eval(this.action.scriptFun), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.WINDOW_HTML && (this.windowHtml = new PageItem.WindowHtml(tmpContainer, this.action), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.PLAY_VIDEO && (this.action.windowType == PageEditor.WindowType.OPEN_YOUTUBE && (this.video = new PopUpVideo(this.action, "youtube")), this.action.windowType == PageEditor.WindowType.OPEN_VIMEO && (this.video = new PopUpVideo(this.action, "vimeo")), this.action.windowType == PageEditor.WindowType.OPEN_DAILYMOTION && (this.video = new PopUpVideo(this.action, "dailymotion")), this.action.windowType == PageEditor.WindowType.OPEN_TYPE_WISTIA && (this.video = new PopUpVideo(this.action, "wistia")), this.action.windowType == PageEditor.WindowType.OPEN_TYPE_YOUKU && (this.video = new PopUpVideo(this.action, "youku")), this.action.windowType == PageEditor.WindowType.OPEN_TYPE_QQ && (this.video = new PopUpVideo(this.action, "qq")), this.video && this.video.show(), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.SHOW_INFORMATION && (this.showInformation = $.browser.device == $.browser.DEVICE_PHONE ? new PageItem.ShowInformationMobile(tmpContainer, this.config) : new PageItem.ShowInformation(tmpContainer, this.config), this.showInformation.show.delay(this.showInformation, 50), this.element.addClass("slider-action"));
        this.action.actionType == PageEditor.ActionType.QUIZ && ($.browser.device == $.browser.DEVICE_PHONE ? (this.quiz = new PageItem.QuizPanelMobile(tmpContainer, this.config), this.quiz.show()) : this.quiz = new PageItem.QuizPanelPC(tmpContainer, this.config), this.element.addClass("slider-action"))
    }
});
Class("Youtube", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        null != this.config.id && (this.width = Number(this.config.width) * this.pageWidth, this.height = Number(this.config.height) * this.pageHeight, this.x = this.config.x * this.pageWidth, this.y = this.config.y * this.pageHeight, b = this.config.id, -1 < b.indexOf("/") && (c = b.lastIndexOf("/"), b = b.substring(c + 1, b.length)), c = "https" == window.location.href.substring(0, 5) ? "https": "http", this.youtubeFrame = $("<iframe class='youtube-player flip-action' type='text/html' width='" + this.width + "' height='" + this.height + "' src='" + c + "://www.youtube.com/embed/" + b + "?" + this.config.playerParameters + "' frameborder='0' allowfullscreen='1' style='position: absolute; opacity: " + this.config.alpageHeighta + "; left:" + this.x + "px; top:" + this.y + "px;'></iframe>"), this.parent.append(this.youtubeFrame))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            id: b.annotype == PageEditor.AnnoType.ANNO_YOUTUBE ? b.videoId: b.videoID,
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            playerParameters: b.playerParameters,
            movieStopTriggerEvt: b.movieStopTriggerEvt
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.youtubeFrame.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.youtubeFrame.css({
            top: this.y + "px",
            left: this.x + "px"
        })
    },
    getPlayEvt: function() {
        return this.config.moviePlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.movieStopTriggerEvt
    },
    hide: function() {
        this.youtubeFrame.css({
            width: "0px",
            height: "0px"
        });
        this.youtubeFrame.css({
            display: "none"
        })
    },
    show: function() {
        this.youtubeFrame.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.youtubeFrame.css({
            display: "block"
        })
    }
}).extend("Item");
Class("Video", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this.config = this.parseConfig(c);
        this.parent = b;
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content = $("<div class='flip-action'></div>");
        this.content.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px",
            width: this.width + "px",
            height: this.height + "px",
            "background-color": "black"
        });
        this.setRotation(this.content, this.config.rotation);
        this.parent.append(this.content);
        "string" == typeof this.config.previewSrc && "" != this.config.previewSrc && null != this.config.previewSrc && void 0 != this.config.previewSrc && (!0 == bookConfig.isFlipPdf && (this.config.previewSrc.startWith("./") ? this.config.previewSrc = "." + this.config.previewSrc: this.config.previewSrc = "../" + this.config.previewSrc), this.content.css({
            background: "url(" + this.config.previewSrc + ")"
        }), this.content.css({
            "background-size": this.width + "px " + this.height + "px"
        }));
        b = this.config.src.length;
        if ("string" == typeof this.config.src) {
            if (b = this.config.src.substr(b - 4, 4).toLowerCase(), null == this.config.src || ".mp4" != b && ".flv" != b && ".f4v" != b) return
        } else if (this.config.src == {}) return; ! 0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src);
        this.video = null;
        this.video = $("<video controls preload='metadata' poster='" + this.config.previewSrc + "'><source src='" + this.config.src + "'/></video>");
        this.video.css({
            position: "absolute",
            "z-index": 1,
            left: "0px",
            top: "0px",
            width: "100%",
            height: "100%",
            opacity: this.config.alpha
        });
        this.content.append(this.video);
        void 0 == this.video[0].play || isPhone() || (this.content.addVideoSkin(g), this.video.removeAttr("controls"));
        this.content.bind(_event._down,
        function(b) {
            b.stopPropagation()
        });
        this.video.bind(_event._down,
        function(b) {
            b.stopPropagation()
        });
        parseBool(this.config.reflection) && this.imageReflection(this.video, this.width, this.height)
    },
    hide: function() {
        this.content.hide()
    },
    show: function() {
        this.content.show()
    },
    parseConfig: function(b) {
        var c = {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            previewSrc: b.previewUrl,
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            movieStopTriggerEvt: b.movieStopTriggerEvt,
            replayWhenPlayEventTrigger: b.replayWhenPlayEventTrigger
        };
        b.componentData && (b.componentData.previewURL && (c.previewSrc = b.componentData.previewURL), b.componentData.imgURL && (c.previewSrc = b.componentData.imgURL));
        b.previewURL && (c.previewSrc = b.previewURL);
        void 0 != b.videoURL && (c.src = b.videoURL);
        void 0 != b.url && (c.src = b.url);
        b.componentData && (c.src = b.componentData.videoURL);
        return c
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.content.css({
            "background-size": this.width + "px " + this.height + "px"
        });
        this.content.resizeVideoSkin();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.pageWidth * this.config.x;
        this.y = this.pageHeight * this.config.y;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    playVideo: function() {
        if (null != this.video) try {
            this.video[0].play()
        } catch(b) {}
    },
    stopVideo: function() {
        if (null != this.video) try {
            this.video[0].stop()
        } catch(b) {}
    },
    pauseVideo: function() {
        if (null != this.video) try {
            this.video[0].pause()
        } catch(b) {}
    },
    getPlayEvt: function() {
        return this.config.moviePlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.movieStopTriggerEvt
    },
    getPlayStatuEnded: function() {
        return this.video[0].ended
    },
    getReplayWhenPlayEvent: function() {
        return this.config.replayWhenPlayEventTrigger
    },
    getTotalTime: function() {
        return this.video[0].duration
    },
    getCurrentTime: function() {
        return this.video[0].currentTime
    },
    setCurrentTime: function(b) {
        this.video[0].currentTime = b
    }
}).extend(PageItem.Item);
Class("Vimeo", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this.config = this.parseConfig(c);
        this.vimeoFrame = null;
        null != this.config.id && (this.pageWidth = d, this.pageHeight = f, this.width = this.config.width * this.pageWidth, this.height = this.config.height * this.pageHeight, this.x = this.config.x * this.pageWidth, this.y = this.config.y * this.pageHeight, this.config.id += "", c = this.config.id.lastIndexOf("/"), c = this.config.id.substring(c + 1), this.vimeoFrame = $("<iframe width='" + this.width + "' height='" + this.height + "' src='http://player.vimeo.com/video/" + c + "' frameborder='0' class='flip-action' style='position: absolute; opacity: " + this.config.alpha + "; left:" + this.x + "px; top:" + this.y + "px;' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>"), b.append(this.vimeoFrame))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            id: b.videoID + "",
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            movieStopTriggerEvt: b.movieStopTriggerEvt,
            playerParameters: b.playerParameters
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.vimeoFrame.css({
            width: this.pageWidth * this.config.width + "px",
            height: this.pageHeight * this.config.height + "px"
        });
        this.setPosition(this.config.x * this.pageWidth, this.config.y * this.pageHeight)
    },
    setPosition: function(b, c) {
        this.vimeoFrame.css({
            top: c + "px",
            left: b + "px"
        })
    },
    getPlayEvt: function() {
        return this.config.moviePlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.movieStopTriggerEvt
    },
    hide: function() {
        this.vimeoFrame.css({
            display: "none"
        })
    },
    show: function() {
        this.vimeoFrame.css({
            display: "block"
        })
    }
});
Class("PopUpVimeo", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this.config = this.parseConfig(c);
        this.type = g;
        this.parent = b;
        this.vimeoFrame = null;
        null != this.config.id && (this.pageWidth = d, this.pageHeight = f, this.width = this.config.width * this.pageWidth, this.height = this.config.height * this.pageHeight, this.x = this.config.x * this.pageWidth, this.y = this.config.y * this.pageHeight, this.vimeoDiv = $("<div class='flip-action'></div>"), this.vimeoDiv.css({
            width: this.width + "px",
            height: this.height + "px",
            left: this.x + "px",
            top: this.y + "px",
            position: "absolute",
            cursor: "pointer",
            "background-color": "rgba(0,0,0,0.5)"
        }), bookConfig.isFlipPdf && (this.config.url.startWith("./") ? this.config.url = "." + this.config.url: this.config.url = "../" + this.config.url), this.url = this.config.url, this.vimeoImage = $("<img src='" + this.url + "'style='position: absolute;cursor:pointer;opacity:" + this.config.alpha + ";width:" + this.width + "px;height:" + this.height + "px;z-index:100'/>"), this.parent.append(this.vimeoDiv), this.vimeoDiv.append(this.vimeoImage), this.vimeoDiv.bind(_event._down,
        function(b) {
            b.stopPropagation()
        }.bind(this)), this.vimeoDiv.bind(_event._end,
        function(b) {
            this.popupVideo = new PopUpVideo(this.config, g);
            this.popupVideo.background.show();
            b.stopPropagation()
        }.bind(this)))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            id: b.videoID,
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            movieStopTriggerEvt: b.movieStopTriggerEvt,
            playerParameters: b.playerParameters,
            url: b.url
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        if (this.popupVideo) this.popupVideo.onResize(this.pageWidth, this.pageHeight);
        this.vimeoDiv.css({
            width: this.pageWidth * this.config.width + "px",
            height: this.pageHeight * this.config.height + "px"
        });
        this.setPosition(this.config.x * this.pageWidth, this.config.y * this.pageHeight)
    },
    setPosition: function(b, c) {
        this.vimeoDiv.css({
            top: c + "px",
            left: b + "px"
        })
    }
});
var PopUpVideo = Class({
    create: function(b, c) {
        this.config = $.extend({
            id: null,
            alpha: 1
        },
        b);
        this.config.id += "";
        this.vimeoWidth = Math.min(480, windowWidth);
        this.vimeoHeight = 9 * this.vimeoWidth / 16;
        this.vimeoHeight = Math.min(this.vimeoHeight, windowHeight);
        this.vimeoLeft = (windowWidth - this.vimeoWidth) / 2;
        this.vimeoTop = (windowHeight - this.vimeoHeight) / 2;
        this.initVideo(c);
        this.background = $("<div id='popup' class='flip-action' style='width:100%;height:100%;z-index:1000;position:absolute;'></div>");
        this.vimeoBac = $("<div style='width:100%;height:100%;background:#000000;opacity:0.5;'></div>");
        tmpContainer.append(this.background);
        this.background.append(this.vimeoBac);
        this.background.append(this.vimeoFrame);
        this.visible = !1;
        this.closeButton = $("<img style='position:absolute;cursor:pointer;right:30px;top:30px;' src='" + uiBaseURL + "close.png'/>");
        this.closeButton.asImageButton();
        this.background.append(this.closeButton);
        this.background.bind(_event._down,
        function(b) {
            this.background.remove();
            b.stopPropagation()
        }.bind(this));
        this.closeButton.bind(_event._end,
        function(b) {
            this.background.remove();
            b.stopPropagation()
        }.bind(this));
        this.vimeoFrame.css({
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0"
        })
    },
    initVideo: function(b) {
        if ("vimeo" == b) {
            var c = this.config.id.lastIndexOf("/"),
            c = this.config.id.substring(c + 1);
            this.vimeoFrame = $("<iframe width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://player.vimeo.com/video/" + c + "' frameborder='0' style='position: absolute;background:#000000; opacity: " + this.config.alpha + "; left:" + this.vimeoLeft + "px; top:" + this.vimeoTop + "px;' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>")
        }
        "youtube" == b && (this.vimeoFrame = $("<iframe class='youtube-player' type='text/html' width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://www.youtube.com/embed/" + this.config.id + "' frameborder='0' allowfullscreen='1' style='position: absolute; opacity: " + this.config.alpha + "; left:" + this.vimeoLeft + "px; top:" + this.vimeoTop + "px;'></iframe>"));
        "dailymotion" == b && (this.vimeoFrame = $("<iframe id=woiframe width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://www.dailymotion.com/embed/video/" + this.config.id + "' frameborder='0' allowFullScreen style='position: absolute; opacity: " + this.config.alpha + "; left:" + this.vimeoLeft + "px; top:" + this.vimeoTop + "px;'></iframe>"));
        "wistia" == b && (this.vimeoFrame = $("<iframe width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://fast.wistia.net/embed/iframe/" + this.config.id + "' frameborder='0' style='position:absolute;opactiy: " + this.config.alpha + ";left:" + this.vimeoLeft + "px;top:" + this.vimeoTop + "px;'></iframe>"));
        "youku" == b && (this.vimeoFrame = $("<iframe width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://player.youku.com/embed/" + this.config.id + "' frameborder='0' style='position:absolute;opactiy: " + this.config.alpha + ";left:" + this.vimeoLeft + "px;top:" + this.vimeoTop + "px;'></iframe>"));
        "qq" == b && (this.vimeoFrame = $("<iframe width='" + this.vimeoWidth + "' height='" + this.vimeoHeight + "' src='http://v.qq.com/iframe/player.html?vid=" + this.config.id + "' frameborder='0' style='position:absolute;opactiy: " + this.config.alpha + ";left:" + this.vimeoLeft + "px;top:" + this.vimeoTop + "px;'></iframe>"))
    },
    showOrHide: function() { ! 1 === this.visible ? this.show() : this.hide()
    },
    hide: function() {
        this.visible = !1;
        this.background.css({
            display: "none"
        })
    },
    show: function() {
        this.visible = !0;
        this.background.css({
            display: "block"
        })
    },
    getPlayEvt: function() {
        return this.config.moviePlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.movieStopTriggerEvt
    }
});
global.hddr.soo4 = function(b) {
    return b || ".com"
};
Class("Audio", {
    Package: "PageItem",
    background: !1,
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        if (this.config.src) {
            this.audio = null;
            this.themeName = g;
            this.resizeThemes = {
                "default": "",
                wave: ""
            };
            this.type = "com.mobiano.flipbook.sound.TAnnoBackgroundSound";
            this.pageWidth = d;
            this.pageHeight = f;
            this.width = this.config.width * this.pageWidth;
            this.height = this.config.height * this.pageHeight;
            this.x = this.config.x * this.pageWidth;
            this.y = this.config.y * this.pageHeight;
            this.config.mainColor && (this.mainColor = Color(this.config.mainColor).toString());
            b = this.config.key;
            this.content = $("<div class='audioContent flip-action'></div>");
            this.content.css({
                position: "absolute",
                left: this.x + "px",
                top: this.y + "px",
                opacity: this.config.alpha
            });
            this.setRotation(this.content, this.config.rotation);
            this.parent.append(this.content);
            this.audio = $("<audio controls ></audio>");
            this.audio.css({
                position: "absolute",
                width: this.width + "px",
                height: this.height + "px",
                left: "0px",
                top: "0px",
                opacity: this.config.alpha
            });
            this.type == this.config.className && (this.content.css("display", "none"), this.background = !0);
            this.content.audioResources = [];
            if (void 0 == b) bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src),
            this.audio.attr("src", this.config.src),
            this.content.audioResources.push(this.config.src);
            else if (b in this.config.src) d = this.config.src[b],
            bookConfig.isFlipPdf && (d = d.startWith("./") ? "." + d: "../" + d),
            this.content.audioResources.push(d),
            this.audio.attr("src", d);
            else for (c = 0; c < this.config.src.length; c++) d = this.config.src[c][b],
            bookConfig.isFlipPdf && (d = d.startWith("./") ? "." + d: "../" + d),
            this.content.audioResources.push(d),
            f = $("<source src='" + d + "'>"),
            this.audio.append(f),
            0 == c && this.audio.attr("src", d);
            this.content.append(this.audio);
            void 0 != this.audio[0].play && "background0" != this.themeName && (this.content.addAudioSkin(g, this.width, this.height), this.audio.removeAttr("controls"));
            this.resizeThemes = {
                "default": "",
                wave: "",
                skin1: "",
                skin2: ""
            };
            if (this.themeName in this.resizeThemes || void 0 == this.themeName) {
                this.content.css({
                    width: this.width + "px",
                    height: this.height + "px"
                });
                if ("skin1" == this.themeName || "skin2" == this.themeName) g = colorSplit(this.mainColor),
                rgbaR = Number(g.r).toString(10),
                rgbaG = Number(g.g).toString(10),
                rgbaB = Number(g.b).toString(10),
                this.backgroundDiv = $("<div></div>"),
                this.backgroundDiv.css({
                    position: "absolute",
                    left: this.x + "px",
                    top: this.y + "px",
                    width: this.width + "px",
                    height: "26px",
                    "background-color": this.mainColor,
                    opacity: "0.7"
                }),
                this.content.css({
                    "background-color": "rgba(" + rgbaR + "," + rgbaG + "," + rgbaB + ",0.7)",
                    width: this.width + "px",
                    height: "26px",
                    "border-radius": "2px"
                }),
                "#5d5b51" != this.mainColor && this.parent.append(this.backgroundDiv);
                this.content.resizeAudioSkin()
            } else this.resizeAudio(this.pageWidth, this.pageHeight)
        }
    },
    parseConfig: function(b) {
        function c(b) {
            if ("object" != typeof b) return ! 1;
            if (b instanceof Array) return 0 == b.length;
            var c = 0,
            d;
            for (d in b) c++;
            return 0 == c
        }
        var d = {
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.soundURL,
            className: b.className,
            mainColor: b.mainColor,
            soundPlayTriggerEvt: b.soundPlayTriggerEvt,
            soundStopTriggerEvt: b.soundStopTriggerEvt
        };
        b.annotype == PageEditor.AnnoType.ANNO_AUDIO1 && (d.key = "path", d.src = c(b.soundList) ? "": b.soundList, d.src.sound && (d.src = d.src.sound));
        b.annotype == PageEditor.AnnoType.ANNO_AUDIO2 && (d.key = "fname", d.src = c(b.data) ? "": b.data, d.src.item && (d.src = d.src.item));
        b.annotype == PageEditor.AnnoType.ANNO_PLUGIN && b.className in audioThemeNames && (d.key = "url", d.src = b.componentData && b && !c(b.componentData.songs) && void 0 != b.componentData.songs ? b.componentData.songs.song ? b.componentData.songs.song: b.componentData.songs.url ? b.componentData.songs.url: b.componentData.songs: {},
        d.soundPlayTriggerEvt = b.soundPlayTriggerEvt || b.componentData.playEvt, d.soundStopTriggerEvt = b.soundStopTriggerEvt || b.componentData.stopEvt);
        return d
    },
    onResize: function(b, c) {
        this.content && (this.pageWidth = b, this.pageHeight = c, this.width = this.config.width * this.pageWidth, this.height = this.config.height * this.pageHeight, this.themeName in this.resizeThemes || void 0 == this.themeName ? (this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        }), this.content.resizeAudioSkin(), this.backgroundDiv && this.backgroundDiv.css({
            width: this.width + "px",
            height: this.height + "px"
        })) : (this.resizeAudio(b, c), this.content.resizeAudioSkin()), this.setPosition())
    },
    resizeAudio: function(b, c) {
        var d = this.content.css("width").replace("px", ""),
        d = this.config.width * b / d;
        this.content.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + d + ") rotate(" + this.config.rotation + "deg)",
            "-moz-transform": "scale(" + d + ") rotate(" + this.config.rotation + "deg)",
            "-ms-transform": "scale(" + d + ") rotate(" + this.config.rotation + "deg)",
            "-o-transform": "scale(" + d + ") rotate(" + this.config.rotation + "deg)",
            transform: "scale(" + d + ") rotate(" + this.config.rotation + "deg)"
        });
        this.content.refreshAudioSeek()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        });
        this.backgroundDiv && this.backgroundDiv.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    play: function() {
        if (null != this.audio) try {
            this.audio[0].play()
        } catch(b) {}
    },
    pause: function() {
        if (null != this.audio) try {
            this.audio[0].pause()
        } catch(b) {}
    },
    stop: function() {
        null != this.audio && this.audio[0].stop()
    },
    getPlayEvt: function() {
        return this.config.soundPlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.soundStopTriggerEvt
    },
    isBackgroundAudio: function() {
        return this.background
    }
}).extend("Item");
Class("AudioEditor", {
    create: function(b, c, d) {
        this.isPlaying = !1;
        this.background = $("<div class='printBar'></div>");
        this.contentBox = $("<div class='printBG'></div>");
        this.closeButton = $("<div></div>");
        this.showing = !1;
        this.width = windowWidth;
        this.height = windowHeight;
        bookConfig.isFlipPdf && (c = c.startWith("./") ? "." + c: "../" + c);
        this.audioSrc = c;
        this.contentWidth = 350;
        this.contentHeight = 63;
        this.themeName = "enjoy";
        isPhone() && (this.themeName = "background", this.contentHeight = this.contentWidth = 100);
        this.background.css({
            height: this.height + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (this.width - this.contentWidth) / 2 + "px"
        });
        this.contentBox.css({
            top: (this.height - this.contentHeight) / 2 + "px",
            "border-radius": "0px"
        });
        this.audio = $("<audio controls ></audio>");
        this.audio.css({
            position: "absolute",
            width: this.contentWidth + "px",
            height: this.contentHeight + "px",
            left: "0px",
            top: "0px"
        });
        this.contentBox.audioResources = [];
        this.audio.attr("src", this.audioSrc);
        this.contentBox.audioResources.push(this.audioSrc);
        this.contentBox.append(this.audio);
        void 0 != this.audio[0].play && "background0" != this.themeName && (this.contentBox.addAudioSkin(this.themeName), this.audio.removeAttr("controls"), parseBool(d) && this.audio[0].play());
        $(b).append(this.background);
        $(b).append(this.contentBox);
        $(b).append(this.closeButton);
        this.closeButton.css({
            top: "30px",
            right: "30px",
            position: "absolute",
            "z-index": "103"
        });
        this.closeButton.append($("<img src='" + uiBaseURL + "close.png'/>").asImageButton());
        this.initEvent();
        $(this.background).css("display", "none");
        $(this.contentBox).css("display", "none");
        $(this.closeButton).css("display", "none")
    },
    onResize: function(b, c) {
        this.background.css({
            height: windowHeight + "px",
            bottom: "0px"
        });
        this.contentBox.css({
            height: this.contentHeight + "px",
            width: this.contentWidth + "px",
            left: (windowWidth - this.contentWidth) / 2 + "px"
        });
        this.contentBox.css({
            top: (windowHeight - this.contentHeight) / 2 + "px"
        });
        this.closeButton.css({
            top: "30px",
            right: "30px"
        });
        void 0 != this.themeName && (this.contentBox.css({
            width: this.contentWidth + "px",
            height: this.contentHeight + "px"
        }), this.contentBox.resizeAudioSkin())
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px")
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    showshow: function() {
        $(this.background).css({
            display: "block"
        });
        $(this.contentBox).fadeIn(500);
        $(this.closeButton).fadeIn(500);
        this.showing = !0;
        void 0 != leftRightButton && null != leftRightButton && leftRightButton.setShow(!1)
    },
    hideBox: function() {
        var b = this;
        $(this.background).fadeOut(500,
        function() {
            b.pause();
            b.contentBox.remove();
            b.closeButton.remove();
            b.background.remove()
        });
        hideLeftRightButton() && leftRightButton.setShow(!0);
        this.showing = !1
    },
    initEvent: function() {
        var b = this;
        this.background.bind(_event._down,
        function(c) {
            b.hideBox();
            b.showing = !1
        });
        this.closeButton.bind(_event._end,
        function(c) {
            b.hideBox();
            b.showing = !1
        });
        this.closeButton.bind("mouseover",
        function(c) {
            b.closeButton.css({
                cursor: "pointer"
            })
        })
    },
    play: function() {
        if (null != this.audio) try {
            this.audio[0].play()
        } catch(b) {}
        this.isPlaying = !0
    },
    pause: function() {
        if (null != this.audio) try {
            this.audio[0].pause()
        } catch(b) {}
        this.isPlaying = !1
    },
    stop: function() {
        if (null != this.audio) try {
            this.audio[0].pause(),
            this.audio[0].currentTime = 0
        } catch(b) {}
        this.isPlaying = !1
    },
    getPlayEvt: function() {
        return this.config.soundPlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.soundStopTriggerEvt
    }
});
Class("Image", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.initImage();
        this.initImageResource();
        this.initImageLoadEvents();
        this.initEvents();
        this.initLinkHint(this.image);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initImage: function() {
        this.container = $("<div style='position: absolute;'></div>");
        this.image = $("<img style='position: absolute'/>");
        this.imageBorder = $("<div class = 'bubble expose-square-solid' style='position: absolute;width: 100%;height: 100%;'></div>");
        this.container.append(this.image);
        this.parent.append(this.container);
        this.container.append(this.imageBorder);
        this.container.css({
            opacity: this.config.alpha
        });
        this.setRotation(this.container, this.config.rotation);
        this.image.css({
            margin: "auto",
            top: 0,
            bottom: 0,
            left: 0,
            right: 0,
            position: "absolute"
        });
        this.imageBorder.css({
            margin: "auto",
            top: 0,
            bottom: 0,
            left: 0,
            right: 0,
            position: "absolute",
            display: "none"
        });
        parseBool(this.config.reflection) && (!0 == supports("boxReflect") ? this.imageReflection(this.image) : this.addCanvasReflection())
    },
    initImageResource: function() {
        null != this.config.src && (!0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src), this.image.attr("src", this.config.src))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.url,
            action: b.action,
            mouseOver: b.mouseOverEffect,
            borderColor: b.borderColor,
            imgOriginalProportions: parseBool(b.imgOriginalProportions),
            popUpImage: b.popUpImage,
            hint: b.hint,
            pageW: b.location.pageWidth
        }
    },
    initImageLoadEvents: function() {
        this.image.load(function() {
            var b = this.adjustImageSize(this.image[0]);
            this.imageWidth = b.width;
            this.imageHeight = b.height;
            this.image.css({
                width: this.imageWidth + "px",
                height: this.imageHeight + "px"
            });
            this.imageBorder.css({
                "border-color": Color(this.config.borderColor).toString(),
                width: this.imageWidth + "px",
                height: this.imageHeight + "px"
            })
        }.bind(this));
        void 0 == this.config.action && (this.image[0].onerror = function() {
            this.container.css("display", "none")
        }.bind(this))
    },
    adjustImageSize: function(b) {
        if (!b.naturalWidth || !b.naturalHeight) return {
            width: 0,
            height: 0
        };
        var c = b.naturalWidth;
        b = b.naturalHeight;
        if (!1 == this.config.imgOriginalProportions) return {
            width: this.width,
            height: this.height
        };
        var d = Math.min(this.width / c, this.height / b);
        return {
            width: Math.floor(c * d),
            height: Math.floor(b * d)
        }
    },
    initEvents: function() {
        this.zoomImg = null;
        this.config.mouseOver == PageEditor.MouseOverType.AddBorder && (this.image.bind(_event._enter,
        function(b) {
            this.imageBorder.css({
                display: "block"
            });
            this.visible = !0;
            this.image.animate({
                opacity: "0.8"
            },
            300)
        }.bind(this)), this.imageBorder.bind(_event._leave,
        function(b) {
            this.imageBorder.css({
                display: "none"
            });
            this.image.animate({
                opacity: "1"
            },
            300);
            this.visible = !1
        }.bind(this)), this.addActionEvent(this.imageBorder));
        this.config.mouseOver == PageEditor.MouseOverType.Zoom && this.image.mouseEnterZoom();
        this.addActionEvent(this.image)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.left = this.pageWidth * this.config.x;
        this.top = this.pageHeight * this.config.y;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.container.css({
            left: this.left + "px",
            top: this.top + "px",
            width: this.width + "px",
            height: this.height + "px"
        });
        var d = this.adjustImageSize(this.image[0]);
        this.imageWidth = d.width;
        this.imageHeight = d.height;
        this.image.css({
            width: this.imageWidth + "px",
            height: this.imageHeight + "px"
        });
        this.imageBorder.css({
            width: this.imageWidth + "px",
            height: this.imageHeight + "px"
        })
    },
    addCanvasReflection: function() {
        var b = new Image;
        b.src = this.config.src;
        $(b).load(function() {
            var c = document.createElement("canvas"),
            d = c.getContext("2d");
            this.container.append(c);
            var f = this.adjustImageSize(b[0]),
            g = f.width,
            f = f.height;
            c.style.width = g + "px";
            c.style.height = f + "px";
            c.width = g;
            c.height = f;
            c.className = "reflect";
            $(c).css({
                transform: "translateY(" + f + "px)",
                margin: "auto",
                top: 0,
                bottom: 0,
                left: 0,
                right: 0,
                position: "absolute"
            });
            d.save();
            d.translate(0, f);
            d.scale(1, -1);
            d.drawImage(b, 0, 0, g, f);
            d.restore();
            d.globalCompositeOperation = "destination-out";
            c = d.createLinearGradient(0, 0, 0, f);
            c.addColorStop(1, "rgba(255, 0, 0, 1.0)");
            c.addColorStop(0, "rgba(255, 0, 0, 0)");
            d.fillStyle = c;
            d.rect(0, 0, g, 2 * f);
            d.fill()
        }.bind(this))
    }
}).extend(PageItem.Item);
var HTML5ZoomImg = Class({
    create: function(b, c) {
        var d = this,
        f, g;
        this.$container = $(c);
        f = this.$container.width();
        g = this.$container.height();
        this.limitWidth = f;
        this.limitHeight = g;
        this.innerLimitWidth = 606;
        this.innerLimitHeight = 404;
        this.dragDivFalg = !0;
        this.dragImgFalg = !1;
        this.address = uiBaseURL;
        this.isFullFalg = !1;
        this.isOneToOneFalg = !0;
        this.scale = 100;
        this.isMapShowFalg = !1;
        this.boxImgBG = $("<div style='position: absolute;margin: 0px;padding: 0px;border: 0px;left: 0px;top: 0px;background-color: #000000;opacity: 0;z-index: 99999;'></div>").css({
            width: f,
            height: g
        }).appendTo(this.$container);
        this.outerBoxImg = $("<div class='fliphtml5-loading' style='position: absolute;margin: 0px;padding: 0px;border: 0px;left: 0px;top: 0px;overflow: hidden;z-index: 99999;'></div>").css({
            width: f,
            height: g
        }).appendTo(this.$container);
        this.innerBoxImg = $("<div style='position: absolute;overflow: hidden;cursor: pointer;background-color: rgba(0,0,0, 0.6);'></div>").css({
            boxShadow: "0px 0px 4px #000000"
        }).hide().appendTo(this.outerBoxImg);
        window.box = this.innerBoxImg;
        this.boxImgDiv = $("<div class='fliphtml5-boxDiv' style='position: absolute;'></div>").appendTo(this.innerBoxImg);
        this.boxImg = $("<img style='position: absolute;width: 100%;height: 100%;padding: 0px;margin: 0px;'/>").appendTo(this.boxImgDiv);
        this.closeBox = $("<div style='position: absolute;left: auto;top: 0px;right: 0px;'></div>").append($("<img>", {
            src: this.address + "closeForm.png"
        })).appendTo(this.innerBoxImg);
        this.bindCloseBoxEvent();
        this.createControlBar(this.innerBoxImg);
        this.createImgMap(this.innerBoxImg);
        this.loadImg(b);
        this.dragDiv();
        this.dragImage();
        isTouch || (this.innerBoxImg.transition3D(), this.boxImgDiv.transition3D(), this.mapPoint.transition3D());
        $(window).on("resize",
        function() {
            d.resize()
        });
        return this
    },
    bindCloseBoxEvent: function() {
        var b = this;
        b.closeBox.bind("mouseover",
        function() {
            b.closeBox.children("img").attr("src", b.address + "closeForm_down.png")
        });
        b.closeBox.bind("mouseout",
        function() {
            b.closeBox.children("img").attr("src", b.address + "closeForm.png")
        });
        b.closeBox.bind("click",
        function() {
            b.destroy()
        })
    },
    createControlBar: function(b) {
        this.controlBar = $("<div class='control' style='position: absolute;width: 106px;height: 48px;overflow: hidden;bottom: -50px;top: auto;left: 50%;margin-left: -53px;border-top-left-radius: 10px;border-top-right-radius: 10px;background-color: rgba(0,0,0,0.6)'></div>").css({
            boxShadow: "0px 0px 4px #000000"
        }).appendTo(b);
        this.oneToOne = $("<span class='one-to-one' style='position: absolute;'></span>").css({
            width: 40,
            height: 30,
            left: 10,
            top: 9,
            fontFamily: "serif",
            fontSize: 28,
            lineHeight: "30px",
            color: "#7F8383",
            letterSpacing: "-5px",
            textAlign: "center"
        }).html("1:1").appendTo(this.controlBar);
        this.fullScreen = $("<div class='FullScreen' style='position: absolute'></div>").css({
            width: 40,
            height: 30,
            left: 56,
            top: 9
        }).append($("<img>", {
            src: this.address + "enterFull.png",
            css: {
                marginLeft: 6,
                marginTop: 1
            }
        })).appendTo(this.controlBar);
        this.bindControlEvents()
    },
    bindControlEvents: function() {
        var b = this;
        isTouch ? b.controlBar.css({
            bottom: 2
        }).show() : (this.innerBoxImg.bind("mouseover",
        function() {
            b.controlBar.stop(!1, !1).animate({
                bottom: 2
            },
            400, "linear")
        }), this.innerBoxImg.bind("mouseout",
        function() {
            b.controlBar.stop(!1, !1).animate({
                bottom: -50
            },
            400, "linear")
        }));
        this.oneToOne.bind("click",
        function() {
            b.boxImgDiv.css({
                width: b.originalSize.width,
                height: b.originalSize.height,
                left: (b.innerBoxImg.width() - b.originalSize.width) / 2,
                top: (b.innerBoxImg.height() - b.originalSize.height) / 2
            });
            b.innerBoxImg.width() >= b.boxImgDiv.width() && b.innerBoxImg.height() >= b.boxImgDiv.height() ? b.dragImgFalg = !1 : b.dragImgFalg = !0;
            b.isFullFalg ? b.dragDivFalg = !1 : b.innerBoxImg.width() >= b.boxImgDiv.width() && b.innerBoxImg.height() >= b.boxImgDiv.height() ? b.dragDivFalg = !0 : b.dragDivFalg = !1;
            b.scale = 100;
            b.isOneToOneFalg = b.isOneToOne();
            b.isMapShowFalg = b.isShowMap();
            b.setMapPoint()
        });
        this.oneToOne.bind("mouseover",
        function() {
            b.isOneToOneFalg || b.oneToOne.css({
                color: "#32B9EB"
            })
        });
        this.oneToOne.bind("mouseout",
        function() {
            b.isOneToOneFalg || b.oneToOne.css({
                color: "#ffffff"
            })
        });
        this.fullScreen.bind("click",
        function() {
            var c = parseInt(b.boxImgDiv.css("left")),
            d = parseInt(b.boxImgDiv.css("top")),
            f = b.boxImgDiv.width(),
            g = b.boxImgDiv.height(),
            h = b.innerBoxImg.width(),
            k = b.innerBoxImg.height();
            b.isFullFalg ? (b.innerBoxImg.css({
                width: Math.max(b.innerLimitWidth, b.result.width),
                height: Math.max(b.innerLimitHeight, b.result.height),
                left: Math.max(0, (b.outerBoxImg.width() - Math.max(b.innerLimitWidth, b.result.width)) / 2),
                top: Math.max(0, (b.outerBoxImg.height() - Math.max(b.innerLimitHeight, b.result.height)) / 2)
            }), b.boxImgDiv.css({
                left: b.innerBoxImg.width() >= f ? (b.innerBoxImg.width() - f) / 2 : Math.max(b.innerBoxImg.width() - f, c + (b.innerBoxImg.width() - h) / 2),
                top: b.innerBoxImg.height() >= g ? (b.innerBoxImg.height() - g) / 2 : Math.max(b.innerBoxImg.height() - g, d + (b.innerBoxImg.height() - k) / 2)
            }), b.innerBoxImg.width() >= b.boxImgDiv.width() && b.innerBoxImg.height() >= b.boxImgDiv.height() ? b.dragDivFalg = !0 : b.dragDivFalg = !1, b.isFullFalg = !1, b.fullScreen.children("img").attr("src", b.address + "enterFull.png")) : (b.innerBoxImg.css({
                width: b.$container.width(),
                height: b.$container.height(),
                left: 0,
                top: 0
            }), b.boxImgDiv.css({
                left: b.innerBoxImg.width() >= f ? (b.innerBoxImg.width() - f) / 2 : Math.max(b.innerBoxImg.width() - f, c + (h - b.innerBoxImg.width()) / 2),
                top: b.innerBoxImg.height() >= g ? (b.innerBoxImg.height() - g) / 2 : Math.max(b.innerBoxImg.height() - g, d + (k - b.innerBoxImg.height()) / 2)
            }), b.isFullFalg = !0, b.dragDivFalg = !1, b.fullScreen.children("img").attr("src", b.address + "exitFull.png"));
            b.innerBoxImg.width() >= b.boxImgDiv.width() && b.innerBoxImg.height() >= b.boxImgDiv.height() ? b.dragImgFalg = !1 : b.dragImgFalg = !0;
            b.isShowMap();
            b.setMapPoint()
        });
        this.fullScreen.bind("mouseover",
        function() {
            b.isFullFalg ? b.fullScreen.children("img").attr("src", b.address + "exitFull_over.png") : b.fullScreen.children("img").attr("src", b.address + "enterFull_over.png")
        });
        this.fullScreen.bind("mouseout",
        function() {
            b.fullScreen.children("img").attr("src", b.address + "exitFull.png")
        })
    },
    isOneToOne: function() {
        if (this.originalSize.width == this.boxImgDiv.width() && this.originalSize.height == this.boxImgDiv.height()) return this.oneToOne.css({
            color: "#7F8383"
        }),
        !0;
        this.oneToOne.css({
            color: "#ffffff"
        });
        return ! 1
    },
    loadImg: function(b) {
        var c = this,
        d = new Image;
        d.onload = function() {
            d.onload = d.onerror = null;
            var b = this.width,
            g = this.height,
            h = c.selectWidthAdHeight(b, g);
            c.outerBoxImg.removeClass("fliphtml5-loading");
            c.boxImgDiv.css({
                width: h.width,
                height: h.height
            });
            c.innerBoxImg.css({
                width: Math.max(c.innerLimitWidth, h.width),
                height: Math.max(c.innerLimitHeight, h.height),
                left: Math.max(0, (c.outerBoxImg.width() - Math.max(c.innerLimitWidth, h.width)) / 2),
                top: -Math.max(c.innerLimitHeight, h.height) - 240
            });
            c.innerBoxImg.show().animate({
                top: Math.max(0, (c.outerBoxImg.height() - Math.max(c.innerLimitHeight, h.height)) / 2)
            },
            {
                duration: 500,
                easing: "linear"
            });
            c.boxImgDiv.css({
                width: h.width,
                height: h.height,
                left: Math.max(0, (c.innerBoxImg.width() - h.width) / 2),
                top: Math.max(0, (c.innerBoxImg.height() - h.height) / 2)
            });
            c.originalSize = {
                width: b,
                height: g
            };
            c.result = h;
            c.isOneToOneFalg = c.isOneToOne();
            isTouch ? c.zoomInPad() : c.mouseZoom();
            c.setMapImg(b, g)
        };
        d.onerror = function() {
            d.onload = d.onerror = null;
            c.outerBoxImg.removeClass("fliphtml5-loading");
            var b = c.selectWidthAdHeight(18, 20);
            c.boxImgDiv.css({
                width: b.width,
                height: b.height
            });
            c.innerBoxImg.css({
                width: Math.max(c.innerLimitWidth, b.width),
                height: Math.max(c.innerLimitHeight, b.height),
                left: Math.max(0, (c.outerBoxImg.width() - Math.max(c.innerLimitWidth, b.width)) / 2),
                top: -Math.max(c.innerLimitHeight, b.height) - 240
            });
            c.innerBoxImg.show().animate({
                top: Math.max(0, (c.outerBoxImg.height() - Math.max(c.innerLimitHeight, b.height)) / 2)
            },
            {
                duration: 500,
                easing: "linear"
            });
            c.boxImgDiv.css({
                width: b.width,
                height: b.height,
                left: Math.max(0, (c.innerBoxImg.width() - b.width) / 2),
                top: Math.max(0, (c.innerBoxImg.height() - b.height) / 2)
            });
            c.originalSize = {
                width: 18,
                height: 20
            };
            c.result = b;
            c.isOneToOneFalg = c.isOneToOne();
            isTouch ? c.zoomInPad() : c.mouseZoom();
            c.setMapImg(18, 20)
        };
        d.src = b;
        c.boxImg.attr("src", b);
        c.mapImg.attr("src", b)
    },
    selectWidthAdHeight: function(b, c) {
        var d = {},
        f = b / c,
        g = this.limitWidth,
        h = this.limitHeight;
        g >= b && h < c ? (d.width = f * h, d.height = h) : g < b && h >= c ? (d.width = g, d.height = g / f) : g < b && h < c ? g / f <= h ? (d.width = g, d.height = g / f) : f * h <= g ? (d.width = f * h, d.height = h) : console && console.log("Do not be so wonderful picture of uncle!") : (d.width = b, d.height = c);
        return d
    },
    dragDiv: function() {
        var b = this,
        c = b.innerBoxImg,
        d = $(document),
        f = !0,
        g,
        h,
        k,
        l;
        b.innerBoxImg.bind(_event._down,
        function(b) {
            b = isTouch ? b.originalEvent.touches: [b];
            1 == b.length ? f = !0 : 2 <= b.length && (f = !1);
            stopEvent(b[0])
        });
        c.bind(_event._down,
        function(m) {
            b.dragDivFalg && (m = isTouch ? m.originalEvent.touches[0] : m, isTouch || (m.preventDefault(), m.stopPropagation()), g = c[0].offsetLeft, h = c[0].offsetTop, k = m.clientX, l = m.clientY, d.bind(_event._move,
            function(b) {
                f && (b = isTouch ? b.originalEvent.touches[0] : b, isTouch || (b.preventDefault(), b.stopPropagation()), c.css({
                    left: g + b.clientX - k,
                    top: h + b.clientY - l
                }))
            }), d.bind(_event._end,
            function(b) {
                b = isTouch ? b.originalEvent.touches[0] : b;
                isTouch || (b.preventDefault(), b.stopPropagation());
                f = !0;
                d.unbind(_event._move)
            }))
        })
    },
    mouseZoom: function() {
        var b = this,
        c = b.scale,
        d = b.result,
        f = d.width,
        g = d.height;
        b.innerBoxImg.bind($.browser.mozilla ? "DOMMouseScroll": "mousewheel",
        function(d) {
            c = b.scale;
            d = d.originalEvent;
            d = d.wheelDelta || -d.detail;
            0 < d ? c += 0.2 * c: 0 > d && (c -= 0.17 * c);
            5 > c ? c = 5 : 1600 < c && (c = 1600);
            var k, l, m;
            l = b.boxImgDiv.width();
            m = b.boxImgDiv.height();
            d = f * c / 100;
            var n = g * c / 100;
            d < b.innerBoxImg.width() ? k = (b.innerBoxImg.width() - f * c / 100) / 2 : (k = parseInt(b.boxImgDiv.css("left")), k += (l - d) / 2, 0 <= k ? k = 0 : k <= b.innerBoxImg.width() - d && (k = b.innerBoxImg.width() - d));
            n < b.innerBoxImg.height() ? m = (b.innerBoxImg.height() - g * c / 100) / 2 : (l = parseInt(b.boxImgDiv.css("top")), m = l + (m - n) / 2, 0 <= m ? m = 0 : m <= b.innerBoxImg.height() - n && (m = b.innerBoxImg.height() - n));
            b.scale = c;
            b.boxImgDiv.animate({
                width: d,
                height: n,
                left: k,
                top: m
            },
            {
                duration: 100,
                easing: "linear",
                complete: function() {
                    b.isOneToOneFalg = b.isOneToOne();
                    b.isMapShowFalg = b.isShowMap();
                    b.setMapPoint();
                    b.isFullFalg ? (b.dragDivFalg = !1, b.boxImgDiv.width() > b.innerBoxImg.width() || b.boxImgDiv.height() > b.innerBoxImg.height() ? b.dragImgFalg = !0 : b.dragImgFalg = !1) : b.boxImgDiv.width() > b.innerBoxImg.width() || b.boxImgDiv.height() > b.innerBoxImg.height() ? (b.dragDivFalg = !1, b.dragImgFalg = !0) : (b.dragDivFalg = !0, b.dragImgFalg = !1)
                }
            })
        })
    },
    zoomInPad: function() {
        var b = this,
        c = b.result,
        d = c.width,
        f = c.height,
        g, h, k, l, m, n = !1;
        b.boxImgDiv[0].addEventListener("touchstart",
        function(c) {
            if (2 <= c.touches.length) {
                n = !0;
                var d = c.touches[0].pageX,
                f = c.touches[0].pageY,
                r = c.touches[1].pageX;
                c = c.touches[1].pageY;
                g = b.boxImgDiv.position().left;
                h = b.boxImgDiv.position().top;
                k = b.boxImgDiv.width();
                l = b.boxImgDiv.height();
                m = Math.sqrt(Math.pow(r - d, 2) + Math.pow(c - f, 2))
            }
        },
        !1);
        document.addEventListener("touchmove",
        function(c) {
            if (n) {
                if (2 <= c.touches.length) {
                    var q, t, r;
                    q = c.touches[0].pageX;
                    t = c.touches[0].pageY;
                    r = c.touches[1].pageX;
                    c = c.touches[1].pageY;
                    t = Math.sqrt(Math.pow(r - q, 2) + Math.pow(c - t, 2)) / m;
                    q = k * t;
                    t *= l;
                    r = (k - q) / 2 + g;
                    c = (l - t) / 2 + h;
                    q < b.innerBoxImg.width() ? r = (b.innerBoxImg.width() - q) / 2 : 0 <= r ? r = 0 : r <= b.innerBoxImg.width() - q && (r = b.innerBoxImg.width() - q);
                    t < b.innerBoxImg.height() ? c = (b.innerBoxImg.height() - t) / 2 : 0 <= c ? c = 0 : c <= b.innerBoxImg.height() - t && (c = b.innerBoxImg.height() - t);
                    b.boxImgDiv.width(q).height(t).css({
                        left: r,
                        top: c
                    });
                    b.isOneToOneFalg = b.isOneToOne();
                    b.isMapShowFalg = b.isShowMap();
                    b.setMapPoint();
                    b.boxImgDiv.width() > d || b.boxImgDiv.height() > f ? (b.dragDivFalg = !1, b.dragImgFalg = !0) : (b.dragDivFalg = !0, b.dragImgFalg = !1)
                }
            } else c.preventDefault()
        },
        !1);
        document.addEventListener("touchend",
        function(b) {
            n = !1
        },
        !1);
        document.body.addEventListener("touchmove",
        function(b) {
            b.preventDefault()
        },
        !1)
    },
    dragImage: function() {
        var b = this,
        c = b.boxImgDiv,
        d = $(document),
        f = !0,
        g,
        h,
        k,
        l;
        b.innerBoxImg.bind(_event._down,
        function(b) {
            b = isTouch ? b.originalEvent.touches: [b];
            1 == b.length ? f = !0 : 2 <= b.length && (f = !1);
            stopEvent(b[0])
        });
        c.bind(_event._down,
        function(m) {
            b.dragImgFalg && (m = isTouch ? m.originalEvent.touches[0] : m, c.addClass("dragging"), g = c[0].offsetLeft, h = c[0].offsetTop, k = m.clientX, l = m.clientY, d.bind(_event._move,
            function(d) {
                d = isTouch ? d.originalEvent.touches[0] : d;
                if (f) {
                    var m = g + d.clientX - k;
                    d = h + d.clientY - l;
                    0 <= m ? m = 0 : m <= b.innerBoxImg.width() - b.boxImgDiv.width() && (m = b.innerBoxImg.width() - b.boxImgDiv.width());
                    0 <= d ? d = 0 : d <= b.innerBoxImg.height() - b.boxImgDiv.height() && (d = b.innerBoxImg.height() - b.boxImgDiv.height());
                    c.width() > b.innerBoxImg.width() && (c.css({
                        left: m
                    }), b.mapPoint.css({
                        left: -m / (b.boxImgDiv.width() - b.innerBoxImg.width()) * (b.mapDiv.width() - b.mapPoint.outerWidth())
                    }));
                    c.height() > b.innerBoxImg.height() && (c.css({
                        top: d
                    }), b.mapPoint.css({
                        top: -d / (b.boxImgDiv.height() - b.innerBoxImg.height()) * (b.mapDiv.height() - b.mapPoint.outerHeight())
                    }))
                }
            }), d.bind(_event._end,
            function(b) {
                d.unbind(_event._move);
                c.removeClass("dragging");
                f = !0
            }))
        })
    },
    resize: function() {
        var b = this.$container.width(),
        c = this.$container.height();
        this.boxImgBG.css({
            width: b,
            height: c
        });
        this.outerBoxImg.css({
            width: b,
            height: c
        });
        this.isFullFalg ? (this.innerBoxImg.css({
            width: b,
            height: c
        }), this.boxImgDiv.css({
            left: (b - this.boxImgDiv.width()) / 2,
            top: (c - this.boxImgDiv.height()) / 2
        }), this.setMapPoint()) : this.innerBoxImg.css({
            left: (b - this.innerBoxImg.width()) / 2,
            top: (c - this.innerBoxImg.height()) / 2
        })
    },
    destroy: function() {
        var b = this;
        parseInt(b.innerBoxImg.css("left"));
        parseInt(b.innerBoxImg.css("top"));
        var c = b.innerBoxImg.width(),
        d = b.innerBoxImg.height(),
        f,
        g,
        h,
        k,
        l;
        $({
            k: 100
        }).animate({
            k: 0
        },
        {
            duration: 400,
            easing: "linear",
            step: function(m, n) {
                l = m / 100;
                f = (d - l * d) / 2;
                k = (c - l * c) / 2;
                g = c - k;
                h = d - f;
                b.innerBoxImg[0].style.clip = "rect(" + f + "px, " + g + "px, " + h + "px, " + k + "px)"
            },
            complete: function() {
                b.boxImgBG.remove();
                b.outerBoxImg.remove()
            }
        })
    },
    createImgMap: function(b) {
        this.map = $("<div class='ImageMap' style='position: absolute;left: auto;top: auto;right: 2px;bottom: 2px;width: 210px;height: 130px;overflow: hidden;border-radius: 4px;'></div>").css({
            boxShadow: "inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)",
            backgroundColor: "rgba(0,0,0,.6)"
        }).hide().appendTo(b);
        this.mapDiv = $("<div style='position: absolute;margin: 0px;padding: 0px;border: 0px;overflow: hidden;'></div>").appendTo(this.map);
        this.mapImg = $("<img style='position: absolute;width: 100%;height: 100%;left: 0px;top: 0px;padding: 0px;margin: 0px;border: 0px;'/>").appendTo(this.mapDiv);
        this.mapPoint = $("<div style='position: absolute;margin: 0px;padding: 0px;border: 2px solid #58AA38;width: 100%;height: 100%;'></div>").css({
            boxShadow: "inset 1px 1px 0 #ffffff,inset 0 -1px 0 #ffffff,inset -1px 0px 0 #ffffff"
        }).appendTo(this.mapDiv);
        this.closeMap = $("<div style='position: absolute;left: auto;top: 0px;right: 0px;'></div>").append($("<img>", {
            src: this.address + "closeForm.png"
        })).appendTo(this.map);
        this.bindCloseMapEvent();
        this.dragMapPoint()
    },
    bindCloseMapEvent: function() {
        var b = this;
        b.closeMap.bind("mouseover",
        function() {
            b.closeMap.children("img").attr("src", b.address + "closeForm_down.png")
        });
        b.closeMap.bind("mouseout",
        function() {
            b.closeMap.children("img").attr("src", b.address + "closeForm.png")
        });
        b.closeMap.bind("click",
        function() {
            b.destroyMap()
        })
    },
    setMapImg: function(b, c) {
        var d = this.map.width(),
        f = this.map.height(),
        g = b / c,
        h = f * g,
        k = d / g,
        l,
        m,
        n,
        p;
        h > d ? (l = d, m = k, n = 0, p = (f - k) / 2) : k > f ? (l = h, m = f, n = (d - h) / 2, p = 0) : h / k == g && (l = h, m = k, p = n = 0);
        this.mapDiv.css({
            width: l,
            height: m,
            left: n,
            top: p
        })
    },
    setMapPoint: function() {
        var b = Math.min(this.mapDiv.width(), this.innerBoxImg.width() * this.mapDiv.width() / this.boxImgDiv.width()) - 4,
        c = Math.min(this.mapDiv.height(), this.innerBoxImg.height() * this.mapDiv.height() / this.boxImgDiv.height()) - 4,
        d = -parseInt(this.boxImgDiv.css("left")) / (this.boxImgDiv.width() - this.innerBoxImg.width()) * (this.mapDiv.width() - (b + 4)),
        f = -parseInt(this.boxImgDiv.css("top")) / (this.boxImgDiv.height() - this.innerBoxImg.height()) * (this.mapDiv.height() - (c + 4));
        this.mapPoint.css({
            left: d,
            top: f,
            width: b,
            height: c
        })
    },
    isShowMap: function() {
        if (this.innerBoxImg.width() >= this.boxImgDiv.width() && this.innerBoxImg.height() >= this.boxImgDiv.height()) return this.map.hide(),
        !0;
        this.map.show();
        return ! 1
    },
    dragMapPoint: function() {
        var b = this,
        c = b.mapPoint,
        d = $(document),
        f,
        g,
        h,
        k;
        c.bind(_event._down,
        function(l) {
            l = isTouch ? l.originalEvent.touches[0] : l;
            f = c[0].offsetLeft;
            g = c[0].offsetTop;
            h = l.clientX;
            k = l.clientY;
            d.bind(_event._move,
            function(d) {
                d = isTouch ? d.originalEvent.touches[0] : d;
                var l = f + d.clientX - h;
                d = g + d.clientY - k;
                0 >= l ? l = 0 : l >= b.mapDiv.width() - b.mapPoint.outerWidth() && (l = b.mapDiv.width() - b.mapPoint.outerWidth());
                0 >= d ? d = 0 : d >= b.mapDiv.height() - b.mapPoint.outerHeight() && (d = b.mapDiv.height() - b.mapPoint.outerHeight());
                c.width() < b.mapDiv.width() && (c.css({
                    left: l
                }), b.boxImgDiv.css({
                    left: -l / (b.mapDiv.width() - b.mapPoint.outerWidth()) * (b.boxImgDiv.width() - b.innerBoxImg.width())
                }));
                c.height() < b.mapDiv.height() && (c.css({
                    top: d
                }), b.boxImgDiv.css({
                    top: -d / (b.mapDiv.height() - b.mapPoint.outerHeight()) * (b.boxImgDiv.height() - b.innerBoxImg.height())
                }))
            });
            d.bind(_event._end,
            function(b) {
                d.unbind(_event._move)
            })
        })
    },
    destroyMap: function() {
        var b = this;
        parseInt(b.map.css("right"));
        parseInt(b.map.css("bottom"));
        var c = b.map.width(),
        d = b.map.height(),
        f,
        g,
        h,
        k,
        l;
        $({
            k: 100
        }).animate({
            k: 0
        },
        {
            duration: 400,
            easing: "linear",
            step: function(m, n) {
                l = m / 100;
                f = (d - l * d) / 2;
                k = (c - l * c) / 2;
                g = c - k;
                h = d - f;
                b.map[0].style.clip = "rect(" + f + "px, " + g + "px, " + h + "px, " + k + "px)"
            },
            complete: function() {
                b.map.remove()
            }
        })
    }
});
Class("Line", {
    Package: "PageItem",
    SOLID: "Solid line",
    DOTTED: "Dotted line",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.id = "line" + g;
        this.initConfig();
        this.initCanvas();
        parseBool(this.config.reflection) && this.imageReflection(this.line);
        this.onResize(d, f)
    },
    initConfig: function() {
        this.color = Color(this.config.color);
        this.lineWidth = Number(this.config.lineWidth);
        this.lineType = this.config.lineType;
        var b = this.config.originWidth * this.config.width,
        c = this.config.originHeight * this.config.height;
        this.config.startX /= b;
        this.config.startY /= c;
        this.config.endX /= b;
        this.config.endY /= c;
        this.dotWidth = Number(this.config.dotWidthRation * this.config.originWidth);
        this.dashGap = Number(this.config.dotGrapRation * this.config.originWidth);
        this.extraWidth = this.lineWidth
    },
    initCanvas: function() {
        this.line = $("<canvas id=" + this.id + "></canvas>");
        this.line.css({
            position: "absolute"
        });
        this.setRotation(this.line, this.config.rotation);
        this.parent.append(this.line)
    },
    parseConfig: function(b) {
        return {
            originWidth: b.location.pageWidth,
            originHeight: b.location.pageHeight,
            startX: b.lineStartPX,
            startY: b.lineStartPY,
            rotation: b.location.rotation,
            endX: b.lineEndPX,
            endY: b.lineEndPY,
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            lineAlpha: b.lineAlpha,
            alpha: b.alpha,
            lineWidth: b.lineWidth,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            lineType: b.lineType,
            dotWidth: b.dotWidth,
            dotWidthRation: b.dotWidthRation,
            dotGrapRation: b.dotGrapRation,
            color: b.color,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth + this.extraWidth;
        this.height = this.config.height * this.pageHeight + this.extraWidth;
        this.left = this.config.x * this.pageWidth - this.extraWidth / 2;
        this.top = this.config.y * this.pageHeight - this.extraWidth / 2;
        this.line.attr("width", this.width + "px");
        this.line.attr("height", this.height + "px");
        this.line.css({
            left: this.left + "px",
            top: this.top + "px"
        });
        this.draw()
    },
    draw: function() {
        this.initParams();
        var b = this.getContext();
        b && (b.clearRect(0, 0, this.width, this.height), b.beginPath(), this.lineType == this.SOLID && this.drawLine(b), this.lineType == this.DOTTED && this.drawDotLine(b), b.stroke())
    },
    initParams: function() {
        function b(b, f) {
            var g;
            return g = Number.between(b * f, c, f - c)
        }
        var c = this.extraWidth / 2;
        this.startX = b(this.config.startX, this.width);
        this.startY = b(this.config.startY, this.height);
        this.endX = b(this.config.endX, this.width);
        this.endY = b(this.config.endY, this.height)
    },
    getContext: function() {
        var b = this.line[0],
        c;
        try {
            return c = b.getContext("2d"),
            c.fillStyle = "#00000000",
            c.lineCap = "round",
            c.lineJoin = "round",
            c.lineWidth = this.lineWidth,
            c.globalAlpha = this.config.alpha,
            c.strokeStyle = this.color.toString(),
            !0 === this.config.hasShadow && (c.shadowOffsetX = this.config.shadowBlurX, c.shadowOffsetY = this.config.shadowBlurY, c.shadowBlur = this.config.shadowDistance, c.shadowColor = Color(this.config.shadowColor).toString()),
            c
        } catch(d) {
            return null
        }
    },
    drawLine: function(b) {
        b.moveTo(this.startX, this.startY);
        b.lineTo(this.endX, this.endY)
    },
    drawDotLine: function(b) {
        for (var c = this.endX - this.startX,
        d = this.endY - this.startY,
        f = Math.sqrt(c * c + d * d), g = c / f, f = d / f, h = this.startX, k = this.startY;;) {
            b.moveTo(h, k);
            var l = this.dotWidth * g,
            m = this.dotWidth * f,
            h = h + l,
            k = k + m,
            h = 0 < c ? Math.min(h, this.endX) : Math.max(h, this.endX),
            k = 0 < d ? Math.min(k, this.endY) : Math.max(k, this.endY);
            b.lineTo(h, k);
            l = this.dashGap * g;
            m = this.dashGap * f;
            h += l;
            k += m;
            if (0 <= c) {
                if (h > this.endX) break
            } else if (h < this.endX) break;
            if (0 <= d) {
                if (k > this.endY) break
            } else if (k < this.endY) break
        }
    }
}).extend("Item");
Class("Arrow", {
    Package: "PageItem",
    SINGLE: "Single Arrow",
    DOUBLE: "Double Arrow",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.id = "arrow" + g;
        this.line.attr("id", this.id)
    },
    initConfig: function() {
        this._super();
        this.arrowType = this.config.arrowType;
        this.extraWidth = 4 * this.lineWidth
    },
    parseConfig: function(b) {
        return {
            originWidth: b.location.pageWidth,
            originHeight: b.location.pageHeight,
            startX: b.lineStartPX,
            startY: b.lineStartPY,
            rotation: b.location.rotation,
            endX: b.lineEndPX,
            endY: b.lineEndPY,
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            arrowType: b.arrowType,
            alpha: b.alpha,
            lineAlpha: b.lineAlpha,
            lineWidth: b.lineWidth,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            lineType: b.lineType,
            dotWidth: b.dotWidth,
            dotWidthRation: b.dotWidthRation,
            dotGrapRation: b.dotGrapRation,
            color: b.color,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow
        }
    },
    draw: function() {
        this._super();
        var b = this.getContext();
        b && this.drawArrow(b)
    },
    drawArrow: function(b) {
        var c = this.endX - this.startX,
        d = this.endY - this.startY,
        f = Math.sqrt(c * c + d * d),
        g = 2.5 * this.lineWidth,
        c = c / f * g,
        d = d / f * g;
        this.drawArrowOnPoint(b, Point(this.endX, this.endY), -c, -d);
        this.arrowType == this.DOUBLE && this.drawArrowOnPoint(b, Point(this.startX, this.startY), c, d)
    },
    drawArrowOnPoint: function(b, c, d, f) {
        this.drawArrowLine(b, c, d, f, 35);
        this.drawArrowLine(b, c, d, f, -35)
    },
    drawArrowLine: function(b, c, d, f, g) {
        b.save();
        b.translate(c.getX(), c.getY());
        b.rotate(g * Math.PI / 180);
        b.beginPath();
        b.moveTo(0, 0);
        b.lineTo(d, f);
        b.stroke();
        b.restore()
    }
}).extend("Line");
global.hddr.soq3 = function() {
    return hddr.soo1 || "tm"
} ();
bdor[10] = "l";
Class("Link", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.initLinkColor();
        this.initLink();
        this.initEvents();
        this.initLinkHint(this.link);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initLinkColor: function() {
        void 0 == this.config.downColor ? (this.config.downColor = bookConfig.LinkDownColor ? Color(bookConfig.LinkDownColor) : Color("#808080"), this.config.downAlpha = bookConfig.LinkAlpha ? bookConfig.LinkAlpha: 0.6, this.config.overColor = this.config.downColor, this.config.outColor = this.config.downColor, this.config.overAlpha = this.config.downAlpha / 2, this.config.outAlpha = 0) : (this.config.downColor = Color(this.config.downColor), this.config.overColor = Color(this.config.overColor), this.config.outColor = Color(this.config.outColor), parseBool(this.config.hint) && (this.config.hint.hintShapeColor = Color(this.config.hint.hintShapeColor), this.config.hint.hintShapeColor2 = Color(this.config.hint.hintShapeColor2)))
    },
    initLink: function() {
        this.container = $("<div></div>");
        this.link = $("<div class='bubble expose-square-solid' style='position: absolute;'></div>");
        this.link.css({
            "border-color": "rgba(0,0,0,0)",
            "background-color": this.config.outColor.rgba(this.config.outAlpha)
        });
        this.setRotation(this.link, this.config.rotation);
        this.parent.append(this.link)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            ellipseH: b.ellipseH,
            ellipseW: b.ellipseW,
            downColor: b.downColor,
            downAlpha: b.downAlpha,
            overColor: b.overColor,
            overAlpha: b.overAlpha,
            outColor: b.outColor,
            outAlpha: b.outAlpha,
            action: b.action,
            hint: b.hint,
            borderColor: b.borderColor,
            mouseOver: b.mouseOver
        }
    },
    initEvents: function() {
        function b() {
            this.link.css("border-color", "rgba(0,0,0,0)");
            this.link.css({
                "background-color": f.rgba(this.config.outAlpha)
            })
        }
        var c = this.config.overColor,
        d = this.config.downColor,
        f = this.config.outColor;
        this.link.bind(_event._down,
        function(b) {
            this.link.css({
                "background-color": d.rgba(this.config.downAlpha),
                cursor: "pointer"
            })
        }.bind(this));
        this.link.bind("mouseenter",
        function(b) {
            parseBool(this.config.mouseOver) && this.link.css("border-color", this.config.borderColor.toString());
            this.link.css({
                "background-color": c.rgba(this.config.overAlpha),
                cursor: "pointer"
            })
        }.bind(this));
        this.link.bind(isTouch ? _event._end: "mouseleave",
        function(c) {
            $.browser.device == $.browser.DEVICE_PC ? b.apply(this) : b.delay(this, 1E3)
        }.bind(this));
        this.addActionEvent(this.link)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.left = b * this.config.x;
        this.top = c * this.config.y;
        this.width = b * this.config.width;
        this.height = c * this.config.height;
        this.setPosition(this.left, this.top);
        this.link.css({
            width: this.width + "px",
            height: this.height + "px"
        })
    },
    setPosition: function(b, c) {
        this.link.css({
            left: b + "px",
            top: c + "px"
        })
    }
}).extend(PageItem.Item);
bdor[29] = "t";
Class("Rectangle", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.id = "rectangle" + g;
        this.color = Color(this.config.color);
        this.angle = Number(this.config.angle) - 90;
        this.borderColor = Color(this.config.borderColor);
        this.colorA = Color(this.config.ColorA);
        this.colorB = Color(this.config.ColorB);
        this.round = this.config.round;
        this.roundWidth = Math.ceil(this.config.roundWidth / 2);
        this.initRectangle();
        this.initEvents();
        parseBool(this.config.reflection) && this.imageReflection(this.Re);
        this.onResize(d, f)
    },
    initRectangle: function() {
        this.Re = $("<div id='" + this.id + "'></div>");
        this.Re.css({
            position: "absolute",
            opacity: this.config.alpha,
            border: this.config.borderWidth + "px solid " + this.borderColor.rgba(this.config.borderAlpha),
            "background-color": this.color.rgba(this.config.spalpha)
        }); ! 0 == this.round && this.Re.css({
            "border-radius": this.roundWidth + "px"
        });
        if ("gradient" == this.config.fillStyle) {
            var b = this.colorB.rgba(this.config.spalpha),
            c = this.colorA.rgba(this.config.spalpha);
            this.Re.css({
                "background-image": "linear-gradient(" + this.angle + "deg, " + b + ", " + c + ")"
            });
            this.Re.css({
                "background-image": $.browser.prefix + "linear-gradient(" + this.angle + "deg, " + b + ", " + c + ")"
            })
        }
        "none" == this.config.fillStyle && this.Re.css({
            "background-color": ""
        });
        this.addShadow(this.Re);
        this.setRotation(this.Re, this.config.rotation);
        this.parent.append(this.Re)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            ColorA: b.gradientColorA,
            ColorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow,
            round: parseBool(b.round, !1),
            roundWidth: Math.max(Number(b.ellipseWidth), Number(b.ellipseHeight)),
            action: b.action
        }
    },
    initEvents: function() {
        this.addActionEvent(this.Re)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.Re.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        this.Re.css({
            left: this.left + "px",
            top: this.top + "px"
        })
    }
}).extend(PageItem.Item);
bdor[8] = "o";
Class("Round", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.parent = b;
        this.color = Color(this.config.color).toString();
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.id = "round" + g;
        this.x1 = this.x - 10;
        this.y1 = this.y - 10;
        0 > this.x - 10 && (this.x1 = 0);
        0 > this.y - 10 && (this.y1 = 0);
        this.rounds = $("<canvas id=" + this.id + " width=" + (this.width + 20) + " height=" + (this.height + 20) + " style='position: absolute;top:" + this.y1 + "px;left:" + this.x1 + "px'></canvas>");
        this.setRotation(this.rounds, this.config.rotation);
        this.initEvent();
        this.parent.append(this.rounds);
        this.roundcan(this.x, this.y, this.width, this.height, this.color, this.config.fillStyle, this.config.ColorA, this.config.ColorB, this.config.alpha, this.config.borderWidth, this.config.spalpha, this.config.borderColor, this.config.borderAlpha, this.config.sx, this.config.sy, this.config.se, this.config.sr, this.config.sh, 360 - Number(this.config.angle))
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            ColorA: b.gradientColorA,
            ColorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = "";
        if (null != this.config.action) {
            try {
                void 0 != this.config.action.length && (this.config.action = this.config.action[0]),
                this.linkURL = this.config.action.url
            } catch(b) {}
            null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL);
            this.addActionEvent(this.rounds)
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.rounds.css({
            width: this.width + 20 + "px",
            height: this.height + 20 + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth - 10;
        this.y = this.config.y * this.pageHeight - 10;
        this.rounds.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    roundcan: function(b, c, d, f, g, h, k, l, m, n, p, q, t, r, s, u, v, w, y) {
        b = m = 0;
        try {
            var x = this.rounds[0].getContext("2d")
        } catch(A) {
            return
        }
        c = [d / 2 + 10, f / 2 + 10];
        m = d / 2;
        b = f / 2;
        x.save();
        x.beginPath();
        x.strokeStyle = Color(q).toString();
        x.lineWidth = n;
        x.globalAlpha = p; ! 0 === parseBool(w) && (x.shadowOffsetX = r, x.shadowOffsetY = s, x.shadowBlur = u, x.shadowColor = Color(v).toString());
        x.closePath();
        x.stroke();
        DrawEllipse(x, c, m, b);
        "gradient" == h && (f = y * Math.PI / 180, d = c[0] + m * Math.cos(f), f = c[1] + b * Math.sin(f), y = (y + 180) * Math.PI / 180, p = c[0] + m * Math.cos(y), y = c[1] + b * Math.sin(y), y = x.createLinearGradient(d, f, p, y), y.addColorStop(0, Color(k).toString()), y.addColorStop(1, Color(l).toString()), x.fillStyle = y, x.fill());
        "none" == h && (x.fillStyle = g, x.fill());
        0 != n && x.stroke();
        x.closePath()
    }
}).extend(PageItem.Item);
bdor[9] = "j";
function DrawEllipse(b, c, d, f) {
    var g = c[0] + d,
    h = c[1];
    b.moveTo(g, h);
    for (var k = 0; 360 >= k; k++) h = k * Math.PI / 180,
    g = c[0] + d * Math.cos(h),
    h = c[1] - f * Math.sin(h),
    b.lineTo(g, h)
}
Class("Text", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.color = this.config.color ? Color(this.config.color) : Color("#000000");
        this.originWidth = this.config.pageW;
        this.originHeight = this.config.pageH;
        this.id = "text" + g;
        this.initText();
        this.initEvents();
        this.initLinkHint(this.text);
        parseBool(this.config.reflection) && this.imageReflection(this.textdiv);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initText: function() {
        var b = getInnerHtml(this.config.textStr);
        this.fontSize = b.fontSize;
        this.adjustFontSize = $.browser.chrome ? Math.max(1, 12 / this.fontSize) : 1;
        this.width = this.config.width * this.originWidth * this.adjustFontSize;
        this.height = this.config.height * this.originHeight * this.adjustFontSize;
        this.textdiv = $("<div id=" + this.id + "></div>");
        this.textdiv.css({
            overflow: "hidden",
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.text = b.$text; ! 0 === parseBool(this.config.fillBg) && null != this.config.bgcolor ? (b = Color(this.config.bgcolor), this.text.css({
            "background-color": b.rgba()
        })) : this.text.css({
            background: ""
        }); ! 0 === parseBool(this.config.tbold) && this.text.css({
            "font-weight": "bold"
        }); ! 0 === parseBool(this.config.italic) && this.text.css({
            "font-style": "italic"
        });
        this.addShadow(this.text);
        this.textdiv.append(this.text);
        this.parent.append(this.textdiv);
        this.resetText()
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            alpha: b.alpha,
            pageWidth: b.pageWidth,
            pageHeight: b.pageHeight,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            selectable: b.selectable,
            highlightsBool: b.highlightsBool,
            highlightsURL: b.highlightsURL,
            highlightsLabel: b.highlightsLabel,
            hint: b.hint,
            textStr: b.textStr,
            lineH: b.lineHeightRation,
            fontName: b.formats.defaultFormat.fontName,
            fontSize: b.formats.defaultFormat.fontSize,
            color: b.formats.defaultFormat.color,
            tbold: b.formats.defaultFormat.bold,
            italic: b.formats.defaultFormat.italic,
            pageH: b.formats.defaultFormat.pageH,
            pageW: b.formats.defaultFormat.pageW,
            bgalpha: b.background.alpha,
            fillBg: b.background.fillBg,
            bgcolor: b.background.color,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow,
            action: b.action
        }
    },
    initEvents: function() {
        this.addActionEvent(this.text)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition(b, c);
        this.resizeText(c)
    },
    resizeText: function(b) {
        b = b / this.originHeight / this.adjustFontSize;
        this.textdiv.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-moz-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-ms-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-o-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            transform: "scale(" + b + ") rotate(" + this.config.rotation + "deg)"
        })
    },
    setPosition: function(b, c) {
        this.left = this.config.x * b;
        this.top = this.config.y * c;
        this.textdiv.css({
            left: this.left + "px",
            top: this.top + "px"
        })
    },
    resetText: function() {
        var b = this.config.textStr.match(/\<TEXTFORMAT\s.*?\>\<\/TEXTFORMAT\>/ig);
        this.newTextFormats = [];
        if (b) {
            for (var c = 0; c < b.length; c++) {
                var d = b[c].match(/LEADING\s?=\s?\\?[\"\']?\d+\\?[\"\']?/i);
                d || (d = ["LEADING='5'"]);
                this.analysisTextformat(b[c], d)
            }
            this.config.textStr = this.newTextFormats.join("").replaceAll("</FONT>", "</div>");
            $(".textformat p").css({
                margin: "0px"
            })
        }
    },
    analysisTextformat: function(b, c) {
        var d = ["SIZE='16'"],
        f = ["COLOR='#000000'"],
        g = ["FACE='Tahoma'"],
        h = ["LETTERSPACING='0'"],
        k = ["KERNING='0'"],
        l = parseInt(c[0].match(/\d+/)[0]),
        m = b.match(/\<FONT\s.*?\>/ig);
        if (m) {
            for (var n = 0; n < m.length; n++) {
                var p = m[n],
                q = p.match(/SIZE\s?=\s?\\?[\"\']?\d+\\?[\"\']?/i),
                t = p.match(/COLOR\s?=\s?\\?[\"\']{1}#.*?\\?[\"\']{1}/i),
                r = p.match(/FACE\s?=\s?\\?[\"\']{1}.*?\\?[\"\']{1}/i),
                s = p.match(/LETTERSPACING\s?=\s?\\?[\"\']?\d+\\?[\"\']?/i),
                p = p.match(/KERNING\s?=\s?\\?[\"\']?\d+\\?[\"\']?/i);
                q ? d = q: q = d;
                t ? f = t: t = f;
                r ? g = r: r = g;
                s ? h = s: s = h;
                p ? k = p: p = k;
                q = parseInt(q[0].match(/\d+/)[0]);
                t = t[0].match(/#\w+/)[0];
                r = r[0].match(/\\?[\"\'].*?\\?[\"\']/)[0];
                s = parseInt(s[0].match(/\d+/)[0]);
                p = parseInt(p[0].match(/\d+/)[0]);
                b = b.replaceAll(m[n], "<div style='height:" + (q + l) + "px;line-height:" + (q + l) + "px;font-size:" + q + "px;letter-spacing:" + s + "px;font-kerning:" + p + "px;color:" + t + ";font-family:" + r + ";'>")
            }
            this.newTextFormats.push(b)
        }
    }
}).extend(PageItem.Item);
Class("TextFormatAnalyzer", {
    create: function(b) {
        this.originalFormat = b;
        null != b && (this.analyzedText = b.toLowerCase().replaceAll('"', ""))
    },
    getAlign: function() {
        return this.analyzedText.subBetween("align=", ">").trim()
    },
    getLeftMargin: function() {
        var b = this.analyzedText.subBetween("leftmargin=", " ").trim();
        return "" == b ? 0 : parseInt(b)
    },
    getRightMargin: function() {
        var b = this.analyzedText.subBetween("rightmargin=", " ").trim();
        return "" == b ? 0 : parseInt(b)
    },
    getFontFamily: function() {
        var b = this.analyzedText.subBetween("face=", " ").trim();
        "" == b && (b = "Arial");
        return b
    },
    getFontColor: function() {
        var b = this.analyzedText.subBetween("color=", " ").trim();
        "" == b && (b = "#000000");
        return b
    },
    getFontSize: function() {
        var b = this.analyzedText.subBetween("size=", " ").trim();
        "" == b && (b = "16");
        return b
    },
    getLetterSpace: function() {
        var b = this.analyzedText.subBetween("letterspacing=", " ").trim();
        "" == b && (b = "0");
        return b
    },
    initFont: function(b) {
        var c = this.getFontFamily(),
        d = this.getFontColor(),
        f = this.getFontSize(),
        g = this.getLetterSpace();
        b.css({
            "font-family": c,
            color: d,
            "font-size": f + "px",
            "letter-spacing": g + "px"
        })
    },
    getText: function() {
        for (var b = [], b = [], c = loadXMLString("<xml>" + this.originalFormat + "</xml>").getElementsByTagName("TEXTFORMAT"), d = 0; d < c.length; d++) if (null != c[d].getElementsByTagName("FONT")[0].firstChild) {
            var f = c[d].getElementsByTagName("FONT")[0].firstChild.nodeValue;
            c[d].getElementsByTagName("P");
            null == f && c[d].getElementsByTagName("B")[0] && (f = c[d].getElementsByTagName("B")[0].firstChild.nodeValue);
            null == f && c[d].getElementsByTagName("I")[0] && (f = c[d].getElementsByTagName("I")[0].firstChild.nodeValue);
            null == f && c[d].getElementsByTagName("U")[0] && (f = c[d].getElementsByTagName("U")[0].firstChild.nodeValue);
            null != f && b.push(f)
        }
        c = "";
        for (d = 0; d < b.length; d++) c = c + "<br>" + b[d] + "</br>";
        return c
    },
    getTextLines: function() {
        var b = [],
        b = [];
        if ( - 1 < this.originalFormat.toLowerCase().indexOf("<p")) {
            for (var c = loadXMLString("<xml>" + this.originalFormat + "</xml>"), d = c.getElementsByTagName("P"), f = 0; f < d.length; f++) null != d[f].getElementsByTagName("FONT")[0].firstChild && (c = d[f].getElementsByTagName("FONT")[0].firstChild.nodeValue, null == c && d[f].getElementsByTagName("B")[0] && (c = d[f].getElementsByTagName("B")[0].firstChild.nodeValue), null == c && d[f].getElementsByTagName("I")[0] && (c = d[f].getElementsByTagName("I")[0].firstChild.nodeValue), null == c && d[f].getElementsByTagName("U")[0] && (c = d[f].getElementsByTagName("U")[0].firstChild.nodeValue), null != c && b.push(c));
            d = "";
            for (f = 0; f < b.length; f++) d += b[f];
            return d
        }
        c = loadXMLString("<xml>" + this.originalFormat + "</xml>");
        b = c.childNodess[0];
        if (null == b.getElementsByTagName("FONT")[0].firstChild) return "";
        c = b.getElementsByTagName("FONT")[0].firstChild.nodeValue;
        null == c && d[f].getElementsByTagName("B")[0] && (c = b.getElementsByTagName("B")[0].firstChild.nodeValue);
        null == c && d[f].getElementsByTagName("I")[0] && (c = b.getElementsByTagName("I")[0].firstChild.nodeValue);
        null == c && d[f].getElementsByTagName("U")[0] && (c = b.getElementsByTagName("U")[0].firstChild.nodeValue);
        return null != c ? c: ""
    },
    getLines: function() {
        for (var b = [], b = [], c = loadXMLString("<xml>" + this.originalFormat + "</xml>").getElementsByTagName("TEXTFORMAT"), d = 0; d < c.length; d++) if (null != c[d].getElementsByTagName("FONT")[0] && c[d].getElementsByTagName("FONT")[0].firstChild) {
            var f = c[d].getElementsByTagName("FONT")[0].firstChild.nodeValue;
            c[d].getElementsByTagName("P")[0] && c[d].getElementsByTagName("P");
            null == f && c[d].getElementsByTagName("B")[0] && (f = c[d].getElementsByTagName("B")[0].firstChild.nodeValue);
            null == f && c[d].getElementsByTagName("I")[0] && (f = c[d].getElementsByTagName("I")[0].firstChild.nodeValue);
            null == f && c[d].getElementsByTagName("U")[0] && (f = c[d].getElementsByTagName("U")[0].firstChild.nodeValue);
            null != f && b.push(f)
        }
        return b
    }
});
var getInnerHtml = function(b) {
    var c = $("<div style='word-break:break-word'></div>"),
    d = 12;
    b = $(b);
    for (var f = 0; f < b.length; f++) {
        var g = $("<div></div>"),
        h = function(b, c) {
            var f = c[0].childNodes,
            g = f.length;
            if (! (0 >= g)) for (var p = 0; p < g; p++) {
                var q = $(f[p]),
                t;
                switch (f[p].nodeName) {
                case "P":
                    t = $("<p></p>");
                    var r = q.attr("ALIGN");
                    r && t.css("text-align", r);
                    break;
                case "FONT":
                    t = $("<span>&#12288;</span>");
                    var r = q.attr("FACE"),
                    s = q.attr("SIZE"),
                    u = q.attr("COLOR");
                    r && t.css("font-family", r);
                    s && t.css("font-size", s + "px");
                    u && t.css("color", u);
                    d = parseInt(s);
                    break;
                case "B":
                    t = $("<b></b>");
                    break;
                case "I":
                    t = $("<i></i>");
                    break;
                case "U":
                    t = $("<u></u>");
                    break;
                case "#text":
                    t = f[p].nodeValue
                }
                t && (b.append(t), h(t, q))
            }
        };
        h(g, $(b[f]));
        c.append(g)
    }
    return {
        $text: c,
        fontSize: d
    }
};
Class("Button", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.button = null;
        this.left = this.pageWidth * this.config.x;
        this.top = this.pageHeight * this.config.y;
        this.config.hint && (this.config.hint.hintShapeColor = Color(this.config.hint.hintShapeColor).toString(), this.config.hint.hintShapeColor2 = this.config.hint.hintShapeColor2 ? Color(this.config.hint.hintShapeColor2).toString() : Color(this.config.hint.hintShapeColor).toString(), "null" == this.config.hint.text && (this.config.hint.text = ""));
        this.config.Format && (this.config.Format.color = Color(this.config.Format.color).toString());
        if (null == this.config.src || "null" == this.config.src) this.button = $("<button type = 'button' class='flip-action'></button>"),
        this.config.alpha = 0;
        else { ! 0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src);
            this.config.src.substring(this.config.src.lastIndexOf("/") + 1, this.config.src.length);
            if (this.swfButton = ".swf" == this.config.src.substr(this.config.src.length - 4, 4)) {
                this.button = $("<div class='flip-action'></div>");
                this.buttonEvt = $("<div></div>");
                isTouchDevice() ? (this.button.css({
                    "-webkit-border-radius": "8px",
                    "-moz-border-radius": "5px",
                    "border-radius": "8px",
                    "background-image": getBrowserPre() + "linear-gradient(top,rgba(185,185,185,1) 0%, rgba(122,122,122,1) 45%, rgba(80, 80, 80, 1) 46%, rgba(53,53,53,1) 100%)",
                    "-webkit-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                    "-moz-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                    "-o-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                    "-ms-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                    "box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)"
                }), this.buttonEvt.css({
                    "-webkit-border-radius": "8px",
                    "-moz-border-radius": "5px",
                    "border-radius": "8px",
                    "background-color": "#333333",
                    opacity: 0.2,
                    display: "none",
                    width: this.width + "px",
                    height: this.height + "px"
                })) : (this.button.flash({
                    swf: this.config.src,
                    width: this.width + "px",
                    height: this.height + "px",
                    wmode: "transparent"
                }), this.buttonEvt.css({
                    display: "none",
                    width: this.width + "px",
                    height: this.height + "px"
                }));
                this.buttonCaption = new label(this.config.buttonCaption, this.button);
                this.config.Format && this.buttonCaption.setFont(this.config.HRate * this.pageHeight * 1 / 2, this.config.Format.color, this.config.Format.font);
                b = this.buttonCaption.getWidth() > this.width ? 0 : (this.width - this.buttonCaption.getWidth()) / 2;
                this.buttonCaption.setLabelPosition(b, this.config.captionY * this.height / 100);
                this.button.append(this.buttonEvt);
                var g = this;
                this.button.bind(_event._down,
                function() {
                    g.buttonEvt.css({
                        display: "block"
                    })
                });
                this.button.bind(_event._end,
                function() {
                    g.buttonEvt.css({
                        display: "none"
                    })
                });
                this.button.bind("mouseleave",
                function() {
                    g.buttonEvt.css({
                        display: "none"
                    })
                })
            }
            ".swf" != this.config.src.substr(this.config.src.length - 4, 4) && (this.button = $("<div><img/></div>"), this.button.find("img").css({
                width: this.width,
                height: this.height
            }), this.button.find("img").attr({
                src: this.config.src
            }), this.buttonCaption = new label(this.config.buttonCaption, this.button), this.config.Format && this.buttonCaption.setFont(this.config.HRate * this.pageHeight * 1 / 2, this.config.Format.color, this.config.Format.font), b = this.buttonCaption.getWidth() > this.width ? 0 : (this.width - this.buttonCaption.getWidth()) / 2, this.buttonCaption.setLabelPosition(b, this.config.captionY * this.height / 100))
        }
        this.button.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            left: this.left + "px",
            top: this.top + "px",
            opacity: this.config.alpha
        });
        this.setRotation(this.button, this.config.rotation);
        this.parent.append(this.button);
        this.initEvt();
        this.initLinkHint(this.button);
        parseBool(this.config.reflection) && this.imageReflection(this.button)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.url,
            action: b.action,
            hint: b.hint,
            buttonCaption: b.buttonCaption,
            captionY: b.captionY,
            HRate: b.HRate,
            hint: b.hint,
            Format: b.Format
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        this.button.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.button.find("img").css({
            width: this.width + "px",
            height: this.height + "px"
        });
        if (this.swfButton) if (isTouchDevice()) {
            this.config.Format && this.buttonCaption.setFont(this.config.HRate * this.pageHeight * 2 / 3, bookConfig.iconColor, this.config.Format.font);
            var d = this.buttonCaption.getWidth() > this.width ? 0 : (this.width - this.buttonCaption.getWidth()) / 2;
            this.buttonCaption.setLabelPosition(d, this.config.captionY * this.height / 100);
            this.buttonEvt.css({
                width: this.width + "px",
                height: this.height + "px"
            })
        } else this.hide(),
        this.show();
        this.setPosition(this.left, this.top)
    },
    hide: function() {
        isTouchDevice()
    },
    show: function() {
        var b = this;
        if (!isTouchDevice() && this.swfButton) {
            this.buttonEvt = $("<div></div>");
            this.button.flash().remove();
            this.button.flash({
                swf: this.config.src,
                width: this.width + "px",
                height: this.height + "px",
                wmode: "transparent"
            });
            this.buttonEvt.css({
                display: "none",
                width: this.width + "px",
                height: this.height + "px"
            });
            this.buttonCaption = new label(this.config.buttonCaption, this.button);
            this.config.Format && this.buttonCaption.setFont(this.config.HRate * this.pageHeight * 1 / 2, this.config.Format.color, this.config.Format.font);
            var c = this.buttonCaption.getWidth() > this.width ? 0 : (this.width - this.buttonCaption.getWidth()) / 2;
            this.buttonCaption.setLabelPosition(c, this.config.captionY * this.height / 100);
            this.button.append(this.buttonEvt);
            this.button.bind(_event._down,
            function() {
                b.buttonEvt.css({
                    display: "block"
                })
            });
            this.button.bind(_event._end,
            function() {
                b.buttonEvt.css({
                    display: "none"
                })
            });
            this.button.bind("mouseleave",
            function() {
                b.buttonEvt.css({
                    display: "none"
                })
            })
        }
    },
    setPosition: function(b, c) {
        this.button.css({
            left: b + "px",
            top: c + "px"
        })
    },
    initEvt: function() {
        this.addActionEvent(this.button)
    }
}).extend(PageItem.Item);
global.hddr.soo6 = function() {
    return hddr.bbb5
};
Class("Area", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.id = "Area" + g;
        this.color = Color(this.config.color);
        this.initArea();
        this.initEvents();
        this.onResize(d, f)
    },
    initArea: function() {
        this.Area = $("<div id='" + this.id + "'></div>");
        this.Area.css({
            position: "absolute",
            overflow: "hidden",
            "background-color": this.color.rgba(this.config.alpha)
        }); ! 0 === parseBool(this.config.rounds) && this.Area.css({
            "border-radius": this.config.ellipseWidth + "px " + this.config.ellipseHeight + "px"
        });
        this.addShadow(this.Area);
        this.parent.append(this.Area)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            color: b.color,
            rounds: b.round,
            ellipseWidth: b.ellipseWidth,
            ellipseHeight: b.ellipseHeight,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow,
            action: b.action
        }
    },
    initEvents: function() {
        this.addActionEvent(this.Area)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.Area.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition();
        if (null != this.form) this.form.onResize(bookContainer.width(), bookContainer.height());
        if (null != this.slide) this.slide.onResize(bookContainer.width(), bookContainer.height());
        if (null != this.audios) this.audios.onResize(bookContainer.width(), bookContainer.height())
    },
    setPosition: function() {
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        this.Area.css({
            left: this.left + "px",
            top: this.top + "px"
        })
    }
}).extend(PageItem.Item);
Class("VideoForm", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this.parent = b;
        this.type = g;
        this.config = $.extend({
            width: 400,
            height: 300,
            src: null,
            alpha: 0.3,
            caption: ""
        },
        c);
        null != this.config.src && (this.config.width = Math.min(windowWidth - 10, Number(this.config.width)), this.config.height = Math.min(windowHeight - 10, Number(this.config.height)), this.sw = d, this.sh = f, this.th = 28, this.background = $("<div ></div>"), this.closeButton = $("<div></div>"), this.form = $("<div class='flip-action'></div>"), this.titleBar = $("<div></div>"), !0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src), "" != this.config.caption && (this.captionLabel = new label(this.config.caption, this.titleBar), this.captionLabel.setLabelPosition(5, 3, ["left", "top"]), this.captionLabel.setFont(13, "#dddddd", "Tahoma")), this.parent.append(this.background), this.parent.append(this.form), this.form.append(this.titleBar), this.titleBar.append(this.closeButton), this.setCss(), "text" == this.type && (this.text = $("<div>" + this.config.src + "</div>"), this.text.css({
            width: this.config.width - 10 + "px",
            height: this.config.height - this.th - 10 + "px",
            top: this.th + 2 + "px",
            left: "0px",
            "font-size": "12px",
            "line-height": "1.8",
            overflow: "auto",
            position: "absolute",
            padding: "5px"
        }), this.form.css({
            "background-color": "#ffffff",
            border: "5px solid rgba(204,204,204,0.8)"
        }), this.form.append(this.text)), "video" == this.type && (this.video = $("<video src='" + this.config.src + "' controls='controls'></video>"), this.video.css({
            width: this.config.width + "px",
            height: this.config.height - this.th + "px",
            top: this.th + "px",
            "z-index": "200",
            position: "absolute"
        }), this.form.css({
            "background-color": "#000000",
            border: "5px solid rgba(204,204,204,0.8)"
        }), this.form.append(this.video), this.video[0].play && this.video[0].play()), "flash" == this.type && (this.content = $("<div><div>"), this.content.flash({
            swf: this.config.src,
            width: this.config.width + "px",
            height: this.config.height - this.th + "px",
            wmode: "transparent"
        }), this.content.css({
            width: this.config.width + "px",
            height: this.config.height - this.th + "px",
            top: this.th + 2 + "px",
            "line-height": "1.8",
            overflow: "auto",
            position: "absolute"
        }), this.form.css("background-color", "#000000"), this.form.append(this.content)), this.initEvent())
    },
    setCss: function() {
        this.closeButton.css({
            position: "absolute",
            background: "url(" + uiBaseURL + "singleClose.png) repeat 2px 3px",
            left: this.config.width - 28 + "px",
            top: "3px",
            width: "15px",
            height: "18px",
            cursor: "pointer"
        });
        this.background.css({
            width: "100%",
            height: "100%",
            background: "rgba(0,0,0,0.5)",
            "z-index": 200,
            position: "absolute",
            left: "0px",
            top: "0px"
        });
        this.form.css({
            width: this.config.width + "px",
            height: this.config.height + "px",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            overflow: "hidden",
            "-webkit-border-radius": "5px",
            "-moz-border-radius": "5px",
            "-ms-border-radius": "5px",
            "border-radius": "5px",
            position: "absolute",
            "z-index": "201",
            border: "5px solid rgba(251,251,251,0.8)"
        });
        this.titleBar.css({
            "line-height": "1.8",
            width: this.config.width + "px",
            height: this.th + "px",
            "border-top-left-radius": "5px",
            "border-top-right-radius": "5px",
            position: "absolute",
            cursor: "pointer",
            "background-color": "#111111"
        })
    },
    initEvent: function() {
        var b, c, d, f, g = !1;
        this.closeButton.on(_event._end,
        function(b) {
            this.closeForm();
            b.stopPropagation()
        }.bind(this));
        this.background.on(_event._down,
        function(b) {
            this.closeForm()
        }.bind(this));
        this.titleBar.bind(_event._down,
        function(h) {
            this.titleBar[0].style.cursor = "move";
            d = this.form[0].style.left;
            f = this.form[0].style.top;
            b = h.clientX;
            c = h.clientY;
            g = !0
        }.bind(this));
        $(document).bind(_event._move,
        function(h) {
            var k = h.clientX;
            h = h.clientY;
            g && (k = parseInt(d) + parseInt(k) - parseInt(b), h = parseInt(f) + parseInt(h) - parseInt(c), this.form.css({
                transform: "translate(" + k + "px," + h + "px)",
                "-webkit-transform": "translate(" + k + "px," + h + "px)",
                "-moz-transform": "translate(" + k + "px," + h + "px)",
                "-o-transform": "translate(" + k + "px," + h + "px)",
                "-ms-transform": "translate(" + k + "px," + h + "px)"
            }))
        }.bind(this));
        this.titleBar.bind("mouseup",
        function(h) {
            if (g) {
                var k = h.clientX;
                h = h.clientY;
                var l = parseInt(k) - parseInt(b) + parseInt(d),
                m = parseInt(h) - parseInt(c) + parseInt(f);
                this.form.css({
                    transform: "translate(" + l + "px," + m + "px)",
                    "-webkit-transform": "translate(" + l + "px," + m + "px)",
                    "-moz-transform": "translate(" + l + "px," + m + "px)",
                    "-o-transform": "translate(" + l + "px," + m + "px)",
                    "-ms-transform": "translate(" + l + "px," + m + "px)"
                });
                b = k;
                rewmouseY = h;
                this.titleBar[0].style.cursor = "pointer";
                g = !1
            }
        }.bind(this))
    },
    closeForm: function() {
        var b = this;
        this.form.animate({
            width: 20,
            height: 20
        },
        200,
        function() {
            b.background.hide();
            b.form.remove();
            $(document).off(_event._move)
        })
    },
    onResize: function() {}
}).extend(PageItem.Item);
Class("MobileVideo", {
    create: function(b, c, d, f, g) {
        this.config = c;
        this.parent = b; ! 0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src);
        this.closeButton = $("<div></div>");
        this.content = $("<div></div>");
        this.content.css({
            position: "absolute",
            width: windowWidth + "px",
            height: windowHeight + "px",
            "z-index": 200,
            left: "0px",
            top: "0px",
            background: "rgb(0,0,0)"
        });
        this.video = $("<video controls='controls' class='flip-action'><source src='" + this.config.src + "'></video>");
        this.video.css({
            left: "2px",
            "z-index": "200",
            position: "absolute",
            width: "100%",
            height: windowHeight - 80 + "px",
            margin: "auto",
            top: "0px",
            bottom: "0px"
        });
        this.closeButton.css({
            position: "absolute",
            "background-image": "url(" + uiBaseURL + "closecat.png)",
            right: "10px",
            top: "20px",
            width: "22px",
            height: "20px",
            display: "block",
            "z-index": 9999
        });
        this.content.append(this.video);
        this.parent.append(this.closeButton);
        this.parent.append(this.content);
        this.video[0].play && this.video[0].play();
        this.closeButton.on(_event._end,
        function(b) {
            this.video.css("display", "none");
            this.content.css("display", "none");
            this.setCurrentTime(0);
            this.video[0].pause();
            this.content.remove();
            this.closeButton.remove();
            b.stopPropagation()
        }.bind(this))
    },
    setCurrentTime: function(b) {
        this.video[0].currentTime = b
    }
});
Class("TextLightBox", {
    create: function(b, c, d, f, g) {
        this.parent = b;
        this.config = c;
        this.background = $("<div class='flip-action'></div>");
        this.box = $("<div id=textling></div>");
        this.title = $("<div>" + this.config.caption + "</div>");
        this.panel = $("<div>" + this.config.src + "</div>");
        this.closeButton = $("<div>Close</div>");
        this.parent.append(this.background);
        this.parent.append(this.box);
        this.box.append(this.title).append(this.panel).append(this.closeButton);
        this.setCss();
        this.initEvent()
    },
    setCss: function() {
        this.panel.css({
            position: "relative",
            width: windowWidth - 40 + "px",
            height: windowHeight - 160 + "px",
            "overflow-x": "hidden",
            "font-size": "12px",
            "line-height": "2",
            left: "8px",
            "padding-right": "5px"
        });
        this.background.css({
            top: 0,
            "background-color": "black",
            opacity: "0.6",
            width: "100%",
            height: "100%",
            position: "absolute",
            "z-index": "100"
        });
        this.box.css({
            width: windowWidth - 40 + "px",
            height: windowHeight - 60 + "px",
            position: "absolute",
            margin: "auto",
            top: "0",
            left: "0",
            bottom: "0",
            right: "0",
            "background-color": "white",
            "border-radius": "4px",
            "z-index": "200",
            overflow: "hidden"
        });
        this.closeButton.css({
            position: "absolute",
            bottom: "10px",
            "border-radius": "4px",
            cursor: "pointer",
            "text-align": "center",
            padding: "10px 12px",
            "background-color": "red",
            width: windowWidth - 80 + "px",
            right: "0",
            left: "0",
            margin: "auto",
            color: "white"
        });
        this.title.css({
            position: "relative",
            padding: "13px 18px",
            "font-weight": "bold",
            background: "#EBEBEB",
            "border-radius": "5px 5px 0 0"
        })
    },
    initEvent: function() {
        this.closeButton.bind("click",

        function() {
            this.background.fadeOut(function() {
                this.background.remove()
            }.bind(this));
            this.box.animate({
                opacity: 0
            },
            500,
            function() {
                this.box.remove()
            }.bind(this))
        }.bind(this))
    }
});
Class("SlideShow", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.photos = $.extend([], c);
        this.photos.photo && (this.photos = void 0 == this.photos.photo[1] ? [this.photos.photo] : this.photos.photo);
        if (! (this.photos instanceof Array)) {
            if (void 0 == this.photos.url && void 0 == this.photos.photo) return;
            this.photos.url && (this.photos = [{
                url: this.photos.url,
                desc: ""
            }]);
            this.photos.photo && (this.photos = [this.photos.photo])
        }
        this.parent = b;
        this.sw = d;
        this.sh = f;
        this.imgIndex = -1;
        this.imgWidth = 200;
        this.imgHeight = 300;
        this.boxWidth = 200;
        this.boxHeight = 300;
        this.loadingImageHeight = this.loadingImageWidth = 32;
        this.background = $("<div style='position:absolute;width:" + this.sw + "px;height:" + this.sh + "px;background:rgba(0,0,0,0.4);z-index: 100'></div>");
        this.photoBox = $("<div id='photoBox'></div>");
        this.leftBar = $("<div></div>");
        this.rightBar = $("<div></div>");
        this.img = $("<img style='position : absolute;' />");
        this.parent.append(this.background);
        this.parent.append(this.photoBox);
        this.parent.append(this.leftBar);
        this.parent.append(this.rightBar);
        this.leftButton = new button(this.leftBar, {
            buttonType: 1,
            iconURL: uiBaseURL + "previous_down.png"
        });
        this.rightButton = new button(this.rightBar, {
            buttonType: 1,
            iconURL: uiBaseURL + "next_down.png"
        });
        this.closeButton = new button(this.parent, {
            buttonType: 1,
            iconURL: uiBaseURL + "close.png"
        },
        !0);
        this.leftButton.setButtonPosition(0, 29, ["left", "top"]);
        this.rightButton.setButtonPosition(0, 29, ["right", "top"]);
        this.closeButton.setButtonPosition(this.sw - 45, 5);
        this.closeButton.setCSS({
            "z-index": 210
        });
        this.rightBar.css({
            "z-index": 202,
            width: "100px",
            height: "100px",
            right: "0px",
            top: (this.sh - 100) / 2 + "px",
            position: "absolute"
        });
        this.leftBar.css({
            "z-index": 203,
            width: "100px",
            height: "100px",
            left: "0px",
            top: (this.sh - 100) / 2 + "px",
            position: "absolute"
        });
        this.photoBox.css({
            position: "absolute",
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            margin: "auto",
            left: "0px",
            top: "0px",
            bottom: "0px",
            right: "0px",
            "background-color": "#eeeeee",
            "z-index": 201,
            "-webkit-box-shadow": "0 0 10px rgba(255, 255, 255, 0.7)",
            "-moz-box-shadow": "0 0 10px rgba(255, 255, 255, 0.7)",
            "-ms-box-shadow": "0 0 10px rgba(255, 255, 255, 0.7)",
            "-o-box-shadow": "0 0 10px rgba(255, 255, 255, 0.7)",
            "box-shadow": "0 0 10px rgba(255, 255, 255, 0.7)"
        });
        this.loadingImage = $("<div><img src='" + uiBaseURL + "progress.gif' style='position:absolute;'/></div>");
        this.loadingImage.css({
            "z-index": -1,
            left: (this.boxWidth - this.loadingImageWidth) / 2 + "px",
            top: (this.boxHeight - this.loadingImageHeight) / 2 + "px"
        });
        this.loadingImage.css({
            width: this.loadingImageWidth + "px",
            height: this.loadingImageHeight + "px",
            position: "absolute"
        });
        this.photoBox.append(this.loadingImage);
        this.changeImage(0);
        var g = this;
        this.photoBox.bind(_event._down,
        function(b) {
            g.nextPage()
        });
        this.closeButton.onMouseDown(this, this.hide);
        this.background.on(_event._down, this.hide.bind(this));
        this.leftButton.onMouseDown(this, this.prePage);
        this.rightButton.onMouseDown(this, this.nextPage);
        this.leftButton.mouseEnterJump();
        this.rightButton.mouseEnterJump();
        void 0 != leftRightButton && null != leftRightButton && leftRightButton.setShow(!1)
    },
    nextPage: function() {
        var b = this.imgIndex + 1;
        b >= this.photos.length && (b = 0);
        this.changeImage(b)
    },
    prePage: function() {
        var b = this.imgIndex - 1;
        0 > b && (b = this.photos.length - 1);
        this.changeImage(b)
    },
    changeImage: function(b) {
        if (void 0 != b && this.imgIndex != b) {
            this.imgIndex = b;
            var c = this.photos[b].url; ! 0 == bookConfig.isFlipPdf && (c = c.startWith("./") ? "." + c: "../" + c);
            console.log("slideshow " + b + c);
            var d = this;
            this.img.attr("src", c);
            this.img.load(function() {
                d.imgWidth = d.img[0].naturalWidth;
                d.imgHeight = d.img[0].naturalHeight;
                var b = d.imgWidth,
                c = d.imgHeight;
                if (d.imgWidth > d.sw || d.imgHeight > d.sh) b = d.imgWidth / d.imgHeight,
                b > d.sw / d.sh ? (b = d.sw, c = d.sw * d.imgHeight / d.imgWidth) : (c = d.sh, b *= d.sh);
                d.img.css({
                    width: b + "px",
                    height: c + "px"
                });
                d.boxWidth != b || d.boxHeight != c ? (d.photoBox.animate({
                    width: b + 8,
                    height: c + 8
                },
                300,
                function() {
                    d.photoBox.append(d.img)
                }), d.loadingImage.css({
                    left: (b + 8 - d.loadingImageWidth) / 2,
                    top: (c + 8 - d.loadingImageHeight) / 2
                })) : d.photoBox.append(d.img);
                d.boxWidth = b;
                d.boxHeight = c;
                d.img.css({
                    left: "4px",
                    top: "4px"
                });
                d.loadingImage.css("display", "none")
            })
        }
    },
    hide: function() {
        var b = this;
        this.photoBox.animate({
            width: 20,
            height: 20
        },
        200,
        function() {
            b.leftBar.remove();
            b.rightBar.remove();
            b.closeButton.remove();
            b.photoBox.remove();
            b.background.hide()
        });
        void 0 != leftRightButton && null != leftRightButton && leftRightButton.setShow(!0)
    }
});
global.hddr.soa7 = bdor[3] + bdor[10];
Class("Callout", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.pageW = this.config.pageW;
        this.pageH = this.config.pageH;
        this.width = this.config.width * this.pageW;
        this.height = this.config.height * this.pageH;
        this.x = this.config.x * d;
        this.y = this.config.y * f;
        this.cx1 = this.config.cx1 * this.width;
        this.cy1 = this.config.cy1 * this.height;
        this.cx2 = this.config.cx2 * this.width;
        this.cy2 = this.config.cy2 * this.height;
        this.pointx = this.config.pointx * this.width;
        this.pointy = this.config.pointy * this.height;
        this.fontSize = this.config.lineH * this.pageH;
        this.cl = this.ct = this.hl = this.wl = this.canl = this.cant = this.canh = this.canw = 0;
        b = new TextFormatAnalyzer(this.config.textStr);
        this.text = b.getLines();
        null == this.config.fontName && (c = b.getFontFamily().split(","), this.config.fontName = c[0], this.config.fontSize = b.getFontSize(), this.config.color = b.getFontColor(), this.color = Color(this.config.color).toString());
        switch (this.config.direct) {
        case "Down":
            if (0 > this.pointx) {
                this.canw = this.width - this.pointx + 20;
                this.canh = this.pointy + 20;
                this.cant = this.y - 10;
                this.canl = this.x - (this.canw - this.width - 10);
                break
            }
            this.canw = this.pointx > this.width ? this.pointx + 20 : this.width + 20;
            this.canh = this.pointy + 20;
            this.cant = this.y - 10;
            this.canl = this.x - 10;
            break;
        case "left":
            if (0 > this.pointy) {
                this.canw = this.width - this.pointx + 20;
                this.canh = this.height - this.pointy + 20;
                this.cant = this.y - 10;
                this.canl = this.x + this.pointx + 40;
                break
            }
            this.pointy > this.height ? (this.canw = this.width - this.pointx + 20, this.canh = this.pointy + 20) : (this.canw = this.width - this.pointx + 20, this.canh = this.height + 20);
            this.cant = this.y - 10;
            this.canl = this.x + this.pointx + 40;
            break;
        case "Up":
            if (0 > this.pointx) {
                this.canw = this.width - this.pointx + 20;
                this.canh = this.height - this.pointy + 20;
                this.cant = this.y - (this.canh - this.height - 10);
                this.canl = this.x - (this.canw - this.width - 10);
                break
            }
            this.canw = this.pointx > this.width ? this.pointx + 20 : this.width + 20;
            this.canh = this.height - this.pointy + 20;
            this.cant = this.y - (this.canh - this.height - 10);
            this.canl = this.x - 10;
            break;
        case "Right":
            if (0 > this.pointy) {
                this.canw = this.pointx + 20;
                this.canh = this.height - this.pointy + 20;
                this.cant = this.y - (this.canh - this.height - 10);
                this.canl = this.x - 10;
                break
            }
            this.pointy > this.height ? (this.canw = this.pointx + 20, this.canh = this.pointy + 20) : (this.canw = this.pointx + 20, this.canh = this.height + 20);
            this.cant = this.y - 10;
            this.canl = this.x - 10
        }
        this.wl = this.canw / this.pageWidth;
        this.hl = this.canh / this.pageHeight;
        this.ct = this.cant / this.pageHeight;
        this.cl = this.canl / this.pageWidth;
        this.callout = $("<canvas width=" + this.canw + " height=" + this.canh + " style='position: absolute;top:" + this.cant + "px;left:" + this.canl + "px'></canvas>");
        this.parent.append(this.callout);
        this.setRotation(this.callout, this.config.rotation);
        this.calloutDown();
        this.resizeCallout(this.pageWidth);
        this.initEvents();
        parseBool(this.config.reflection) && this.imageReflection(this.cross)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            alpha: b.alpha,
            textStr: b.textStr,
            lineH: b.lineHeightRation,
            pageW: b.formats.defaultFormat.pageW,
            pageH: b.formats.defaultFormat.pageH,
            fontName: b.formats.defaultFormat.fontName,
            fontSize: b.formats.defaultFormat.fontSize,
            color: b.formats.defaultFormat.color,
            tbold: b.formats.defaultFormat.bold,
            italic: b.formats.defaultFormat.italic,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            bgalpha: b.background.alpha,
            fillBg: b.background.fillBg,
            bgcolor: b.background.color,
            direct: b.hookDirect,
            cx1: b.hookContr1RatioX,
            cy1: b.hookContr1RatioY,
            cx2: b.hookContr2RatioX,
            cy2: b.hookContr2RatioY,
            pointx: b.hookContrPointRatioX,
            pointy: b.hookContrPointRatioY,
            cornerRadiut: b.cornerRadiut,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            bordreAlpha: b.bordreAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    resizeCallout: function(b) {
        b /= this.pageW;
        this.callout.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ")",
            "-moz-transform": "scale(" + b + ")",
            "-ms-transform": "scale(" + b + ")",
            "-o-transform": "scale(" + b + ")",
            transform: "scale(" + b + ")"
        })
    },
    calloutDown: function() {
        var b = [],
        c = [],
        d,
        f,
        g = this.callout[0].getContext("2d"),
        h,
        k,
        l,
        m,
        n,
        p,
        q,
        t,
        r,
        s,
        u,
        v,
        w,
        y,
        x,
        A,
        E,
        F,
        z,
        C,
        B,
        K,
        D,
        I,
        H,
        G,
        M,
        J;
        switch (this.config.direct) {
        case "Down":
            if (0 > this.pointx) {
                h = this.canw - this.width - 10;
                k = 20;
                l = this.canw - this.width - 10;
                m = 10;
                d = this.canw - this.width;
                f = 10;
                n = this.canw - 20;
                p = 10;
                q = this.canw - 10;
                t = 10;
                r = this.canw - 10;
                s = 20;
                u = this.canw - 10;
                v = this.height;
                w = this.canw - 10;
                y = this.height + 10;
                x = this.canw - 20;
                A = this.height + 10;
                E = this.canw - (this.width - this.cx2) - 10;
                F = this.height + 10;
                z = 10;
                C = this.pointy + 10;
                B = this.canw - (this.width - this.cx1) - 10;
                K = this.height + 10;
                D = this.canw - this.width;
                I = this.height + 10;
                H = this.canw - (this.width + 10);
                G = this.height + 10;
                M = this.canw - (this.width + 10);
                J = this.height;
                break
            }
            h = 10;
            k = 20;
            m = l = 10;
            d = 20;
            f = 10;
            n = this.width;
            p = 10;
            q = this.width + 10;
            t = 10;
            r = this.width + 10;
            s = 20;
            u = this.width + 10;
            v = this.height;
            w = this.width + 10;
            y = this.height + 10;
            x = this.width;
            A = this.height + 10;
            E = this.cx2 + 10;
            F = this.height + 10;
            z = this.pointx + 10;
            C = this.pointy + 10;
            B = this.cx1 + 10;
            K = this.height + 10;
            D = 20;
            I = this.height + 10;
            H = 10;
            G = 10 + this.height;
            M = 10;
            J = this.height;
            break;
        case "left":
            if (0 > this.pointy) {
                h = this.canw - this.width - 10;
                k = this.canh - this.height;
                l = this.canw - this.width - 10;
                m = this.canh - this.height - 10;
                d = this.canw - this.width;
                f = this.canh - this.height - 10;
                n = this.canw - 20;
                p = this.canh - this.height - 10;
                q = this.canw - 10;
                t = this.canh - this.height - 10;
                r = this.canw - 10;
                s = this.canh - this.height;
                u = this.canw - 10;
                v = this.canh - 20;
                w = this.canw - 10;
                y = this.canh - 10;
                x = this.canw - 20;
                A = this.canh - 10;
                E = this.canw - this.width - 10;
                F = this.canh - 20;
                z = this.canw - this.width - 10;
                C = this.canh - 10;
                B = this.canw - this.width;
                K = this.canh - 10;
                D = this.canw - this.width - 10;
                I = this.canh - (this.height - this.cy2 + 10);
                G = H = 10;
                M = this.canw - this.width - 10;
                J = this.canh - (this.height - this.cy1 + 10);
                break
            }
            this.pointy > this.height ? (l = this.canw - this.width - 10, m = 10, q = this.canw - 10, t = 10, w = this.canw - 10, y = this.height + 10, z = this.canw - this.width - 10, C = this.height + 10, D = this.canw - this.width - 10, I = this.cy2 + 10, H = 10, G = this.canh - 10) : (l = this.canw - this.width - 10, m = 10, q = this.canw - 10, t = 10, w = this.canw - 10, y = this.height + 10, z = this.canw - this.width - 10, C = this.height + 10, D = this.canw - this.width - 10, I = this.cy2 + 10, H = 10, G = this.pointy);
            M = this.canw - this.width - 10;
            J = this.cy1 + 10;
            h = l;
            k = m + 10;
            d = l + 10;
            f = m;
            n = q - 10;
            p = t;
            r = q;
            s = t + 10;
            u = w;
            v = y - 10;
            x = w - 10;
            A = y;
            E = z + 10;
            F = C;
            B = z;
            K = C - 10;
            break;
        case "Up":
            if (0 > this.pointx) {
                l = this.canw - this.width - 10;
                m = this.canh - this.height - 10;
                n = this.canw - (this.width - this.cx2) - 10;
                p = this.canh - this.height - 10;
                t = q = 10;
                r = this.canw - (this.width - this.cx1) - 10;
                s = this.canh - this.height - 10;
                w = this.canw - 10;
                y = this.canh - this.height - 10;
                z = this.canw - 10;
                C = this.canh - 10;
                H = this.canw - this.width - 10;
                G = this.canh - 10;
                h = l;
                k = m + 10;
                d = l + 10;
                f = m;
                u = w - 10;
                v = y;
                x = w;
                A = y + 10;
                E = z;
                F = C - 10;
                B = z - 10;
                K = C;
                D = H + 10;
                I = G;
                M = H;
                J = G - 10;
                break
            }
            l = 10;
            m = this.canh - this.height - 10;
            n = this.cx2 + 10;
            p = this.canh - this.height - 10;
            q = this.pointx + 10;
            t = 10;
            r = this.cx1 + 10;
            s = this.canh - this.height - 10;
            w = this.width + 10;
            y = this.canh - this.height - 10;
            z = this.width + 10;
            C = this.canh - 10;
            H = 10;
            G = this.canh - 10;
            h = l;
            k = m + 10;
            d = l + 10;
            f = m;
            u = w - 10;
            v = y;
            x = w;
            A = y + 10;
            E = z;
            F = C - 10;
            B = z - 10;
            K = C;
            D = H + 10;
            I = G;
            M = H;
            J = G - 10;
            break;
        case "Right":
            if (0 > this.pointy) {
                q = this.width + 10;
                t = this.canh - this.height - 10;
                u = this.width + 10;
                v = this.canh - (this.height - this.cy2 + 10);
                w = this.canw - 10;
                y = 10;
                x = this.width + 10;
                A = this.canh - (this.height - this.cy1 + 10);
                z = this.width + 10;
                C = this.canh - 10;
                H = 10;
                G = this.canh - 10;
                h = l;
                k = m + 10;
                d = l + 10;
                f = m;
                n = q - 10;
                p = t;
                r = q;
                s = t + 10;
                E = z;
                F = C - 10;
                B = z - 10;
                K = C;
                D = H + 10;
                I = G;
                M = H;
                J = G - 10;
                break
            }
            this.pointy > this.height ? (q = this.width + 10, t = 10, u = this.width + 10, v = this.cy2 + 10, w = this.canw - 10, y = this.canh - 10) : (m = l = 10, q = this.width + 10, t = 10, u = this.width + 10, v = this.cy2 + 10, w = this.canw - 10, y = this.pointy);
            x = this.width + 10;
            A = this.cy1 + 10;
            z = this.width + 10;
            C = this.height + 10;
            H = 10;
            G = this.height + 10;
            h = l;
            k = m + 10;
            d = l + 10;
            f = m;
            n = q - 10;
            p = t;
            r = q;
            s = t + 10;
            E = z;
            F = C - 10;
            B = z - 10;
            K = C;
            D = H + 10;
            I = G;
            M = H;
            J = G - 10
        }
        switch (this.config.direct) {
        case "Down":
            g.beginPath();
            g.lineWidth = "0";
            g.strokeStyle = this.color;
            c = colorSplit(Color(this.config.bgcolor).toString());
            parseBool(this.config.fillBg) ? g.fillStyle = "rgba(" + Number(c.r).toString(10) + ", " + Number(c.g).toString(10) + ", " + Number(c.b).toString(10) + ", " + this.config.bgalpha + ")": g.fillStyle = "rgba(0,0,0,0)";
            g.moveTo(h, k);
            g.quadraticCurveTo(l, m, d, f);
            g.lineTo(n, p);
            g.quadraticCurveTo(q, t, r, s);
            g.lineTo(u, v);
            g.quadraticCurveTo(w, y, x, A);
            g.lineTo(E, F);
            g.lineTo(z, C);
            g.lineTo(B, K);
            g.lineTo(D, I);
            g.quadraticCurveTo(H, G, M, J);
            break;
        case "left":
            g.beginPath();
            g.lineWidth = "0";
            g.strokeStyle = this.color;
            c = colorSplit(Color(this.config.bgcolor).toString());
            parseBool(this.config.fillBg) ? g.fillStyle = "rgba(" + Number(c.r).toString(10) + ", " + Number(c.g).toString(10) + ", " + Number(c.b).toString(10) + ", " + this.config.bgalpha + ")": g.fillStyle = "rgba(0,0,0,0)";
            g.moveTo(h, k);
            g.quadraticCurveTo(l, m, d, f);
            g.lineTo(n, p);
            g.quadraticCurveTo(q, t, r, s);
            g.lineTo(u, v);
            g.quadraticCurveTo(w, y, x, A);
            g.lineTo(E, F);
            g.quadraticCurveTo(z, C, B, K);
            g.lineTo(D, I);
            g.lineTo(H, G);
            g.lineTo(M, J);
            break;
        case "Up":
            g.beginPath();
            g.lineWidth = "0";
            g.globalAlpha = this.config.bgalpha;
            g.strokeStyle = this.color;
            c = colorSplit(Color(this.config.bgcolor).toString());
            parseBool(this.config.fillBg) ? g.fillStyle = "rgba(" + Number(c.r).toString(10) + ", " + Number(c.g).toString(10) + ", " + Number(c.b).toString(10) + ", " + this.config.bgalpha + ")": g.fillStyle = "rgba(0,0,0,0)";
            g.moveTo(h, k);
            g.quadraticCurveTo(l, m, d, f);
            g.lineTo(n, p);
            g.lineTo(q, t);
            g.lineTo(r, s);
            g.lineTo(u, v);
            g.quadraticCurveTo(w, y, x, A);
            g.lineTo(E, F);
            g.quadraticCurveTo(z, C, B, K);
            g.lineTo(D, I);
            g.quadraticCurveTo(H, G, M, J);
            break;
        case "Right":
            g.beginPath(),
            g.lineWidth = "0",
            g.globalAlpha = this.config.bgalpha,
            g.strokeStyle = this.color,
            c = colorSplit(Color(this.config.bgcolor).toString()),
            parseBool(this.config.fillBg) ? g.fillStyle = "rgba(" + Number(c.r).toString(10) + ", " + Number(c.g).toString(10) + ", " + Number(c.b).toString(10) + ", " + this.config.bgalpha + ")": g.fillStyle = "rgba(0,0,0,0)",
            g.moveTo(h, k),
            g.quadraticCurveTo(l, m, d, f),
            g.lineTo(n, p),
            g.quadraticCurveTo(q, t, r, s),
            g.lineTo(u, v),
            g.lineTo(w, y),
            g.lineTo(x, A),
            g.lineTo(E, F),
            g.quadraticCurveTo(z, C, B, K),
            g.lineTo(D, I),
            g.quadraticCurveTo(H, G, M, J)
        }
        g.strokeStyle = Color(this.config.borderColor).toString();
        g.lineWidth = 5;
        g.closePath();
        g.fill(); ! 0 === parseBool(this.config.sh) && (g.shadowOffsetX = this.config.sx, g.shadowOffsetY = this.config.sy, g.shadowBlur = this.config.se, g.shadowColor = Color(this.config.sr).toString(), g.strokeStyle = Color(this.config.borderColor).toString());
        g.stroke();
        g.fill();
        g.shadowOffsetX = 0;
        g.shadowOffsetY = 0;
        g.shadowBlur = 100;
        g.shadowColor = 0;
        g.fillStyle = this.color;
        g.font = this.config.fontSize + "px " + this.config.fontName;
        for (m = l = 0; m < this.text.length; m++) if (c = [], b = this.text[m], g.measureText(b).width <= this.width - 3.5) g.fillText(b, h + 5, k + (m + l) * this.config.fontSize + 2 * this.config.fontSize / 3);
        else {
            b = b.split(" ");
            f = b[0];
            for (n = 0; n < b.length; n++) n == b.length - 1 ? c.push(f) : (d = f + " " + b[n + 1], g.measureText(d).width <= this.width - 3.5 ? f = d: (c.push(f), f = b[n + 1]));
            for (b = 0; b < c.length; b++) g.fillText(c[b], h + 5, k + (m + l + b) * this.config.fontSize + 2 * this.config.fontSize / 3);
            l += c.length - 1
        }
        g.globalCompositeOperation = "source-atop";
        g.strokeStyle = Color(this.config.borderColor).toString();
        g.shadowColor = Color(this.config.borderColor).toString();
        g.shadowBlur = 50;
        g.shadowOffsetX = 0;
        g.shadowOffsetY = 0;
        g.stroke()
    },
    initEvents: function() {
        this.addActionEvent(this.callout)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.wl * this.pageWidth;
        this.height = this.hl * this.pageHeight;
        this.setPosition();
        this.resizeCallout(this.pageWidth)
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.callout.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("AText", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.color = this.config.colo ? Color(this.config.color) : Color("#000000");
        this.originWidth = this.config.pageW;
        this.originHeight = this.config.pageH;
        this.speed = 1 / this.config.moveSpeed * 24E3;
        this.id = "text" + g;
        this.initText();
        this.initEvents();
        this.initScroll();
        parseBool(this.config.reflection) && this.imageReflection(this.atext);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initText: function() {
        this.scrollid = "scroll" + this.id;
        this.text = this.config.textStr;
        this.atext = $("<div id=" + this.id + " style='overflow: hidden;opacity:" + this.config.alpha + "'></div>");
        var b = getInnerHtml(this.config.textStr);
        this.atext2 = b.$text;
        this.atext2.css({
            "width:": "100%",
            height: "100%"
        });
        this.fontSize = b.fontSize;
        this.adjustFontSize = $.browser.chrome ? Math.max(1, 12 / this.fontSize) : 1;
        this.width = this.config.width * this.originWidth * this.adjustFontSize;
        this.height = this.config.height * this.originHeight * this.adjustFontSize;
        this.atext.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.addShadow(this.atext); ! 0 === parseBool(this.config.tbold) && this.atext2.css({
            "font-weight": "bold"
        }); ! 0 === parseBool(this.config.italic) && this.atext2.css({
            "font-style": "italic"
        });
        this.parent.append(this.atext);
        this.atext.append(this.atext2)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            alpha: b.alpha,
            textStr: b.strText,
            fontName: b.format.font,
            fontSize: b.format.size,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            color: b.format.color,
            tbold: b.format.bold,
            italic: b.format.italic,
            align: b.format.align,
            action: b.action,
            repeat: b.repeat,
            moveSpeed: b.moveSpeed,
            pageH: b.format.pageH,
            pageW: b.format.pageW,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow,
            HRate: b.HRate
        }
    },
    initScroll: function() {
        this._wrap = this.atext2;
        this.initScrollText()
    },
    initScrollText: function() {
        var b = this,
        c = b._wrap,
        d = c.height();
        c.animate({
            marginTop: -d + "px"
        },
        b.speed,
        function() {
            "true" == b.config.repeat ? (c.css("marginTop", b.height), b.initScrollText()) : c.css("marginTop", 0)
        })
    },
    initEvents: function() {
        this.addActionEvent(this.atext2)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition();
        this.resizeText(this.pageWidth)
    },
    resizeText: function(b) {
        b = this.pageWidth / this.originWidth / this.adjustFontSize;
        this.atext.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            transform: "scale(" + b + ")  rotate(" + this.config.rotation + "deg)",
            "-webkit-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-ms-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-o-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-moz-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)"
        })
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.atext.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("FlashShow", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.config = this.parseConfig(c);
        if (null != this.config.photo) {
            this.showingA = !0;
            this.showingIndex = 1;
            this.background = $("<div></div>");
            this.totalImage = this.config.photo.Image.length;
            for (b = 0; b < this.config.photo.Image.length; b++) ! 0 == bookConfig.isFlipPdf && (this.config.photo.Image[b].startWith("./") ? this.config.photo.Image[b] = "." + this.config.photo.Image[b] : this.config.photo.Image[b] = "../" + this.config.photo.Image[b]);
            this.moveTo = 1;
            this.background.css({
                width: this.width + "px",
                height: this.height + "px",
                left: this.config.x * this.pageWidth + "px",
                top: this.config.y * this.pageHeight + "px",
                position: "absolute",
                overflow: "hidden"
            });
            this.setRotation(this.background, this.config.rotation);
            this.photoA = new animateImage(this.background, this.config.photo, this.width, this.height, this.config.repeatPlay, this.config.customSize, this.config.photo.width, this.config.photo.width);
            this.photoB = new animateImage(this.background, this.config.photo, this.width, this.height, this.config.repeatPlay, this.config.customSize, this.config.photo.width, this.config.photo.width);
            this.parent.append(this.background);
            this.photoB.fillImage(2);
            this.photoA.fillImage(1);
            this.initChangeImageEvent(!0)
        }
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            photo: Instance.copy(b.Images),
            repeatPlay: b.isRepeat
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.background.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.photoA.onResize(b, c);
        this.photoB.onResize(b, c);
        this.setPosition()
    },
    setPosition: function() {
        this.background.css({
            left: this.pageWidth * this.config.x + "px",
            top: this.pageHeight * this.config.y + "px"
        })
    },
    initChangeImageEvent: function(b) {
        var c = this,
        d = this.photoA.getImage(),
        f = this.photoB.getImage(),
        g,
        h;
        b || (d = this.photoB.getImage(), f = this.photoA.getImage());
        switch (this.moveTo) {
        case 1:
            g = h = 1;
            break;
        case 2:
            g = h = -1;
            break;
        case 3:
            h = 1;
            g = -1;
            break;
        case 4:
            h = -1,
            g = 1
        }
        this.moveTo = 4 == this.moveTo ? 1 : this.moveTo + 1;
        var k = d.position().left + 66 * h,
        l = d.position().top + 66 * g,
        m = d.position().left + 77 * h,
        n = d.position().top + 77 * g;
        d.animate({
            left: k,
            top: l
        },
        {
            queue: !1,
            duration: 3E3,
            complete: function() {
                c.showingIndex++;
                c.showingInde > c.totalImage && !c.config.repeatPlay || (c.showingIndex > c.totalImage && (c.showingIndex = 0), d.animate({
                    opacity: 0,
                    left: m,
                    top: n
                },
                500,
                function() {
                    b ? c.photoA.fillImage(c.showingIndex + 1) : c.photoB.fillImage(c.showingIndex + 1);
                    d.css({
                        "z-index": 0
                    });
                    f.css({
                        "z-index": 1
                    })
                }), c.initChangeImageEvent(!b))
            }
        }).animate({
            opacity: 1
        },
        500)
    }
}).extend("Item");
var animateImage = Class({
    create: function(b, c, d, f, g, h, k, l) {
        this.img = $("<img />");
        this.imgIndex = -1;
        this.imageArr = c;
        this.bw = d;
        this.bh = f;
        this.repeat = g;
        this.parent.append(this.img);
        this.img.css({
            position: "absolute"
        });
        h && void 0 != k && void 0 != l && this.img.css({
            width: k + "px",
            height: l + "px"
        })
    },
    fillImage: function(b) {
        if (this.imgIndex == b) this.img.css({
            left: (this.bw - this.img[0].width) / 2 + "px",
            top: (this.bh - this.img[0].height) / 2 + "px"
        });
        else if (! (b > this.imageArr.Image.length) || this.repeat) {
            b > this.imageArr.Image.length && (b = 1);
            this.imgIndex = b;
            var c = this;
            this.img.attr("src", c.getImageDiv(b));
            this.img.load(function() {
                c.img.css({
                    left: (c.bw - this.width) / 2 + "px",
                    top: (c.bh - this.height) / 2 + "px"
                })
            })
        }
    },
    getImageDiv: function(b) {
        return this.imageArr.Image[b - 1].photo
    },
    setZIndex: function(b) {
        this.img.css("z-index", b)
    },
    onResize: function(b, c) {
        this.bw = b;
        this.bh = c;
        this.img.css({
            left: (this.bw - this.img[0].width) / 2 + "px",
            top: (this.bh - this.img[0].height) / 2 + "px"
        })
    },
    setPosition: function(b, c) {
        this.img.css({
            left: b + "px",
            top: c + "px"
        })
    },
    animate: function() {},
    getImage: function() {
        return this.img
    }
});
Class("Sound", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.sound = null;
        null != this.config.src && (this.config.src = this.config.src, this.arr = null, this.arr = "undefined" != typeof this.config.src.path ? this.config.src.path: this.config.src[0].path, !0 == bookConfig.isFlipPdf && (this.arr.startWith("./") ? this.arr = "." + this.arr: this.arr = "../" + this.arr), this.pageWidth = d, this.pageHeight = f, this.width = this.config.width * this.pageWidth, this.height = this.config.height * this.pageHeight, this.x = this.config.x * this.pageWidth, this.y = this.config.y * this.pageHeight, this.h1 = this.height / 6, this.h2 = this.height / 3, this.c = this.nflay = this.flay = 0, this.st = null, this.id = "AdvancedSound" + g, this.sounddiv = $("<div class='flip-action' style='position:absolute; width:" + this.width + "px;height:" + this.height + "px;top:" + this.y + "px;left:" + this.x + "px;background:url(" + uiBaseURL + "audio.png);background-size:" + this.width + "px " + this.height + "px;background-repeat:no-repeat;'></div>"), this.sound = $("<audio id='" + this.id + "' src='" + this.arr + "'></audio>"), this.preimg = $("<img src='" + uiBaseURL + "Pre_down.png' style='position:absolute; left:10px;bottom:5px;cursor:pointer;' />"), this.playimg = $("<img src='" + uiBaseURL + "Play_down.png' style='position:absolute; left:50px;bottom:5px;cursor:pointer;'/>"), this.nextimg = $("<img src='" + uiBaseURL + "Nextpage_down.png' style='position:absolute; left:90px;bottom:5px;cursor:pointer;' />"), this.soundname = $("<div style='position:absolute; right:10px;top:" + this.h2 + "px;color:#389ac2;font-size:10px;'></div>"), this.soundtime = $("<div style='position:absolute; right:10px;top:" + this.h1 + "px;color:#389ac2;font-size:10px;'></div>"), this.parent.append(this.sounddiv), this.sounddiv.append(this.sound), this.sounddiv.append(this.preimg), this.sounddiv.append(this.playimg), this.sounddiv.append(this.nextimg), this.sounddiv.append(this.soundname), this.sounddiv.append(this.soundtime), null != this.config.src && this.initEvent(), this.setRotation(this.sounddiv, this.config.rotation))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpageHeighta: b.alpageHeighta,
            src: b.soundList.sound,
            skinType: b.skinType,
            soundPlay: b.soundPlayTriggerEvt || b.componentData.playEvt
        }
    },
    initEvent: function() {
        var b = this;
        b.nflay = 0;
        var c = b.playimg[0],
        d = b.sound[0],
        f = b.config.src[0].path,
        g = typeof b.config.src.path;
        "undefined" != g ? b.soundname.html(this.getname(b.config.src.path)) : b.soundname.html(this.getname(f));
        b.soundtime.html("00:00 / 00:00");
        this.playimg.bind(_event._down,
        function(f) {
            0 == b.flay ? (c.src = uiBaseURL + "Pause_down.png", d.play(), b.flay = 1, b.gettime(d.duration)) : (c.src = uiBaseURL + "Play_down.png", d.pause(), b.flay = 0, clearTimeout(b.st))
        });
        this.preimg.bind(_event._down,
        function(h) {
            d.pause();
            clearTimeout(b.st);
            "undefined" != g ? d.src = b.config.src.path: 0 < b.nflay && b.nflay < b.config.src.length ? (d.src = b.config.src[b.nflay - 1].path, b.soundname.html(b.getname(b.config.src[b.nflay].path)), b.nflay -= 1) : (d.src = f, b.soundname.html(b.getname(f)));
            d.play();
            c.src = uiBaseURL + "Pause_down.png";
            b.flay = 1;
            setTimeout(function() {
                b.c = 0;
                b.gettime(d.duration)
            },
            1E3)
        });
        this.nextimg.bind(_event._down,
        function(h) {
            d.pause();
            clearTimeout(b.st);
            "undefined" != g ? d.src = b.config.src.path: b.nflay < b.config.src.length ? (b.nflay += 1, d.src = b.config.src[b.nflay].path, b.soundname.html(b.getname(b.config.src[b.nflay].path)), b.nflay += 1) : (d.src = f, b.soundname.html(b.getname(f)), b.nflay = 0);
            d.play();
            c.src = uiBaseURL + "Pause_down.png";
            b.flay = 1;
            setTimeout(function() {
                b.c = 0;
                b.gettime(d.duration)
            },
            1E3)
        })
    },
    gettime: function(b) {
        var c = this,
        d = null,
        f = 0,
        g = null,
        d = c.c % 60,
        g = parseInt(b % 60),
        g = 10 > g ? "0" + g: g,
        h = parseInt(b / 60);
        c.c < b && (c.c += 1, 60 > c.c ? d = 10 > c.c ? "00:0" + c.c: "00:" + c.c: (f = parseInt(c.c / 60), d = 10 > f ? 10 > d ? "0" + f + ":0" + d: "0" + f + ":" + d: 10 > d ? f + ":0" + d: f + ":" + d), 10 > h ? c.soundtime.html(d + " / 0" + h + ":" + g) : c.soundtime.html(d + " / " + h + ":" + g), c.st = setTimeout(function() {
            c.gettime(b)
        },
        1E3))
    },
    getname: function(b) {
        var c = [],
        c = b.split("/");
        return c[c.length - 1].split(".")[0]
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.sounddiv.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.sounddiv.css("background-size", this.width + "px " + this.height + "px");
        this.soundname.css("top", this.height / 3 + "px");
        this.soundtime.css("top", this.height / 6 + "px");
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.sounddiv.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend("Item");
global.hddr.soo3 = bdor[51];
global.hddr.soc8 = hddr.sob8 + "ph";
Class("EffText", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.originWidth = bookConfig.largePageWidth;
        this.originHeight = bookConfig.largePageHeight;
        this.color = Color(this.config.color).toString();
        this.speed = this.pos = 0;
        this.speed = "ChangeSpeed" == this.config.moveSpeed ? 250 : 50;
        this.width = this.config.width * this.originWidth;
        this.height = this.config.height * this.originHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.id = "efftext" + g;
        this.scrollid = "efftext" + this.id;
        this.fontSize = this.config.lineH * this.originHeight * 0.75;
        b = new TextFormatAnalyzer(this.config.textStr);
        this.config.textStr = b.getTextLines();
        this.config.fontSize = b.getFontSize();
        this.config.color = b.getFontColor();
        this.color = Color(this.config.color).toString(); ! 0 === parseBool(this.config.sh) ? this.efftext = $("<div id=" + this.id + " style='position:absolute;left:" + this.x + "px; top:" + this.y + "px;height:" + this.height + "px;width:" + this.width + "px;box-shadow:" + this.config.sx + "px " + this.config.sy + "px " + this.config.se + "px " + Color(this.config.sr).toString() + ";opacity:" + this.config.alpha + "'></div>") : this.efftext = $("<div id=" + this.id + " style='position:absolute;left:" + this.x + "px; top:" + this.y + "px;height:" + this.height + "px;width:" + this.width + "px;opacity:" + this.config.alpha + "'></div>");
        this.efftext2 = $("<div id=" + this.scrollid + " style='word-break: break-word;font-family:" + this.config.fontName + ";width:" + this.width + "px;font-size:" + this.fontSize + "px;color:" + this.color + ";'></div>"); ! 0 === parseBool(this.config.tbold) && this.efftext.css({
            "font-weight": "bold"
        }); ! 0 === parseBool(this.config.italic) && this.efftext.css({
            "font-style": "italic"
        });
        this.initEvent();
        this.parent.append(this.efftext);
        this.efftext.append(this.efftext2);
        this.initeffAmin();
        this.onResize(d, f);
        parseBool(this.config.reflection) && this.imageReflection(this.efftext);
        this.setRotation(this.efftext, this.config.rotation)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            alpha: b.alpha,
            textStr: b.htmlText,
            moveSpeed: b.effectStyle,
            lineH: b.HRate,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor
        }
    },
    initeffAmin: function() {
        var b = this,
        c, d = b.config.textStr;
        this.efftext2.html(d.substring(0, b.pos));
        b.pos++==d.length ? (b.pos = 0, clearTimeout(c)) : c = setTimeout(function() {
            b.initeffAmin()
        },
        b.speed)
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = null;
        if (null != this.config.action) {
            try {
                void 0 != this.config.action.length && (this.config.action = this.config.action[0]),
                this.linkURL = this.config.action.url
            } catch(b) {}
            null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL);
            this.addActionEvent(this.efftext)
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition();
        this.fontSize = this.config.lineH * this.originHeight * 0.75;
        this.resizeText(this.pageWidth)
    },
    resizeText: function(b) {
        b /= this.originWidth;
        this.efftext.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ")",
            "-moz-transform": "scale(" + b + ")",
            "-ms-transform": "scale(" + b + ")",
            "-o-transform": "scale(" + b + ")",
            transform: "scale(" + b + ")"
        })
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.efftext.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
bdor[7] = "m";
Class("PngImage", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.img = $("<img>");
        null != this.config.src && (!0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src), this.width = this.config.width * this.pageWidth, this.height = this.config.height * this.pageHeight, this.left = this.pageWidth * this.config.x, this.top = this.pageHeight * this.config.y, this.img.load(function() {
            this.onImageLoad()
        }.bind(this)), this.img.css({
            position: "absolute",
            width: "0px",
            height: "0px",
            left: this.left + "px",
            top: this.top + "px",
            opacity: this.config.alpha
        }), this.img.attr({
            src: this.config.src
        }), this.parent.append(this.img), this.initEvt())
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.url,
            action: b.action
        }
    },
    onImageLoad: function() {
        var b = this.img[0];
        this.imageWidth = b.naturalWidth;
        this.imageHeight = b.naturalHeight;
        this.fitImage()
    },
    fitImage: function() {
        var b = this.imageWidth / this.imageHeight,
        c, d, f;
        b > this.width / this.height ? (d = this.width, f = d / b, b = this.left, c = (this.height - f) / 2 + this.top) : (f = this.height, d = f * b, b = (this.width - d) / 2 + this.left, c = this.top);
        this.img.css({
            left: b + "px",
            top: c + "px",
            width: d + "px",
            height: f + "px"
        })
    },
    initEvt: function() {
        if (void 0 != this.config.action) {
            this.linkURL = "";
            try {
                void 0 != this.config.action.length && (this.config.action = this.config.action[0]),
                this.linkURL = this.config.action.url
            } catch(b) {}
            null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL);
            this.addActionEvent(this.img)
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.left = this.pageHeight * this.config.x;
        this.top = this.pageHeight * this.config.y;
        this.fitImage();
        this.width > this.height ? this.img.css({
            height: this.height + "px",
            left: this.pageWidth * this.config.x + "px",
            top: this.pageHeight * this.config.y + "px"
        }) : this.img.css({
            width: this.width + "px",
            left: this.pageWidth * this.config.x + "px",
            top: this.pageHeight * this.config.y + "px"
        });
        this.setPosition(this.config.x * b, this.config.y * c)
    },
    setPosition: function(b, c) {
        this.img.css({
            left: b + "px",
            top: c + "px"
        })
    }
}).extend(PageItem.Item);
Class("AminText", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.color = this.config.color ? Color(this.config.color) : Color("#000000");
        this.originWidth = this.config.pageW;
        this.originHeight = this.config.pageH;
        this.pos = 0;
        this.id = "amintext" + g;
        this.scrollid = "animscroll" + this.id;
        this.initText();
        this.initEvents();
        this.play();
        parseBool(this.config.reflection) && this.imageReflection(this.amintext);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initText: function() {
        var b = getInnerHtml(this.config.textStr);
        this.fontSize = b.fontSize;
        this.adjustFontSize = $.browser.chrome ? Math.max(1, 12 / this.fontSize) : 1;
        this.width = this.config.width * this.originWidth * this.adjustFontSize;
        this.height = this.config.height * this.originHeight * this.adjustFontSize;
        this.amintext = $("<div style='overflow: hidden;position:absolute;height:" + this.height + "px;width:" + this.width + "px;opacity:" + this.config.alpageHeighta + "'></div>");
        this.addShadow(this.amintext);
        this.amintext2 = b.$text;
        this.amintext2.css({
            "width:": "100%",
            height: "100%"
        });
        this.parent.append(this.amintext);
        this.amintext.append(this.amintext2)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            alpageHeighta: b.alpageHeighta,
            effectType: b.effectType,
            textStr: b.textStr,
            rotation: b.location.rotation,
            fontName: b.formats.defaultFormat.fontName,
            fontSize: b.formats.defaultFormat.fontSize,
            color: b.formats.defaultFormat.color,
            tbold: b.formats.defaultFormat.bold,
            italic: b.formats.defaultFormat.italic,
            action: b.action,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            lineH: b.HRate,
            pageW: b.formats.defaultFormat.pageW,
            pageH: b.formats.defaultFormat.pageH,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow
        }
    },
    play: function() {
        this.TextAnimate()
    },
    stop: function() {
        this.timer && (this.timer.stop(), this.timer = null)
    },
    TextAnimate: function() {
        switch (this.config.effectType) {
        case "Default":
            this.initAmin();
            break;
        case "Letter Spacing":
            this.litterText();
            break;
        case "Scale Word":
            this.RightText();
            break;
        case "Right To Left":
            this.RightText();
            break;
        case "Center To Edges":
            this.initAmin();
            break;
        default:
            this.initAmin()
        }
    },
    initAmin: function() {
        this.amintext2.text("");
        this.timer && this.timer.stop();
        var b = getInnerHtml(this.config.textStr).$text.text(),
        c = 0;
        this.timer = function() {
            c++;
            if (c <= b.length) {
                var d = b.substring(0, c);
                this.amintext2.text(d)
            } else this.timer.stop(),
            this.timer = null
        }.interval(this, 200)
    },
    RightText: function() {
        this.amintext2.css({
            position: "absolute",
            opacity: 0.1,
            left: "50px"
        }); (function() {
            this.amintext2.animate({
                opacity: 1,
                left: "0px"
            })
        }).delay(this, 100)
    },
    litterText: function(b, c) {
        this.amintext2.text("");
        this.timer && this.timer.stop();
        var d = 0,
        f = -this.fontSize,
        g = getInnerHtml(this.config.textStr),
        h = g.$text.text(),
        g = null;
        this.timer = function() {
            if (d < h.length) {
                var b = getInnerHtml(this.config.textStr).$text;
                b.css({
                    position: "relative",
                    "float": "left",
                    top: f + "px"
                });
                var c = h.substr(d, 1);
                b.text(c);
                b.css({
                    width: this.fontSize / 2 + "px",
                    height: this.fontSize + "px"
                });
                this.amintext2.append(b);
                b.animate({
                    top: "0px"
                },
                400, "swing")
            } else this.timer.stop(),
            this.timer = null;
            d++
        }.interval(this, 200)
    },
    initEvents: function() {
        this.addActionEvent(this.amintext2)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition();
        this.amintext.css("font-size", this.fontSize + "px");
        this.amintext2.css("font-size", this.fontSize + "px");
        this.resizeText(this.pageWidth)
    },
    resizeText: function(b) {
        b = b / this.originWidth / this.adjustFontSize;
        this.amintext.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-moz-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-ms-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            "-o-transform": "scale(" + b + ") rotate(" + this.config.rotation + "deg)",
            transform: "scale(" + b + ") rotate(" + this.config.rotation + "deg)"
        })
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.amintext.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("StarText", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.originWidth = this.config.pageW;
        this.originHeight = this.config.pageH;
        this.speed = 1 / this.config.moveSpeed * 24E3;
        this.tid = g;
        this.id = "startext" + g;
        this.scrollid = "starwars" + this.id;
        this.textli = "";
        this.offset = 0;
        this.stepping = 0.2;
        this.initText();
        this.initEvents();
        this.initScroll();
        parseBool(this.config.reflection) && this.imageReflection(this.startext);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initText: function() {
        var b = getInnerHtml(this.config.textStr);
        this.text = b.$text;
        this.text.css({
            "width:": "100%",
            height: "100%"
        });
        this.fontSize = b.fontSize;
        this.adjustFontSize = $.browser.chrome ? Math.max(1, 12 / this.fontSize) : 1;
        this.width = this.config.width * this.originWidth * this.adjustFontSize;
        this.height = this.config.height * this.originHeight * this.adjustFontSize;
        this.startext = $("<div id='" + this.id + "'style='position:absolute;overflow:hidden;height:" + this.height + "px;width:" + this.width + "px;opacity:" + this.config.alpha + "'></div>");
        this.sFontSize = this.config.fontSize ? this.config.fontSize.replaceAll('"', "") : "9";
        this.startext2 = $("<div id='" + this.scrollid + "' style='word-break: break-word;'></div>"); ! 0 === parseBool(this.config.tbold) && this.startext2.css({
            "font-weight": "bold"
        }); ! 0 === parseBool(this.config.italic) && this.startext2.css({
            "font-style": "italic"
        });
        this.addShadow(this.startext);
        this.parent.append(this.startext);
        this.startext.append(this.startext2);
        this.startext2.append(this.text)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            alpha: b.alpha,
            textStr: b.strText,
            fontName: b.format.font,
            fontSize: b.format.size,
            color: b.format.color,
            tbold: b.format.bold,
            italic: b.format.italic,
            align: b.format.align,
            pageW: b.format.pageW,
            pageH: b.format.pageH,
            action: b.action,
            repeat: b.repeat,
            moveSpeed: b.moveSpeed,
            lineH: b.HRate,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow
        }
    },
    initScroll: function() {
        this._wrap = this.startext2;
        var b = this.text.length;
        this._wrap.height();
        for (var c = b; 0 <= c; c--) $(b[c]).css("fontSize", this.sFontSize - this.offset + "px"),
        this.offset += this.stepping;
        this._wrap.css("marginTop", this.height);
        this.initScrollText()
    },
    initScrollText: function() {
        var b = this,
        c = b._wrap,
        d = b.tid,
        f = c.height();
        c.animate({
            marginTop: -f + "px"
        },
        b.speed,
        function() {
            if ("true" == b.config.repeat) {
                for (var f = d; 0 <= f; f--) $(d[f]).css("fontSize", b.sFontSize - b.offset + "pt"),
                b.offset += b.stepping;
                c.css("marginTop", b.height);
                b.offset = 0;
                b.stepping = 0.2;
                b.initScrollText()
            } else c.css("marginTop", 0)
        })
    },
    initEvents: function() {
        this.addActionEvent(this.text)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition();
        this.resizeText(this.pageWidth)
    },
    resizeText: function(b) {
        b = b / this.originWidth / this.adjustFontSize;
        this.startext.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ")",
            "-moz-transform": "scale(" + b + ")",
            "-ms-transform": "scale(" + b + ")",
            "-o-transform": "scale(" + b + ")",
            transform: "scale(" + b + ")"
        })
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.startext.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Banner", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.banners = this.config.banners;
        this.id = "banner" + g;
        this.image = null; ! this.banners.banner || this.banners.banner instanceof Array || (this.banners = [this.banners.banner]);
        if ("string" == typeof this.banners.imageUrl) b = this.banners.banner.imageUrl,
        !0 == bookConfig.isFlipPdf && (b = b.startWith("./") ? "." + b: "../" + b),
        this.image = "<li><img src='" + b + "' /></li>";
        else for (!this.banners instanceof Array && (this.banners = this.banners.banner), !this.banners instanceof Array && (this.banners = [this.banners]), c = 0; c < this.banners.length; c++) b = this.banners[c].imageUrl,
        !0 == bookConfig.isFlipPdf && (b = b.startWith("./") ? "." + b: "../" + b),
        this.image = null != this.image ? this.image + "<li><img src='" + b + "' /></li>": "<li><img src='" + b + "' /></li>";
        this.banner = $("<div ></div>");
        this.bannerul = $("<ul></ul>");
        this.bannerli = $(this.image);
        this.parent.append(this.banner);
        this.banner.append(this.bannerul);
        this.bannerul.append(this.bannerli);
        this.imageamin();
        this.setRotation(this.banner, this.config.rotation)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            action: b.action,
            banners: b.banners
        }
    },
    imageamin: function() {
        this.banner.jFlip(this.width, this.height, {
            background: "white",
            cornersTop: !1,
            scale: "fill"
        },
        this.x, this.y)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        $(".bannerdiv canvas").css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        $(".bannerdiv").css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend("Item");
Class("Print", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this.config = this.parseConfig(c);
        this.parent = b;
        this.background = $("<div></div>");
        this.overArea = $("<div></div>");
        this.img = $("<div></div>");
        this.imageIndex = g;
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.backcolor = Color(this.config.overColor).toString();
        b = this.config.borderWidth + "px solid " + Color(this.config.borderColor).toString();
        this.background.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            left: this.pageWidth * this.config.x + "px",
            top: this.pageHeight * this.config.y + "px",
            opacity: this.config.alpha,
            "z-index": "101",
            border: b
        });
        this.overArea.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            left: "0px",
            top: "0px",
            opacity: this.config.overAlpha,
            background: this.backcolor,
            "z-index": "101"
        });
        this.img.css({
            position: "absolute",
            right: "10px",
            top: "10px",
            "z-index": "102"
        });
        this.parent.append(this.background);
        this.background.append(this.overArea);
        this.background.append(this.img);
        this.image = $("<img src = '" + uiBaseURL + "print_icon.png'>");
        this.img.append(this.image);
        this.printArea = $("<canvas></canvas>");
        this.printw = this.config.width * bookConfig.largePageWidth;
        this.printh = this.config.height * bookConfig.largePageHeight;
        this.printImageA = $("<div></div>");
        this.initEvt();
        this.background.mouseEnterZoom();
        this.overArea.hide()
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            overAlpha: b.overAlpha,
            borderColor: b.borderColor,
            overColor: b.overColor,
            borderWidth: b.barderWidth,
            printTitle: b.printTitle,
            printDesc: b.printDesc
        }
    },
    initEvt: function() {
        var b = this;
        this.background.bind(_event._enter,
        function(c) {
            b.overArea.show()
        });
        this.background.bind(_event._down,
        function(c) {
            b.overArea.show()
        });
        this.background.bind(_event._end,
        function(c) {
            b.overArea.hide()
        });
        this.background.bind(_event._leave,
        function(c) {
            b.overArea.hide()
        });
        this.img.bind("mouseover",
        function(c) {
            b.img.css({
                cursor: "pointer"
            })
        });
        this.image.bind(_event._enter,
        function(c) {
            b.img.css({
                background: colorDiv(b.backcolor, 30)
            })
        });
        this.image.bind(_event._down,
        function(c) {
            b.img.css({
                background: colorDiv(b.backcolor, 30)
            });
            c.stopPropagation()
        });
        this.image.bind(_event._end,
        function(c) {
            b.img.css({
                background: ""
            })
        });
        this.image.bind(_event._leave,
        function(c) {
            b.img.css({
                background: ""
            })
        });
        this.image.bind(_event._end,
        function(c) {
            sendvisitinfo(5, getShownPageString());
            if ($.browser.msie && isBelowIE10Browser()) alert("Your browser is not support PrintArea.");
            else {
                b.printImageA.empty();
                b.printArea.empty();
                var d = new Image;
                d.src = bookConfig.largePath + b.imageIndex + ".jpg";
                var f = new Image;
                b.printArea.css({
                    left: 0,
                    top: -windowHeight + "px",
                    width: b.config.width * d.width + "px",
                    height: b.config.height * d.height + "px",
                    position: "absolute"
                });
                var g = b.printArea[0].getContext("2d");
                c = b.printArea.width();
                height = b.printArea.height();
                g.canvas.width = c;
                g.canvas.height = height;
                var h = b.printArea[0].getContext("2d");
                h.canvas.width = c;
                h.canvas.height = height;
                $(d).load(function() {
                    b.printArea.css({
                        left: 0,
                        top: -windowHeight + "px",
                        width: b.config.width * d.width + "px",
                        height: b.config.height * d.height + "px",
                        position: "absolute"
                    });
                    h.drawImage(d, -b.config.x * d.width, -b.config.y * d.height);
                    g.drawImage(h.canvas, 0, 0);
                    f.src = $(b.printArea)[0].toDataURL("image/png");
                    $(f).load(function() {
                        b.printImageA.printArea()
                    })
                });
                b.printImageA.append(f);
                return ! 1
            }
        })
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.setPosition(this.config.x * this.pageWidth, this.config.y * this.pageHeight);
        this.background.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            left: this.pageWidth * this.config.x + "px",
            top: this.pageHeight * this.config.y + "px"
        });
        this.overArea.css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            left: "0px",
            top: "0px"
        });
        this.img.css({
            position: "absolute",
            right: "10px",
            top: "10px"
        });
        this.background.mouseEnterZoom()
    },
    setPosition: function(b, c) {}
});
Class("Prismatic", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.prismatic = $("<canvas width='" + this.width + "' height='" + this.height + "' id='prismatic'></canvas>");
        this.prismatic.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.prismatic, this.config.rotation);
        this.parent.append(this.prismatic);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.prismatic)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            rotation: b.location.rotation,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.prismatic[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        c.beginPath();
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.moveTo(this.config.borderWidth, this.height / 2);
        c.lineTo(this.width / 2, this.height);
        c.lineTo(this.width - 2, this.height / 2);
        c.lineTo(this.width / 2, this.config.borderWidth);
        this.config.sh && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.prismatic)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.prismatic[0].width = this.width;
        this.prismatic[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.prismatic.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Triangle", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = Number(this.config.width * this.pageWidth);
        this.height = Number(this.config.height * this.pageHeight);
        this.config.borderWidth = Number(this.config.borderWidth);
        this.colorA = Color(this.config.ColorA).toString();
        this.colorB = Color(this.config.ColorB).toString();
        this.config.triangleRight = parseBool(this.config.triangleRight);
        this.config.triangleLeft = parseBool(this.config.triangleLeft);
        this.borderColor = Color(this.config.borderColor).toString();
        this.triangle = $("<canvas width='" + this.width + "' height='" + this.height + "' id='myCanvas'></canvas>");
        this.triangle.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px",
            opacity: this.config.spalpha
        });
        this.setRotation(this.triangle, this.config.rotation);
        this.parent.append(this.triangle);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.triangle)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            alpha: b.alpha,
            color: b.color,
            fillStyle: b.fillStyle,
            ColorA: b.gradientColorA,
            ColorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            triangleRight: b.triangleRight,
            triangleLeft: b.triangleLeft,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sa: b.shadow.shadowAngle,
            sd: b.shadow.shadowDistance,
            sc: b.shadow.shadowColor,
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            arrowType: b.arrowType,
            action: b.action
        }
    },
    draw: function() {
        var b = this.triangle[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        c.beginPath();
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.lineCap = "round";
        c.lineJoin = "round";
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth; ! 1 == this.config.triangleRight && !1 == this.config.triangleLeft && (c.moveTo(this.config.borderWidth, this.height), c.lineTo(this.width, this.height), c.lineTo(this.width / 2, this.config.borderWidth)); ! 0 == this.config.triangleRight && !1 == this.config.triangleLeft && (c.moveTo(this.config.borderWidth, this.config.borderWidth), c.lineTo(this.config.borderWidth, this.height), c.lineTo(this.width, this.height)); ! 1 == this.config.triangleRight && !0 == this.config.triangleLeft && (c.moveTo(this.width, this.config.borderWidth), c.lineTo(this.width, this.height), c.lineTo(this.config.borderWidth, this.height)); ! 0 == parseBool(this.config.sh) && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (void 0 != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(1, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.triangle)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.triangle[0].width = this.width;
        this.triangle[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.triangle.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
global.hddr.soo1 = "tm";
Class("AlphaTransitionBanner", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        function g() {
            h.timer0 = setInterval(function() {
                if (0 < h.alpha) {
                    h.alpha -= 1;
                    $(h.currentImageHolder).css({
                        opacity: h.alpha / 100
                    });
                    var b = 0,
                    b = 0 < h.currentImage ? (h.currentImage - 1) % h.images.length: h.images.length - 1;
                    h.imgTitle.html(h.photos[b].imageName)
                } else clearInterval(h.timer0),
                h.currentImageHolder == h.image0Holder ? ($(h.image0Holder).css({
                    "z-index": "207"
                }), $(h.image1Holder).css({
                    "z-index": "208"
                }), h.alpha = 100, $(h.currentImageHolder).css({
                    opacity: h.alpha / 100
                }), h.currentImageHolder = h.image1Holder, h.image0Holder.empty().append(h.images[h.currentImage])) : ($(h.image0Holder).css({
                    "z-index": "208"
                }), $(h.image1Holder).css({
                    "z-index": "207"
                }), h.alpha = 100, $(h.currentImageHolder).css({
                    opacity: h.alpha / 100
                }), h.currentImageHolder = h.image0Holder, h.image1Holder.empty().append(h.images[h.currentImage])),
                h.currentImage = (h.currentImage + 1) % h.images.length,
                h.timer1 = setTimeout(g, h.interval)
            },
            20)
        }
        this._super(b, c, d, f);
        this.photos = Instance.copy(this.config.images);
        this.photos.node instanceof Array && (this.photos = this.photos.node);
        this.photos instanceof Array || (this.photos = [this.photos.node]);
        if (! (1 > this.photos.length)) {
            this.photos instanceof Array || void 0 == this.photos.node || (this.photos = void 0 == this.photos.node[1] ? [this.photos.node] : this.photos.node);
            this.imgIndex = -1;
            this.imgWidth = this.config.width * d;
            this.imgHeight = this.config.height * f;
            this.boxWidth = this.imgWidth - 8;
            this.boxHeight = this.imgHeight - 8;
            this.x = this.config.x * this.pageWidth;
            this.y = this.config.y * this.pageHeight;
            this.interval = 3E3;
            this.fadeTime = 10;
            this.alpha = 100;
            this.images = [];
            this.background = $("<div class='banner_background'></div>");
            this.slideShowBG = new grayBackground(this.background, "#ffffff", 1, this.imgWidth, this.imgHeight);
            this.toolBar = $("<div></div>");
            this.toolBar.css({
                width: this.boxWidth,
                height: "35px",
                position: "relative"
            });
            this.toolBar.css({
                "z-index": "209"
            });
            this.toolBG = new grayBackground(this.toolBar, "#000000", 0.3, this.boxWidth, 35);
            this.toolBG.setZindex("210");
            this.toolBG.setPosition(0, 0);
            this.imgTitle = $("<div></div>");
            this.imgTitle.css({
                overflow: "hidden",
                width: this.boxWidth - 20 + "px",
                height: "20px",
                position: "absolute",
                "z-index": "211",
                background: "",
                left: "10px",
                top: "7px",
                color: "#ffffff"
            });
            this.image0Holder = $("<div></div>");
            this.image1Holder = $("<div></div>");
            this.img = $("<img style='position : absolute;' />");
            this.leftButton = new button(this.toolBar, {
                buttonType: 1,
                iconURL: uiBaseURL + "previous_down.png"
            });
            this.rightButton = new button(this.toolBar, {
                buttonType: 1,
                iconURL: uiBaseURL + "next_down.png"
            });
            this.parent.append(this.background);
            this.background.append(this.image1Holder);
            this.background.append(this.image0Holder);
            this.background.append(this.toolBar);
            this.toolBar.css({
                left: (this.imgWidth - this.boxWidth) / 2 + "px",
                top: (this.imgHeight - this.boxHeight) / 2 + "px"
            });
            this.toolBar.append(this.imgTitle);
            this.rightButton.setCSS({
                "z-index": 212,
                right: "0px",
                top: "13px"
            });
            this.leftButton.setCSS({
                "z-index": 212,
                right: "20px",
                top: "13px"
            });
            this.background.css({
                "z-index": "199",
                border: "1px solid #333333",
                width: this.imgWidth,
                height: this.imgHeight,
                left: this.x + "px",
                top: this.y + "px",
                position: "absolute",
                "-webkit-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                "-moz-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                "-ms-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                "-o-box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)",
                "box-shadow": "0 0 10px rgba(40, 40, 40, 0.7)"
            });
            this.setRotation(this.background, this.config.rotation);
            this.image0Holder.css({
                width: this.boxWidth + "px",
                height: this.boxHeight + "px",
                left: (this.imgWidth - this.boxWidth) / 2 + "px",
                top: (this.imgHeight - this.boxHeight) / 2 + "px",
                position: "absolute",
                "z-index": 202
            });
            this.image1Holder.css({
                width: this.boxWidth + "px",
                height: this.boxHeight + "px",
                left: (this.imgWidth - this.boxWidth) / 2 + "px",
                top: (this.imgHeight - this.boxHeight) / 2 + "px",
                position: "absolute",
                "z-index": 202
            });
            this.addItem();
            var h = this;
            this.leftButton.onMouseDown(this, this.prePage);
            this.rightButton.onMouseDown(this, this.nextPage);
            this.currentImageHolder = this.image0Holder;
            this.currentImage = 2 % this.images.length;
            this.image0Holder.append(this.images[0]);
            this.image1Holder.append(this.images[1]);
            this.imgTitle.html(this.photos[0].imageName);
            h = this;
            this.timer1 = setTimeout(g, this.interval);
            this.toolBar.show();
            this.leftButton.remove();
            this.rightButton.remove()
        }
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.url,
            action: b.action,
            images: b.Images
        }
    },
    nextPage: function() {
        clearInterval(this.timer0);
        var b = 0,
        b = 0 < this.currentImage ? (this.currentImage - 1) % this.images.length: this.images.length - 1;
        this.imgTitle.html(this.photos[b].imageName);
        this.currentImageHolder == this.image0Holder ? ($(this.image0Holder).css({
            "z-index": "207"
        }), $(this.image1Holder).css({
            "z-index": "208"
        }), this.alpha = 100, $(this.currentImageHolder).css({
            opacity: this.alpha / 100
        }), this.currentImageHolder = this.image1Holder, this.image0Holder.empty().append(this.images[this.currentImage])) : ($(this.image0Holder).css({
            "z-index": "208"
        }), $(this.image1Holder).css({
            "z-index": "207"
        }), this.alpha = 100, $(this.currentImageHolder).css({
            opacity: this.alpha / 100
        }), this.currentImageHolder = this.image0Holder, this.image1Holder.empty().append(this.images[this.currentImage]));
        this.currentImage = (this.currentImage + 1) % this.images.length
    },
    prePage: function() {
        var b = 0,
        b = 2 < this.currentImage ? (this.currentImage - 3) % this.images.length: 1 == this.currentImage ? this.images.length - 2 : this.images.length - 3;
        this.imgTitle.html(this.photos[b].imageName);
        this.currentImageHolder == this.image0Holder ? ($(this.image0Holder).css({
            "z-index": "207"
        }), $(this.image1Holder).css({
            "z-index": "208"
        }), this.alpha = 100, $(this.currentImageHolder).css({
            opacity: this.alpha / 100
        }), this.currentImageHolder = this.image1Holder, this.image1Holder.empty().append(this.images[b])) : ($(this.image0Holder).css({
            "z-index": "208"
        }), $(this.image1Holder).css({
            "z-index": "207"
        }), this.alpha = 100, $(this.currentImageHolder).css({
            opacity: this.alpha / 100
        }), this.currentImageHolder = this.image0Holder, this.image0Holder.empty().append(this.images[this.index]));
        this.currentImage = (this.currentImage - 1) % this.images.length
    },
    addItem: function() {
        for (var b = 0; b < this.photos.length; b++) {
            var c = $("<div></div>");
            c.css({
                width: this.boxWidth + "px",
                height: this.boxHeight + "px"
            });
            image = $("<img style='position : absolute;' />");
            image.remove();
            var d = this.photos[b].url; ! 0 == bookConfig.isFlipPdf && (d = d.startWith("./") ? "." + d: "../" + d);
            image.attr("src", d);
            image.css({
                width: this.boxWidth + "px",
                height: this.boxHeight + "px"
            });
            c.append(image);
            this.images[b] = c
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.imgWidth = this.config.width * this.pageWidth;
        this.imgHeight = this.config.height * this.pageHeight;
        this.boxWidth = this.imgWidth - 8;
        this.boxHeight = this.imgHeight - 8;
        this.background.css({
            width: this.imgWidth,
            height: this.imgHeight
        });
        this.toolBar.css({
            width: this.boxWidth,
            height: "35px"
        });
        this.toolBG.onResize(this.boxWidth, 35);
        this.toolBG.setPosition(0, 0);
        this.imgTitle.css({
            width: this.boxWidth - 20 + "px",
            height: "20px",
            left: "10px",
            top: "7px"
        });
        this.slideShowBG.onResize(this.imgWidth, this.imgHeight);
        for (var d = 0; d < this.images.length; d++) this.images[d].children().css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.background.css({
            left: this.x + "px",
            top: this.y + "px",
            position: "absolute"
        });
        this.image0Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            position: "absolute"
        });
        this.image1Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            position: "absolute"
        })
    },
    changeImage: function(b) {
        this.imgIndex = b;
        this.img.remove();
        b = this.photos[b].url; ! 0 == bookConfig.isFlipPdf && (b = b.startWith("./") ? "." + b: "../" + b);
        var c = this;
        this.img.attr("src", b);
        this.img.load(function() {
            var b = c.boxWidth,
            f = c.boxHeight;
            c.img.css({
                width: b + "px",
                height: f + "px"
            });
            c.boxWidth != b || c.boxHeight != f ? c.image0Holder.animate({
                width: b + 8,
                height: f + 8,
                left: (c.pw - b) / 2,
                top: (c.ph - f) / 2
            },
            300,
            function() {
                c.image0Holder.append(c.img)
            }) : (c.image0Holder.append(c.img), c.image1Holder.append(c.img))
        })
    },
    setImagePosition: function() {},
    show: function() {},
    hide: function() {}
}).extend("Item");
global.hddr.soa8 = hddr.soa7 + "i";
global.hddr.sov9 = function(b, c) {
    return b + "ph" + c + "l"
};
Class("Carousel", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.width = Number(this.config.width) * this.pageWidth;
        this.height = Number(this.config.height) * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.id = "carousel" + g;
        this.imageItem = [];
        this.images = Instance.copy(this.config.images);
        this.images.node instanceof Array && (this.images = this.images.node);
        this.images[0] || (this.images = [this.images.node]);
        if (! (1 > this.config.images)) {
            if (this.images && this.images.length) for (b = 0; b < this.images.length; b++) this.imageItem.push(this.images[b]),
            bookConfig.isFlipPdf && (this.imageItem[b].url.startWith("./") ? this.imageItem[b].url = "." + this.imageItem[b].url: this.imageItem[b].url = "../" + this.imageItem[b].url);
            this.content = $("<div class='initCarousel'></div>");
            this.content.css({
                position: "absolute",
                left: this.x + "px",
                top: this.y + "px",
                width: this.width + "px",
                height: this.height + "px",
                border: "0px solid red"
            });
            this.setRotation(this.content, this.config.rotation);
            this.currentIndex = 0;
            this.parent.append(this.content);
            this.initImages();
            this.startMove()
        }
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            images: b.Images
        }
    },
    initImages: function() {
        if (void 0 != this.images && null != this.images && 0 != this.images.length) {
            this.refreshImageAndPosition();
            this.carouselList = new CarouselImageList;
            this.carouselList.setResources(this.aImages);
            this.carouselList.setPositions(this.aPositions);
            for (var b = 0; b < this.aPositions.length; b++) {
                var c = new CarouselImage(this.content, this.aPositions[b]);
                this.carouselList.addInstance(c)
            }
            this.carouselList.loadResources();
            this.carouselList.blurAll()
        }
    },
    refreshImageAndPosition: function() {
        if (void 0 != this.imageItem && null != this.imageItem && 0 != this.imageItem.length) {
            var b = this.width / 5;
            this.aImages = [];
            this.aPositions = [];
            var c = 5;
            5 > this.imageItem.length && (c = Math.min(this.imageItem.length, 3));
            switch (c) {
            case 1:
                this.aImages.push(this.imageItem[0].url);
                this.aPositions.push(new CarouselPosition(0, 0, this.width, this.height, 1));
                break;
            case 2:
                b = this.width / 3;
                this.aImages.push(this.imageItem[0].url);
                this.aImages.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url);
                c = Math.ceil((this.width - b) / 2);
                this.aPositions.push(new CarouselPosition(c, 0, b, b, 2));
                c = Math.ceil((this.width - 3 * b + 5) / 2) + (2 * b - 5);
                this.aPositions.push(new CarouselPosition(c, 5, b - 5, b - 5, 1));
                break;
            case 3:
                b = this.width / 3;
                this.aImages.push(this.imageItem[(this.currentIndex - 1 + this.imageItem.length) % this.imageItem.length].url);
                this.aImages.push(this.imageItem[this.currentIndex % this.imageItem.length].url);
                this.aImages.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url);
                c = Math.ceil((this.width - 3 * b + 10) / 2);
                this.aPositions.push(new CarouselPosition(c, 5, b - 5, b - 5, 0));
                c = Math.ceil((this.width - b) / 2);
                this.aPositions.push(new CarouselPosition(c, 0, b, b, 2));
                c = Math.ceil((this.width - 3 * b + 10) / 2) + (2 * b - 5);
                this.aPositions.push(new CarouselPosition(c, 5, b - 5, b - 5, 1));
                break;
            case 5:
                this.aImages.push(this.imageItem[(this.currentIndex - 2 + this.imageItem.length) % this.imageItem.length].url),
                this.aImages.push(this.imageItem[(this.currentIndex - 1 + this.imageItem.length) % this.imageItem.length].url),
                this.aImages.push(this.imageItem[this.currentIndex % this.imageItem.length].url),
                this.aImages.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url),
                this.aImages.push(this.imageItem[(this.currentIndex + 2) % this.imageItem.length].url),
                c = Math.ceil((this.width - 5 * b + 20) / 2),
                this.aPositions.push(new CarouselPosition(c, 5, 2 * b - 5, 2 * b - 5, 0)),
                c = Math.ceil((this.width - 3 * b + 10) / 2),
                this.aPositions.push(new CarouselPosition(c, 5, 2 * b - 5, 2 * b - 5, 2)),
                c = Math.ceil((this.width - 2 * b) / 2),
                this.aPositions.push(new CarouselPosition(c, 0, 3 * b, 3 * b, 3)),
                c = Math.ceil((this.width - 3 * b + 10) / 2) + (2 * b - 5),
                this.aPositions.push(new CarouselPosition(c, 5, 2 * b - 5, 2 * b - 5, 2)),
                c = Math.ceil((this.width - 5 * b + 20) / 2) + (4 * b - 15),
                this.aPositions.push(new CarouselPosition(c, 5, 2 * b - 5, 2 * b - 5, 1))
            }
        }
    },
    startMove: function() {
        var b = this;
        this.timer = window.setInterval(function() {
            b.move(1)
        },
        2E3)
    },
    stopMove: function() {
        window.clearInterval(this.timer)
    },
    move: function(b) {
        this.currentIndex += b;
        0 > this.currentIndex && (this.currentIndex += this.imageItem.length);
        this.currentIndex %= this.imageItem.length;
        var c = [];
        switch (this.carouselList.instanceCount()) {
        case 1:
            c.push(this.imageItem[0].url);
            break;
        case 2:
            c.push(this.imageItem[this.currentIndex % this.imageItem.length].url);
            c.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url);
            break;
        case 3:
            c.push(this.imageItem[(this.currentIndex - 1 + this.imageItem.length) % this.imageItem.length].url);
            c.push(this.imageItem[this.currentIndex % this.imageItem.length].url);
            c.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url);
            break;
        case 5:
            c.push(this.imageItem[(this.currentIndex - 2 + this.imageItem.length) % this.imageItem.length].url),
            c.push(this.imageItem[(this.currentIndex - 1 + this.imageItem.length) % this.imageItem.length].url),
            c.push(this.imageItem[this.currentIndex % this.imageItem.length].url),
            c.push(this.imageItem[(this.currentIndex + 1) % this.imageItem.length].url),
            c.push(this.imageItem[(this.currentIndex + 2) % this.imageItem.length].url)
        }
        this.carouselList.setResources(c);
        this.carouselList.move(b)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition();
        this.refreshImageAndPosition();
        this.carouselList.setResources(this.aImages);
        this.carouselList.setPositions(this.aPositions);
        this.carouselList.resizeAll()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend("Item");
var CarouselImage = Class({
    create: function(b, c) {
        this.parent = b;
        this.instance = $('<img style="position:absolute"/>');
        this.parent.append(this.instance);
        this.imageHeight = this.imageWidth = 0;
        var d = this;
        this.instance.load(function() {
            CarouselImage.prototype.onImageLoad.apply(d, arguments)
        });
        this.setArea(c.left, c.top, c.width, c.height);
        this.setZindex(c.zindex)
    },
    blur: function(b) { ! 0 == b ? this.instance.css({
            "-webkit-filter": "blur(2px)",
            "-moz-filter": "blur(2px)",
            "-o-filter": "blur(2px)",
            "-ms-filter": "blur(2px)",
            filter: "blur(2px)"
        }) : this.instance.css({
            "-webkit-filter": "blur(0px)",
            "-moz-filter": "blur(0px)",
            "-o-filter": "blur(0px)",
            "-ms-filter": "blur(0px)",
            filter: "blur(0px)"
        })
    },
    setSrc: function(b) {
        this.instance[0].src = b
    },
    getSrc: function() {
        return this.instance[0].src
    },
    onImageLoad: function() {
        var b = this.instance[0];
        this.imageWidth = b.naturalWidth;
        this.imageHeight = b.naturalHeight;
        b = Math.ceil(this.imageHeight * this.instance.width() / this.imageWidth);
        this.instance.css({
            height: b + "px"
        })
    },
    move: function(b, c) {
        this.instance.css({
            left: b + "px",
            top: c + "px"
        })
    },
    resize: function(b, c) {
        var d = c;
        0 < this.imageWidth && 0 < this.imageHeight && (d = Math.ceil(this.imageHeight * this.instance.width() / this.imageWidth));
        this.instance.css({
            width: b + "px",
            height: d + "px"
        })
    },
    setArea: function(b, c, d, f) {
        this.move(b, c);
        this.resize(d, f)
    },
    setZindex: function(b) {
        this.instance.css({
            "z-index": b
        })
    },
    gotoPosition: function(b) {
        var c = b.height;
        0 < this.imageWidth && 0 < this.imageHeight && (c = Math.ceil(this.imageHeight * b.width / this.imageWidth));
        var d = this;
        this.instance.animate({
            left: b.left,
            top: b.top,
            width: b.width,
            height: c
        },
        500,
        function() {
            d.setZindex(b.zindex)
        })
    }
}),
CarouselPosition = Class({
    create: function(b, c, d, f, g) {
        this.left = Math.ceil(b);
        this.top = Math.ceil(c);
        this.width = Math.ceil(d);
        this.height = Math.ceil(f);
        this.zindex = g
    },
    asString: function() {
        return "left:" + this.left + ",top:" + this.top + ",width:" + this.width + ",height:" + this.height + ",z-index:" + this.zindex
    }
}),
CarouselImageList = Class({
    create: function() {
        this.imageResources = [];
        this.imagePositions = [];
        this.imageInstances = []
    },
    setResources: function(b) {
        for (; 0 < this.imageResources.length;) this.imageResources.pop();
        for (var c = 0; c < b.length; c++) this.imageResources.push(b[c])
    },
    setPositions: function(b) {
        for (; 0 < this.imagePositions.length;) this.imagePositions.pop();
        for (var c = 0; c < b.length; c++) this.imagePositions.push(b[c])
    },
    addInstance: function(b) {
        this.imageInstances.push(b)
    },
    instanceCount: function() {
        return this.imageInstances.length
    },
    loadResources: function() {
        for (var b = this.imageInstances.length,
        c = 0; c < b; c++) {
            var d = this.imageInstances[c];
            d.getSrc() != this.imageResources[c] && d.setSrc(this.imageResources[c])
        }
    },
    move: function(b) {
        var c = this.imageInstances.length;
        if (0 != c) {
            for (var d = this.imageInstances[0], f = 0; f < c; f++) {
                var g = f + b;
                0 > g && (g += c);
                g >= c && (g %= c);
                var h = this.imageInstances[g];
                this.imageInstances[f] = 0 == g ? d: h
            }
            for (f = 0; f < c; f++) this.imageInstances[f].gotoPosition(this.imagePositions[f]);
            this.loadResources();
            this.blurAll()
        }
    },
    resizeAll: function() {
        var b = this.imageInstances.length;
        if (0 != b) for (var c = 0; c < b; c++) this.imageInstances[c].gotoPosition(this.imagePositions[c])
    },
    blurAll: function() {
        for (var b = this.imageInstances.length,
        c = Math.floor((b + 1) / 2) - 1, d = 0; d < b; d++) {
            var f = this.imageInstances[d];
            d != c ? f.blur(!0) : f.blur(!1)
        }
    }
});
global.hddr.sob8 = hddr.soa8;
global.hddr.soq2 = hddr.sov9(hddr.soa8, hddr.soq3) + "5";
Class("DynamicShow", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.childWidth = Math.ceil(this.width / 4);
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.borderWidth = this.config.borderWidth;
        this.id = "dynshow" + g;
        this.images = Instance.copy(this.config.images);
        this.imageItem = [];
        this.images[0] || (this.images = [this.images.Image]);
        if (this.images && this.images.length) for (b = 0; b < this.images.length; b++) this.imageItem.push(this.images[b]),
        bookConfig.isFlipPdf && (this.imageItem[b].startWith("./") ? this.imageItem[b] = "." + this.imageItem[b] : this.imageItem[b] = "../" + this.imageItem[b]);
        this.maxZindex = this.images.length + 1;
        this.content = $("<div id='DynamicShow'></div>");
        this.content.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px",
            width: this.width + "px",
            height: this.height + "px",
            border: "0px solid red"
        });
        this.setRotation(this.content, this.config.rotation);
        this.currentIndex = 0;
        this.parent.append(this.content);
        this.init()
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            images: b.Images,
            borderWidth: b.borderWidth
        }
    },
    init: function() {
        this.imageInstances = [];
        if (0 != this.imageItem.length) {
            for (var b = 0; b < this.imageItem.length; b++) {
                var c = new ImageInstance(this, b);
                c.setImage(this.imageItem[b]);
                this.content.append(c);
                this.imageInstances.push(c)
            }
            this.currentIndex = -1;
            this.initButtons()
        }
    },
    initButtons: function() {
        this.leftButton = $('<img src="' + uiBaseURL + 'pre_image.png" style="position:absolute;z-index:1000"></img>');
        this.rightButton = $('<img src="' + uiBaseURL + 'next_image.png" style="position:absolute;z-index:1000"></img>');
        this.setButtonPosition();
        this.leftButton.bind(_event._click,
        function() {
            this.preImage()
        }.bind(this));
        this.rightButton.bind(_event._click,
        function() {
            this.nextImage()
        }.bind(this));
        isTouchDevice() || (this.leftButton.css({
            display: "none"
        }), this.rightButton.css({
            display: "none"
        }));
        this.content.append(this.leftButton);
        this.content.append(this.rightButton);
        this.content.bind(_event._enter,
        function() {
            this.leftButton.css({
                display: "block"
            });
            this.rightButton.css({
                display: "block"
            })
        }.bind(this));
        this.content.bind(_event._leave,
        function() {
            this.leftButton.css({
                display: "none"
            });
            this.rightButton.css({
                display: "none"
            })
        }.bind(this))
    },
    preImage: function() { - 1 != this.currentIndex && this.imageInstances[this.currentIndex].hide();
        this.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length;
        this.imageInstances[this.currentIndex].show()
    },
    nextImage: function() { - 1 != this.currentIndex && this.imageInstances[this.currentIndex].hide();
        this.currentIndex = (this.currentIndex + 1) % this.images.length;
        this.imageInstances[this.currentIndex].show()
    },
    showImage: function(b) { - 1 != b && ( - 1 != this.currentIndex && this.imageInstances[this.currentIndex].hide(), this.currentIndex = b, this.imageInstances[this.currentIndex].show())
    },
    refreshZindex: function() {
        for (var b = this.imageInstances[this.currentIndex].zIndex, c = 0; c < this.images.length; c++) if (c != this.currentIndex) {
            var d = this.imageInstances[c].zIndex;
            d > b && (d--, this.imageInstances[c].setZindex(d))
        }
        this.imageInstances[this.currentIndex].setZindex(this.images.length - 1)
    },
    setButtonPosition: function() {
        var b = (this.height - 32) / 2;
        this.leftButton.css({
            left: "0px",
            top: b + "px"
        });
        this.rightButton.css({
            right: "0px",
            top: b + "px"
        })
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition();
        this.setButtonPosition();
        this.childWidth = Math.ceil(this.width / 4);
        for (var d = 0; d < this.imageInstances.length; d++) this.imageInstances[d].onResize()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend("Item");
var ImageInstance = Class({
    create: function(b, c) {
        this.parent = b;
        this.zIndex = this.index = c;
        this.imageHeight = this.imageWidth = 0;
        this.height = this.width = this.parent.childWidth;
        this.borderWidth = Math.ceil(this.parent.borderWidth / 2);
        this.maxLeft = this.parent.width - this.width;
        this.maxTop = this.parent.height - this.height;
        var d = randomPosition(this.maxLeft, this.maxTop);
        this.rotation = d.rotation;
        this.animate = [];
        this.instance = $("<img></img>");
        this.instance.css({
            position: "absolute",
            left: d.left + "px",
            top: d.top + "px",
            width: this.width + "px",
            height: this.height + "px",
            display: "none"
        });
        this.instance.rotate(this.rotation);
        this.setBorderWidth(this.borderWidth);
        this.initShadow();
        this.initEvents();
        b.content.append(this.instance)
    },
    initShadow: function() {
        this.instance.css({
            "-moz-box-shadow": "2px 2px 4px #252525",
            "box-shadow": "2px 2px 4px #252525",
            "-webkit-box-shadow": "2px 2px 4px #252525",
            "-ms-box-shadow": "2px 2px 4px #252525",
            "-o-box-shadow": "2px 2px 4px #252525"
        })
    },
    initEvents: function() {
        this.instance.load(function() {
            this.onImageLoad()
        }.bind(this));
        this.instance.bind(_event._click,
        function() {
            this.parent.currentIndex == this.index ? (this.hide(), this.parent.currentIndex = -1) : this.parent.showImage(this.index)
        }.bind(this))
    },
    onImageLoad: function() {
        var b = this.instance[0];
        this.imageWidth = b.naturalWidth;
        this.imageHeight = b.naturalHeight;
        this.height = Math.ceil(this.imageHeight * this.width / this.imageWidth);
        this.maxTop = this.parent.height - this.height;
        this.instance.css({
            height: this.height + "px",
            display: "block"
        })
    },
    setImage: function(b) {
        this.instance.attr("src", b)
    },
    onResize: function() {
        this.width = this.parent.childWidth;
        this.height = 0 < this.imageWidth && 0 < this.imageHeight ? Math.ceil(this.imageHeight * this.width / this.imageWidth) : this.width;
        this.maxLeft = this.parent.width - this.width;
        this.maxTop = this.parent.height - this.height;
        if (this.index != this.parent.currentIndex) {
            var b = this.getPosition(),
            c = this.width / b.width;
            b.left = Math.floor(b.left * c);
            b.top = Math.floor(b.top * c);
            b.width = this.width;
            b.height = this.height
        } else b = this.getTopPosition();
        this.moveTo(b)
    },
    resize: function(b, c) {
        this.width = b;
        this.height = c;
        this.instance.css({
            width: this.width + "px",
            height: this.height + "px"
        })
    },
    move: function(b, c) {
        this.instance.css({
            left: this.left + "px",
            top: this.top + "px"
        })
    },
    setZindex: function(b) {
        this.zIndex = b;
        this.instance.css({
            "z-index": b
        })
    },
    setBorderWidth: function(b) {
        this.instance.css({
            border: b + "px solid white"
        })
    },
    getTopPosition: function() {
        if (this.imageWidth / this.imageHeight > this.parent.width / this.parent.height) var b = this.parent.width,
        c = b * this.imageHeight / this.imageWidth,
        d = (this.parent.height - c) / 2 - this.parent.borderWidth,
        f = 0,
        g = 0;
        else c = this.parent.height,
        b = c * this.imageWidth / this.imageHeight,
        g = d = 0,
        f = (this.parent.width - b) / 2 - this.parent.borderWidth;
        return new DynImagePostion(f, d, b, c, g)
    },
    show: function() {
        if (0 != this.imageWidth && 0 != this.imageHeight) {
            var b = this.getTopPosition();
            b.borderWidth = this.parent.borderWidth;
            this.instance.css({
                "z-index": this.parent.maxZindex
            });
            this.moveTo(b)
        }
    },
    hide: function() {
        if (0 != this.imageWidth && 0 != this.imageHeight) {
            var b = randomPosition(this.maxLeft, this.maxTop),
            b = new DynImagePostion(b.left, b.top, this.width, this.height, b.rotation);
            b.borderWidth = this.borderWidth;
            this.parent.refreshZindex();
            this.moveTo(b)
        }
    },
    moveTo: function(b) {
        var c = null,
        d = 0,
        f = window.setInterval(function() { ! 1 == this.isInAnimate(f) && this.animate.push(f);
            if (!1 != this.isRunning(f)) {
                null == c && (c = this.getPosition());
                var g = $.easing.swing(null, d, c.left, b.left - c.left, 20),
                h = $.easing.swing(null, d, c.top, b.top - c.top, 20),
                k = $.easing.swing(null, d, c.width, b.width - c.width, 20),
                l = $.easing.swing(null, d, c.height, b.height - c.height, 20),
                m = $.easing.swing(null, d, c.rotation, b.rotation - c.rotation, 20),
                n = $.easing.swing(null, d, c.borderWidth, b.borderWidth - c.borderWidth, 20);
                this.instance.css({
                    left: g + "px",
                    top: h + "px",
                    width: k + "px",
                    height: l + "px"
                });
                this.instance.rotate(m);
                this.setBorderWidth(n);
                this.rotation = m;
                20 == d++&&(window.clearInterval(f), this.animate.shift())
            }
        }.bind(this), 20)
    },
    isInAnimate: function(b) {
        for (var c = 0; c < this.animate.length; c++) if (b == this.animate[c]) return ! 0;
        return ! 1
    },
    isRunning: function(b) {
        return b == this.animate[0]
    },
    getPosition: function() {
        var b = parseInt(this.instance.css("left").replace("px", "")),
        c = parseInt(this.instance.css("top").replace("px", "")),
        d = this.instance.width(),
        f = this.instance.height(),
        b = new DynImagePostion(b, c, d, f, this.rotation),
        c = this.instance.css("border"),
        c = parseInt(c.replace("px solid white"));
        b.borderWidth = c;
        return b
    }
}),
DynImagePostion = Class({
    create: function(b, c, d, f, g) {
        this.left = b;
        this.top = c;
        this.width = d;
        this.height = f;
        this.rotation = g
    },
    asString: function() {
        return "left:" + this.left + ",top:" + this.top + ",width:" + this.width + ",height:" + this.height + ",rotation:" + this.rotation
    }
});
function randomPosition(b, c) {
    var d = Math.floor(Math.random() * b),
    f = Math.floor(Math.random() * c),
    g = 75 - Math.floor(150 * Math.random());
    return {
        left: d,
        top: f,
        rotation: g
    }
}
Class("FocusJump", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.id = "flip_jump_" + g;
        this.translate = 0;
        this.initContent();
        this.initImages();
        this.initButtons();
        this.initEvents();
        parseBool(this.config.reflection) && this.imageReflection(this.content);
        this.onResize(d, f)
    },
    initContent: function() {
        this.content = $("<div id='" + this.id + "'></div>");
        this.content.css({
            overflow: "hidden",
            position: "absolute"
        });
        this.setRotation(this.content, this.config.rotation);
        this.imagesContent = $("<div></div>");
        this.imagesContent.css({
            position: "absolute",
            left: "0px",
            top: "0px",
            height: "100%"
        });
        this.parent.append(this.content);
        this.content.append(this.imagesContent);
        this.initBackground()
    },
    initBackground: function() {
        if (this.config.addBackground) {
            var b = Color(this.config.backgroundColor);
            this.content.css({
                "background-color": b.rgba(this.config.backgroundAlpha)
            })
        }
        this.config.addBorder && (b = Color(this.config.borderColor), this.content.css({
            border: this.config.borderWidth + "px solid " + b.rgba(this.config.borderAlpha)
        }))
    },
    initButtons: function() {
        this.leftButton = $('<img src="' + uiBaseURL + 'pre_image.png" style="position:absolute;z-index:1000;left:0px;top:0px;bottom:0px;margin:auto"></img>');
        this.rightButton = $('<img src="' + uiBaseURL + 'next_image.png" style="position:absolute;z-index:1000;right:0px;top:0px;bottom:0px;margin:auto"></img>');
        isTouchDevice() || (this.leftButton.css({
            display: "none"
        }), this.rightButton.css({
            display: "none"
        }));
        this.content.append(this.leftButton);
        this.content.append(this.rightButton)
    },
    initImages: function() {
        this.$images = [];
        this.images = this.config.images;
        if ("" != this.images) {
            if (! (this.images instanceof Array)) {
                if ("" == this.images) return;
                this.images.node && (this.images = [this.images.node])
            }
            for (var b = this,
            c = 0; c < this.images.length; c++) {
                var d = this.images[c].url;
                bookConfig.isFlipPdf && (d = this.Item[c].startWith("./") ? "." + d: "../" + d);
                var f = $("<img style='position:absolute;display:none;bottom:0px'></img>");
                f.load(function() {
                    var c = $(this);
                    b.resizeImage(c);
                    c.css({
                        display: "block"
                    })
                });
                f.attr("src", d);
                this.imagesContent.append(f);
                this.$images.push(f)
            }
        }
    },
    resizeImage: function(b) {
        if (b[0].naturalWidth && b[0].naturalHeight) {
            var c = this.getImageWidth();
            b.css({
                width: c + "px",
                height: Math.floor(c / b[0].naturalWidth * b[0].naturalHeight) + "px"
            })
        }
    },
    getImageWidth: function() {
        return Math.floor((this.width - 3 * this.margin) / 3)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            images: b.componentData.Images,
            addBackground: parseBool(b.componentData.addBack),
            addBorder: parseBool(b.componentData.addBorder),
            backgroundColor: b.componentData.backColor,
            backgroundAlpha: b.componentData.backAlpha,
            borderColor: b.componentData.borderColor,
            borderAlpha: b.componentData.borderAlpha,
            borderWidth: b.componentData.borderWidth
        }
    },
    initEvents: function() {
        this.content.bind(_event._enter,
        function() {
            3 >= this.images.length || (this.leftButton.css({
                display: "block"
            }), this.rightButton.css({
                display: "block"
            }))
        }.bind(this));
        this.content.bind(_event._leave,
        function() {
            this.leftButton.css({
                display: "none"
            });
            this.rightButton.css({
                display: "none"
            })
        }.bind(this));
        this.leftButton.bind(_event._click,
        function() {
            this.moveLeft()
        }.bind(this));
        this.rightButton.bind(_event._click,
        function() {
            this.moveRight()
        }.bind(this));
        for (var b = this,
        c = 0; c < this.$images.length; c++) {
            var d = this.$images[c];
            d.bind(_event._enter,
            function() {
                b.moveImageUp($(this))
            });
            d.bind(_event._leave,
            function() {
                b.moveImageDown($(this))
            })
        }
    },
    moveLeft: function() {
        this.translate += this.getImageWidth();
        0 < this.translate && (this.translate = 0);
        this.imagesContent.animateOnce({
            left: this.translate + "px"
        },
        300)
    },
    moveRight: function() {
        this.translate -= this.getImageWidth();
        var b = this.width - this.imagesContent.width();
        this.translate < b && (this.translate = b);
        this.imagesContent.animateOnce({
            left: this.translate + "px"
        },
        300)
    },
    moveImageUp: function(b) {
        b.animateOnce({
            bottom: Math.floor(this.height / 8) + "px"
        },
        300)
    },
    moveImageDown: function(b) {
        b.animateOnce({
            bottom: "0px"
        },
        300)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.left = this.pageWidth * this.config.x;
        this.top = this.pageHeight * this.config.y;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.margin = Math.floor(5 * this.width / 100);
        this.content.css({
            left: this.left + "px",
            top: this.top + "px",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.resizeImages()
    },
    resizeImages: function() {
        var b = this.getImageWidth();
        this.imagesContent.css({
            width: this.margin + (this.margin + b) * this.$images.length + "px"
        });
        if (1 == this.$images.length) {
            var c = this.$images[0],
            d = this.margin + b;
            c.css({
                left: d + "px"
            });
            this.resizeImage(c)
        } else for (var f = 0; f < this.$images.length; f++) c = this.$images[f],
        d = this.margin + (this.margin + b) * f,
        c.css({
            left: d + "px"
        }),
        this.resizeImage(c)
    }
}).extend("Item");
Class("FlipJump", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.id = "jump" + g;
        this.itemHeight = Math.floor(0.7 * this.height);
        this.images = this.config.images;
        this.images[0] || (this.images = [this.images.Image]);
        this.Items = [];
        this.imageCount = this.images.length;
        if (this.images && this.images instanceof Array) for (b = 0; b < this.images.length; b++) this.Items.push(this.images[b]),
        bookConfig.isFlipPdf && (this.Items[b].startWith("./") ? this.Items[b] = "." + this.Items[b] : this.Items[b] = "../" + this.Items[b]);
        this.minZindex = 0;
        this.maxZindex = this.images.length + 1;
        this.content = $("<div></div>");
        this.content.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setRotation(this.content, this.config.rotation);
        this.initBackground();
        this.parent.append(this.content);
        this.init()
    },
    initBackground: function() {
        if (this.config.addBackground) {
            var b = Color(this.config.backgroundColor);
            this.content.css({
                "background-color": b.rgba(this.config.backgroundAlpha)
            })
        }
        this.config.addBorder && (b = Color(this.config.borderColor), this.content.css({
            border: "1px solid " + b.rgba(this.config.borderAlpha)
        }))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            images: b.Images,
            addBackground: parseBool(b.addBack),
            addBorder: parseBool(b.addBorder),
            backgroundColor: b.backgroundColor,
            backgroundAlpha: b.backgroundColorAlpha,
            borderColor: b.backgroundBorderColor
        }
    },
    init: function() {
        this.busy = !1;
        this.imageItems = [];
        for (var b = 0; b < this.Items.length; b++) {
            var c = new FlipJumpItem(this, 0 == b ? !1 : !0);
            c.setImage(this.Items[b]);
            this.imageItems.push(c)
        }
        this.resetZindex();
        this.resetJumpEvent();
        1 <= this.imageCount && this.initButtons()
    },
    initButtons: function() {
        this.leftButton = $('<img src="' + uiBaseURL + 'pre_image.png" style="position:absolute;z-index:1000"></img>');
        this.rightButton = $('<img src="' + uiBaseURL + 'next_image.png" style="position:absolute;z-index:1000"></img>');
        this.setButtonPosition();
        var b = this;
        this.leftButton.bind(_event._click,
        function() {
            this.preImage()
        }.bind(this));
        this.rightButton.bind(_event._click,
        function() {
            this.nextImage()
        }.bind(this));
        isTouchDevice() || (this.leftButton.css({
            display: "none"
        }), this.rightButton.css({
            display: "none"
        }));
        this.content.append(this.leftButton);
        this.content.append(this.rightButton);
        this.content.bind(_event._enter,
        function() {
            b.leftButton.css({
                display: "block"
            });
            b.rightButton.css({
                display: "block"
            })
        });
        this.content.bind(_event._leave,
        function() {
            b.leftButton.css({
                display: "none"
            });
            b.rightButton.css({
                display: "none"
            })
        })
    },
    preImage: function() {
        if (!0 != this.busy) {
            this.busy = !0;
            var b = this.imageItems[this.imageCount - 1],
            c = this;
            this.imageItems[0].randomRotate();
            b.rotateTo(0, 40);
            b.jumpUp(function() {
                b.setZindex(c.maxZindex);
                b.jumpDown(function() {
                    c.imageItems.pop();
                    c.imageItems.unshift(b);
                    c.resetZindex();
                    c.busy = !1
                })
            })
        }
    },
    nextImage: function() {
        if (!0 != this.busy) {
            this.busy = !0;
            var b = this.imageItems[0],
            c = this.imageItems[1],
            d = this;
            1 == this.imageItems.length && (c = b);
            c.rotateTo(0);
            b.randomRotate(40);
            b.jumpUp(function() {
                b.setZindex(d.minZindex);
                b.jumpDown(function() {
                    d.imageItems.shift();
                    d.imageItems.push(b);
                    d.resetZindex();
                    d.busy = !1
                })
            })
        }
    },
    resetZindex: function() {
        for (var b = 0; b < this.imageItems.length; b++) this.imageItems[b].setZindex(this.imageItems.length - b)
    },
    resetJumpEvent: function() {
        for (var b = 0; b < this.imageItems.length; b++) this.imageItems[b].instance.bind(_event._click,
        function() {
            this.nextImage()
        }.bind(this))
    },
    setButtonPosition: function() {
        var b = (this.height - 32) / 2;
        this.leftButton.css({
            left: "0px",
            top: b + "px"
        });
        this.rightButton.css({
            right: "0px",
            top: b + "px"
        })
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition();
        this.setButtonPosition();
        this.itemHeight = Math.floor(0.7 * this.height);
        for (var d = 0; d < this.imageItems.length; d++) this.imageItems[d].resize()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend("Item");
var FlipJumpItem = Class({
    create: function(b, c) {
        this.parent = b;
        this.initRotate = c;
        this.rotation = 0;
        this.height = this.width = b.itemHeight;
        this.imageHeight = this.imageWidth = 0;
        this.instance = $("<img></img>");
        this.instance.css({
            position: "absolute",
            left: "0px",
            top: "0px",
            width: this.width + "px",
            height: this.height + "px",
            border: "2px solid white",
            display: "none"
        });
        this.instance.load(function() {
            this.onImageLoad()
        }.bind(this));
        this.initShadow();
        b.content.append(this.instance)
    },
    initShadow: function() {
        this.instance.css({
            "-moz-box-shadow": "2px 2px 4px #252525",
            "box-shadow": "2px 2px 4px #252525",
            "-webkit-box-shadow": "2px 2px 4px #252525",
            "-ms-box-shadow": "2px 2px 4px #252525",
            "-o-box-shadow": "2px 2px 4px #252525"
        })
    },
    getRandomRotation: function() {
        return 60 - Math.ceil(120 * Math.random())
    },
    onImageLoad: function() {
        var b = this.instance[0];
        this.imageWidth = b.naturalWidth;
        this.imageHeight = b.naturalHeight;
        this.width = Math.ceil(this.height * this.imageWidth / this.imageHeight);
        this.left = Math.ceil((this.parent.width - this.width) / 2);
        this.top = Math.ceil((this.parent.height - this.height) / 2);
        this.instance.css({
            left: this.left + "px",
            top: this.top + "px",
            width: this.width + "px",
            height: this.height + "px",
            display: "block"
        }); ! 0 == this.initRotate && (b = this.getRandomRotation(), this.instance.rotate(b), this.rotation = b)
    },
    setImage: function(b) {
        this.instance.attr("src", b)
    },
    setZindex: function(b) {
        this.instance.css({
            "z-index": b
        })
    },
    randomRotate: function(b) {
        var c = this.getRandomRotation();
        this.rotateTo(c, b)
    },
    rotateTo: function(b, c) {
        var d = this.rotation,
        f = 20;
        void 0 != c && (f = c);
        var g = this,
        h = 0,
        k = window.setInterval(function() {
            var c = $.easing.swing(null, h, d, b - d, f);
            g.instance.rotate(c);
            g.rotation = c;
            h++>=f && window.clearInterval(k)
        },
        20)
    },
    jumpUp: function(b) {
        this.instance.animate({
            top: Math.floor(1.3 * -this.height)
        },
        400, b)
    },
    jumpDown: function(b) {
        this.instance.animate({
            top: this.top
        },
        400, b)
    },
    resize: function() {
        if (0 != this.imageWith || 0 != this.imageHeight) this.height = this.parent.itemHeight,
        this.width = Math.ceil(this.height * this.imageWidth / this.imageHeight),
        this.left = Math.ceil((this.parent.width - this.width) / 2),
        this.top = Math.ceil((this.parent.height - this.height) / 2),
        this.instance.animate({
            left: this.left,
            top: this.top,
            width: this.width,
            height: this.height
        },
        400)
    }
});
Class("Rotate3D", {
    Package: "PageItem",
    create: function(b, c, d, f, g) {
        this._super(b, c, d, f);
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.id = "3d" + g;
        this.images = this.config.images;
        this.Item = [];
        this.images instanceof Array || (this.images = this.images.node);
        if (this.config.images != {}) {
            this.topZindex = this.imageCount = this.images.length;
            if (this.images && this.images.length) for (b = 0; b < this.images.length; b++) this.Item.push(this.images[b]),
            bookConfig.isFlipPdf && (this.Item[b].startWith("./") ? this.Item[b] = "." + this.Item[b] : this.Item[b] = "../" + this.Item[b]);
            b = !0 == this.config.addBorder ? 1 : 0;
            this.content = $("<div></div>");
            this.content.css({
                position: "absolute",
                overflow: "hidden",
                left: this.x + "px",
                top: this.y + "px",
                width: this.width + "px",
                height: this.height + "px",
                border: b + "px solid " + Color(this.config.borderColor).toString()
            });
            this.setRotation(this.content, this.config.rotation); ! 0 == this.config.addBackground && this.content.css({
                background: Color(this.config.backgroundColor).toString(),
                opacity: this.config.backgroundAlpha / 100
            });
            this.parent.append(this.content);
            this.init();
            this.rotateTimer = -1;
            this.step = 0
        }
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            alpha: b.alpha,
            images: b.componentData.Images,
            addBackground: parseBool(b.componentData.addBack),
            addBorder: parseBool(b.componentData.addBorder),
            backgroundColor: b.componentData.backColor,
            backgroundAlpha: b.componentData.backAlpha,
            borderColor: b.componentData.borderColor,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor
        }
    },
    init: function() {
        this.imageItems = [];
        for (var b = 0; b < this.Item.length; b++) {
            var c = new Rotate3DItem(this, b);
            c.setImage(this.Item[b]);
            this.imageItems.push(c)
        }
        this.imageItems[0].show();
        this.currentIndex = 0;
        1 < this.Item.length && this.initButtons()
    },
    initButtons: function() {
        this.leftButton = $('<img src="' + uiBaseURL + 'pre_image.png" style="position:absolute;z-index:1000"></img>');
        this.rightButton = $('<img src="' + uiBaseURL + 'next_image.png" style="position:absolute;z-index:1000"></img>');
        this.setButtonPosition();
        var b = this;
        this.leftButton.bind(_event._down, this.preImage.bind(this));
        this.rightButton.bind(_event._down, this.nextImage.bind(this));
        this.leftButton.bind(_event._end, this.stopRotate.bind(this));
        this.rightButton.bind(_event._end, this.stopRotate.bind(this));
        this.leftButton.bind(_event._leave, this.stopRotate.bind(this));
        this.rightButton.bind(_event._leave, this.stopRotate.bind(this));
        isTouchDevice() || (this.leftButton.css({
            display: "none"
        }), this.rightButton.css({
            display: "none"
        }));
        this.content.append(this.leftButton);
        this.content.append(this.rightButton);
        this.content.bind(_event._enter,
        function() {
            b.leftButton.css({
                display: "block"
            });
            b.rightButton.css({
                display: "block"
            })
        });
        this.content.bind(_event._leave,
        function() {
            b.leftButton.css({
                display: "none"
            });
            b.rightButton.css({
                display: "none"
            })
        })
    },
    setButtonPosition: function() {
        var b = (this.height - 32) / 2;
        this.leftButton.css({
            left: "0px",
            top: b + "px"
        });
        this.rightButton.css({
            right: "0px",
            top: b + "px"
        })
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setPosition();
        this.setButtonPosition();
        for (var d = 0; d < this.imageItems.length; d++) this.imageItems[d].resize()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    preImage: function() {
        this.step = -1;
        this.startRotate()
    },
    nextImage: function() {
        this.step = 1;
        this.startRotate()
    },
    startRotate: function() {
        var b = this;
        this.doRotate();
        window.clearInterval(this.rotateTimer);
        this.rotateTimer = window.setInterval(function() {
            b.doRotate()
        },
        120)
    },
    doRotate: function() {
        var b = this.currentIndex;
        this.currentIndex += this.step;
        0 > this.currentIndex && (this.currentIndex += this.imageCount);
        this.currentIndex >= this.imageCount && (this.currentIndex %= this.imageCount);
        this.imageItems[b].hide();
        this.imageItems[this.currentIndex].show()
    },
    stopRotate: function() {
        window.clearInterval(this.rotateTimer);
        this.step = 0;
        this.rotateTimer = -1
    }
}).extend("Item");
var Rotate3DItem = Class({
    create: function(b, c) {
        var d = this;
        this.parent = b;
        this.zIndex = c;
        this.height = this.parent.height;
        this.width = this.parent.width;
        this.imageHeight = this.imageWidth = 0;
        this.instance = $("<img></img>");
        this.instance.css({
            position: "absolute",
            left: "0px",
            top: "0px",
            width: this.width + "px",
            height: this.height + "px",
            display: "none"
        });
        this.setZindex(c);
        this.initShadow();
        this.instance.load(function() {
            Rotate3DItem.prototype.onImageLoad.apply(d, arguments)
        });
        b.content.append(this.instance)
    },
    initShadow: function() {
        var b = this.parent.config;
        this.shadowColor = Color(b.sr).toString(); ! 0 == b.sh && this.instance.css({
            "box-shadow": b.sx + "px " + b.sy + "px " + b.se + "px " + this.shadowColor,
            "-moz-box-shadow": b.sx + "px " + b.sy + "px " + b.se + "px " + this.shadowColor,
            "-webkit-box-shadow": b.sx + "px " + b.sy + "px " + b.se + "px " + this.shadowColor,
            "-ms-box-shadow": b.sx + "px " + b.sy + "px " + b.se + "px " + this.shadowColor,
            "-o-box-shadow": b.sx + "px " + b.sy + "px " + b.se + "px " + this.shadowColor
        })
    },
    onImageLoad: function() {
        var b = this.instance[0];
        this.imageWidth = b.naturalWidth;
        this.imageHeight = b.naturalHeight;
        this.height = Math.floor(0.9 * this.parent.height);
        this.width = Math.ceil(this.height * this.imageWidth / this.imageHeight);
        this.left = Math.ceil((this.parent.width - this.width) / 2);
        this.top = Math.ceil((this.parent.height - this.height) / 2);
        this.instance.css({
            left: this.left + "px",
            top: this.top + "px",
            width: this.width + "px",
            height: this.height + "px",
            display: "block"
        })
    },
    setImage: function(b) {
        this.instance.attr("src", b)
    },
    setZindex: function(b) {
        this.instance.css({
            "z-index": b
        })
    },
    show: function() {
        this.setZindex(this.parent.topZindex)
    },
    hide: function() {
        this.setZindex(this.zIndex)
    },
    resize: function() {
        if (0 != this.imageWidth || 0 != this.imageHeight) this.height = Math.floor(0.9 * this.parent.height),
        this.width = Math.ceil(this.height * this.imageWidth / this.imageHeight),
        this.left = Math.ceil((this.parent.width - this.width) / 2),
        this.top = Math.ceil((this.parent.height - this.height) / 2),
        this.instance.animate({
            left: this.left,
            top: this.top,
            width: this.width,
            height: this.height
        },
        400)
    }
});
Class("EmbeddedSlideshow", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        c = Instance.copy(this.config.images);
        this.photoItem = [];
        if (c.Image) {
            if ("string" == typeof c.Image && this.photoItem.push(c.Image), c.Image instanceof Array) for (b = 0; b < c.Image.length; b++) this.photoItem.push(c.Image[b].Image)
        } else for (b = 0; b < c.length; b++) this.photoItem.push(c[b]);
        c = this.photoItem.length;
        for (b = 0; b < c; b++) ! 0 == bookConfig.isFlipPdf && (this.photoItem[b].startWith("./") ? this.photoItem[b] = "." + this.photoItem[b] : this.photoItem[b] = "../" + this.photoItem[b]);
        if (4 > c) for (b = c; 4 > b; b++) this.photoItem[b] = this.photoItem[0];
        this.imgIndex = -1;
        this.imgWidth = this.config.width * this.pageWidth;
        this.imgHeight = this.config.height * this.pageHeight;
        this.boxWidth = this.imgWidth - 8;
        this.boxHeight = this.imgHeight - 8;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.interval = 0;
        this.fadeTime = 400;
        this.alpha = 0;
        this.nextAlpha = 100;
        this.nextTop = this.nextLeft = this.top = this.left = 0;
        this.images = [];
        this.background = $("<div></div>");
        this.background.css({
            "z-index": "199",
            width: this.imgWidth,
            height: this.imgHeight
        });
        this.setRotation(this.background, this.config.rotation);
        this.image0Holder = $("<div class='type3'></div>");
        this.image1Holder = $("<div class='type3'></div>");
        this.image2Holder = $("<div class='type3'></div>");
        this.image3Holder = $("<div class='type3'></div>");
        this.img = $("<img style='position : absolute;' />");
        this.parent.append(this.background);
        this.background.append(this.image3Holder);
        this.background.append(this.image2Holder);
        this.background.append(this.image1Holder);
        this.background.append(this.image0Holder);
        this.background.css({
            left: this.x + "px",
            top: this.y + "px",
            position: "absolute",
            overflow: "hidden"
        });
        this.image0Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute",
            "z-index": 202
        });
        this.image1Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute",
            "z-index": 202
        });
        this.image2Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute",
            "z-index": 202
        });
        this.image3Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute",
            "z-index": 202
        });
        this.addItem();
        this.currentImageHolder = this.image0Holder;
        this.nextImageHolder = this.image1Holder;
        this.currentImage = 0;
        this.nextImage = 1;
        this.image0Holder.append(this.images[0]);
        this.image1Holder.append(this.images[(this.currentImage + 1) % this.images.length]);
        this.image2Holder.append(this.images[(this.currentImage + 2) % this.images.length]);
        this.image3Holder.append(this.images[(this.currentImage + 3) % this.images.length]);
        this.moveLeft = this.boxWidth / 5;
        this.moveTop = this.boxHeight / 5;
        this.tranLeft = this.moveLeft / 100;
        this.tranTop = this.moveTop / 100;
        $(this.image0Holder.children()).css({
            left: -this.moveLeft,
            top: -this.moveTop
        });
        $(this.image1Holder.children()).css({
            left: this.moveLeft,
            top: -this.moveTop
        });
        $(this.image2Holder.children()).css({
            left: this.moveLeft,
            top: this.moveTop
        });
        $(this.image3Holder.children()).css({
            left: -this.moveLeft,
            top: this.moveTop
        });
        this.image0Holder.css({
            opacity: "0"
        });
        this.image1Holder.css({
            opacity: "0"
        });
        this.image2Holder.css({
            opacity: "0"
        });
        this.image3Holder.css({
            opacity: "1"
        });
        this.timer1 = setTimeout(this.transition(), this.interval)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            images: b.Images
        }
    },
    transition: function() {
        function b() {
            0 < c.fadeTime && (c.fadeTime -= 1, 300 < c.fadeTime && 400 >= c.fadeTime && 0 < c.nextAlpha && 100 >= c.alpha && (c.alpha += 1, c.nextAlpha -= 1, $(c.image0Holder).css({
                opacity: c.alpha / 100
            }), $(c.image3Holder).css({
                opacity: c.nextAlpha / 100
            }), c.left = parseFloat($(c.image0Holder.children()).css("left").replace("px", "")) + c.tranLeft, c.top = parseFloat($(c.image0Holder.children()).css("top").replace("px", "")) + c.tranTop, c.nextLeft = parseFloat($(c.image3Holder.children()).css("left").replace("px", "")) + c.tranLeft, c.nextTop = parseFloat($(c.image3Holder.children()).css("top").replace("px", "")) - c.tranTop, $(c.image0Holder.children()).css({
                left: c.left,
                top: c.top
            }), $(c.image1Holder.children()).css({
                left: c.moveLeft,
                top: -c.moveTop
            }), $(c.image2Holder.children()).css({
                left: c.moveLeft,
                top: c.moveTop
            }), $(c.image3Holder.children()).css({
                left: c.nextLeft,
                top: c.nextTop
            }), 301 == c.fadeTime && (c.currentImage = (c.currentImage + 1) % c.images.length, c.nextImage = (c.nextImage + 1) % c.images.length, c.image1Holder.empty().append(c.images[c.currentImage]), c.image2Holder.empty().append(c.images[c.nextImage]), c.image1Holder.css({
                opacity: "0"
            }), c.image2Holder.css({
                opacity: "0"
            }), $(c.image1Holder.children()).css({
                left: c.moveLeft,
                top: -c.moveTop
            }), $(c.image2Holder.children()).css({
                left: c.moveLeft,
                top: c.moveTop
            }))), 200 < c.fadeTime && 300 >= c.fadeTime && 0 < c.alpha && 100 >= c.nextAlpha && (c.nextAlpha += 1, c.alpha -= 1, $(c.image0Holder).css({
                opacity: c.alpha / 100
            }), $(c.image1Holder).css({
                opacity: c.nextAlpha / 100
            }), c.left = parseFloat($(c.image0Holder.children()).css("left").replace("px", "")) + c.tranLeft, c.top = parseFloat($(c.image0Holder.children()).css("top").replace("px", "")) + c.tranTop, c.nextLeft = parseFloat($(c.image1Holder.children()).css("left").replace("px", "")) - c.tranLeft, c.nextTop = parseFloat($(c.image1Holder.children()).css("top").replace("px", "")) + c.tranTop, $(c.image0Holder.children()).css({
                left: c.left,
                top: c.top
            }), $(c.image1Holder.children()).css({
                left: c.nextLeft,
                top: c.nextTop
            }), $(c.image2Holder.children()).css({
                left: c.moveLeft,
                top: c.moveTop
            }), $(c.image3Holder.children()).css({
                left: -c.moveLeft,
                top: c.moveTop
            }), 202 == c.fadeTime && (c.currentImage = (c.currentImage + 1) % c.images.length, c.nextImage = (c.nextImage + 1) % c.images.length, c.image2Holder.empty().append(c.images[c.currentImage]), c.image3Holder.empty().append(c.images[c.nextImage]), c.image3Holder.css({
                opacity: "0"
            }), c.image2Holder.css({
                opacity: "0"
            }), $(c.image2Holder.children()).css({
                left: c.moveLeft,
                top: c.moveTop
            }), $(c.image3Holder.children()).css({
                left: -c.moveLeft,
                top: c.moveTop
            }))), 100 < c.fadeTime && 200 >= c.fadeTime && 0 < c.nextAlpha && 100 >= c.alpha && (c.alpha += 1, c.nextAlpha -= 1, $(c.image2Holder).css({
                opacity: c.alpha / 100
            }), $(c.image1Holder).css({
                opacity: c.nextAlpha / 100
            }), c.left = parseFloat($(c.image2Holder.children()).css("left").replace("px", "")) - c.tranLeft, c.top = parseFloat($(c.image2Holder.children()).css("top").replace("px", "")) - c.tranTop, c.nextLeft = parseFloat($(c.image1Holder.children()).css("left").replace("px", "")) - c.tranLeft, c.nextTop = parseFloat($(c.image1Holder.children()).css("top").replace("px", "")) + c.tranTop, $(c.image0Holder.children()).css({
                left: -c.moveLeft,
                top: -c.moveTop
            }), $(c.image1Holder.children()).css({
                left: c.nextLeft,
                top: c.nextTop
            }), $(c.image2Holder.children()).css({
                left: c.left,
                top: c.top
            }), $(c.image3Holder.children()).css({
                left: -c.moveLeft,
                top: c.moveTop
            }), 101 == c.fadeTime && (c.currentImage = (c.currentImage + 1) % c.images.length, c.nextImage = (c.nextImage + 1) % c.images.length, c.image3Holder.empty().append(c.images[c.currentImage]), c.image0Holder.empty().append(c.images[c.nextImage]), c.image3Holder.css({
                opacity: "0"
            }), c.image0Holder.css({
                opacity: "0"
            }), $(c.image0Holder.children()).css({
                left: -c.moveLeft,
                top: -c.moveTop
            }), $(c.image3Holder.children()).css({
                left: -c.moveLeft,
                top: c.moveTop
            }))), 0 < c.fadeTime && 100 >= c.fadeTime && 0 < c.alpha && 100 >= c.nextAlpha && (c.nextAlpha += 1, c.alpha -= 1, $(c.image2Holder).css({
                opacity: c.alpha / 100
            }), $(c.image3Holder).css({
                opacity: c.nextAlpha / 100
            }), c.left = parseFloat($(c.image2Holder.children()).css("left").replace("px", "")) - c.tranLeft, c.top = parseFloat($(c.image2Holder.children()).css("top").replace("px", "")) - c.tranTop, c.nextLeft = parseFloat($(c.image3Holder.children()).css("left").replace("px", "")) + c.tranLeft, c.nextTop = parseFloat($(c.image3Holder.children()).css("top").replace("px", "")) - c.tranTop, $(c.image0Holder.children()).css({
                left: -c.moveLeft,
                top: -c.moveTop
            }), $(c.image1Holder.children()).css({
                left: c.moveLeft,
                top: -c.moveTop
            }), $(c.image2Holder.children()).css({
                left: c.left,
                top: c.top
            }), $(c.image3Holder.children()).css({
                left: c.nextLeft,
                top: c.nextTop
            }), 1 == c.fadeTime && (c.currentImage = (c.currentImage + 1) % c.images.length, c.nextImage = (c.nextImage + 1) % c.images.length, c.image0Holder.empty().append(c.images[c.currentImage]), c.image1Holder.empty().append(c.images[c.nextImage]), c.image0Holder.css({
                opacity: "0"
            }), c.image1Holder.css({
                opacity: "0"
            }), $(c.image0Holder.children()).css({
                left: -c.moveLeft,
                top: -c.moveTop
            }), $(c.image1Holder.children()).css({
                left: c.moveLeft,
                top: -c.moveTop
            }))));
            0 >= c.fadeTime && (clearInterval(c.timer0), c.fadeTime = 400, c.timer1 = setTimeout(c.transition(), c.interval))
        }
        if (! (1 > this.photoItem.length)) {
            var c = this;
            c.timer0 = setInterval(b, 20)
        }
    },
    addItem: function() {
        for (var b = this,
        c = 0; c < b.photoItem.length; c++) {
            var d = $("<div></div>");
            d.css({
                width: b.boxWidth + "px",
                height: b.boxHeight + "px",
                position: "absolute"
            });
            var f = $('<img data-mask="' + uiBaseURL + 'centerblur.png"/>');
            f.css("position", "absolute");
            var g = b.photoItem[c];
            d.append(f);
            $(f).load(function() {
                var c = $(this)[0];
                $(this).css({
                    left: (b.boxWidth - c.naturalWidth) / 2 + "px",
                    top: (b.boxHeight - c.naturalHeight) / 2 + "px",
                    position: "absolute"
                })
            }).attr("src", g);
            b.images[c] = d
        }
    },
    resizeItem: function() {
        for (var b = 0; b < this.photoItem.length; b++) {
            var c = this.images[b],
            d = c.children(),
            f = d[0];
            void 0 != d && null != d && $(d).css({
                left: (this.boxWidth - f.naturalWidth) / 2 + "px",
                top: (this.boxHeight - f.naturalHeight) / 2 + "px",
                position: "absolute"
            });
            this.images[b] = c
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.imgWidth = this.config.width * this.pageWidth;
        this.imgHeight = this.config.height * this.pageWidth;
        this.boxWidth = this.imgWidth - 8;
        this.boxHeight = this.imgHeight - 8;
        this.moveLeft = this.boxWidth / 5;
        this.moveTop = this.boxHeight / 5;
        this.tranLeft = this.moveLeft / 100;
        this.tranTop = this.moveTop / 100;
        this.background.css({
            width: this.imgWidth,
            height: this.imgHeight
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.background.css({
            left: this.x + "px",
            top: this.y + "px"
        });
        this.image0Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute"
        });
        this.image1Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute"
        });
        this.image2Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute"
        });
        this.image3Holder.css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: (this.imgWidth - this.boxWidth) / 2 + "px",
            top: (this.imgHeight - this.boxHeight) / 2 + "px",
            "-webkit-mask-size": this.boxWidth + "px " + this.boxHeight + "px",
            position: "absolute"
        });
        $(this.image0Holder.children()).css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: -this.moveLeft,
            top: -this.moveTop
        });
        $(this.image1Holder.children()).css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: this.moveLeft,
            top: -this.moveTop
        });
        $(this.image2Holder.children()).css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: this.moveLeft,
            top: this.moveTop
        });
        $(this.image3Holder.children()).css({
            width: this.boxWidth + "px",
            height: this.boxHeight + "px",
            left: -this.moveLeft,
            top: this.moveTop
        });
        this.resizeItem()
    }
}).extend("Item");
Class("FlashSwf", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.config = this.parseConfig(c);
        this.parent = b;
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.left = this.pageWidth * this.config.x;
        this.top = this.pageHeight * this.config.y;
        this.config.src = this.config.src;
        this.config.hint && (this.config.hint.hintShapeColor = Color(this.config.hint.hintShapeColor).toString(), this.config.hint.hintShapeColor2 = Color(this.config.hint.hintShapeColor2).toString());
        this.content = $("<div></div>");
        this.content.css({
            position: "absolute",
            left: this.left,
            top: this.top,
            width: this.width,
            height: this.height
        });
        this.setRotation(this.content, this.config.rotation);
        this.parent.append(this.content);
        isTouchDevice() || (!0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src), this.initLinkHint(this.content), this.content.flash({
            swf: this.config.src,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        }), parseBool(this.config.reflection) && this.imageReflection(this.content))
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            src: b.swfURL,
            hint: b.hint,
            shadow: b.shadow
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.content.flash().remove();
        this.content.flash({
            swf: this.config.src,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        });
        this.setPosition(this.config.x * this.pageWidth, this.config.y * this.pageHeight)
    },
    setPosition: function(b, c) {
        this.content.css({
            left: b + "px",
            top: c + "px"
        })
    },
    hide: function() {
        this.content.html("")
    },
    show: function() {
        this.content.flash({
            swf: this.config.src,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        })
    }
}).extend(PageItem.Item); (function(b) {
    var c = 0,
    d = {
        mode: "iframe",
        standard: "html5",
        popHt: 500,
        popWd: 400,
        popX: 200,
        popY: 200,
        popTitle: "",
        popClose: !1,
        extraCss: "",
        extraHead: "",
        retainAttr: ["id", "class", "style"]
    },
    f = {};
    b.fn.printArea = function(h) {
        b.extend(f, d, h);
        c++;
        b("[id^=printArea_]").remove();
        f.id = "printArea_" + c;
        h = b(this);
        var k = g.getPrintWindow();
        g.write(k.doc, h);
        setTimeout(function() {
            g.print(k)
        },
        1E3)
    };
    var g = {
        print: function(c) {
            var d = c.win;
            b(c.doc).ready(function() {
                d.focus();
                d.print();
                "popup" == f.mode && f.popClose && setTimeout(function() {
                    d.close()
                },
                2E3)
            })
        },
        write: function(b, c) {
            b.open();
            b.write(g.docType() + "<html>" + g.getHead() + g.getBody(c) + "</html>");
            b.close()
        },
        docType: function() {
            return "iframe" == f.mode ? "": "html5" == f.standard ? "<!DOCTYPE html>": '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01' + ("loose" == f.standard ? " Transitional": "") + '//EN" "http://www.w3.org/TR/html4/' + ("loose" == f.standard ? "loose": "strict") + '.dtd">'
        },
        getHead: function() {
            var b = "";
            f.extraHead && f.extraHead.replace(/([^,]+)/g,
            function(c) {
                b += c
            });
            return "<head><title>" + f.popTitle + "</title>" + b + "</head>"
        },
        getBody: function(c) {
            var d = "",
            l = f.retainAttr;
            c.each(function() {
                for (var c = g.getFormData(b(this)), f = "", h = 0; h < l.length; h++) {
                    var q = b(c).attr(l[h]);
                    q && (f += (0 < f.length ? " ": "") + l[h] + "='" + q + "'")
                }
                d += "<div " + f + ">" + b(c).html() + "</div>"
            });
            return "<body>" + d + "</body>"
        },
        getFormData: function(c) {
            var d = c.clone(),
            f = b("input,select,textarea", d);
            b("input,select,textarea", c).each(function(c) {
                var d = b(this).attr("type");
                "undefined" === b.type(d) && (d = b(this).is("select") ? "select": b(this).is("textarea") ? "textarea": "");
                var g = f.eq(c);
                "radio" == d || "checkbox" == d ? g.attr("checked", b(this).is(":checked")) : "text" == d ? g.attr("value", b(this).val()) : "select" == d ? b(this).find("option").each(function(c) {
                    b(this).is(":selected") && b("option", g).eq(c).attr("selected", !0)
                }) : "textarea" == d && g.text(b(this).val())
            });
            return d
        },
        getPrintWindow: function() {
            switch (f.mode) {
            case "iframe":
                var b = new g.Iframe;
                return {
                    win: b.contentWindow || b,
                    doc: b.doc
                };
            case "popup":
                return b = new g.Popup,
                {
                    win: b,
                    doc: b.doc
                }
            }
        },
        Iframe: function() {
            var c = f.id,
            d;
            try {
                d = document.createElement("iframe"),
                document.body.appendChild(d),
                b(d).attr({
                    style: "border:0;position:absolute;width:0px;height:0px;right:0px;top:0px;",
                    id: c,
                    src: "#" + (new Date).getTime()
                }),
                d.doc = null,
                d.doc = d.contentDocument ? d.contentDocument: d.contentWindow ? d.contentWindow.document: d.document
            } catch(g) {
                throw g + ". iframes may not be supported in this browser.";
            }
            if (null == d.doc) throw "Cannot find document.";
            return d
        },
        Popup: function() {
            var b;
            b = "location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no" + (",width=" + f.popWd + ",height=" + f.popHt);
            b += ",resizable=yes,screenX=" + f.popX + ",screenY=" + f.popY + ",personalbar=no,scrollbars=yes";
            b = window.open("", "_blank", b);
            b.doc = b.document;
            return b
        }
    }
})(jQuery);
var QAF_UNKNOWN = -1,
QAF_RIGHT = 0,
QAF_MISTAKE = 1;
Class("QuizPanelPC", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = c;
        this.parent = b;
        this.quiz = this.config.action.quiz;
        this.quiz[0] || (this.quiz = [this.quiz.topic]);
        this.background = $("<div></div>");
        this.container = $("<div></div>");
        this.closeButton = $("<div></div>");
        this.content = $("<div></div>");
        this.title = $("<div class='titleDiv'></div>");
        this.button = $("<div></div>");
        this.rightSmile = $("<div style='background:url(" + uiBaseURL + "quiz.png) no-repeat -5px -14px;position:absolute;left:25px;top:85px;width:38px;height:50px'></div>");
        this.mistakeSmile = $("<div style='background:url(" + uiBaseURL + "quiz.png) no-repeat -5px -74px;position:absolute;right:25px;top:85px;width:38px;height:50px'></div>");
        this.rightNumber = $("<div style='position:absolute;left:37px;top:145px;color:#03B503;font-size:25px;font-weight:bold'>0</div>");
        this.mistakeNumber = $("<div style='position:absolute;right:37px;top:145px;color:red;font-size:25px;font-weight:bold'>0</div>");
        this.nextPage = $("<div/></div>");
        this.prePage = $("<div><div>");
        this.advanceImg = $("<div></div>");
        this.parent.append(this.background);
        this.progressBar = new TopicProgressBar(this.quiz.length);
        this.parent.append(this.container);
        this.container.append(this.content);
        this.container.append(this.closeButton);
        this.initQuiz();
        this.content.append(this.title).append(this.changBox).append(this.rightSmile).append(this.mistakeSmile).append(this.rightNumber).append(this.mistakeNumber).append(this.nextPage).append(this.prePage).append(this.progressBar.progressContainer);
        this.title.html(this.config.action.guizTxt);
        "" == this.config.action.guizURL ? this.setQuestionURL(this.topicItem[0].QuizTopicPanel.content) : (this.advance = new SetAdvance(this.config.action, this), this.content.append(this.advance.QuizTopicPanel.content), this.hideButton(), this.progressBar.progressContainer.hide(), this.advance.start.on("click",
        function() {
            this.setQuestionURL(this.topicItem[0].QuizTopicPanel.content);
            this.showButton();
            this.topicItem[this.currentIndex].QuizTopicPanel.Animate();
            this.prePage.hide();
            this.progressBar.progressContainer.show();
            this.advance.QuizTopicPanel.content.remove()
        }.bind(this)));
        this.setCss();
        this.initEvent();
        this.prePage.hide()
    },
    setQuestionURL: function(b) {
        this.content.append(b)
    },
    initEvent: function() {
        this.currentIndex = 0;
        var b = this.topicItem.length;
        this.OnNextPageClick = function() {
            if (! (this.currentIndex > b)) if (this.currentIndex += 1, this.progressBar.setProgress(this.currentIndex + 1), this.currentIndex < b) this.setQuestionURL(this.topicItem[this.currentIndex].QuizTopicPanel.content),
            this.topicItem[this.currentIndex].QuizTopicPanel.Animate(),
            this.prePage.show();
            else {
                var c = new Onclusion(this, this.config.action, this.rightNumber[0].innerText, this.mistakeNumber[0].innerText);
                this.setQuestionURL(c.QuizTopicPanel.content);
                this.nextPage.hide()
            }
        }.bind(this);
        this.nextPage.on("click", this.OnNextPageClick);
        this.prePage.on("click",
        function() {
            0 != this.currentIndex && (0 == this.currentIndex && (this.currentIndex += b), this.currentIndex = (this.currentIndex - 1) % b, this.setQuestionURL(this.topicItem[this.currentIndex].QuizTopicPanel.content), this.topicItem[this.currentIndex].QuizTopicPanel.Animate(), this.progressBar.setProgress(this.currentIndex + 1), this.nextPage.show(), 0 == this.currentIndex && this.prePage.hide())
        }.bind(this));
        this.background.bind(_event._down,
        function(b) {
            this.hideBackground();
            b.stopPropagation()
        }.bind(this));
        this.closeButton.bind("click",
        function(b) {
            this.hideBackground();
            b.stopPropagation()
        }.bind(this));
        this.nextPage.on("mouseover",
        function() {
            this.nextPage.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -257px -61px",
                cursor: "pointer"
            })
        }.bind(this));
        this.nextPage.on("mouseout",
        function() {
            this.nextPage.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -257px -16px")
        }.bind(this));
        this.prePage.on("mouseover",
        function() {
            this.prePage.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -310px -62px",
                cursor: "pointer"
            })
        }.bind(this));
        this.prePage.on("mouseout",
        function() {
            this.prePage.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -310px -17px")
        }.bind(this))
    },
    initQuiz: function() {
        this.topicItem = [];
        this.topicAnswer = [];
        for (var b = 0; b < this.quiz.length; b++) this.topic = new SetQuestionPanel(this, this.quiz[b], b),
        this.topicItem.push(this.topic),
        this.topicAnswer[b] = null
    },
    getAnswerFlags: function() {
        for (var b = [], c = 0; c < this.quiz.length; c++) null === this.topicAnswer[c] ? b[c] = QAF_UNKNOWN: this.topicAnswer[c] == this.topicItem[c].getRightAnswer() ? b[c] = QAF_RIGHT: b[c] = QAF_MISTAKE;
        return b
    },
    statistics: function() {
        for (var b = this.getAnswerFlags(), c = 0, d = 0, f = 0; f < b.length; f++) b[f] == QAF_RIGHT && c++,
        b[f] == QAF_MISTAKE && d++;
        this.rightNumber[0].innerText = Number(c).toString();
        this.mistakeNumber[0].innerText = Number(d).toString()
    },
    showButton: function() {
        this.rightSmile.show();
        this.mistakeSmile.show();
        this.rightNumber.show();
        this.mistakeNumber.show();
        this.nextPage.show();
        this.prePage.show()
    },
    hideButton: function() {
        this.rightSmile.hide();
        this.mistakeSmile.hide();
        this.rightNumber.hide();
        this.mistakeNumber.hide();
        this.nextPage.hide();
        this.prePage.hide()
    },
    setCss: function() {
        this.title.css({
            position: "relative",
            margin: "auto",
            width: "570px",
            height: "25px",
            "margin-top": "20px",
            "text-align": "center",
            "font-size": "20px",
            "font-family": "-webkit-pictograph"
        });
        this.closeButton.css({
            "background-image": "url(" + uiBaseURL + "close_down.png)",
            width: "27px",
            height: "27px",
            "z-index": "500",
            cursor: "pointer",
            "margin-left": "730px"
        });
        this.container.css({
            position: "absolute",
            width: "760px",
            height: "550px",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            right: "0",
            bottom: "0",
            "z-index": "500"
        });
        this.nextPage.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -257px -16px",
            position: "absolute",
            margin: "auto",
            right: "22px",
            top: "210px",
            width: "36px",
            height: "36px"
        });
        this.prePage.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -310px -17px",
            position: "absolute",
            margin: "auto",
            left: "27px",
            top: "210px",
            width: "36px",
            height: "36px"
        });
        this.content.css({
            position: "absolute",
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -6px -148px",
            "max-width": "722px",
            "max-height": "502px",
            width: "100%",
            height: "100%",
            margin: "auto",
            left: "0",
            top: "0",
            right: "0",
            bottom: "0"
        });
        this.background.css({
            position: "absolute",
            opacity: "0.5",
            "background-color": "black",
            width: "100%",
            height: "100%",
            "z-index": "100"
        })
    },
    onResize: function() {},
    show: function() {
        this.background.css("display", "block")
    },
    hideBackground: function() {
        this.background.css("display", "none");
        this.container.css({
            transform: "scale(0)",
            "-webkit-transform": "scale(0)",
            "-moz-transform": "scale(0)",
            "-ms-transform": "scale(0)",
            "-o-transform": "scale(0)"
        });
        animateOnce(this.container, {},
        0.6,
        function() {},
        "", "ease")
    }
}).extend(PageItem.Item);
Class("QuizTopicPanel", {
    create: function(b) {
        this.config = b;
        this.content = $("<div></div>");
        this.deg = 10;
        this.setCss();
        this.Animate()
    },
    getQuizTopicPanel: function() {
        return this.content
    },
    setCss: function() {
        this.content.css({
            transform: "rotateZ(10deg) rotateX(10deg)",
            "-weblkit-transform": "rotateZ(10deg) rotateX(10deg)",
            "-moz-transform": "rotateZ(10deg) rotateX(10deg)",
            "-ms-transform": "rotateZ(10deg) rotateX(10deg)",
            "-o-transform": "rotateZ(10deg) rotateX(10deg)",
            "transform-origin": "50% 80%",
            "-webkit-transform-origin": "50% 80%",
            "-ms-transform-origin": "50% 80%",
            "-moz-transform-origin": "50% 80%",
            "-o-transform-origin": "50% 80%",
            position: "absolute",
            background: "white",
            margin: "auto",
            "margin-top": "40px",
            left: 0,
            right: 0,
            width: "560px",
            height: "360px",
            border: "3px solid #b8d0da",
            "border-radius": "14px"
        })
    },
    Animate: function() {
        this.show.runInAnimate(this, 300)
    },
    show: function(b, c) {
        var d = $.easing.easeOutCubic(null, b, 10, -10, c),
        f = $.easing.easeOutCubic(null, b, 45, -45, c);
        this.content.css("transform", "rotateX(" + f + "deg) rotateY(" + f + "deg) rotateZ(" + d + "deg) ")
    }
});
Class("SetQuestionPanel", {
    create: function(b, c, d) {
        this.config = c;
        this.index = d;
        this.quizPanel = b;
        this.questionPanel = $("<div></div>");
        this.question = $("<span style='color:rgb(0,153,255);font-size:30px;font-weight:bold;font-family:Verdana;position:absolute;top:15px;left:15px'>Q:</span>");
        this.initAnswer();
        this.questionTitle = $("<span style='color:rgb(0,153,255);font-size:20px;position:absolute;top:25px;left:70px'>" + this.config.title + "</span>");
        this.mediaImg = $("<img src='" + this.config.media + "' style='max-width:280px;max-height:220px;position:absolute;bottom: 0px;top:0px;margin:auto;left:50px;'/>");
        this.noImgAnswerPanel = $("<div></div>");
        this.imgAnswerPanel = $("<div></div>");
        this.QuizTopicPanel = new QuizTopicPanel;
        this.QuizTopicPanel.getQuizTopicPanel().append(this.questionPanel.append(this.question).append(this.questionTitle).append(this.mediaImg));
        "" == this.config.media ? (this.mediaImg.remove(), this.questionPanel.append(this.noImgAnswerPanel)) : this.questionPanel.append(this.imgAnswerPanel);
        this.setCss();
        this.getRightAnswer();
        this.addTopicAnswer()
    },
    initAnswer: function() {
        this.Items = [];
        for (var b in this.config) b.startWith("answer") && this.Items.push(this.config[b])
    },
    getRightAnswer: function() {
        for (var b = 0; b < this.Items.length; b++)"true" == this.Items[b].dataRight && (this.dataRight = this.Items[b].value);
        return this.dataRight
    },
    addTopicAnswer: function() {
        for (var b = 0; b < this.Items.length; b++) {
            var c = new TopicAnswer(this.quizPanel, this.Items[b], this.config, this.dataRight, this.index);
            "" == this.config.media ? (0 == (b + 1) % 2 && c.answerPanel.css("margin-left", "20px"), this.noImgAnswerPanel.append(c.answerPanel)) : this.imgAnswerPanel.append(c.answerPanel)
        }
    },
    setCss: function() {
        this.imgAnswerPanel.css({
            width: "210PX",
            position: "absolute",
            right: "0px",
            top: "80px",
            "overflow-x": "hidden",
            height: "250px"
        });
        this.noImgAnswerPanel.css({
            top: "125px",
            position: "absolute",
            width: "455px",
            left: "95px",
            "overflow-x": "hidden",
            height: "230px"
        });
        this.questionPanel.css({
            position: "absolute",
            width: "560px",
            height: "350px",
            margin: "auto",
            right: 0,
            left: 0,
            top: 0,
            bottom: 0
        })
    }
});
Class("TopicAnswer", {
    create: function(b, c, d, f, g) {
        this.index = g;
        this.quizPanel = b;
        this.config = d;
        this.answer = c;
        this.dataRight = f;
        this.answerPanel = $("<div></div>");
        this.checkBox = $("<div class='check-box'><div>");
        this.answerValue = $("<div>" + this.answer.value + "</div>");
        this.answerPanel.append(this.checkBox);
        this.answerPanel.append(this.answerValue);
        this.initEvent();
        this.setCss()
    },
    initEvent: function() {
        this.checkBox.on("click",
        function() {
            this.quizPanel.topicAnswer[this.index] = this.answer.value;
            this.quizPanel.statistics();
            this.answerResult = new TopicAnswerResult(this.quizPanel, this.config, this.answer, this.dataRight);
            this.quizPanel.content.append(this.answerResult.content)
        }.bind(this));
        this.checkBox.on("mouseover",
        function() {
            this.checkBox.css({
                width: "26px",
                height: "26px",
                cursor: "pointer",
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -630px -63px"
            })
        }.bind(this));
        this.checkBox.on("mouseleave",
        function() {
            this.checkBox.css({
                width: "20px",
                height: "20px",
                cursor: "pointer",
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -465px -67px"
            })
        }.bind(this))
    },
    setCss: function() {
        this.answerValue.css({
            color: "#0f5177",
            position: "relative",
            "margin-left": "30px",
            "font-size": "15px",
            color: "#0f5177",
            width: "165px",
            "font-family": "Verdana"
        });
        this.answerPanel.css({
            width: "200px",
            "margin-top": "20px",
            position: "relative",
            display: "inline-block"
        });
        this.checkBox.css({
            position: "absolute",
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -465px -67px",
            width: "20px",
            height: "20px"
        })
    }
});
Class("SetAdvance", {
    create: function(b) {
        this.config = b;
        this.advanceImg = $("<img src='" + this.config.guizURL + "'/>");
        this.start = $("<div></div");
        this.QuizTopicPanel = new QuizTopicPanel;
        this.QuizTopicPanel.getQuizTopicPanel().append(this.advanceImg).append(this.start);
        this.QuizTopicPanel.Animate();
        this.start.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -366px -20px",
            position: "absolute",
            width: "81px",
            height: "30px",
            right: 0,
            left: 0,
            bottom: "35px",
            margin: "auto"
        });
        this.advanceImg.css({
            "max-width": "360px",
            "max-height": "250px",
            position: "absolute",
            top: "20px",
            right: 0,
            left: 0,
            margin: "auto"
        });
        this.start.on("mouseover",
        function() {
            this.start.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -366px -59px",
                cursor: "pointer"
            })
        }.bind(this));
        this.start.on("mouseout",
        function() {
            this.start.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -366px -20px")
        }.bind(this))
    }
});
Class("TopicProgressBar", {
    create: function(b) {
        this.quizLength = b;
        this.progressContainer = $("<div></div>");
        this.progressBar = $("<div></div>");
        this.progressContainer.append(this.progressBar);
        this.setCss();
        this.setProgress(1)
    },
    setCss: function() {
        this.progressContainer.css({
            position: "absolute",
            margin: "auto",
            right: "0",
            left: "0",
            bottom: "10px",
            width: "550px",
            border: "3px solid white",
            height: "18px",
            "background-color": "rgb(229,233,236)",
            "border-radius": "10px"
        });
        this.progressBar.css({
            background: "rgba(107,216,254,90)",
            "float": "left",
            height: "18px",
            "text-align": "center",
            "line-height": "2",
            "border-radius": "10px"
        })
    },
    setProgress: function(b) {
        this.progressBar.css("width", 100 / (this.quizLength + 1) * b + "%");
        this.progressBar.css("width").replace("px", "")
    }
});
Class("TopicAnswerResult", {
    create: function(b, c, d, f) {
        this.quizPanel = b;
        this.dataRight = f;
        this.config = c;
        this.answer = d;
        this.content = $("<div></div>");
        this.nextQuestion = $("<div></div>");
        this.nextPage = $("<div></div>");
        this.nextText = $("<div>NEXT QUESTION</div>");
        this.answerOption = $("<span style='color:rgb(0,153,255);font-size:30px;font-weight:bold;font-family:Verdana;position:absolute;top:25px;left:35px'>A:</span>");
        this.answerResult = $("<span style='color:rgb(0,153,255);font-size:20px;position:absolute;top:35px;left:82px'></span>");
        this.JudgeResult = $("<span></span>");
        this.content.append(this.nextQuestion.append(this.nextPage).append(this.nextText)).append(this.answerOption).append(this.answerResult).append(this.JudgeResult);
        this.setCss();
        this.initEvent();
        this.answerResult.text(this.dataRight);
        "true" == this.answer.dataRight ? this.JudgeResult.text(this.config.rightTxt) : this.JudgeResult.text(this.config.wrongTxt)
    },
    initEvent: function() {
        this.nextPage.on("click", this.quizPanel.OnNextPageClick);
        this.nextText.on("click", this.quizPanel.OnNextPageClick);
        this.nextText.on("mouseover",
        function() {
            this.nextText.css({
                cursor: "pointer"
            })
        }.bind(this));
        this.nextPage.on("mouseover",
        function() {
            this.nextPage.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -257px -61px",
                cursor: "pointer"
            })
        }.bind(this));
        this.nextPage.on("mouseout",
        function() {
            this.nextPage.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -257px -16px")
        }.bind(this))
    },
    setCss: function() {
        this.content.css({
            position: "absolute",
            margin: "auto",
            "margin-top": "43px",
            left: 0,
            right: 0,
            width: "460px",
            height: "280px",
            border: "3px solid rgb(184, 208, 218)",
            bottom: "50px",
            background: "white",
            "border-radius": "14px"
        });
        this.nextText.css({
            color: "rgb(0,153,255)",
            "font-size": "14px",
            "font-weight": "bold",
            width: "50px",
            position: "absolute",
            right: "110px",
            bottom: "30px",
            "font-family": "Verdana"
        });
        this.nextPage.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -257px -16px",
            position: "absolute",
            bottom: "30px",
            right: "30px",
            width: "36px",
            height: "36px"
        });
        this.JudgeResult.css({
            position: "absolute",
            width: "460px",
            "text-align": "center",
            bottom: "140px",
            color: "black",
            "font-family": "Verdana",
            "font-size": "18px"
        })
    }
});
Class("Onclusion", {
    create: function(b, c, d, f) {
        this.quizPanel = b;
        this.mistakeNumber = f;
        this.config = c;
        this.rightNumber = d;
        this.percentageNumber = Math.floor(this.rightNumber / this.quizPanel.quiz.length * 100);
        this.onclusionPanel = $("<div></div>");
        this.hint = $("<div>You haven't selected an answer,please select one</div>");
        this.clusion = $("<div>" + this.config.guizEndTxt + "</div>");
        this.Percentage = $("<div>Your ration is " + this.percentageNumber + "%</div>");
        this.scorePanel = $("<div></div>");
        this.score = $("<div style='color: rgb(0, 152, 255);width: 315px;height: 45px;overflow-x: hidden'></div>");
        this.isAgain = $("<span>Do you wanna play it again?</span>");
        this.button = $("<div></div>");
        this.yesButton = $("<div></div>");
        this.noButton = $("<div></div>");
        this.rightSmile = $("<div style='background:url(" + uiBaseURL + "quiz.png) no-repeat -5px -14px;position:absolute;width:38px;height:50px'></div>");
        this.mistakeSmile = $("<div style='background:url(" + uiBaseURL + "quiz.png) no-repeat -5px -74px;position:absolute;width:38px;height:50px'></div>");
        this.byeBye = $("<div style='background:url(" + uiBaseURL + "quiz.png) no-repeat -506px -66px;position:absolute;width:105px;height:20px;left:300px;top:230px'></div>");
        this.QuizTopicPanel = new QuizTopicPanel;
        this.QuizTopicPanel.content.append(this.onclusionPanel);
        0 == this.mistakeNumber && 0 == this.rightNumber ? this.onclusionPanel.append(this.hint) : this.onclusionPanel.append(this.clusion);
        this.onclusionPanel.append(this.Percentage).append(this.isAgain).append(this.scorePanel.append(this.score)).append(this.button.append(this.yesButton).append(this.noButton));
        this.setCss();
        this.initEvent();
        0 <= this.percentageNumber && 25 >= this.percentageNumber && this.score.text(this.config.score[3]);
        25 < this.percentageNumber && 50 >= this.percentageNumber && this.score.text(this.config.score[2]);
        50 < this.percentageNumber && 75 >= this.percentageNumber && this.score.text(this.config.score[1]);
        75 < this.percentageNumber && 100 >= this.percentageNumber && (this.score.text(this.config.score[0]), 100 == this.percentageNumber && this.score.css("color", "#0098ff"))
    },
    initEvent: function() {
        this.yesButton.on("click",
        function() {
            this.quizPanel.currentIndex = 0;
            this.quizPanel.progressBar.setProgress(1);
            this.clearAllCount();
            this.quizPanel.statistics();
            this.quizPanel.setQuestionURL(this.quizPanel.topicItem[0].QuizTopicPanel.content);
            this.quizPanel.prePage.hide();
            this.quizPanel.nextPage.show()
        }.bind(this));
        this.noButton.on("click",
        function() {
            this.removeAllChild(this.quizPanel.content[0]);
            this.quizPanel.content.append(this.QuizTopicPanel.content);
            var b = {
                transform: "scale(0.75)",
                "-webkit-transform": "scale(0.7)",
                "-moz-transform": "scale(0.7)",
                "-ms-transform": "scale(0.7)",
                "-o-transform": "scale(0.7)"
            },
            c = {
                transform: "scale(0)",
                "-webkit-transform": "scale(0)",
                "-moz-transform": "scale(0)",
                "-ms-transform": "scale(0)",
                "-o-transform": "scale(0)"
            };
            this.removeAllChild(this.QuizTopicPanel.content[0]);
            this.quizPanel.content.append(this.rightSmile).append(this.mistakeSmile).append(this.byeBye);
            this.byeBye.animate("easeInElastic");
            this.rightSmile.animate({
                left: "210px"
            },
            400, "easeOutElastic");
            this.mistakeSmile.animate({
                right: "220px"
            },
            400, "easeOutElastic"); (function() {
                animateOnce(this.QuizTopicPanel.content, b, 0.3, null, "", "ease");
                animateOnce(this.quizPanel.container, c, 1,
                function() {
                    this.quizPanel.background.css("display", "none")
                }.bind(this), "", "ease")
            }).delay(this, 400)
        }.bind(this));
        this.yesButton.on("mouseover",
        function() {
            this.yesButton.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -71px -59px",
                cursor: "pointer"
            })
        }.bind(this));
        this.yesButton.on("mouseout",
        function() {
            this.yesButton.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -71px -20px")
        }.bind(this));
        this.noButton.on("mouseover",
        function() {
            this.noButton.css({
                background: "url(" + uiBaseURL + "quiz.png) no-repeat -161px -59px",
                cursor: "pointer"
            })
        }.bind(this));
        this.noButton.on("mouseout",
        function() {
            this.noButton.css("background", "url(" + uiBaseURL + "quiz.png) no-repeat -161px -20px")
        }.bind(this))
    },
    clearAllCount: function() {
        for (var b = this.quizPanel.quiz.length,
        c = 0; c < b; c++) this.quizPanel.topicAnswer[c] = null
    },
    removeAllChild: function(b) {
        for (; b.hasChildNodes();) b.removeChild(b.firstChild)
    },
    setCss: function() {
        this.rightSmile.css({
            margin: "auto",
            bottom: "0px",
            top: "0px",
            left: "45px",
            transform: "scale(3.5)",
            "-webkit-transform": "scale(3.5)",
            "-moz-transform": "scale(3.5)",
            "-ms-transform": "scale(3.5)",
            "-o-transform": "scale(3.5)"
        });
        this.mistakeSmile.css({
            margin: "auto",
            bottom: "0px",
            top: "0px",
            right: "50px",
            transform: "scale(3.5)",
            "-webkit-transform": "scale(3.5)",
            "-moz-transform": "scale(3.5)",
            "-ms-transform": "scale(3.5)",
            "-o-transform": "scale(3.5)"
        });
        this.scorePanel.css({
            position: "absolute",
            margin: "auto",
            right: "0px",
            left: "0px",
            top: "160px",
            color: "gray",
            width: "300px",
            "text-align": "center",
            height: "45px",
            overflow: "hidden",
            "font-size": "20px"
        });
        this.Percentage.css({
            "font-weight": "bold",
            "font-size": "20px",
            position: "absolute",
            margin: "auto",
            top: "120px",
            left: "0px",
            right: "0px",
            width: "200px",
            height: "20px"
        });
        this.clusion.css({
            width: "560px",
            "font-size": "24px",
            color: "#045DD0",
            "text-align": "center",
            "margin-top": "40px"
        });
        this.isAgain.css({
            color: "#00a5ff",
            "font-size": "20px",
            "font-weight": "bold",
            width: "250px",
            position: "absolute",
            "text-align": "center",
            bottom: "90px",
            right: "0px",
            left: "0px",
            margin: "auto"
        });
        this.hint.css({
            width: "385px",
            "font-size": "20px",
            "font-weight": "bold",
            color: "#045DD0",
            "text-align": "center",
            "margin-left": "75px",
            "margin-top": "35px"
        });
        this.onclusionPanel.css({
            position: "absolute",
            "border-radius": "10px",
            background: $.browser.prefix + "linear-gradient(90deg,#f4f4f5,#FFFFFF)",
            margin: "auto",
            bottom: "0px",
            right: "0px",
            left: "0px",
            top: "0px"
        });
        this.yesButton.css({
            width: "81px",
            height: "30px",
            position: "absolute",
            background: "url(" + uiBaseURL + "/quiz.png) no-repeat -71px -20px"
        });
        this.noButton.css({
            width: "81px",
            height: "30px",
            right: "0px",
            position: "absolute",
            background: "url(" + uiBaseURL + "/quiz.png) no-repeat -161px -20px"
        });
        this.button.css({
            margin: "auto",
            bottom: "25px",
            right: "0px",
            left: "0px",
            width: "204px",
            height: "30px",
            position: "absolute"
        })
    }
});
Class("QuizPanelMobile", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = c;
        this.quiz = this.config.action.quiz;
        this.quiz[0] || (this.quiz = [this.quiz.topic]);
        this.container = $("<div></div>");
        this.content = $("<div class='container-box'></div>");
        this.contentMiddle = $("<div></div>");
        this.contentBottom = $("<div></div>");
        this.closeButton = $("<div></div>");
        this.title = $("<div>" + this.config.action.guizTxt + "</div>");
        this.rightNumber = $("<div>0</div>");
        this.mistakeNumber = $("<div>0</div>");
        this.questionContent = $("<div></div>");
        this.initQuiz();
        this.setCss();
        this.initEvent();
        this.setSwipe();
        this.progressBar = new TopicProgressBarMobile(this.quiz.length, this.currentIndex);
        b.append(this.container.append(this.contentMiddle).append(this.contentBottom).append(this.closeButton).append(this.content.append(this.title).append(this.questionContent)).append(this.progressBar.progressContainer));
        "" == this.config.action.guizURL ? this.setQuestionURL(this.topicItem[0].questionPanel) : (this.advance = new SetAdvanceMobile(this.config.action, this), this.content.append(this.advance.advanceImg).append(this.advance.start), this.progressBar.progressContainer.hide(), this.advance.start.on("click",
        function() {
            this.setQuestionURL(this.topicItem[0].questionPanel);
            this.progressBar.progressContainer.show();
            this.advance.advanceImg.remove();
            this.advance.start.remove()
        }.bind(this)))
    },
    initEvent: function() {
        this.currentIndex = 0;
        var b = this.topicItem.length;
        this.OnNextPageClick = function() {
            if (! (this.currentIndex > b)) if (this.currentIndex += 1, this.progressBar.setProgress(this.currentIndex + 1, b + 1), this.currentIndex < b) this.setQuestionURL(this.topicItem[this.currentIndex].questionPanel);
            else {
                var c = new OnclusionMobile(this, this.config.action, this.rightNumber[0].innerText, this.mistakeNumber[0].innerText);
                this.setQuestionURL(c.onclusionPanel)
            }
        }.bind(this);
        this.closeButton.on("click",
        function() {
            this.hide()
        }.bind(this))
    },
    setQuestionURL: function(b) {
        this.questionContent.append(b)
    },
    initQuiz: function() {
        this.topicItem = [];
        this.topicAnswer = [];
        for (var b = 0; b < this.quiz.length; b++) this.topic = new QuestionPanelMobile(this, this.quiz[b], b),
        this.topicItem.push(this.topic),
        this.topicAnswer[b] = null
    },
    getAnswerFlag: function() {
        for (var b = [], c = 0; c < this.quiz.length; c++) null === this.topicAnswer ? b[c] = QAF_UNKNOWN: this.topicAnswer[c] == this.topicItem[c].getRightAnswer() ? b[c] = QAF_RIGHT: b[c] = QAF_MISTAKE;
        return b
    },
    flushCount: function() {
        for (var b = this.getAnswerFlag(), c = 0, d = 0, f = 0; f < b.length; f++) b[f] == QAF_RIGHT && c++,
        b[f] == QAF_MISTAKE && d++;
        this.rightNumber[0].innerText = Number(c);
        this.mistakeNumber[0].innerText = Number(d)
    },
    setSwipe: function() {
        this.currentIndex = 0;
        var b = function(b, d) {
            var f;
            f = 30 * windowWidth / 1600;
            if (! (Math.abs(b) <= f)) {
                var g = this.topicItem.length;
                if (b < -f) {
                    if (this.currentIndex > g) return;
                    this.progressBar.setProgress(this.currentIndex + 1, g + 1);
                    this.currentIndex += 1;
                    this.progressBar.setProgress(this.currentIndex + 1, g + 1);
                    if (this.currentIndex < g) this.setQuestionURL(this.topicItem[this.currentIndex].questionPanel);
                    else {
                        var h = new OnclusionMobile(this, this.config.action, this.rightNumber[0].innerText, this.mistakeNumber[0].innerText);
                        this.setQuestionURL(h.onclusionPanel)
                    }
                }
                if (b > f) {
                    if (0 > this.currentIndex) return;
                    this.currentIndex -= 1;
                    this.setQuestionURL(this.topicItem[this.currentIndex].questionPanel);
                    this.progressBar.setProgress(this.currentIndex + 1, g + 1)
                }
                $.browser.mise ? event.cancelBubble = !0 : event.stopPropagation()
            }
        }.bind(this);
        this.questionContent.speed(b)
    },
    show: function() {
        animateOnce(this.container, {
            transform: "translate(0,0)",
            "-webkit-transform": "translate(0,0)",
            "-moz-transform": "translate(0,0)",
            "-o-transform": "translate(0,0)",
            "-ms-transform": "translate(0,0)"
        },
        0.3, null, "", "ease")
    },
    hide: function() {
        animateOnce(this.container, {
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)"
        },
        0.3, null, "", "ease")
    },
    setCss: function() {
        this.questionContent.css({
            position: "absolute",
            "margin-top": "30px",
            background: "white",
            width: windowWidth - 70 + "px",
            left: "0px",
            right: "0px",
            margin: "auto",
            "overflow-x": "hidden",
            height: windowHeight - 150 + "px"
        });
        this.title.css({
            position: "relative",
            margin: "auto",
            width: windowWidth - 50 + "px",
            height: "22px",
            "margin-top": "20px",
            "text-align": "center",
            "font-size": "20px",
            "font-family": "-webkit-pictograph"
        });
        this.closeButton.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -69px -100px",
            width: "42px",
            height: "47px",
            "z-index": "100",
            position: "absolute",
            right: "0px"
        });
        this.contentBottom.css({
            position: "absolute",
            border: "1px solid rgba(221,221,221,0.6)",
            top: "34px",
            left: "0px",
            right: "0px",
            "background-color": "rgba(255,255,255,0.6)",
            width: windowWidth - 90 + "px",
            height: "50px",
            margin: "auto",
            "border-radius": "5px"
        });
        this.contentMiddle.css({
            position: "absolute",
            border: "1px solid rgba(221,221,221,0.8)",
            top: "41px",
            left: "0px",
            right: "0px",
            "background-color": "rgba(255,255,255,0.8)",
            width: windowWidth - 70 + "px",
            height: "50px",
            margin: "auto",
            "border-radius": "5px",
            "z-index": "10"
        });
        this.container.css({
            position: "absolute",
            "background-color": "#eeeeee",
            width: windowWidth + "px",
            height: windowHeight + "px",
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)",
            "z-index": "10"
        });
        this.content.css({
            position: "absolute",
            border: "1px solid #dddddd",
            bottom: "50px",
            left: "0px",
            right: "0px",
            margin: "auto",
            "background-color": "#FFFFFF",
            width: windowWidth - 50 + "px",
            height: windowHeight - 100 + "px",
            "border-radius": "5px",
            "z-index": "10"
        })
    },
    onResize: function() {}
}).extend(PageItem.Item);
Class("QuestionPanelMobile", {
    create: function(b, c, d) {
        this.config = c;
        this.index = d;
        this.quizPanel = b;
        this.questionPanel = $("<div></div>");
        this.question = $("<span style='color:rgb(0,153,255);font-size:18px;font-weight:bold;font-family:Verdana;top:15px;left:15px'>Q:</span>");
        this.initAnswer();
        this.questionTitle = $("<span style='color:rgb(0,153,255);font-size:15px;top:19px;left:45px'>" + this.config.title + "</span>");
        this.mediaImg = $("<img src='" + this.config.media + "' style='max-width:" + (windowWidth - 70) + "px;max-height:220px;margin-top:20px'/>");
        this.questionPanel.append(this.question).append(this.questionTitle).append(this.mediaImg);
        this.getRightAnswer();
        this.addTopicAnswer();
        this.questionPanel.css({
            width: windowWidth - 55 + "px",
            "overflow-x": "hidden",
            "margin-top": "20px",
            position: "absolute",
            "background-color": "white",
            height: windowHeight - 170 + "px"
        })
    },
    initAnswer: function() {
        this.Items = [];
        for (var b in this.config) b.startWith("answer") && this.Items.push(this.config[b])
    },
    getRightAnswer: function() {
        for (var b = 0; b < this.Items.length; b++) if ("true" == this.Items[b].dataRight) var c = this.Items[b].value;
        return c
    },
    addTopicAnswer: function() {
        for (var b = 0; b < this.Items.length; b++) {
            var c = new TopicAnswerMoblie(this.quizPanel, this.Items[b], this.config, this.getRightAnswer(), this.index);
            this.questionPanel.append(c.answerPanel)
        }
    }
});
Class("TopicAnswerResultMobile", {
    create: function(b, c, d, f) {
        this.quizPanel = b;
        this.dataRight = f;
        this.config = c;
        this.answer = d;
        this.content = $("<div></div>");
        this.nextQuestion = $("<div></div>");
        this.nextPage = $("<div></div>");
        this.nextText = $("<div>NEXT QUESTION</div>");
        this.answerOption = $("<span style='color:rgb(0,153,255);font-size:30px;font-weight:bold;font-family:Verdana;position:absolute;top:25px;left:35px'>A:</span>");
        this.answerResult = $("<span style='color:rgb(0,153,255);font-size:20px;position:absolute;top:35px;left:82px'></span>");
        this.JudgeResult = $("<span></span>");
        this.content.append(this.nextQuestion.append(this.nextPage).append(this.nextText)).append(this.answerOption).append(this.answerResult).append(this.JudgeResult);
        this.setCss();
        this.initEvent();
        this.answerResult.text(this.dataRight);
        "true" == this.answer.dataRight ? this.JudgeResult.text(this.config.rightTxt) : (this.JudgeResult.text(this.config.wrongTxt), this.JudgeResult.css("color", "red"))
    },
    initEvent: function() {
        this.nextPage.on("click", this.quizPanel.OnNextPageClick);
        this.nextPage.on("click",
        function() {
            this.content.remove()
        }.bind(this));
        this.nextText.on("click", this.quizPanel.OnNextPageClick);
        this.nextText.on("click",
        function() {
            this.content.remove()
        }.bind(this))
    },
    setCss: function() {
        this.content.css({
            position: "absolute",
            margin: "auto",
            "margin-top": "43px",
            left: 0,
            right: 0,
            width: windowWidth - 70 + "px",
            height: windowHeight - 200 + "px",
            border: "1px solid #dddddd",
            bottom: "50px",
            background: "white",
            "border-radius": "4px",
            "z-index": 20
        });
        this.nextText.css({
            color: "rgb(0,153,255)",
            "font-size": "14px",
            "font-weight": "bold",
            width: "50px",
            position: "absolute",
            right: "110px",
            bottom: "30px",
            "font-family": "Verdana"
        });
        this.nextPage.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -257px -16px",
            position: "absolute",
            bottom: "30px",
            right: "30px",
            width: "36px",
            height: "36px"
        });
        this.JudgeResult.css({
            position: "absolute",
            width: windowWidth - 70 + "px",
            "text-align": "center",
            bottom: "140px",
            color: "green",
            "font-family": "Verdana",
            "font-size": "18px"
        })
    }
});
Class("TopicAnswerMoblie", {
    create: function(b, c, d, f, g) {
        this.quizPanel = b;
        this.config = d;
        this.answer = c;
        this.index = g;
        this.dataRight = f;
        this.answerPanel = $("<div></div>");
        this.checkBox = $("<div><div>");
        this.answerValue = $("<div>" + this.answer.value + "</div>");
        this.answerPanel.append(this.checkBox);
        this.answerPanel.append(this.answerValue);
        this.initEvent();
        this.setCss()
    },
    initEvent: function() {
        this.checkBox.on("click",
        function() {
            this.quizPanel.topicAnswer[this.index] = this.answer.value;
            this.quizPanel.flushCount();
            this.answerResult = new TopicAnswerResultMobile(this.quizPanel, this.config, this.answer, this.dataRight);
            this.quizPanel.container.append(this.answerResult.content)
        }.bind(this))
    },
    setCss: function() {
        this.answerValue.css({
            color: "#0f5177",
            position: "relative",
            "margin-left": "30px",
            "font-size": "15px",
            color: "#0f5177",
            width: "165px",
            "font-family": "Verdana"
        });
        this.answerPanel.css({
            width: "200px",
            "margin-top": "20px",
            position: "relative"
        });
        this.checkBox.css({
            position: "absolute",
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -465px -67px",
            width: "20px",
            height: "20px"
        })
    }
});
Class("OnclusionMobile", {
    create: function(b, c, d, f) {
        this.quizPanel = b;
        this.config = c;
        this.rightNumber = d;
        this.mistakeNumber = f;
        this.percentageNumber = Math.floor(this.rightNumber / this.config.quiz.length * 100);
        this.onclusionPanel = $("<div></div>");
        this.hint = $("<div>You haven't selected an answer,please select one</div>");
        this.clusion = $("<div>" + this.config.guizEndTxt + "</div>");
        this.Percentage = $("<div>Your ration is " + this.percentageNumber + "%</div>");
        this.scorePanel = $("<div></div>");
        this.score = $("<div style='color:#DCAB1B;width: " + (windowWidth - 70) + "px;height: 45px;overflow-x: hidden'></div>");
        this.isAgain = $("<span>Do you wanna play it again?</span>");
        this.button = $("<div></div>");
        this.yesButton = $("<div></div>");
        this.noButton = $("<div></div>");
        0 == this.mistakeNumber && 0 == this.rightNumber ? this.onclusionPanel.append(this.hint) : this.onclusionPanel.append(this.clusion);
        this.onclusionPanel.append(this.Percentage).append(this.isAgain).append(this.scorePanel.append(this.score)).append(this.button.append(this.yesButton).append(this.noButton));
        this.setCss();
        this.initEvent();
        0 <= this.percentageNumber && 25 >= this.percentageNumber && this.score.text(this.config.score[3]);
        25 < this.percentageNumber && 50 >= this.percentageNumber && this.score.text(this.config.score[2]);
        50 < this.percentageNumber && 75 >= this.percentageNumber && this.score.text(this.config.score[1]);
        75 < this.percentageNumber && 100 >= this.percentageNumber && (this.score.text(this.config.score[0]), 100 == this.percentageNumber && this.score.css("color", "#0098ff"))
    },
    initEvent: function() {
        this.yesButton.on("click",
        function() {
            this.quizPanel.currentIndex = 0;
            this.clearFlushCount();
            this.quizPanel.flushCount();
            this.quizPanel.progressBar.setProgress(1, this.quizPanel.quiz.length + 1);
            this.quizPanel.setQuestionURL(this.quizPanel.topicItem[0].questionPanel)
        }.bind(this));
        this.noButton.on("click",
        function() {
            this.quizPanel.hide()
        }.bind(this))
    },
    clearFlushCount: function() {
        for (var b = this.quizPanel.quiz.length,
        c = 0; c < b; c++) this.topicAnswer[c] = null
    },
    setCss: function() {
        this.scorePanel.css({
            position: "absolute",
            margin: "auto",
            right: "0px",
            left: "0px",
            top: "160px",
            color: "gray",
            width: windowWidth - 70 + "px",
            "text-align": "center",
            height: "45px",
            overflow: "hidden",
            "font-size": "15px"
        });
        this.Percentage.css({
            "font-weight": "bold",
            "font-size": "15px",
            position: "absolute",
            margin: "auto",
            top: "120px",
            left: "0px",
            right: "0px",
            width: windowWidth - 70 + "px",
            "text-align": "center",
            height: "20px"
        });
        this.clusion.css({
            width: windowWidth - 70 + "px",
            "font-size": "17px",
            color: "#045DD0",
            "text-align": "center",
            "margin-top": "40px"
        });
        this.isAgain.css({
            color: "#00a5ff",
            "font-size": "15px",
            "font-weight": "bold",
            width: "250px",
            position: "absolute",
            "text-align": "center",
            bottom: "90px",
            right: "0px",
            left: "0px",
            margin: "auto"
        });
        this.hint.css({
            width: "250px",
            "font-size": "15px",
            "font-weight": "bold",
            color: "#045DD0",
            "text-align": "center",
            "margin-top": "35px"
        });
        this.onclusionPanel.css({
            position: "absolute",
            width: windowWidth - 70 + "px",
            "border-radius": "10px",
            background: "white",
            margin: "auto",
            bottom: "0px",
            right: "0px",
            left: "0px",
            top: "0px"
        });
        this.yesButton.css({
            width: "81px",
            height: "30px",
            position: "absolute",
            background: "url(" + uiBaseURL + "/quiz.png) no-repeat -71px -20px"
        });
        this.noButton.css({
            width: "81px",
            height: "30px",
            right: "0px",
            position: "absolute",
            background: "url(" + uiBaseURL + "/quiz.png) no-repeat -161px -20px"
        });
        this.button.css({
            margin: "auto",
            bottom: "25px",
            right: "0px",
            left: "0px",
            width: "204px",
            height: "30px",
            position: "absolute"
        })
    }
});
Class("SetAdvanceMobile", {
    create: function(b) {
        this.config = b;
        this.advanceImg = $("<img src='" + this.config.guizURL + "'/>");
        this.start = $("<div></div");
        this.start.css({
            background: "url(" + uiBaseURL + "quiz.png) no-repeat -366px -20px",
            position: "absolute",
            width: "81px",
            height: "30px",
            right: 0,
            left: 0,
            bottom: "35px",
            margin: "auto"
        });
        this.advanceImg.css({
            "max-width": windowWidth - 80 + "px",
            "max-height": "200px",
            position: "absolute",
            top: 0,
            right: 0,
            left: 0,
            bottom: 0,
            margin: "auto"
        })
    }
});
Class("TopicProgressBarMobile", {
    create: function(b, c) {
        this.quizLength = b;
        this.currentIndex = c;
        this.progressContainer = $("<div></div>");
        this.progressBar = $("<div></div>");
        this.progressContainer.append(this.progressBar);
        this.setCss();
        this.setProgress(1, this.quizLength + 1)
    },
    setCss: function() {
        this.progressContainer.css({
            position: "absolute",
            margin: "auto",
            right: "0",
            left: "0",
            bottom: "10px",
            width: windowWidth - 50 + "px",
            height: "30px",
            "background-color": "white",
            "border-radius": "3px"
        });
        this.progressBar.css({
            height: "30px",
            "padding-top": "4px",
            "text-align": "center",
            "border-radius": "10px",
            "font-size": "20px"
        })
    },
    setProgress: function(b, c) {
        if (b > c) return b - 1;
        this.progressBar.text(b + "/" + c)
    }
});
Class("ShowInformation", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = c;
        this.config.width = parseInt(this.config.action.width);
        this.config.height = parseInt(this.config.action.height);
        this.bgColor1 = Color(this.config.action.bgColor1).toString();
        this.bgColor2 = Color(this.config.action.bgColor2).toString();
        this.buttonColor = Color(this.config.action.buttonColor).toString();
        this.buttonBgColor = Color(this.config.action.buttonBgColor).toString();
        this.fontColor = Color(this.config.action.titleColor).toString();
        this.bodyColor = Color(this.config.action.bodyColor).toString();
        this.link = this.config.action.link;
        this.linkLength = this.config.action.link.length;
        this.background = $("<div></div>");
        this.contentBox = $('<div id="cbox"></div>');
        this.closeButton = $('<div id="closebutton"></div>');
        this.textTitle = $("<div></div>");
        this.text = $("<div></div>");
        this.content = $("<div></div>");
        this.container = $('<div id="conb"></div>');
        this.imgBox = $("<div></div>");
        this.img = $("<img>");
        "http://" == this.link.substring(this.linkLength - 7, this.linkLength) ? this.button = $("<a href='javascript:void(0);' target='_Blank'></a>") : this.button = $("<a href = '" + this.link + "' target='_Blank' font-family='" + this.config.action.bodyFont + "'></a>");
        b.append(this.background);
        b.append(this.container);
        this.contentBox.append(this.textTitle);
        this.content.append(this.contentBox);
        this.container.append(this.content);
        this.container.append(this.closeButton);
        this.textTitle.html(this.config.action.titleText);
        this.button.html(this.config.action.buttonName);
        var d = new TextFormatAnalyzer(this.config.action.bodyText);
        if (null == this.config.action.bodyFont) {
            var f = d.getFontFamily().split(",");
            this.config.action.bodyFont = f[0];
            this.config.action.bodySize = d.getFontSize();
            this.config.action.bodyColor = d.getFontColor()
        }
        this.image = [this.config.action.imgURL];
        bookConfig.isFlipPdf && (this.image[0].startWith("./") ? this.image[0] = "." + this.image[0] : this.image[0] = "../" + this.image[0]);
        this.contentBox.append(this.text);
        d = getInnerHtml(this.config.action.bodyText).$text;
        this.text.html(d);
        this.setCss()
    },
    setCss: function() {
        this.img.attr({
            src: this.image[0],
            align: "center"
        });
        this.background.css({
            position: "absolute",
            width: "100%",
            height: "100%",
            opacity: "0.5",
            top: 0,
            "background-color": "black",
            "z-index": "1000"
        });
        this.contentBox.append(this.button);
        this.setPcCss();
        "null" == this.config.action.imgURL && (this.contentBox.css({
            position: "absolute",
            right: "25px",
            "overflow-x": "hidden",
            width: this.config.width - 50 + "px",
            height: this.config.height - 50 + "px"
        }), this.textTitle.css({
            "font-size": this.config.action.titleSize,
            color: this.fontColor,
            "font-family": this.config.action.titleFont,
            "z-index": "2500",
            width: this.config.width - 50 + "px",
            "margin-top": "30px"
        }), this.text.css({
            width: this.config.width - 35 + "px",
            "max-height": this.config.height - 150 + "px",
            "z-index": "2500",
            "margin-top": "10px",
            overflow: "auto"
        })); ! 0 == parseBool(this.config.action.imgBool) && null !== this.config.action.imgURL ? (this.content.append(this.imgBox), this.imgBox.append(this.img), this.imgBox.css({
            width: "100%",
            height: "100%",
            position: "absolute",
            "z-index": "3000",
            "max-width": "195px",
            "max-height": "290px",
            margin: "auto",
            right: "0px"
        }), this.contentBox.css({
            position: "absolute",
            left: "20px",
            "overflow-x": "hidden",
            width: this.config.width - 240 + "px",
            height: this.config.height - 25 + "px"
        }), this.setText()) : !1 == parseBool(this.config.action.imgBool) && "null" != this.config.action.imgURL && (this.content.append(this.imgBox), this.imgBox.append(this.img), this.imgBox.css({
            width: "100%",
            height: "100%",
            position: "absolute",
            "z-index": "3000",
            "max-width": "195px",
            "max-height": "290px",
            margin: "auto",
            left: "0"
        }), this.contentBox.css({
            position: "absolute",
            right: "10px",
            width: this.config.width - 240 + "px",
            "overflow-x": "hidden",
            height: this.config.height - 25 + "px"
        }), this.setText());
        this.background.bind(_event._down,
        function(b) {
            this.hide();
            b.stopPropagation()
        }.bind(this));
        this.background.bind(_event._end,
        function(b) {
            b.stopPropagation()
        }.bind(this));
        this.closeButton.bind("click",
        function() {
            this.hide()
        }.bind(this));
        this.closeButton.bind("mousemove",
        function() {
            this.closeButton.css("background-image", "url(" + uiBaseURL + "close_down.png)")
        }.bind(this));
        this.closeButton.bind("mouseleave",
        function() {
            this.closeButton.css("background-image", "url(" + uiBaseURL + "close.png)")
        }.bind(this))
    },
    setPcCss: function() {
        this.closeButton.css({
            width: "100%",
            height: "100%",
            position: "absolute",
            "background-image": "url(" + uiBaseURL + "close.png)",
            "background-repeat": "no-repeat",
            cursor: "pointer",
            "max-width": "27px",
            "max-height": "27px",
            "z-index": "3000",
            "margin-left": this.config.width + "px"
        });
        this.button.css({
            position: "absolute",
            color: this.buttonColor,
            "padding-left": "10px",
            "padding-right": "10px",
            "background-color": this.buttonBgColor,
            "text-decoration": "none",
            "z-index": "2500",
            bottom: "0px",
            left: "0px"
        });
        this.img.css({
            "max-width": "190px",
            "max-height": "290px",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0"
        });
        this.container.css({
            "max-width": this.config.width + 30 + "px",
            "max-height": this.config.height + 30 + "px",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "z-index": "3000"
        });
        this.content.css({
            width: "100%",
            height: "100%",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "max-width": this.config.width,
            "max-height": this.config.height,
            "z-index": "1900",
            "background-image": $.browser.prefix + "repeating-linear-gradient(" + this.config.action.bgAngle + "deg, " + this.bgColor2 + ", " + this.bgColor1 + ")"
        })
    },
    setText: function() {
        this.textTitle.css({
            "font-size": this.config.action.titleSize,
            color: this.fontColor,
            "font-family": this.config.action.titleFont,
            "z-index": "2500",
            width: this.config.width - 233 + "px",
            "margin-top": "30px",
            overflow: "hidden",
            "text-overflow": "ellipsis"
        });
        this.text.css({
            "font-size": this.config.action.bodySize + "px",
            color: this.bodyColor,
            "font-family": this.config.action.bodyFont,
            width: this.config.width - 240 + "px",
            height: this.config.height - 140 + "px",
            padding: "0px",
            outline: "medium",
            border: "0px",
            "padding-right": "17px",
            "margin-top": "25px",
            "line-height": "2.0",
            background: "rgba(255,255,255,0)",
            "z-index": "2500",
            overflow: "auto"
        })
    },
    show: function() {
        this.background.css({
            display: "block"
        })
    },
    hide: function() {
        animateOnce(this.container, {
            transform: "scale(0)",
            "-webkit-transform": "scale(0)",
            "-moz-transform": "scale(0)",
            "-o-transform": "scale(0)",
            "-ms-transform": "scale(0)"
        },
        0.5,
        function() {
            this.background.css({
                display: "none"
            })
        }.bind(this), "", "ease")
    }
});
Class("ShowInformationMobile", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = c;
        this.bgColor1 = Color(this.config.action.bgColor1).toString();
        this.bgColor2 = Color(this.config.action.bgColor2).toString();
        this.buttonColor = Color(this.config.action.buttonColor).toString();
        this.buttonBgColor = Color(this.config.action.buttonBgColor).toString();
        this.fontColor = Color(this.config.action.titleColor).toString();
        this.bodyColor = Color(this.config.action.bodyColor).toString();
        this.link = this.config.action.link;
        this.linkLength = this.config.action.link.length;
        this.closeButton = $('<div id="closebutton"></div>');
        this.textTitle = $("<div></div>");
        this.text = $("<div></div>");
        this.content = $("<div></div>");
        this.container = $('<div id="conb"></div>');
        this.title = $("<div></div>");
        this.img = $("<img>");
        this.foot = $('<div style="width:100%;height:70px;position:relative;"></div>');
        "http://" == this.link.substring(this.linkLength - 7, this.linkLength) ? this.button = $("<a href='javascript:void(0);' target='_Blank'></a>") : this.button = $("<a href = '" + this.link + "' target='_Blank' font-family='" + this.config.action.bodyFont + "'></a>");
        this.foot.append(this.button);
        b.append(this.container);
        this.textTitle.html(this.config.action.titleText);
        this.textTitle.text(this.textTitle.text().overflow(20));
        this.button.html(this.config.action.buttonName);
        var d = new TextFormatAnalyzer(this.config.action.bodyText);
        if (null == this.config.action.bodyFont) {
            var f = d.getFontFamily().split(",");
            this.config.action.bodyFont = f[0];
            this.config.action.bodySize = d.getFontSize();
            this.config.action.bodyColor = d.getFontColor()
        }
        this.container.append(this.title);
        this.title.append(this.closeButton);
        this.title.append(this.textTitle);
        this.container.append(this.content);
        this.content.append(this.img);
        this.content.append(this.text);
        d = getInnerHtml(this.config.action.bodyText).$text;
        this.text.html(d);
        this.content.append(this.foot);
        bookConfig.isFlipPdf && (this.config.action.imgURL.startWith("./") ? this.config.action.imgURL = "." + this.config.action.imgURL: this.config.action.imgURL = "../" + this.config.action.imgURL);
        this.setPhone();
        this.closeButton.bind("click",
        function() {
            this.hide()
        }.bind(this));
        "null" != this.config.action.imgURL && "" != this.config.action.imgURL || this.img.remove()
    },
    setPhone: function() {
        this.title.css({
            position: "relative",
            width: windowWidth + "px",
            "background-color": "mintcream",
            border: "#CCCCCC 0.5px solid",
            height: "40px"
        });
        this.img.attr({
            src: this.config.action.imgURL,
            align: "center"
        });
        this.button.css({
            position: "absolute",
            color: this.buttonColor,
            "padding-left": "8px",
            "padding-right": "8px",
            "background-color": this.buttonBgColor,
            "text-decoration": "none",
            "z-index": "2500",
            right: "30px",
            "border-radius": "6px",
            bottom: "30px"
        });
        this.img.css({
            position: "relative",
            "max-width": windowWidth + "px",
            "max-height": "200px",
            margin: "10px auto",
            display: "block"
        });
        this.container.css({
            position: "absolute",
            width: windowWidth + "px",
            height: "100%",
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)",
            "z-index": "3000",
            "background-image": $.browser.prefix + "repeating-linear-gradient(" + this.config.action.bgAngle + "deg, " + this.bgColor2 + "," + this.bgColor1 + ")"
        });
        this.content.css({
            width: windowWidth + 15 + "px",
            "overflow-x": "hidden",
            height: windowHeight - 40 + "px"
        });
        this.textTitle.css({
            position: "absolute",
            width: windowWidth / 2,
            margin: "auto",
            "font-size": "12px",
            color: this.fontColor,
            "font-family": this.config.action.titleFont,
            "vertical-align": "middle",
            "line-height": "3.0",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "text-align": "center"
        });
        this.text.css({
            width: windowWidth - 10 + "px",
            "font-size": this.config.action.bodySize + "px",
            color: this.bodyColor,
            "font-family": this.config.action.bodyFont,
            "overflow-y": "hidden",
            "margin-top": "20px",
            "padding-left": "5px",
            "line-height": "2.0",
            "text-indent": "2em"
        });
        this.closeButton.css({
            position: "absolute",
            margin: "auto",
            "background-image": "url(" + uiBaseURL + "background_prev.png)",
            "background-repeat": "no-repeat",
            cursor: "pointer",
            width: "20px",
            height: "20px",
            left: "10px",
            bottom: "0",
            top: "0"
        })
    },
    onResize: function(b, c) {
        windowWidth = b;
        windowHeight = c;
        this.setPhone()
    },
    show: function() {
        animateOnce(this.container, {
            transform: "translate(0,0)",
            "-webkit-transform": "translate(0,0)",
            "-moz-transform": "translate(0,0)",
            "-o-transform": "translate(0,0)",
            "-ms-transform": "translate(0,0)"
        },
        0.3, null, "", "ease")
    },
    hide: function() {
        animateOnce(this.container, {
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)"
        },
        0.3, null, "", "ease")
    }
}).extend(PageItem.Item);
Class("HotSpots", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        parseBool(this.config.hint) && (this.config.hint.hintShapeColor = Color(this.config.hint.hintShapeColor).toString(), this.config.hint.hintShapeColor2 = Color(this.config.hint.hintShapeColor2).toString());
        bookConfig.isFlipPdf && (this.config.hotSpotsURL.startWith("./") ? this.config.hotSpotsURL = "." + this.config.hotSpotsURL: this.config.hotSpotsURL = "../" + this.config.hotSpotsURL);
        this.content = $("<div></div>");
        this.content.flash({
            swf: this.config.hotSpotsURL,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        });
        this.parent.append(this.content);
        this.setCss();
        this.initEvent();
        this.initLinkHint(this.content)
    },
    setCss: function() {
        this.content.css({
            position: "absolute",
            width: this.width,
            height: this.height,
            cursor: "hand",
            left: this.left + "px",
            top: this.top + "px"
        });
        this.setRotation(this.content, this.config.rotation)
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            hint: b.hint,
            alpha: b.alpha,
            hotSpotsURL: b.hotSpotsURL,
            hintColor: b.hint.hintShapeColor2,
            hintShapeAlpha: b.hint.hintShapeAlpha,
            hintShapeType: b.hint.hintShapeType,
            text: b.hint.text,
            action: b.action
        }
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * b;
        this.height = this.config.height * c;
        this.content.flash().remove();
        this.content.flash({
            swf: this.config.hotSpotsURL,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        });
        this.setCss();
        this.setPosition()
    },
    setPosition: function() {
        this.content.css({
            left: this.config.x * this.pageWidth + "px",
            top: this.config.y * this.pageHeight + "px"
        })
    },
    initEvent: function() {
        this.addActionEvent(this.content)
    }
}).extend(PageItem.Item);
Class("HotSpotsMobile", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.hotSpot = $("<canvas width=" + this.width + " height=" + this.height + "></canvas>");
        this.hotSpot.css({
            position: "absolute",
            left: this.x,
            top: this.y
        });
        this.setRotation(this.hotSpot, this.config.rotation);
        this.parent.append(this.hotSpot);
        this.drawer = this.drawHotSpot.runInAnimate(this, 1E3);
        this.initEvent();
        this.setPosition()
    },
    parseConfig: function(b) {
        return {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            hotSpotsURL: b.hotSpotsURL,
            hintColor: b.hint.hintShapeColor2,
            hintShapeAlpha: b.hint.hintShapeAlpha,
            hintShapeType: b.hint.hintShapeType,
            text: b.hint.text,
            action: b.action
        }
    },
    drawHotSpot: function(b, c) {
        var d = this.hotSpot[0],
        f = d.getContext("2d");
        f.clearRect(0, 0, d.width, d.height);
        f.beginPath();
        f.arc(this.width / 2, this.height / 2, this.width / 8, 0, 2 * Math.PI);
        f.fillStyle = "red";
        f.fill();
        f.closePath();
        f.beginPath();
        var d = this.width / 8,
        g = d / 3;
        f.arc(this.width / 2, this.height / 2, d + (this.width / 2 - g / 2 - d) * b / c, 0, 2 * Math.PI);
        f.lineWidth = g;
        d = $.easing.easeInQuart(null, b, 1, -0.8, c);
        f.strokeStyle = String.format("rgba(244,11,11,%f)", d);
        f.stroke();
        f.closePath();
        b == c && (this.drawer = this.drawHotSpot.runInAnimate(this, 1E3))
    },
    Stop: function() {
        this.drawer && this.drawer.stop()
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * b;
        this.height = this.config.height * c;
        this.hotSpot.css({
            width: this.width + "px",
            height: this.height + "px",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.hotSpot.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.hotSpot)
    }
}).extend(PageItem.Item);
function forceFloat(b) {
    b = Number(b).toString(); - 1 == b.indexOf(".") && (b += ".00");
    return b
}
Class("ShoppingCart", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.config = this.parseConfig(c);
        this.pageWidth = d;
        this.pageHeight = f;
        this.bgColor = Color(this.config.bgColor).toString();
        this.width = Number(this.pageWidth * this.config.width);
        this.height = Number(this.pageHeight * this.config.height);
        this.background = $("<div></div>");
        this.config.imgUrl = this.config.imgUrl;
        this.config.url = this.config.url;
        this.img = $("<img>");
        b.append(this.background);
        this.background.append(this.img);
        bookConfig.isFlipPdf && (this.config.imgUrl.startWith("./") ? this.config.imgUrl = "." + this.config.imgUrl: this.config.imgUrl = "../" + this.config.imgUrl);
        var g = "";
        this.config.url && (g = this.config.url);
        g.startWith("http://") || g.startWith("https://") || (g = "http://" + g);
        "link" == this.config.cartType ? (isTouchDevice() ? this.background = $("<div></div>") : this.background = $("<a href=" + g + " target='_blank' ><div></div></a>"), b.append(this.background), this.background.append(this.img), isTouchDevice() && this.background.bind(_event._end,
        function() {
            window.location.href = g
        }.bind(this))) : $.browser.device == $.browser.DEVICE_PHONE ? (this.mobileShop = new PageItem.MobileProductDetailsPanel(c, pageEditor.setting, b), this.background.bind(_event._end,
        function() {
            this.mobileShop.show()
        }.bind(this))) : (this.shop = new PageItem.PCProductDetailsPanel(c, pageEditor.setting, b), this.background.bind(_event._end,
        function() {
            this.shop.show()
        }.bind(this)));
        this.setLinkCss();
        this.setPosition();
        this.initEvent()
    },
    parseConfig: function(b) {
        return {
            annotype: b.annotype,
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            bgColor: b.bgColor,
            bgAlpha: b.bgAlpha,
            cartType: b.cartType,
            imgUrl: b.imgUrl,
            titleStr: b.titleStr,
            url: b.url,
            Detailed: b.Detailed
        }
    },
    destroy: function() {
        this.background.empty();
        this.background.remove();
        this.shop.destroy()
    },
    initEvent: function() {
        var b = new divHint;
        this.background.bind(_event._move,
        function(c) {
            var d;
            isTouchDevice() ? (d = c.originalEvent.touches[0], void 0 == d && (d = c.touches[0])) : d = c;
            $(d.target);
            c = d.pageX + 10;
            d = d.pageY + 10;
            b.setStyle("hintBackground");
            "link" == this.config.cartType ? "" != this.config.titleStr ? b.setText(this.config.titleStr.overflow(12)) : b.setText(this.config.url.overflow(12)) : "" != this.config.titleStr ? b.setText(this.config.titleStr.overflow(12)) : b.setText(this.config.Detailed.title.overflow(12));
            b.moveto(c, d);
            b.show()
        }.bind(this));
        this.background.bind(_event._leave,
        function() {
            b.hide()
        }.bind(this))
    },
    setLinkCss: function() {
        this.background.css({
            position: "absolute",
            "background-position": "center",
            width: this.width + "px",
            height: this.height + "px",
            "background-color": this.bgColor,
            opacity: this.config.bgAlpha,
            "text-decoration": "none",
            cursor: "default",
            transform: "rotate(" + this.config.rotation + "deg)",
            "-webkit-transform": "rotate(" + this.config.rotation + "deg)",
            "-ms-transform": "rotate(" + this.config.rotation + "deg)",
            "-o-transform": "rotate(" + this.config.rotation + "deg)",
            "-moz-transform": "rotate(" + this.config.rotation + "deg)",
            "transform-origin": "0 0",
            "-webkit-transform-origin": "0 0",
            "-ms-transform-origin": "0 0",
            "-o-transform-origin": "0 0",
            "-moz-transform-origin": "0 0"
        });
        this.img.attr({
            src: this.config.imgUrl
        });
        if (this.width > this.height) {
            var b = 2 * this.height / 3;
            this.width = b / 100 * 100;
            this.img.css({
                position: "absolute",
                width: this.width,
                height: b,
                margin: "auto",
                left: "0",
                right: "0",
                top: "0",
                bottom: "0"
            })
        } else b = 2 * this.width / 3,
        this.height = b / 100 * 100,
        this.img.css({
            position: "absolute",
            width: this.height,
            height: b,
            margin: "auto",
            left: "0",
            right: "0",
            top: "0",
            bottom: "0"
        })
    },
    show: function() {
        this.background.css("display", "block")
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * b;
        this.height = this.config.height * c;
        this.background.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setLinkCss();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.background.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
});
var ShoppingCartUtil = {
    setProductsToStorage: function(b) {
        b = Instance.JSON(b);
        window.localStorage.setItem("shopping_cart_products", b)
    },
    getProductsFromStorage: function() {
        var b = window.localStorage.getItem("shopping_cart_products");
        return Instance.parse(b, [])
    },
    removeProduct: function(b) {
        for (var c = this.getProductsFromStorage(), d = 0; d < c.length; d++) if (c[d].title == b.title) {
            c.remove(d);
            break
        }
        this.setProductsToStorage(c)
    },
    addProduct: function(b) {
        for (var c = this.getProductsFromStorage(), d = !0, f = 0; f < c.length; f++) {
            var g = c[f];
            if (g.title == b.title) {
                g.number = b.number + g.number;
                d = !1;
                break
            }
        }
        d && c.push(b);
        this.setProductsToStorage(c);
        return c
    },
    saveProducts: function(b, c) {
        b || (b = []);
        for (var d = [], f = 0; f < b.length; f++) d.push(b[f].product);
        this.setProductsToStorage(d)
    }
};
Class("ProductDetailsPanel", {
    Package: "PageItem",
    create: function(b, c, d) {
        this.config = this.parseConfig(b);
        this.setting = c;
        this.parent = d;
        this.initUI();
        this.initEvent()
    },
    parseConfig: function(b) {
        return b
    },
    destroy: virtual_function,
    getMailtoInformation: function(b, c, d) {
        var f = d.shoppingCartOptinon.body;
        b = parseInt(b);
        var g = forceFloat(c.Detailed.proce);
        b = String.format("%0D%0A%0D%0A%0D%0A%s(N1,%d * %s%s = %s%s);%0D%0A%s%s%0D%0A-they in your contacts here-%0D%0A%0D%0A%0D%0A%0D%0A", c.Detailed.title, b, g, c.Detailed.sing, forceFloat(g * b), c.Detailed.sing, forceFloat(g * b), c.Detailed.sing); ! 0 == d.shoppingCartOptinon.showPrice ? -1 < f.indexOf("${shopping}") && (f = f.replaceAll("${shopping}", b, !0)) : -1 < f.indexOf("${shopping}") && (f = f.replaceAll("${shopping}", "%0D%0A%0D%0A" + c.Detailed.title + "(N1,);%0D%0A- type in your contacts here -%0D%0A%0D%0A%0D%0A", !0));
        return String.format("mailto:%s?subject=%s&body=%s", d.shoppingCartOptinon.address, d.shoppingCartOptinon.theme, f)
    },
    getPaypalInformation: function(b, c, d) {
        var f = "";
        if ("$" == c.Detailed.sing || "U.S.$" == c.Detailed.sing) f = "USD";
        "\uffe5" == c.Detailed.sing && (f = "CNY");
        "\u20ac" == c.Detailed.sing && (f = "EUR");
        "\uffe1" == c.Detailed.sing && (f = "GBP");
        "J.\uffe5" == c.Detailed.sing && (f = "JPY");
        "$A." == c.Detailed.sing && (f = "AUD");
        "$NZ." == c.Detailed.sing && (f = "NZD");
        "SFR." == c.Detailed.sing && (f = "CHF");
        "HK$" == c.Detailed.sing && (f = "HKD");
        "S.$" == c.Detailed.sing && (f = "SGD");
        "S.Kr." == c.Detailed.sing && (f = "SEK");
        "D.Kr." == c.Detailed.sing && (f = "DKK");
        "z\u0142" == c.Detailed.sing && (f = "PLZ");
        "N.Kr." == c.Detailed.sing && (f = "NOK");
        "FT." == c.Detailed.sing && (f = "HUF");
        "Cz.Kr." == c.Detailed.sing && (f = "CSK");
        "Mex.$" == c.Detailed.sing && (f = "MXP");
        "\u20aa" == c.Detailed.sing && (f = "ILS");
        "Gr.$" == c.Detailed.sing && (f = "BRC");
        "Mal.$" == c.Detailed.sing && (f = "MYR");
        "NT" == c.Detailed.sing && (f = "NTD");
        "\u0e3f" == c.Detailed.sing && (f = "THP");
        "Ykr" == c.Detailed.sing && (f = "TRL");
        return "http://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=" + d.shoppingCartOptinon.paypal + "&item_name=" + c.Detailed.title + "&amount=" + c.Detailed.proce + "&currency_code=" + f + "&quantity=" + b
    },
    doCheckout: function() {
        if (!1 != this.canCheckout) {
            var b = "",
            b = this.input.val(),
            b = "Email" == this.setting.shoppingCartOptinon.type ? this.getMailtoInformation(b, this.config, this.setting) : this.getPaypalInformation(b, this.config, this.setting);
            window.open(b)
        }
    }
});
Class("ShoppingCartPanel", {
    Package: "PageItem",
    getMailtoInformation: function(b, c) {
        if (!this.shoppingItems) return "";
        for (var d = "",
        f = pageEditor.setting.shoppingCartOptinon.body,
        g = 0,
        h = 0; h < this.shoppingItems.length; h++) {
            var k = this.shoppingItems[h];
            if (void 0 == k.isSelected || k.isSelected()) var l = forceFloat(k.product.price),
            d = d + String.format("%0D%0A%20%20%20%20%s(N" + (h + 1) + ",%d * %s%s = %s%s);%0D%0A", k.product.title, parseInt(k.product.number), l, k.product.sing, forceFloat(l * parseInt(k.product.number)), k.product.sing),
            l = parseFloat(k.product.price * k.cartInput.val()),
            g = g + l
        }
        d += String.format("%0D%0A%20%20%20%20(Total price : %f%s);%0D%0A", g, this.config.Detailed.sing); ! 0 == pageEditor.setting.shoppingCartOptinon.showPrice ? -1 < f.indexOf("${shopping}") && (f = f.replaceAll("${shopping}", d, !0)) : -1 < f.indexOf("${shopping}") && (f = f.replaceAll("${shopping}", "%0D%0A%0D%0A" + k.product.title + "(N1,);%0D%0A- type in your contacts here -%0D%0A%0D%0A%0D%0A", !0));
        return String.format("mailto:%s?subject=%s&body=%s", pageEditor.setting.shoppingCartOptinon.address, pageEditor.setting.shoppingCartOptinon.theme, f)
    },
    getPaypalInformation: function(b, c) {
        if (!this.shoppingItems) return "";
        for (var d = "",
        f = "",
        g = 0,
        h = 0; h < this.shoppingItems.length; h++) {
            var k = this.shoppingItems[h];
            if (void 0 == k.isSelected || k.isSelected()) {
                if ("$" == b.Detailed.sing || "U.S.$" == b.Detailed.sing) d = "USD";
                "\uffe5" == b.Detailed.sing && (d = "CNY");
                "\u20ac" == b.Detailed.sing && (d = "EUR");
                "\uffe1" == b.Detailed.sing && (d = "GBP");
                "J.\uffe5" == b.Detailed.sing && (d = "JPY");
                "$A." == b.Detailed.sing && (d = "AUD");
                "$NZ." == b.Detailed.sing && (d = "NZD");
                "SFR." == b.Detailed.sing && (d = "CHF");
                "HK$" == b.Detailed.sing && (d = "HKD");
                "S.$" == b.Detailed.sing && (d = "SGD");
                "S.Kr." == b.Detailed.sing && (d = "SEK");
                "D.Kr." == b.Detailed.sing && (d = "DKK");
                "z\u0142" == b.Detailed.sing && (d = "PLZ");
                "N.Kr." == b.Detailed.sing && (d = "NOK");
                "FT." == b.Detailed.sing && (d = "HUF");
                "Cz.Kr." == b.Detailed.sing && (d = "CSK");
                "Mex.$" == b.Detailed.sing && (d = "MXP");
                "\u20aa" == b.Detailed.sing && (d = "ILS");
                "Gr.$" == b.Detailed.sing && (d = "BRC");
                "Mal.$" == b.Detailed.sing && (d = "MYR");
                "NT" == b.Detailed.sing && (d = "NTD");
                "\u0e3f" == b.Detailed.sing && (d = "THP");
                "Ykr" == b.Detailed.sing && (d = "TRL");
                g++;
                f += String.format("&item_name_" + g + "=%s&amount_" + g + "=%f&quantity_" + g + "=%d", k.product.title, k.product.price, k.product.number)
            }
        }
        f += String.format("&business=%s&currency_code=%s", c.shoppingCartOptinon.paypal, d);
        return "http://www.paypal.com/cgi-bin/webscr?cmd=_cart&upload=1" + f
    },
    doCheckout: function() {
        if (!1 != this.canCheckout) {
            var b = "",
            b = "Email" == this.setting.shoppingCartOptinon.type ? this.getMailtoInformation(this.config, this.setting) : this.getPaypalInformation(this.config, this.setting);
            window.open(b)
        }
    },
    refreshTotalValue: function() {
        this.shoppingItems || (this.shoppingItems = []);
        this.canCheckout = !0;
        var b = 0,
        c = 0;
        if (0 < this.shoppingItems.length) {
            for (var d = 0; d < this.shoppingItems.length; d++) {
                var c = this.shoppingItems[d],
                f = c.product;
                if (void 0 == c.isSelected || c.isSelected()) c = parseFloat(f.price * f.number),
                b += c,
                f.number > f.quantity && (this.canCheckout = !1)
            }
            this.total.text("Total: " + f.sing + b.toFixed(2))
        } else this.total.text("Total: 0.00");
        this.item.text("Item: " + this.shoppingItems.length)
    },
    refreshInputValue: function() {
        for (var b = ShoppingCartUtil.getProductsFromStorage(), c = 0, d = 0; d < b.length; d++) c += b[d].number;
        return c
    },
    removeItem: function(b) {
        ShoppingCartUtil.removeProduct(b.product);
        b.singleShop.remove();
        for (var c = 0; c < this.shoppingItems.length; c++) if (this.shoppingItems[c] == b) {
            this.shoppingItems.remove(c);
            break
        }
    }
});
Class("ShoppingCartItem", {});
Class("MobileProductDetailsPanel", {
    Package: "PageItem",
    create: function(b, c, d) {
        this.advancedObj = new PageItem.ShoppingAdvancedProperty(b);
        this._super(b, c, d);
        window.shoppingCart || (window.shoppingCart = new PageItem.MobileShoppingCartPanel(b, c));
        shoppingCountHTML.html(window.shoppingCart.refreshInputValue());
        this.canCheckout = !0
    },
    parseConfig: function(b) {
        return {
            annotype: b.annotype,
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            bgColor: b.bgColor,
            bgAlpha: b.bgAlpha,
            cartType: b.cartType,
            imgUrl: b.imgUrl,
            titleStr: b.titleStr,
            url: b.url,
            Detailed: b.Detailed
        }
    },
    destroy: function() {
        this.phoneContainer.empty();
        this.phoneContainer.remove()
    },
    initUI: function() {
        this.phoneContainer = $("<div class=phoneContainer></div>");
        this.toolBar = $("<div></div>");
        this.closeButton = $("<div></div>");
        this.textTitle = $("<div>PRODUCT DETAILS</div>");
        this.phoneImg = $("<img/>");
        this.title = $("<div>" + this.config.Detailed.title + "</div>");
        this.title.text(this.title.text().overflow(30));
        this.phoneImgBox = $("<div></div>");
        this.contentText = $("<div></div>");
        this.shopDescribe = $("<div>" + this.config.Detailed.about + "</div>");
        this.price = $("<div>" + this.config.Detailed.sing + this.config.Detailed.proce + "</div>");
        this.mNumber = $("<div>Quantity :  </div>");
        this.input = $.browser.safari && $.system.name == $.system.IOS ? $("<input type='text' value='1' style='width:30px;text-align:center;margin:auto;top:0;bottom:0;height:20px;outline:medium;margin-left:25.5px;position:absolute;border:1px solid rgb(255,255,255)'/>") : $("<input type='text' value='1' style='width:40px;text-align:center;margin:auto;top:0;bottom:0;height:20px;outline:medium;margin-left:25px;position:absolute;border:1px solid rgb(255,255,255)'/>");
        this.input.allowNumberOnly();
        this.mAdd = $("<img src='" + uiBaseURL + "cartAdd.png' style='cursor:pointer;width:25px ;height:25px;position:absolute;background-color:#DDDDDA' />");
        this.mLow = $("<img src='" + uiBaseURL + "cartLow.png' style='cursor:pointer;width:25px ;height:25px;margin-left:69px;position:absolute;background-color:#DDDDDA'/>");
        this.transitTime = $("<div>Delivery time: " + this.config.Detailed.time + "day(s)</div>");
        this.allQuantity = $("<div> " + this.config.Detailed.quantity + " In Stock</div>");
        this.mAddToCart = $("<span>Add to cart</span>");
        this.mCheckOut = $("<span>Checkout</span>");
        this.mailto = $("<a style='text-decoration: none'></a>");
        this.inputChangRed = $("<span style='position:absolute;margin-top:18px;margin-left:30px;color:red;font-size:10px;width:115px;height:15px;right:30px'>Not enough in stock</span>");
        this.content = $("<div></div>");
        this.addlow = $("<div></div>");
        tmpContainer.append(this.phoneContainer);
        this.phoneContainer.append(this.toolBar);
        this.phoneContainer.append(this.content);
        this.phoneContainer.append(this.contentText);
        this.toolBar.append(this.closeButton);
        this.toolBar.append(this.textTitle);
        this.phoneImgBox.append(this.phoneImg);
        this.contentText.append(this.title);
        this.contentText.append(this.shopDescribe);
        this.contentText.append(this.price);
        if ("" != this.advancedObj.advanced) for (var b = 0; b < this.advancedObj.advanceLength; b++)"boolean" == this.advancedObj.advanced[b].type && (this.contentText.append(this.advancedObj.shopAdvanced1), this.advancedObj.shopAdvanced1.css("margin-left", "15px")),
        "text" == this.advancedObj.advanced[b].type && (this.contentText.append(this.advancedObj.shopAdvanced2), this.advancedObj.shopAdvanced2.css("margin-left", "15px")),
        "list" == this.advancedObj.advanced[b].type && (this.contentText.append(this.advancedObj.shopAdvanced3), this.advancedObj.shopAdvanced3.css("margin-left", "15px"));
        this.contentText.append(this.mNumber).append(this.allQuantity).append(this.transitTime);
        this.content.append(this.phoneImgBox).append(this.contentText);
        this.mailto.append(this.mCheckOut);
        this.phoneContainer.append(this.mAddToCart);
        this.phoneContainer.append(this.mailto);
        this.mNumber.append(this.addlow);
        this.addlow.append(this.mAdd).append(this.input).append(this.mLow);
        this.imgs = this.config.Detailed.imgs;
        this.imgs[0] || (this.imgs = [this.imgs.img]);
        this.imgsCount = this.imgs.length; ! 1 === this.setting.shoppingCartOptinon.showPrice && this.price.css({
            display: "none"
        }); ! 1 === this.setting.shoppingCartOptinon.showTime && this.transitTime.css({
            display: "none"
        });
        this.setMobileShopCss();
        this.initImgs()
    },
    initImgs: function() {
        this.imageItems = [];
        for (var b = 0; b < this.imgs.length; b++) this.imageItems[b] = this.imgs[b],
        bookConfig.isFlipPdf && (this.imageItems[b].startWith("./") ? this.imageItems[b] = "." + this.imageItems[b] : this.imageItems[b] = "../" + this.imageItems[b]);
        1 < this.imgsCount && (this.setSwipe(), this.imageURL = this.imageItems[0]);
        this.setImgs(this.imageItems[0])
    },
    setImgs: function(b) {
        this.phoneImg.attr({
            src: b
        })
    },
    setSwipe: function() {
        this.currentIndex = 0;
        var b = function(b, d) {
            var f;
            f = 30 * windowWidth / 1600;
            if (! (Math.abs(b) <= f)) {
                var g = this.imageItems.length;
                b < -f ? this.currentIndex = (this.currentIndex + 1) % g: b > f && (0 == this.currentIndex && (this.currentIndex += g), this.currentIndex = (this.currentIndex - 1) % g);
                this.imageURL = this.imageItems[this.currentIndex];
                this.setImgs(this.imageURL);
                $.browser.mise ? event.cancelBubble = !0 : event.stopPropagation()
            }
        }.bind(this);
        this.phoneImgBox.speed(b)
    },
    setMobileShopCss: function() {
        this.addlow.css({
            position: "absolute",
            width: "100px",
            height: "25px",
            "margin-left": "55px"
        });
        this.content.css({
            position: "relative",
            width: windowWidth + 15 + "px",
            height: windowHeight - 90 + "px",
            "overflow-x": "hidden"
        });
        this.mCheckOut.css({
            position: "absolute",
            "background-color": "#ff4400",
            width: windowWidth / 2 + "px",
            height: "40px",
            "text-align": "center",
            "line-height": "2.5",
            "font-family": "Arial",
            right: "0",
            bottom: "0",
            cursor: "pointer",
            color: "white"
        });
        this.mAddToCart.css({
            position: "absolute",
            "background-color": "#ffa800",
            width: windowWidth / 2 + "px",
            height: "40px",
            "text-align": "center",
            "line-height": "2.5",
            "font-family": "Arial",
            "margin-left": "0",
            bottom: "0",
            cursor: "pointer",
            color: "white"
        });
        this.allQuantity.css({
            width: "300px",
            height: "14px",
            "margin-top": "9px",
            "font-size": "10px",
            "padding-left": "15px",
            color: Color(44849).toString,
            "font-family": "Tahoma"
        });
        this.transitTime.css({
            width: "300px",
            height: "14px",
            "margin-top": "12px",
            color: "black",
            "font-size": "10px",
            "padding-left": "15px",
            "font-family": "Tahoma"
        });
        this.contentText.css({
            position: "relative",
            width: windowWidth + "px"
        });
        this.mNumber.css({
            width: windowWidth + "px",
            height: "40px",
            "margin-top": "16px",
            color: "black",
            "font-size": "10px",
            "padding-left": "15px",
            "font-family": "Tahoma"
        });
        this.price.css({
            position: "relative",
            width: windowWidth + "px",
            height: "20px",
            "margin-top": "7px",
            "font-size": "20px",
            color: Color(12845056).toString(),
            "font-family": "Tahoma",
            "padding-left": "15px"
        });
        this.title.css({
            width: windowWidth - 15 + "px",
            height: "30px",
            "font-size": "18px",
            color: "black",
            "font-family": "Tahoma",
            "padding-left": "15px",
            "margin-top": "7px"
        });
        this.shopDescribe.css({
            width: windowWidth - 20 + "px",
            "line-height": "1.6",
            "font-size": "13px",
            color: "black",
            "padding-left": "15px",
            "margin-top": "5px",
            "font-family": "Tahoma"
        });
        this.textTitle.css({
            position: "absolute",
            width: windowWidth / 2 + 5,
            margin: "auto",
            "font-size": "18px",
            "font-family": "Tahoma",
            color: "rgb(140,140,140)",
            "vertical-align": "middle",
            "line-height": "2.2",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "text-align": "center"
        });
        this.toolBar.css({
            position: "relative",
            width: windowWidth + "px",
            "background-color": "white",
            border: "rgb(239,232,232) 1px solid",
            height: "40px"
        });
        this.closeButton.css({
            position: "absolute",
            margin: "auto",
            "background-image": "url(" + uiBaseURL + "houtui.png)",
            "background-repeat": "no-repeat",
            cursor: "pointer",
            width: "28px",
            height: "28px",
            left: "10px",
            bottom: "0",
            top: "0"
        });
        this.phoneImg.css({
            position: "absolute",
            "max-width": windowWidth - 30 + "px",
            "max-height": 0.3 * windowHeight + "px",
            margin: "auto",
            left: "0",
            bottom: "0",
            top: "0",
            right: "0"
        });
        this.phoneImgBox.css({
            position: "relative",
            width: windowWidth + "px",
            height: 0.35 * windowHeight + "px",
            "z-index": "3000"
        });
        this.phoneContainer.css({
            width: windowWidth + "px",
            height: "100%",
            position: "absolute",
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)",
            "background-color": "#f7f7f7",
            "z-index": "3000"
        })
    },
    initEvent: function() {
        var b = function(b, d) {
            var f;
            f = 30 * windowWidth / 1600;
            Math.abs(b) <= f || b > f && this.hide()
        }.bind(this);
        this.phoneContainer.speed(b);
        this.mailto.bind("click", this.doCheckout.bind(this));
        this.input.bind("blur",
        function() {
            parseInt(this.input.val()) > this.config.Detailed.quantity ? (this.mNumber.append(this.inputChangRed), this.input.css({
                "border-color": "red"
            }), this.canCheckout = !1) : (this.inputChangRed.remove(), this.input.css({
                "border-color": "rgb(255,255,255)"
            }), this.canCheckout = !0)
        }.bind(this));
        this.closeButton.bind("touchend",
        function() {
            this.hide()
        }.bind(this));
        this.mAdd.bind("touchend",
        function() {
            var b = parseInt(this.input.val()) + 1;
            this.input.val(b);
            b > this.config.Detailed.quantity ? (this.mNumber.append(this.inputChangRed), this.input.css({
                "border-color": "red"
            }), this.canCheckout = !1) : this.canCheckout = !0
        }.bind(this));
        this.mLow.bind("touchend",
        function() {
            var b = parseInt(this.input.val());
            1 != b && (b -= 1, this.input.val(b), b <= this.config.Detailed.quantity && (this.inputChangRed.remove(), this.input.css({
                "border-color": "rgb(255,255,255)"
            }), this.canCheckout = !0), this.input.val(b))
        }.bind(this));
        this.mAddToCart.bind("touchstart",
        function() {
            tmpContainer.append(window.shoppingCart.mCart);
            window.shoppingCart.showCart();
            var b = {};
            b.image = 1 >= this.imgsCount ? this.imageItems[0] : this.imageURL;
            b.advancedName = this.advancedObj.setShoppingCartAdvanced().toString();
            b.title = this.config.Detailed.title;
            b.sing = this.config.Detailed.sing;
            b.price = this.config.Detailed.proce;
            b.number = parseInt(this.input.val());
            b.quantity = this.config.Detailed.quantity;
            window.shoppingCart.addProduct(b);
            shoppingCountHTML.html(window.shoppingCart.refreshInputValue())
        }.bind(this))
    },
    show: function() {
        this.textTitle.css({
            display: "block"
        });
        this.contentText.css({
            display: "block"
        });
        this.mAddToCart.css({
            display: "block"
        });
        this.mCheckOut.css({
            display: "block"
        });
        this.phoneContainer.css({
            display: "block"
        });
        animateOnce.delay(this, 10, [this.phoneContainer, {
            transform: "translate(0,0)",
            "-webkit-transform": "translate(0,0)",
            "-moz-transform": "translate(0,0)",
            "-o-transform": "translate(0,0)",
            "-ms-transform": "translate(0,0)"
        },
        0.5, null, "", "ease"])
    },
    hide: function() {
        animateOnce(this.phoneContainer, {
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)"
        },
        0.3, null, "", "ease")
    },
    informationHide: function() {
        this.mAddToCart.css({
            display: "none"
        });
        this.mCheckOut.css({
            display: "none"
        });
        this.textTitle.css({
            display: "none"
        });
        this.contentText.css({
            display: "none"
        })
    },
    onResize: function(b, c) {
        windowWidth = b;
        windowHeight = c;
        this.setMobileShopCss()
    }
}).extend(PageItem.ProductDetailsPanel);
Class("MobileShoppingCartPanel", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = b;
        this.setting = c;
        this.mCart = $("<div></div>");
        this.cToolBar = $("<div></div>");
        this.cClose = $("<div></div>");
        this.cTitle = $("<div>SHOPPINGCART</div>");
        this.deletes = $("<span>Delete</span>");
        this.total = $("<span style='font-size:10px'>(Total:$0.00)</span>");
        this.mCartCheck = $("<div>CheckOut </div>");
        this.cartMailto = $("<a style='text-decoration: none'></a>");
        this.item = $("<span style='position: absolute;bottom: 40px;left: 20px;font-size:12px;font-family:Tahoma;font-weight:bold'></span>");
        this.mCart.append(this.cartMailto);
        this.cartMailto.append(this.mCartCheck);
        this.mCartCheck.append(this.total);
        this.shop = $("<div></div>");
        this.mCart.append(this.cToolBar).append(this.deletes).append(this.shop);
        this.cToolBar.append(this.cClose).append(this.cTitle);
        this.setCartCss();
        this.initEvent();
        this.canCheckout = !1
    },
    addProduct: function(b) {
        b = ShoppingCartUtil.addProduct(b);
        this.shop.empty();
        this.shoppingItems = [];
        for (var c = 0; c < b.length; c++) {
            var d = new PageItem.MobileShoppingCartItem(this, b[c]);
            this.shop.append(d.singleShop);
            this.shoppingItems.push(d)
        }
    },
    initEvent: function() {
        this.cartMailto.bind("click", this.doCheckout.bind(this));
        this.cClose.bind("touchend",
        function() {
            this.hideCart()
        }.bind(this));
        var b = function(b, d) {
            var f;
            f = 30 * windowWidth / 1600;
            Math.abs(b) <= f || b > f && this.hideCart()
        }.bind(this);
        this.mCart.speed(b);
        this.deletes.bind("click",
        function() {
            for (var b = 0; b < this.shoppingItems.length;) {
                var d = this.shoppingItems[b];
                d.isSelected() ? (this.removeItem(d), this.refreshTotalValue(), shoppingCountHTML.html(this.mobileShop.refreshInputValue())) : b++
            }
        }.bind(this))
    },
    setCartCss: function() {
        this.shop.css({
            width: windowWidth - 20 + "px",
            height: 0.78 * windowHeight + "px",
            position: "absolute",
            margin: "auto",
            top: "0px",
            left: "0px",
            bottom: "0px",
            right: "0px",
            "overflow-x": "hidden"
        });
        this.mCartCheck.css({
            position: "absolute",
            "background-color": "#ff4400",
            width: 2 / 3 * windowWidth + "px",
            height: "40px",
            "text-align": "center",
            "line-height": "2.5",
            "font-family": "Arial",
            right: "0",
            bottom: "0",
            cursor: "pointer",
            color: "white"
        });
        this.deletes.css({
            position: "absolute",
            "background-color": "#666666",
            width: windowWidth / 3 + "px",
            height: "40px",
            "text-align": "center",
            "line-height": "2.5",
            "font-family": "Arial",
            "margin-left": "0",
            bottom: "0",
            cursor: "pointer",
            color: "white"
        });
        this.mCart.css({
            width: windowWidth + "px",
            height: windowHeight + "px",
            position: "absolute",
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)",
            "background-color": "#f7f7f7",
            "z-index": "3000"
        });
        this.cTitle.css({
            position: "absolute",
            width: windowWidth / 2,
            margin: "auto",
            "font-size": "18px",
            "font-family": "Tahoma",
            color: "rgb(140,140,140)",
            "vertical-align": "middle",
            "line-height": "2.5",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "text-align": "center"
        });
        this.cToolBar.css({
            position: "relative",
            width: windowWidth + "px",
            "background-color": "white",
            border: "rgb(239,232,232) 1px solid",
            height: "40px"
        });
        this.cClose.css({
            position: "absolute",
            margin: "auto",
            "background-image": "url(" + uiBaseURL + "houtui.png)",
            "background-repeat": "no-repeat",
            cursor: "pointer",
            width: "28px",
            height: "28px",
            left: "10px",
            bottom: "0",
            top: "0"
        })
    },
    showCart: function() {
        this.mCart.css({
            display: "block"
        });
        animateOnce.delay(this, 10, [this.mCart, {
            transform: "translate(0,0)",
            "-webkit-transform": "translate(0,0)",
            "-moz-transform": "translate(0,0)",
            "-o-transform": "translate(0,0)",
            "-ms-transform": "translate(0,0)"
        },
        0.5, null, "", "ease"])
    },
    hideCart: function() {
        animateOnce(this.mCart, {
            transform: "translate(100%,0)",
            "-webkit-transform": "translate(100%,0)",
            "-moz-transform": "translate(100%,0)",
            "-o-transform": "translate(100%,0)",
            "-ms-transform": "translate(100%,0)"
        },
        0.3, null, "", "ease")
    }
}).extend(PageItem.ShoppingCartPanel);
Class("MobileShoppingCartItem", {
    Package: "PageItem",
    create: function(b, c) {
        this.mobileShop = b;
        this.product = c;
        this.addlow = $("<div></div>");
        this.singleShop = $("<div></div>");
        this.checkBox = $("<input type=checkbox name=checkbox1 style='position:relative' />");
        this.checkBox[0].product = c;
        this.shoppingImage = $("<img/>");
        this.cartNot = $("<span style='position:absolute;color:red;font-size:10px;width:115px;height:10px'>Not enough in stock</span>");
        this.cartInput = $.browser.safari && $.system.name == $.system.IOS ? $("<input type='text' value='" + this.product.number + "' style='width:30px;margin-top:39px;text-align:center;height:20px;outline:medium;right:26.5px;position:absolute;border:1px solid rgb(255,255,255)'/>") : $("<input type='text' value='" + this.product.number + "' style='width:40px;margin-top:40px;text-align:center;height:20px;outline:medium;right:26px;position:absolute;border:1px solid rgb(255,255,255)'/>");
        this.cartInput.allowNumberOnly();
        this.cartadd = $("<img src='" + uiBaseURL + "cartAdd.png' style='cursor:pointer;margin-top:40px;width:25px ;height:25px;right:70px;position:absolute;background-color:#DDDDDA' />");
        this.cartlow = $("<img src='" + uiBaseURL + "cartLow.png' style='cursor:pointer;margin-top:40px;width:25px ;height:25px;right:1px;position:absolute;background-color:#DDDDDA'/>");
        this.carttitle = $("<span style='width:100px;height:45px;position:absolute;margin-top: 20px;left:100px;font-family:Tahoma;font-size:12px'></span>");
        this.cartPrice = $("<span></span>");
        null == this.product.advancedName || "" == this.product.advancedName ? (this.carttitle.text(this.carttitle.text().overflow(18)), this.carttitle.text(this.product.title)) : this.carttitle.text(this.product.title + "(" + this.product.advancedName + ")");
        this.cartPrice.text(this.product.sing + forceFloat(this.product.price));
        this.shoppingImage.attr("src", this.product.image);
        this.singleShop.append(this.checkBox).append(this.shoppingImage).append(this.carttitle).append(this.cartPrice).append(this.addlow).append(this.cartadd).append(this.cartInput).append(this.cartlow).append($("<hr style='position:absolute;margin:auto;margin-top:85px;width:480px'/>"));
        this.cartInput.val() > c.quantity && (this.addlow.append(this.cartNot), this.cartInput.css({
            "border-color": "red"
        }), this.canCheckout = !1);
        this.setOneShop();
        this.initEvent()
    },
    initEvent: function() {
        this.checkBox.bind("click",
        function() { (function() {
                this.mobileShop.refreshTotalValue();
                shoppingCountHTML.html(this.mobileShop.refreshInputValue())
            }).delay(this, 10)
        }.bind(this));
        this.cartInput.bind("blur",
        function() {
            var b = parseInt(this.cartInput.val());
            b > this.product.quantity ? (this.addlow.append(this.cartNot), this.cartInput.css({
                "border-color": "red"
            }), this.canCheckout = !1) : (this.cartNot.remove(), this.cartInput.css({
                "border-color": "rgb(255,255,255)"
            }), this.canCheckout = !0);
            this.product.number = b;
            ShoppingCartUtil.saveProducts(this.mobileShop.shoppingItems, this.mobileShop.setting);
            shoppingCountHTML.html(this.mobileShop.refreshInputValue())
        }.bind(this));
        this.cartadd.bind("touchend",
        function() {
            var b = parseInt(this.cartInput.val()),
            b = b + 1;
            this.cartInput.val(b);
            this.product.number = b;
            this.mobileShop.refreshTotalValue();
            b > this.product.quantity ? (this.addlow.append(this.cartNot), this.cartInput.css({
                "border-color": "red"
            }), this.canCheckout = !1) : this.canCheckout = !0;
            ShoppingCartUtil.saveProducts(this.mobileShop.shoppingItems, this.mobileShop.setting);
            shoppingCountHTML.html(this.mobileShop.refreshInputValue())
        }.bind(this));
        this.cartlow.bind("touchend",
        function() {
            var b = parseInt(this.cartInput.val()),
            b = b - 1;
            0 > b || (this.cartInput.val(b), this.product.number = b, this.mobileShop.refreshTotalValue(), this.mobileShop.refreshInputValue(), b <= this.product.quantity ? (this.cartNot.remove(), this.cartInput.css({
                "border-color": "rgb(255,255,255)"
            }), this.canCheckout = !0) : this.canCheckout = !1, ShoppingCartUtil.saveProducts(this.mobileShop.shoppingItems, this.mobileShop.setting), shoppingCountHTML.html(this.mobileShop.refreshInputValue()))
        }.bind(this))
    },
    isSelected: function() {
        return this.checkBox[0].checked
    },
    setOneShop: function() {
        this.cartPrice.css({
            position: "absolute",
            width: "70px",
            height: "20px",
            "margin-top": "40px",
            "font-size": "15px",
            color: "rgb(250,11,11)",
            "margin-top": "60px",
            "font-family": "Tahoma",
            left: "100px"
        });
        this.addlow.css({
            width: "115px",
            height: "20px",
            position: "absolute",
            right: "0px",
            "margin-top": "55px"
        });
        this.shoppingImage.css({
            position: "absolute",
            width: "70px",
            height: "70px",
            "margin-top": "20px"
        });
        this.singleShop.css({
            width: windowWidth + "px",
            height: "120px"
        })
    }
}).extend(ShoppingCartItem);
Class("PCProductDetailsPanel", {
    Package: "PageItem",
    create: function(b, c, d) {
        this.advancedObj = new PageItem.ShoppingAdvancedProperty(b);
        this._super(b, c, d);
        window.shoppingCart || (window.shoppingCart = new PageItem.PCShoppingCartPanel(b, c));
        window.shoppingCart.onClose = this.shoppingCartClose.bind(this);
        shoppingCountHTML.html(window.shoppingCart.refreshInputValue());
        this.canCheckout = !0
    },
    parseConfig: function(b) {
        return {
            annotype: b.annotype,
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            bgColor: b.bgColor,
            bgAlpha: b.bgAlpha,
            cartType: b.cartType,
            imgUrl: b.imgUrl,
            titleStr: b.titleStr,
            url: b.url,
            Detailed: b.Detailed
        }
    },
    destroy: function() {
        this.container.empty();
        this.container.remove()
    },
    initUI: function() {
        this.imgs = this.config.Detailed.imgs;
        this.imgs[0] || (this.imgs = [this.imgs.img]);
        this.imgBox = $("<div></div>");
        this.shopImg = $("<img/>");
        this.background = $("<div></div>");
        this.container = $("<div id='ShoppingCart' ></div>");
        this.closeButton = $("<div></div>");
        this.content = $("<div></div>");
        this.contentText = $("<div></div>");
        this.shopTitle = $("<div></div>");
        this.shopPrice = $("<div>Price:  " + this.config.Detailed.sing + this.config.Detailed.proce + "</div>");
        this.allQuantity = $("<div> " + this.config.Detailed.quantity + " In Stock</div>");
        this.bgImage = $("<div style='display:none'></div>");
        this.time = $("<div>Delivery time: " + this.config.Detailed.time + "day(s)</div>");
        this.about = $("<div>" + this.config.Detailed.about + "</div>");
        this.number = $("<div>Quantity : </div>");
        this.addToCart = $("<span>Add to cart</span>");
        this.checkout = $("<a><div>Checkout</div></a>");
        this.close = $("<span>Close</span>");
        this.input = $("<input type='text' value='1' style='width : 70px;height:12px;outline:medium;margin-left:22px;position:absolute;background:transparent;border:1px solid rgb(150,150,150)'/>");
        this.input.allowNumberOnly();
        this.add = $("<img src='" + uiBaseURL + "cartAdd.png' style='cursor:pointer;width:17px ;height:17px;position:absolute' />");
        this.low = $("<img src='" + uiBaseURL + "cartLow.png' style='cursor:pointer;width:17px ;height:17px;margin-left:100px;position:absolute'/>");
        this.not = $("<span style='position:absolute;color:red;font-size:10px;width:115px;height:10px;right:30px'>Not enough in stock</span>");
        this.setShopCss();
        tmpContainer.append(this.bgImage);
        tmpContainer.append(this.container);
        this.container.append(this.content);
        this.container.append(this.closeButton);
        this.content.append(this.imgBox);
        this.imgBox.append(this.shopImg);
        this.content.append(this.contentText);
        this.contentText.append(this.shopTitle);
        this.contentText.append(this.shopPrice);
        if ("" != this.advancedObj.advanced) for (var b = 0,
        c = 0; c < this.advancedObj.advanceLength; c++) b += 30,
        "boolean" == this.advancedObj.advanced[c].type && this.contentText.append(this.advancedObj.shopAdvanced1),
        "text" == this.advancedObj.advanced[c].type && this.contentText.append(this.advancedObj.shopAdvanced2),
        "list" == this.advancedObj.advanced[c].type && this.contentText.append(this.advancedObj.shopAdvanced3),
        this.about.css({
            width: "320px",
            height: 150 - b + "px",
            "margin-top": "10px",
            "font-size": "10px",
            "font-family": "Arial",
            "overflow-x": "hidden"
        });
        this.contentText.append(this.number);
        this.number.append(this.add);
        this.number.append(this.input);
        this.number.append(this.low);
        this.contentText.append(this.allQuantity);
        this.contentText.append(this.time);
        this.contentText.append(this.about);
        this.contentText.append(this.addToCart);
        this.contentText.append(this.close);
        this.shopTitle.html(this.config.Detailed.title);
        this.shopTitle.text(this.shopTitle.text().overflow(16));
        this.mailto = $("<a></a>");
        this.mailto.append(this.checkout);
        this.contentText.append(this.mailto);
        this.contentText.css("display", "none"); ! 1 === this.setting.shoppingCartOptinon.showPrice && this.shopPrice.css({
            display: "none"
        }); ! 1 === this.setting.shoppingCartOptinon.showTime && this.time.css({
            display: "none"
        });
        this.initImgs();
        $(window).resize(this.onResize())
    },
    initImgs: function() {
        this.imageItems = [];
        for (var b = 0; b < this.imgs.length; b++) this.imageItems.push(this.imgs[b]),
        bookConfig.isFlipPdf && (this.imageItems[b].startWith("./") ? this.imageItems[b] = "." + this.imageItems[b] : this.imageItems[b] = "../" + this.imageItems[b]);
        1 < this.imgs.length && (this.imageURL = this.imageItems[0], this.initButton());
        this.setImgs(this.imageItems[0])
    },
    setImgs: function(b) {
        this.shopImg.attr("src", b)
    },
    initButton: function() {
        this.leftButton = $('<img src="' + uiBaseURL + 'previous_normal_down.png" style="position:absolute;z-index:1000;cursor:pointer"></img>');
        this.rightButton = $('<img src="' + uiBaseURL + 'next_normal.png" style="position:absolute;z-index:1000;cursor:pointer"></img>');
        this.setButtonPosition();
        this.currentIndex = 0;
        var b = this.imageItems.length;
        this.leftButton.bind("click",
        function() {
            this.busy = !0;
            0 == this.currentIndex && (this.currentIndex += b);
            this.currentIndex = (this.currentIndex - 1) % b;
            this.imageURL = this.imageItems[this.currentIndex];
            this.setImgs(this.imageURL)
        }.bind(this));
        this.rightButton.bind("click",
        function() {
            this.busy = !0;
            this.currentIndex = (this.currentIndex + 1) % b;
            this.imageURL = [this.currentIndex];
            this.setImgs(this.imageURL)
        }.bind(this));
        this.imgBox.append(this.leftButton).append(this.rightButton)
    },
    setButtonPosition: function() {
        this.leftButton.css({
            left: "0px",
            top: "130.5px"
        });
        this.rightButton.css({
            right: "0px",
            top: "130.5px"
        })
    },
    setShopCss: function() {
        this.bgImage.css({
            position: "absolute",
            width: windowWidth + "px",
            height: windowHeight + "px",
            opacity: "0.5",
            top: 0,
            "background-color": "black",
            "z-index": "100"
        });
        var b = "translate(0, " + -((windowHeight - 430) / 2 + 430) + "px)";
        this.container.css({
            position: "absolute",
            width: "730px",
            height: "430px",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            transform: b,
            "-webkit-transform": b,
            "-moz-transform": b,
            "-o-transform": b,
            "-ms-transform": b,
            "z-index": "2000"
        });
        this.content.css({
            position: "absolute",
            width: "700",
            height: "400",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            "background-color": "white",
            "z-index": "2000"
        });
        this.closeButton.css({
            position: "absolute",
            width: "20px",
            height: "20px",
            right: "0",
            "background-image": "url(" + uiBaseURL + "closecat.png)",
            "background-repeat": "no-repeat",
            cursor: "pointer"
        });
        this.imgBox.css({
            position: "absolute",
            width: "360px",
            height: "325px",
            margin: "auto",
            left: "10px",
            top: "0",
            bottom: "20px"
        });
        this.shopImg.css({
            "max-width": "325px",
            "max-height": "325px",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0"
        });
        this.contentText.css({
            position: "absolute",
            width: "304px",
            height: "355px",
            margin: "auto",
            "margin-top": "30px",
            right: "10px",
            "overflow-x": "hidden"
        });
        this.shopTitle.css({
            width: "300px",
            height: "30px",
            "font-size": "32px",
            color: "black",
            "font-family": "Arial",
            "font-weight": "bold"
        });
        this.about.css({
            width: "320px",
            height: "150px",
            "margin-top": "10px",
            "font-size": "10px",
            "font-family": "Arial",
            "overflow-x": "hidden"
        });
        this.number.css({
            width: "300px",
            height: "20px",
            "margin-top": "5px",
            color: "black",
            "font-size": "10px",
            "font-family": "Arial"
        });
        this.time.css({
            width: "300px",
            height: "14px",
            "margin-top": "8px",
            color: "black",
            "font-size": "10px",
            "font-family": "Arial"
        });
        this.allQuantity.css({
            width: "300px",
            height: "14px",
            "margin-top": "8px",
            "font-size": "10px",
            color: Color(44849).toString(),
            "font-family": "Arial"
        });
        this.shopPrice.css({
            width: "300px",
            height: "18px",
            "margin-top": "8px",
            "font-size": "16px",
            color: Color(12845056).toString(),
            "font-family": "Arial"
        });
        this.addToCart.css({
            position: "absolute",
            "background-image": $.browser.prefix + "linear-gradient(90deg, " + Color(6579300).toString() + ", " + Color(4342338).toString() + ")",
            width: "68px",
            "text-align": "center",
            "line-height": "2.0",
            "font-size": "10px",
            "font-family": "Arial",
            bottom: "10px",
            "margin-left": "85px",
            cursor: "pointer",
            color: "white"
        });
        this.checkout.css({
            position: "absolute",
            "background-image": $.browser.prefix + "linear-gradient(90deg, " + Color(6579300).toString() + ", " + Color(4342338).toString() + ")",
            width: "60px",
            "text-align": "center",
            "line-height": "2.0",
            "font-size": "10px",
            "font-family": "Arial",
            bottom: "10px",
            right: "87px",
            cursor: "pointer",
            color: "white",
            "text-decoration": "none"
        });
        this.close.css({
            position: "absolute",
            "background-image": $.browser.prefix + "linear-gradient(90deg, " + Color(6579300).toString() + ", " + Color(4342338).toString() + ")",
            width: "40px",
            "text-align": "center",
            "line-height": "2.0",
            "font-size": "10px",
            "font-family": "Arial",
            bottom: "10px",
            right: "30px",
            cursor: "pointer",
            color: "white"
        })
    },
    initEvent: function() {
        this.input.bind("blur",
        function() {
            parseInt(this.input.val()) > this.config.Detailed.quantity ? (this.number.append(this.not), this.input.css({
                "border-color": "red"
            }), this.canCheckout = !1) : (this.not.remove(), this.input.css({
                "border-color": "rgb(150,150,150)"
            }), this.canCheckout = !0)
        }.bind(this));
        this.add.bind("click",
        function() {
            var b = this.input.val(),
            b = parseInt(b) + 1;
            this.input.val(b);
            b > this.config.Detailed.quantity ? (this.number.append(this.not), this.input.css({
                "border-color": "red"
            }), this.canCheckout = !1) : this.canCheckout = !0;
            ShoppingCartUtil.saveProducts(this.shoppingItems, this.setting)
        }.bind(this));
        this.low.bind("click",
        function() {
            var b = parseInt(this.input.val());
            0 != b && (b -= 1, b <= this.config.Detailed.quantity && (this.not.remove(), this.input.css({
                "border-color": "rgb(150,150,150)"
            }), this.canCheckout = !0), this.input.val(b))
        }.bind(this));
        this.mailto.bind("click", this.doCheckout.bind(this));
        this.bgImage.bind(_event._end,
        function() {
            this.hide();
            window.shoppingCart.cart.css({
                display: "none"
            });
            this.bgImage.css({
                display: "none"
            })
        }.bind(this));
        this.closeButton.bind("click", this.hide.bind(this));
        this.close.bind("click", this.hide.bind(this));
        this.addToCart.bind("click",
        function() {
            bookContainer.append(this.cart);
            this.skipHeid();
            window.shoppingCart.showCart();
            var b = {};
            b.image = 1 >= this.imageItems.length ? this.imageItems[0] : this.imageURL;
            b.advancedName = this.advancedObj.setShoppingCartAdvanced().toString();
            b.title = this.config.Detailed.title;
            b.sing = this.config.Detailed.sing;
            b.price = parseInt(this.config.Detailed.proce);
            b.number = parseInt(this.input.val());
            b.quantity = parseInt(this.config.Detailed.quantity);
            window.shoppingCart.addProduct(b);
            shoppingCountHTML.html(window.shoppingCart.refreshInputValue())
        }.bind(this))
    },
    shoppingCartClose: function() {
        this.bgImage.css({
            display: "none"
        })
    },
    onResize: function() {
        var b = this.container.css("width"),
        c = this.container.css("height");
        this.height = parseInt(c.replace("px", ""));
        this.width = parseInt(b.replace("px", ""));
        this.container.css({
            "margin-left": (windowWidth - this.width) / 2 + "px",
            "margin-top": (windowHeight - this.height) / 2 + "px"
        })
    },
    skipHeid: function() {
        var b = this.container.css("height");
        this.height = parseInt(b.replace("px", ""));
        b = "translate(0, " + -((windowHeight - this.height) / 2 + this.height) + "px)";
        b = {
            transform: b,
            "-webkit-transform": b,
            "-moz-transform": b,
            "-o-transform": b,
            "-ms-transform": b
        };
        this.bgImage.css({
            display: "none"
        });
        animateOnce(this.container, b, 0.5, null, "", "ease-in-out")
    },
    hide: function() {
        var b = this.container.css("height");
        this.height = parseInt(b.replace("px", ""));
        b = "translate(0, " + -((windowHeight - this.height) / 2 + this.height) + "px)";
        b = {
            transform: b,
            "-webkit-transform": b,
            "-moz-transform": b,
            "-o-transform": b,
            "-ms-transform": b
        };
        this.bgImage.css({
            display: "none"
        });
        this.contentText.css("display", "none");
        animateOnce(this.container, b, 0.5, null, "", "ease-in-out")
    },
    show: function() {
        this.bgImage.css({
            display: "block"
        });
        animateOnce.delay(this, 10, [this.container, {
            transform: "translate(0px,0px)",
            "-webkit-transform": "translate(0px,0px)",
            "-moz-transform": "translate(0px,0px)",
            "-o-transform": "translate(0px,0px)",
            "-ms-transform": "translate(0px,0px)"
        },
        0.5,
        function() {
            this.contentText.css("display", "block")
        }.bind(this), "", "ease-in-out"])
    }
}).extend(PageItem.ProductDetailsPanel);
Class("PCShoppingCartPanel", {
    Package: "PageItem",
    create: function(b, c) {
        this.config = b;
        this.setting = c;
        this.cart = $("<div></div>");
        this.cartTitles = $("<span>Shopping Cart</span>");
        this.cartprices = $("<span style='position:absolute;font-size:12px;font-weight:bold;margin-top:50px;right:80px;font-family:Tahoma;color:black'>Price</span>");
        this.cartqu = $("<span style='position:absolute;font-size:12px;font-weight:bold;margin-top:50px;right:180px;font-family:Tahoma;color:black'>Quantity</span>");
        this.shopping = $("<div id='shopPrice'></div>");
        this.item = $("<span class=itemss style='position: absolute;bottom: 40px;left: 20px;font-size:12px;font-family:Tahoma;font-weight:bold'></span>");
        this.total = $("<span></span>");
        this.cartCheckout = $("<span>Checkout</span>");
        this.cartClose = $("<span>Close</span>");
        this.cartMailto = $("<a></a>");
        this.cart.append(this.cartTitles);
        this.cart.append(this.cartqu);
        this.cart.append(this.cartprices);
        this.cart.append(this.shopping);
        this.cart.append(this.item);
        this.cart.append(this.total);
        window.bgImage = $("<div></div>");
        this.cartMailto.append(this.cartCheckout);
        this.cart.append(this.cartMailto);
        this.cart.append(this.cartClose);
        tmpContainer.append(window.bgImage);
        tmpContainer.append(this.cart);
        this.promptBox = $("<div></div>");
        this.setCartCss();
        this.hideCart();
        this.initEvent();
        this.canCheckout = !1
    },
    initEvent: function() {
        window.bgImage.bind(_event._end,
        function() {
            this.cart.css({
                display: "none"
            });
            window.bgImage.css({
                display: "none"
            })
        }.bind(this));
        this.cartMailto.bind("click", this.doCheckout.bind(this));
        this.cartMailto.bind("click",
        function() {}.bind(this));
        this.cartClose.bind("click",
        function() {
            this.hideCart();
            if (this.onClose) this.onClose();
            ShoppingCartUtil.saveProducts(this.shoppingItems, this.setting)
        }.bind(this))
    },
    addProduct: function(b) {
        b = ShoppingCartUtil.addProduct(b);
        this.shopping.empty();
        this.shoppingItems = [];
        for (var c = 0; c < b.length; c++) {
            var d = new PageItem.PCShoppingCartItem(this, b[c]);
            this.shopping.append(d.singleShop);
            this.shoppingItems.push(d)
        }
        this.refreshTotalValue();
        this.refreshInputValue()
    },
    showCart: function() {
        this.cart.css("display", "block");
        window.bgImage.css("display", "block")
    },
    hideCart: function() {
        this.cart.css("display", "none");
        window.bgImage.css("display", "none")
    },
    setCartCss: function() {
        window.bgImage.css({
            position: "absolute",
            width: windowWidth + "px",
            height: windowHeight + "px",
            opacity: "0.5",
            top: 0,
            "background-color": "black",
            "z-index": "100"
        });
        this.shopping.css({
            width: "515px",
            height: "190px",
            position: "absolute",
            margin: "auto",
            top: "10px",
            left: "0px",
            bottom: "0px",
            right: "0px",
            "overflow-x": "hidden"
        });
        this.total.css({
            position: "absolute",
            bottom: "40px",
            right: "20px",
            "font-size": "12px",
            "font-family": "Tahoma",
            "font-weight": "bold"
        });
        this.cartClose.css({
            position: "absolute",
            "background-image": $.browser.prefix + "linear-gradient(90deg, " + Color(6579300).toString() + ", " + Color(4342338).toString() + ")",
            width: "40px",
            "text-align": "center",
            "line-height": "2.0",
            "font-size": "10px",
            "font-family": "Arial",
            bottom: "10px",
            right: "30px",
            cursor: "pointer",
            color: "white"
        });
        this.cartCheckout.css({
            position: "absolute",
            "background-image": $.browser.prefix + "linear-gradient(90deg, " + Color(6579300).toString() + ", " + Color(4342338).toString() + ")",
            width: "60px",
            "text-align": "center",
            "line-height": "2.0",
            "font-size": "10px",
            "font-family": "Arial",
            bottom: "10px",
            right: "87px",
            cursor: "pointer",
            color: "white",
            "text-decoration": "none"
        });
        this.cartTitles.css({
            position: "absolute",
            "padding-left": "10px",
            width: "489px",
            "border-bottom": "1px solid white",
            height: "40px",
            "font-size": "12px",
            "font-family": "Tahoma",
            color: "white",
            "background-color": "rgb(152,152,152)"
        });
        this.cart.css({
            position: "absolute",
            border: "1px solid white",
            "line-height": "2.5",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0",
            width: "500px",
            height: "350px",
            "background-color": "rgb(218,218,218)",
            "overflow-x": "hidden",
            "z-index": "3000"
        })
    }
}).extend(PageItem.ShoppingCartPanel);
Class("PCShoppingCartItem", {
    Package: "PageItem",
    create: function(b, c) {
        this.shop = b;
        this.product = c;
        this.cartPrice = $("<span></span>");
        this.addlow = $("<div></div>");
        this.singleShop = $("<div style='width:480px;height:80px'></div>");
        this.cartInput = $("<input id='cartinput' type='text' value='" + this.product.number + "'/>");
        this.cartInput.allowNumberOnly();
        this.shoppingImage = $("<img/>");
        this.carttitle = $("<span style='width:180px;line-height:1.3;height:50px;position:absolute;margin-top: 25px;left:60px;font-family:Tahoma;font-size:12px'></span>");
        this.dustbin = $("<img src='" + uiBaseURL + "cartDelete.png' style='cursor:pointer;position:absolute;right: 30px;margin-top:35px'/>");
        this.cartadd = $("<img src='" + uiBaseURL + "cartAdd.png' style='cursor:pointer;width:17px ;height:17px;position:absolute;padding-top:2px;left:25px' />");
        this.cartlow = $("<img src='" + uiBaseURL + "cartLow.png' style='cursor:pointer;width:17px ;height:17px;margin-left:100px;position:absolute'/>");
        this.cartNot = $("<span style='position:absolute;color:red;font-size:10px;width:115px;height:10px;margin-top:15px;left:15px'>Not enough in stock</span>");
        this.singleShop.append(this.shoppingImage);
        this.singleShop.append(this.carttitle);
        this.singleShop.append(this.addlow);
        this.singleShop.append(this.cartPrice);
        this.singleShop.append(this.dustbin);
        this.addlow.append(this.cartadd);
        this.addlow.append(this.cartlow);
        this.addlow.append(this.cartInput);
        this.setImg(this.product.image); ! 1 === pageEditor.setting.shoppingCartOptinon.showPrice && this.cartPrice.css({
            display: "none"
        });
        null == this.product.advancedName || "" == this.product.advancedName ? (this.carttitle.text(this.carttitle.text().overflow(16)), this.carttitle.text(this.product.title)) : this.carttitle.text(this.product.title + "(" + this.product.advancedName + ")");
        this.cartPrice.text(this.product.sing + forceFloat(this.product.price));
        this.singleShop.append($("<hr style='position:absolute;margin:auto;margin-top:85px;width:480px'/>"));
        this.cartInput.val() > c.quantity && (this.addlow.append(this.cartNot), this.cartInput.css({
            "border-color": "red"
        }), this.shop.canCheckout = !1);
        this.initEvent();
        this.setCartCSS()
    },
    setImg: function(b) {
        this.shoppingImage.attr("src", b)
    },
    initEvent: function() {
        this.cartInput.bind("blur",
        function() {
            var b = parseInt(this.cartInput.val());
            "" == b && (b = this.cartInput.val());
            b > this.product.quantity ? (this.addlow.append(this.cartNot), this.cartInput.css({
                "border-color": "red"
            }), this.canCheckout = !1) : (this.cartNot.remove(), this.cartInput.css({
                "border-color": "rgb(150,150,150)"
            }), this.canCheckout = !0)
        }.bind(this));
        this.dustbin.bind("click",
        function() {
            this.shop.removeItem(this);
            this.shop.refreshTotalValue();
            shoppingCountHTML.html(this.shop.refreshInputValue())
        }.bind(this));
        this.cartadd.bind("click",
        function() {
            var b = this.cartInput.val(),
            b = parseInt(b) + 1;
            this.cartInput.val(b);
            this.product.number = b;
            b > this.product.quantity && (this.addlow.append(this.cartNot), this.cartInput.css({
                "border-color": "red"
            }));
            this.shop.refreshTotalValue();
            ShoppingCartUtil.saveProducts(this.shop.shoppingItems, this.shop.setting);
            shoppingCountHTML.html(this.shop.refreshInputValue())
        }.bind(this));
        this.cartlow.bind("click",
        function() {
            var b = this.cartInput.val();
            0 != parseInt(b) && (b = parseInt(b) - 1, this.cartInput.val(b), this.product.number = b, b <= this.product.quantity && (this.cartNot.remove(), this.cartInput.css({
                "border-color": "rgb(150,150,150)"
            })), this.shop.refreshTotalValue(), ShoppingCartUtil.saveProducts(this.shop.shoppingItems, this.shop.setting), shoppingCountHTML.html(this.shop.refreshInputValue()))
        }.bind(this))
    },
    setCartCSS: function() {
        this.cartPrice.css({
            position: "absolute",
            width: "70px",
            height: "20px",
            "margin-top": "12px",
            "font-size": "12px",
            color: "black",
            "margin-top": "30px",
            "font-family": "Tahoma",
            right: "50px"
        });
        this.cartInput.css({
            "text-align": "center",
            width: "40px",
            height: "15px",
            outline: "medium",
            "margin-left": "50px",
            position: "absolute",
            background: "transparent",
            border: "1px solid rgb(150,150,150)"
        });
        this.addlow.css({
            width: "120px",
            height: "40px",
            position: "absolute",
            right: "170px",
            position: "absolute",
            "margin-top": "35px"
        });
        this.shoppingImage.css({
            position: "absolute",
            width: "52px",
            height: "35px",
            "margin-top": "28px"
        })
    }
}).extend(PageItem.ShoppingCartItem);
Class("ShoppingAdvancedProperty", {
    Package: "PageItem",
    create: function(b) {
        this.config = b;
        this.advanced = this.config.Detailed.advanced;
        this.advanceLength = this.advanced.length;
        this.advanced[0] || (this.advanced = [this.advanced.list]);
        this.shopAdvanced1 = $("<div style='width:300px; height:25px;margin-top:5px'></div>");
        this.shopAdvanced2 = $("<div style='width:300px; height:30px;margin-top:7px'></div>");
        this.shopAdvanced3 = $("<div style='width:300px; height:30px;margin-top:7px'></div>");
        for (b = 0; b < this.advanceLength; b++)"list" == this.advanced[b].type && (this.advanceListValue = this.advanced[b].defaultValue);
        this.initAdvanced();
        this.setAdvanceEvent()
    },
    initAdvanced: function() {
        var b = 0;
        this.shopSelect = [];
        for (var c = 0; c < this.advanceLength; c++) if (b += 20, "boolean" == this.advanced[c].type && (this.shopTypeName = $("<div style='margin-left:25px;width:155px; height:20px;font-family:Arial; font-size:12px;line-height:1.5'>" + this.advanced[c].name + "</div>"), this.checkBox = $("<input type=checkbox style='position:absolute'/>"), !0 === this.advanced[c].defaultValue && this.checkBox.attr("checked", "checked"), this.shopAdvanced1.append(this.checkBox).append(this.shopTypeName)), "text" == this.advanced[c].type && (this.shopTypeName = $("<div style='width:55px; height:20px;font-family:Arial;font-size:12px;position:absolute'>" + this.advanced[c].name + ":</div>"), this.shopValue = $("<input style='width:200px;position:absolute;left:50px; height:16px;font-family:Arial; font-size:12px;outline:medium' value=" + this.advanced[c].value + "/>"), this.shopAdvanced2.append(this.shopTypeName).append(this.shopValue)), "list" == this.advanced[c].type) {
            var d = [],
            d = this.advanced[c].value.split(";"),
            f = 0;
            this.shopTypeName = $("<div style='position:absolute;width:55px; height:20px;font-family:Arial; font-size:12px'>" + this.advanced[c].name + ":</div>");
            this.shopAdvanced3.append(this.shopTypeName);
            for (var g = 0; g < d.length; g++) 0 < g && 0 == g % 5 && (this.shopAdvanced3.append("<br/><br/>"), f = 0, this.shopAdvanced3.css("height", 40 + b + "px")),
            f += 50,
            this.shopSelect[g] = $("<div class=borderStyle style='height:20px;cursor:pointer;font-family:Arial; font-size:12px;border:1px solid black;left:" + f + "px;position:absolute;text-align:center;line-height:1.7;padding-left:4px;padding-right:4px'>" + d[g] + "</div>"),
            this.advanced[c].defaultValue == d[g] && this.shopSelect[g].css("border", "2px solid rgb(255,0,0)"),
            this.shopAdvanced3.append(this.shopSelect[g])
        }
    },
    setAdvanceEvent: function() {
        for (var b = this.shopSelect.length,
        c = this.shopSelect,
        d = this,
        f = 0; f < b; f++) c[f].bind("click",
        function() {
            for (j = 0; j < b; j++) c[j][0] == this ? (d.advanceListValue = c[j][0].innerText, c[j].css("border", "2px solid rgb(255,0,0)")) : c[j].css("border", "1px solid rgb(0,0,0)")
        })
    },
    isCheckBoxSelected: function() {
        return this.checkBox[0].checked
    },
    setShoppingCartAdvanced: function() {
        var b = "";
        if (0 != this.advanceLength) for (var c = 0; c < this.advanceLength; c++)"text" == this.advanced[c].type && (this.advanced[c].defaultValue = this.shopValue.val()),
        "list" == this.advanced[c].type && (this.advanced[c].defaultValue = this.advanceListValue),
        this.isCheckBoxSelected() && "boolean" == this.advanced[c].type && (this.advanced[c].defaultValue = this.isCheckBoxSelected().toString()),
        b += this.advanced[c].name + ":" + this.advanced[c].defaultValue + "  ";
        return b
    }
});
Class("Pentagon", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.pentagon = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.pentagon.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.pentagon, this.config.rotation);
        this.parent.append(this.pentagon);
        this.draw();
        this.initEvent()
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.pentagon[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        c.beginPath();
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.moveTo(this.config.borderWidth, 3 * this.height / 8);
        c.lineTo(this.width / 6, this.height);
        c.lineTo(5 * this.width / 6, this.height);
        c.lineTo(this.width, 3 * this.height / 8);
        c.lineTo(this.width / 2, this.config.borderWidth);
        this.config.sh && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.pentagon)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.pentagon[0].width = this.width;
        this.pentagon[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.pentagon.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Dovetailed", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.pageHeights = this.config.pageHeight;
        this.width = Number(this.config.width * this.pageWidth);
        this.height = Number(this.config.height * this.pageHeight);
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.dovetailed = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.dovetailed.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.dovetailed, this.config.rotation);
        this.parent.append(this.dovetailed);
        this.draw(this.pageWidth);
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.dovetailed)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            arrowWidth: b.arrowWidth,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function(b) {
        var c = this.dovetailed[0],
        d = c.getContext("2d");
        this.config.borderWidth = Number(this.config.borderWidth);
        d.clearRect(0, 0, c.width, c.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        this.config.pageWidth || (this.config.pageWidth = bookConfig.largePageWidth);
        this.arrowWidth = this.config.arrowWidth / this.config.pageWidth * b;
        this.arrowWidth > 2 * this.width / 3 && (this.arrowWidth = this.width - 2 * this.width / 3);
        0 == this.arrowWidth && (this.arrowWidth = this.width - 10, this.arrowWidth = 10);
        this.dovetailWidth = this.width - this.arrowWidth;
        d.beginPath();
        d.lineCap = "round";
        d.lineJoin = "round";
        d.strokeStyle = Color(this.config.borderColor).toString();
        d.lineWidth = this.config.borderWidth;
        d.globalAlpha = this.config.spalpha;
        d.moveTo(this.config.borderWidth, this.config.borderWidth);
        d.lineTo(this.arrowWidth, (this.height + this.config.borderWidth) / 2);
        d.lineTo(this.config.borderWidth, this.height);
        d.lineTo(this.dovetailWidth, this.height);
        d.lineTo(this.width, (this.height + this.config.borderWidth) / 2);
        d.lineTo(this.dovetailWidth, this.config.borderWidth);
        this.config.sh && (d.shadowOffsetX = this.config.sx, d.shadowOffsetY = this.config.sy, d.shadowBlur = this.config.sd, d.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            c = this.config.angle * Math.PI / 180;
            b = this.width / 2 + this.width / 2 * Math.cos(c);
            var c = this.height / 2 + this.height / 2 * Math.sin(c),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f);
            b = d.createLinearGradient(g, f, b, c);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            d.fillStyle = b;
            d.fill()
        }
        "Pure" == this.config.fillStyle && (d.fillStyle = this.color, d.fill());
        d.closePath();
        0 != this.config.borderWidth && d.stroke()
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.dovetailed)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.dovetailed[0].width = this.width;
        this.dovetailed[0].height = this.height;
        this.draw(this.pageWidth);
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.dovetailed.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Parallelogram", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.parallelogram = $("<canvas width='" + this.width + "' height='" + this.height + "' id='prismatic'></canvas>");
        this.parallelogram.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.parallelogram, this.config.rotation);
        this.parent.append(this.parallelogram);
        this.draw();
        this.initEvent()
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.parallelogram[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        c.beginPath();
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.moveTo(this.width / 4, this.config.borderWidth);
        c.lineTo(this.config.borderWidth, this.height);
        c.lineTo(3 * this.width / 4 + 2, this.height);
        c.lineTo(this.width, this.config.borderWidth);
        parseBool(this.config.sh) && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.parallelogram)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.parallelogram[0].width = this.width;
        this.parallelogram[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.parallelogram.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Hexagon", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.hexagon = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.hexagon.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.hexagon, this.config.rotation);
        this.parent.append(this.hexagon);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.hexagon)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.hexagon[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        c.beginPath();
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.moveTo(this.width / 4, this.config.borderWidth);
        c.lineTo(this.config.borderWidth, this.height / 2);
        c.lineTo(this.width / 4, this.height);
        c.lineTo(3 * this.width / 4, this.height);
        c.lineTo(this.width, this.height / 2);
        c.lineTo(3 * this.width / 4, this.config.borderWidth);
        this.config.sh && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.hexagon[0].width = this.width;
        this.hexagon[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.hexagon.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (void 0 != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(1, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.hexagon)
    }
}).extend(PageItem.Item);
Class("FlowChart", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.flowChart = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.flowChart.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.flowChart, this.config.rotation);
        this.parent.append(this.flowChart);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.flowChart)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.flowChart[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        c.beginPath();
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.moveTo(this.config.borderWidth, this.config.borderWidth);
        c.lineTo(this.config.borderWidth, this.height);
        c.lineTo(this.width, this.height);
        c.lineTo(this.width, this.config.borderWidth);
        parseBool(this.config.sh) && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        c.stroke();
        c.beginPath();
        c.moveTo(this.width / 8 + this.config.borderWidth, this.config.borderWidth);
        c.lineTo(this.width / 8 + this.config.borderWidth, this.height);
        c.closePath();
        c.stroke();
        c.beginPath();
        c.moveTo(7 * this.width / 8, this.config.borderWidth);
        c.lineTo(7 * this.width / 8, this.height);
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.flowChart)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.flowChart[0].width = this.width;
        this.flowChart[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.flowChart.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Cylinder", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.cylinder = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.cylinder.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.cylinder, this.config.rotation);
        this.parent.append(this.cylinder);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.cylinder)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            cylinderRadius: b.cylinderRadius,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    fillColor: function(b) {
        if ("gradient" == this.config.fillStyle) {
            var c = this.config.angle * Math.PI / 180,
            d = this.width / 2 + this.width / 2 * Math.cos(c),
            c = this.height / 2 + this.height / 2 * Math.sin(c),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            d = b.createLinearGradient(g, f, d, c);
            d.addColorStop(0, this.colorA);
            d.addColorStop(1, this.colorB);
            b.fillStyle = d;
            b.fill()
        }
        "Pure" == this.config.fillStyle && (b.fillStyle = this.color, b.fill())
    },
    draw: function() {
        var b = this.cylinder[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.cylinderRadius = this.config.cylinderRadius;
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        0 == this.cylinderRadius && (this.cylinderRadius = 10);
        this.cylinderRadius > this.height / 2 && (this.cylinderRadius = this.height / 2);
        var b = this.width / 2 - this.config.borderWidth,
        d = this.cylinderRadius / 2 - this.config.borderWidth,
        f = this.width / 2,
        g = this.cylinderRadius / 2,
        h = b > d ? b: d,
        k = b / h,
        d = d / h;
        c.save();
        c.beginPath();
        c.scale(k, d);
        c.moveTo((f + b) / k, g / d);
        c.arc(f / k, g / d, h, 0, 2 * Math.PI);
        c.restore();
        this.fillColor(c);
        "none" != this.config.fillStyle && c.fillRect(this.config.borderWidth, this.cylinderRadius / 2, this.width - 2 * this.config.borderWidth, this.height - this.cylinderRadius);
        c.closePath();
        c.stroke();
        c.moveTo(this.config.borderWidth, this.cylinderRadius / 2);
        c.lineTo(this.config.borderWidth, this.height - this.cylinderRadius / 2);
        c.moveTo(this.width - this.config.borderWidth, this.cylinderRadius / 2);
        c.lineTo(this.width - this.config.borderWidth, this.height - this.cylinderRadius / 2);
        c.save();
        c.scale(k, d);
        c.moveTo((f + b) / k, (this.height - g) / d);
        c.arc(f / k, (this.height - g) / d, h, 0, Math.PI);
        c.restore();
        this.fillColor(c);
        c.stroke();
        c.closePath();
        this.config.sh && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString())
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.cylinder)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.cylinder[0].width = this.width;
        this.cylinder[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.cylinder.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Trapezoid", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = Number(this.config.width * this.pageWidth);
        this.height = Number(this.config.height * this.pageHeight);
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.trapezoid = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.trapezoid.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.trapezoid, this.config.rotation);
        this.parent.append(this.trapezoid);
        this.draw(this.pageWidth);
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.trapezoid)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            bottomLength: b.bottomLength,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function(b) {
        var c = this.trapezoid[0],
        d = c.getContext("2d");
        d.clearRect(0, 0, c.width, c.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        this.config.pageWidth || (this.config.pageWidth = bookConfig.largePageWidth);
        this.bottomLength = Number(this.config.bottomLength) / this.config.pageWidth * b;
        this.bottomLength = 0 == this.bottomLength || this.config.bottomLength > 2 * this.width / 3 ? this.width - 2 * this.width / 3 : this.bottomLength;
        d.beginPath();
        d.lineCap = "round";
        d.lineJoin = "round";
        d.strokeStyle = Color(this.config.borderColor).toString();
        d.lineWidth = this.config.borderWidth;
        d.globalAlpha = this.config.spalpha;
        d.moveTo((this.width - this.bottomLength) / 2, this.config.borderWidth);
        d.lineTo(this.config.borderWidth, this.height);
        d.lineTo(this.width, this.height);
        d.lineTo((this.width - this.bottomLength) / 2 + this.bottomLength, this.config.borderWidth);
        this.config.sh && (d.shadowOffsetX = this.config.sx, d.shadowOffsetY = this.config.sy, d.shadowBlur = this.config.sd, d.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            c = this.config.angle * Math.PI / 180;
            b = this.width / 2 + this.width / 2 * Math.cos(c);
            var c = this.height / 2 + this.height / 2 * Math.sin(c),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f);
            b = d.createLinearGradient(g, f, b, c);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            d.fillStyle = b;
            d.fill()
        }
        "Pure" == this.config.fillStyle && (d.fillStyle = this.color, d.fill());
        d.closePath();
        0 != this.config.borderWidth && d.stroke()
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.trapezoid)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.trapezoid[0].width = this.width;
        this.trapezoid[0].height = this.height;
        this.draw(this.pageWidth);
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.trapezoid.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("RightArrow", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.rightArrow = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.rightArrow.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.rightArrow, this.config.rotation);
        this.parent.append(this.rightArrow);
        this.draw(this.pageWidth, this.pageHeight);
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.rightArrow)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            arrowWidth: b.arrowWidth,
            arrowTailHeight: b.arrowTailHeight,
            arrowType: b.arrowType,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function(b, c) {
        var d = this.rightArrow[0],
        f = d.getContext("2d");
        f.clearRect(0, 0, d.width, d.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        this.config.pageWidth || (this.config.pageWidth = bookConfig.largePageWidth);
        this.config.pageHeight || (this.config.pageHeight = bookConfig.largePageHeight);
        this.arrowWidth = Number(this.config.arrowWidth) / this.config.pageWidth * b;
        this.arrowTailHeight = Number(this.config.arrowTailHeight) / this.config.pageHeight * c;
        0 == this.arrowWidth && (this.arrowWidth = 10);
        0 < this.arrowWidth && this.arrowWidth < 3 * this.width / 4 && (this.arrowWidth = this.arrowWidth); ! 0 == parseBool(this.config.arrowType) ? 2 * this.arrowWidth > this.width - 1 * this.width / 4 && (this.arrowWidth = (this.width - 1 * this.width / 4) / 2) : this.arrowWidth > 3 * this.width / 4 && (this.arrowWidth = 3 * this.width / 4);
        this.arrowTailHeight = this.arrowTailHeight > this.height / 2 ? this.height / 4 : 0 == this.arrowTailHeight ? this.height / 2 - 5 : (this.height - this.arrowTailHeight) / 2;
        f.beginPath();
        f.lineCap = "round";
        f.lineJoin = "round";
        f.strokeStyle = Color(this.config.borderColor).toString();
        f.lineWidth = this.config.borderWidth;
        f.globalAlpha = this.config.spalpha; ! 1 == parseBool(this.config.arrowType) ? (f.moveTo(this.config.borderWidth, this.arrowTailHeight), f.lineTo(this.width - this.arrowWidth, this.arrowTailHeight), f.lineTo(this.width - this.arrowWidth, this.config.borderWidth), f.lineTo(this.width, this.height / 2), f.lineTo(this.width - this.arrowWidth, this.height), f.lineTo(this.width - this.arrowWidth, this.height - this.arrowTailHeight), f.lineTo(this.config.borderWidth, this.height - this.arrowTailHeight)) : (f.moveTo(this.config.borderWidth, this.height / 2), f.lineTo(this.arrowWidth, this.config.borderWidth), f.lineTo(this.arrowWidth, this.arrowTailHeight), f.lineTo(this.width - this.arrowWidth, this.arrowTailHeight), f.lineTo(this.width - this.arrowWidth, this.config.borderWidth), f.lineTo(this.width, this.height / 2), f.lineTo(this.width - this.arrowWidth, this.height), f.lineTo(this.width - this.arrowWidth, this.height - this.arrowTailHeight), f.lineTo(this.arrowWidth, this.height - this.arrowTailHeight), f.lineTo(this.arrowWidth, this.height));
        this.config.sh && (f.shadowOffsetX = this.config.sx, f.shadowOffsetY = this.config.sy, f.shadowBlur = this.config.sd, f.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var g = this.config.angle * Math.PI / 180,
            d = this.width / 2 + this.width / 2 * Math.cos(g),
            g = this.height / 2 + this.height / 2 * Math.sin(g),
            h = (Number(this.config.angle) + 180) * Math.PI / 180,
            k = this.width / 2 + this.width / 2 * Math.cos(h),
            h = this.height / 2 + this.height / 2 * Math.sin(h),
            d = f.createLinearGradient(k, h, d, g);
            d.addColorStop(0, this.colorA);
            d.addColorStop(1, this.colorB);
            f.fillStyle = d;
            f.fill()
        }
        "Pure" == this.config.fillStyle && (f.fillStyle = this.color, f.fill());
        f.closePath();
        0 != this.config.borderWidth && f.stroke()
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.rightArrow)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.rightArrow[0].width = this.width;
        this.rightArrow[0].height = this.height;
        this.draw(this.pageWidth, this.pageHeight);
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.rightArrow.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("VirtualEnd", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = Number(this.config.width * this.pageWidth);
        this.height = Number(this.config.height * this.pageHeight);
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.borderColor = Color(this.config.borderColor).toString();
        this.virtualEnd = $("<canvas width='" + this.width + "' height='" + this.height + "' id='myCanvas'></canvas>");
        this.virtualEnd.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.virtualEnd, this.config.rotation);
        this.parent.append(this.virtualEnd);
        this.draw(this.pageWidth, this.pageHeight);
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.virtualEnd)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            width: b.location.width,
            height: b.location.height,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            arrowWidth: b.arrowWidth,
            arrowTailHeight: b.arrowTailHeight,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    fillColor: function(b) {
        if ("gradient" == this.config.fillStyle) {
            var c = this.config.angle * Math.PI / 180,
            d = this.width / 2 + this.width / 2 * Math.cos(c),
            c = this.height / 2 + this.height / 2 * Math.sin(c),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            d = b.createLinearGradient(g, f, d, c);
            d.addColorStop(0, this.colorA);
            d.addColorStop(1, this.colorB);
            b.fillStyle = d;
            b.fill()
        }
        "Pure" == this.config.fillStyle && (b.fillStyle = this.color, b.fill());
        0 != this.config.borderWidth && b.stroke()
    },
    draw: function(b, c) {
        var d = this.virtualEnd[0],
        f = d.getContext("2d");
        f.clearRect(0, 0, d.width, d.height);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        this.config.pageWidth || (this.config.pageWidth = bookConfig.largePageWidth);
        this.config.pageHeight || (this.config.pageHeight = bookConfig.largePageHeight);
        this.arrowWidth = Number(this.config.arrowWidth) / this.config.pageWidth * b;
        this.arrowTailHeight = Number(this.config.arrowTailHeight) / this.config.pageHeight * c;
        this.arrowTailHeight > this.height && (this.arrowTailHeight = this.height);
        this.arrowWidth > this.width / 2 && (this.arrowWidth = this.width / 2);
        0 == this.arrowTailHeight && (this.arrowTailHeight = 10);
        0 == this.arrowWidth && (this.arrowWidth = 10);
        this.rightArrowWidth = this.width - this.arrowWidth;
        this.rightArrowHeight = (this.height - this.arrowTailHeight) / 2;
        f.strokeStyle = Color(this.config.borderColor).toString();
        f.lineWidth = this.config.borderWidth;
        f.globalAlpha = this.config.spalpha;
        f.lineCap = "round";
        f.lineJoin = "round";
        f.beginPath();
        f.rect(this.config.borderWidth, (this.height - this.arrowTailHeight) / 2, this.width / 24, this.arrowTailHeight);
        f.strokeStyle = Color(this.config.borderColor).toString();
        f.lineWidth = this.config.borderWidth;
        this.fillColor(f);
        f.closePath();
        f.beginPath();
        f.rect(this.width / 12, (this.height - this.arrowTailHeight) / 2, this.width / 12, this.arrowTailHeight);
        f.strokeStyle = Color(this.config.borderColor).toString();
        f.lineWidth = this.config.borderWidth;
        this.fillColor(f);
        f.closePath();
        f.beginPath();
        f.moveTo(this.width / 5, this.rightArrowHeight);
        f.lineTo(this.rightArrowWidth, this.rightArrowHeight);
        f.lineTo(this.rightArrowWidth, this.config.borderWidth);
        f.lineTo(this.width, this.height / 2);
        f.lineTo(this.rightArrowWidth, this.height);
        f.lineTo(this.rightArrowWidth, this.height - this.rightArrowHeight);
        f.lineTo(this.width / 5, this.height - this.rightArrowHeight);
        f.closePath(); ! 0 == parseBool(this.config.sh) && (f.shadowOffsetX = this.config.sx, f.shadowOffsetY = this.config.sy, f.shadowBlur = this.config.sd, f.shadowColor = Color(this.config.sc).toString());
        this.fillColor(f)
    },
    initEvent: function() {
        this.linkURL = "";
        null != this.config.action && (void 0 != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(1, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL), this.addActionEvent(this.virtualEnd))
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.virtualEnd[0].width = this.width;
        this.virtualEnd[0].height = this.height;
        this.draw(this.pageWidth, this.pageHeight);
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.virtualEnd.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("Cross", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.color = Color(this.config.color).toString();
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.colorA = Color(this.config.colorA).toString();
        this.colorB = Color(this.config.colorB).toString();
        this.cross = $("<canvas width='" + this.width + "' height='" + this.height + "'></canvas>");
        this.cross.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px"
        });
        this.setRotation(this.cross, this.config.rotation);
        this.parent.append(this.cross);
        this.draw();
        this.initEvent();
        parseBool(this.config.reflection) && this.imageReflection(this.cross)
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            rotation: b.location.rotation,
            width: b.location.width,
            height: b.location.height,
            pageWidth: b.location.pageWidth,
            pageHeight: b.location.pageHeight,
            alpha: b.alpha,
            fillStyle: b.fillStyle,
            color: b.color,
            colorA: b.gradientColorA,
            colorB: b.gradientColorB,
            angle: b.angle,
            spalpha: b.spalpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            crossWidht: b.crossWidht,
            crossType: b.crossType,
            borderWidth: b.borderWidth,
            borderColor: b.borderColor,
            borderAlpha: b.borderAlpha,
            sh: parseBool(b.shadow.hasDropShadow),
            sx: b.shadow.shadowBlurX,
            sy: b.shadow.shadowBlurY,
            se: b.shadow.shadowDistance,
            sr: b.shadow.shadowColor,
            action: b.action
        }
    },
    draw: function() {
        var b = this.cross[0],
        c = b.getContext("2d");
        c.clearRect(0, 0, b.width, b.height);
        this.config.borderWidth = Number(this.config.borderWidth);
        this.width -= this.config.borderWidth;
        this.height -= this.config.borderWidth;
        this.config.pageWidth || (this.config.pageWidth = bookConfig.largePageWidth);
        this.crossWidth = Number(this.config.crossWidht) / this.config.pageWidth * this.pageHeight;
        this.crossWidth > 2 * this.width / 3 && (this.crossWidth = this.width - 1 * this.width / 2);
        0 == this.crossWidth && (this.crossWidth = 10);
        this.positionWidth = (this.width - this.crossWidth) / 2;
        this.positionHeight = (this.height - this.crossWidth) / 2;
        c.lineCap = "round";
        c.lineJoin = "round";
        c.strokeStyle = Color(this.config.borderColor).toString();
        c.lineWidth = this.config.borderWidth;
        c.globalAlpha = this.config.spalpha;
        c.beginPath(); ! 0 === parseBool(this.config.crossType) ? (c.moveTo(this.config.borderWidth, this.height / 2), c.lineTo(this.positionWidth / 2, this.positionHeight - this.crossWidth / 3), c.lineTo(this.positionWidth / 2, this.positionHeight), c.lineTo(this.positionWidth, this.positionHeight), c.lineTo(this.positionWidth, this.positionHeight / 2), c.lineTo(this.positionWidth - this.crossWidth / 3, this.positionHeight / 2), c.lineTo(this.width / 2, this.config.borderWidth), c.lineTo(this.width - this.positionWidth + this.crossWidth / 3, this.positionHeight / 2), c.lineTo(this.width - this.positionWidth, this.positionHeight / 2), c.lineTo(this.width - this.positionWidth, this.positionHeight), c.lineTo(this.width - this.positionWidth / 2, this.positionHeight), c.lineTo(this.width - this.positionWidth / 2, this.positionHeight - this.crossWidth / 3), c.lineTo(this.width, this.height / 2), c.lineTo(this.width - this.positionWidth / 2, this.height - this.positionHeight + this.crossWidth / 3), c.lineTo(this.width - this.positionWidth / 2, this.height - this.positionHeight), c.lineTo(this.width - this.positionWidth, this.height - this.positionHeight), c.lineTo(this.width - this.positionWidth, this.height - this.positionHeight / 2), c.lineTo(this.width - this.positionWidth + this.crossWidth / 3, this.height - this.positionHeight / 2), c.lineTo(this.width / 2, this.height), c.lineTo(this.positionWidth - this.crossWidth / 3, this.height - this.positionHeight / 2), c.lineTo(this.positionWidth, this.height - this.positionHeight / 2), c.lineTo(this.positionWidth, this.height - this.positionHeight), c.lineTo(this.positionWidth / 2, this.height - this.positionHeight), c.lineTo(this.positionWidth / 2, this.height - this.positionHeight + this.crossWidth / 3)) : (c.moveTo(this.config.borderWidth, this.positionHeight), c.lineTo(this.positionWidth, this.positionHeight), c.lineTo(this.positionWidth, this.config.borderWidth), c.lineTo(this.positionWidth + this.crossWidth, this.config.borderWidth), c.lineTo(this.positionWidth + this.crossWidth, this.positionHeight), c.lineTo(this.width - this.config.borderWidth, this.positionHeight), c.lineTo(this.width - this.config.borderWidth, this.positionHeight + this.crossWidth), c.lineTo(this.positionWidth + this.crossWidth, this.positionHeight + this.crossWidth), c.lineTo(this.positionWidth + this.crossWidth, this.height), c.lineTo(this.positionWidth, this.height), c.lineTo(this.positionWidth, this.positionHeight + this.crossWidth), c.lineTo(this.config.borderWidth, this.positionHeight + this.crossWidth));
        parseBool(this.config.sh) && (c.shadowOffsetX = this.config.sx, c.shadowOffsetY = this.config.sy, c.shadowBlur = this.config.sd, c.shadowColor = Color(this.config.sc).toString());
        if ("gradient" == this.config.fillStyle) {
            var d = this.config.angle * Math.PI / 180,
            b = this.width / 2 + this.width / 2 * Math.cos(d),
            d = this.height / 2 + this.height / 2 * Math.sin(d),
            f = (Number(this.config.angle) + 180) * Math.PI / 180,
            g = this.width / 2 + this.width / 2 * Math.cos(f),
            f = this.height / 2 + this.height / 2 * Math.sin(f),
            b = c.createLinearGradient(g, f, b, d);
            b.addColorStop(0, this.colorA);
            b.addColorStop(1, this.colorB);
            c.fillStyle = b;
            c.fill()
        }
        "Pure" == this.config.fillStyle && (c.fillStyle = this.color, c.fill());
        c.closePath();
        0 != this.config.borderWidth && c.stroke()
    },
    initEvent: function() {
        this.flag = 0;
        this.linkURL = "";
        null != this.config.action && (null != this.config.action.length && (this.config.action = this.config.action[0]), this.linkURL = this.config.action.url, null != this.linkURL && "www" == this.linkURL.substr(0, 3).toLowerCase() && (this.linkURL = "http://" + this.linkURL));
        this.addActionEvent(this.cross)
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.pageWidth * this.config.width;
        this.height = this.pageHeight * this.config.height;
        this.cross[0].width = this.width;
        this.cross[0].height = this.height;
        this.draw();
        this.setPosition()
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.cross.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    }
}).extend(PageItem.Item);
Class("PopUpVideoItem", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.config = this.parseConfig(c);
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        this.videoWidth = Math.min(480, windowWidth);
        this.videoHeight = 9 * this.videoWidth / 16;
        this.videoHeight = Math.min(this.videoHeight, windowHeight);
        this.videoLeft = (windowWidth - this.videoWidth) / 2;
        this.videoTop = (windowHeight - this.videoHeight) / 2;
        this.background = $("<div style='width:100%;height:100%;z-index:10;position:absolute;'></div>");
        this.videoBac = $("<div style='width:100%;height:100%;background-color:rgba(0,0,0,0.5);'></div>");
        bookConfig.isFlipPdf && (this.config.imgURL.startWith("./") ? this.config.imgURL = "." + this.config.imgURL: this.config.imgURL = "../" + this.config.imgURL, this.config.videoURL.startWith("./") ? this.config.videoURL = "." + this.config.videoURL: this.config.videoURL = "../" + this.config.videoURL);
        this.videoImage = $("<div class='flip-action' style='position: absolute;cursor:pointer;opacity:" + this.config.alpha + "; left:" + this.left + "px; top:" + this.top + "px; width:" + this.width + "px;height:" + this.height + "px;'></div>");
        this.closeButton = $("<img style='position:absolute;cursor:pointer;right:30px;top:30px;' src='" + uiBaseURL + "close.png'/>");
        this.closeButton.asImageButton();
        this.videoFrame = $("<video src='" + this.config.videoURL + "' controls='controls'></video>");
        this.videoFrame.css({
            position: "absolute",
            width: this.videoWidth + "px",
            height: this.videoHeight + "px",
            left: this.videoLeft + "px",
            top: this.videoTop + "px",
            "z-index": 1E3
        });
        this.config.imgURL ? (this.imageDiv = $("<img src='" + this.config.imgURL + "' style='position: absolute;width:100%;height:100%'/>"), this.videoImage.append(this.imageDiv)) : (this.videoImage.css("background-color", "rgba(255,255,255,1)"), this.playImg = $("<img src='" + uiBaseURL + "play.png' style='position:absolute;margin:auto;left:0px;top:0px;bottom:0px;right:0px;width:56px;height:56px'/>"), this.videoImage.append(this.playImg));
        this.setRotation(this.videoImage, this.config.rotation);
        this.background.append(this.videoFrame);
        tmpContainer.append(this.background);
        this.background.append(this.videoBac);
        this.background.append(this.closeButton);
        b.append(this.videoImage);
        this.hide();
        this.initEvent()
    },
    parseConfig: function(b) {
        var c = {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            previewSrc: b.previewURL,
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            movieStopTriggerEvt: b.movieStopTriggerEvt,
            replayWhenPlayEventTrigger: b.replayWhenPlayEventTrigger
        };
        b.componentData && (c.videoURL = b.componentData.videoURL, c.imgURL = b.componentData.imgURL, c.pageViewed = b.componentData.pageViewed);
        return c
    },
    initEvent: function() {
        this.background.bind(_event._down,
        function(b) {
            this.hide();
            this.setCurrentTime(0);
            this.videoFrame[0].pause();
            b.stopPropagation()
        }.bind(this));
        this.closeButton.bind(_event._end,
        function(b) {
            this.hide();
            this.setCurrentTime(0);
            this.videoFrame[0].pause();
            b.stopPropagation()
        }.bind(this));
        this.videoImage.bind(_event._down,
        function(b) {
            b.stopPropagation()
        }.bind(this));
        this.videoImage.bind(_event._end,
        function(b) {
            parseBool(this.config.pageViewed) && this.videoFrame[0].play();
            this.showOrHide();
            b.stopPropagation()
        }.bind(this))
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.left = this.config.x * this.pageWidth;
        this.top = this.config.y * this.pageHeight;
        this.videoWidth = Math.min(480, windowWidth);
        this.videoHeight = 9 * this.videoWidth / 16;
        this.videoHeight = Math.min(this.videoHeight, windowHeight);
        this.videoLeft = (windowWidth - this.videoWidth) / 2;
        this.videoTop = (windowHeight - this.videoHeight) / 2;
        this.videoFrame.css({
            width: this.videoWidth + "px",
            height: this.videoHeight + "px",
            top: this.videoTop + "px",
            left: this.videoLeft + "px"
        });
        this.videoImage.css({
            width: this.pageWidth * this.config.width + "px",
            height: this.pageHeight * this.config.height + "px"
        });
        this.setPosition(this.left, this.top)
    },
    setPosition: function(b, c) {
        this.videoImage.css({
            top: c + "px",
            left: b + "px"
        })
    },
    getPlayEvt: function() {
        return this.config.moviePlayTriggerEvt
    },
    getStopEvt: function() {
        return this.config.movieStopTriggerEvt
    },
    showOrHide: function() { ! 1 === this.visible ? this.popup() : this.hide()
    },
    setCurrentTime: function(b) {
        this.videoFrame[0].currentTime = b
    },
    hide: function() {
        this.visible = !1;
        this.background.css({
            display: "none"
        })
    },
    popup: function() {
        this.visible = !0;
        this.background.css({
            display: "block"
        })
    }
}).extend("Item");
Class("LoopControlVideo", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this.config = this.parseConfig(c);
        this.parent = b;
        this.pageWidth = d;
        this.pageHeight = f;
        this.width = this.config.width * this.pageWidth;
        this.height = this.config.height * this.pageHeight;
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.content = $("<div class='flip-action'></div>");
        this.control = $("<div class='video-circle-controls'></div>");
        this.playVideo = $("<div class='video-circle-play'></div>");
        this.volume = $("<div class='video-circle-volume-button'></div>");
        this.fullscreen = $("<div class='video-circle-player-fullscreen'></div>");
        this.loopControl = $("<canvas width='80px' height='80px' style='position:absolute;margin:auto;top:0;left:0;bottom:0;right:0;'>64%</canvas>");
        this.canvasDiv = $("<div></div>");
        b = typeof this.config.src;
        c = this.config.src.substr(this.config.src.length - 4, 4).toLowerCase();
        if ("string" == b) {
            if (null == this.config.src || ".mp4" != c && ".flv" != c && ".f4v" != c) return
        } else if (this.config.src == {}) return; ! 0 == bookConfig.isFlipPdf && (this.config.src.startWith("./") ? this.config.src = "." + this.config.src: this.config.src = "../" + this.config.src);
        this.video = $("<video src='" + this.config.src + "' poster='" + this.config.previewSrc + "'></video>");
        this.parent.append(this.content);
        this.content.append(this.video);
        this.content.append(this.control);
        this.control.append(this.canvasDiv);
        this.canvasDiv.append(this.loopControl);
        this.control.append(this.playVideo);
        this.control.append(this.volume);
        this.control.append(this.time);
        this.control.append(this.fullscreen);
        this.canvasDiv.append(this.time);
        this.setCss();
        this.initEvent()
    },
    parseConfig: function(b) {
        var c = {
            width: b.location.width,
            height: b.location.height,
            rotation: b.location.rotation,
            x: b.location.x,
            y: b.location.y,
            alpha: b.alpha,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            previewSrc: b.previewURL,
            moviePlayTriggerEvt: b.moviePlayTriggerEvt,
            movieStopTriggerEvt: b.movieStopTriggerEvt,
            replayWhenPlayEventTrigger: b.replayWhenPlayEventTrigger
        };
        void 0 != b.videoURL && (c.src = b.videoURL);
        void 0 != b.url && (c.src = b.url);
        void 0 != b.componentData && (c.src = b.componentData.videoURL);
        b.componentData && (c.previewSrc = b.componentData.imgURL);
        return c
    },
    onPlayClick: function() { ! 1 == this.video[0].paused ? this.video[0].pause() : this.video[0].play();
        return ! 1
    },
    onResize: function(b, c) {
        this.width = this.config.width * b;
        this.height = this.config.height * c;
        this.content.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.control.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.content.css({
            "background-size": this.width + "px " + this.height + "px"
        });
        this.setPosition(b, c)
    },
    setPosition: function(b, c) {
        this.x = b * this.config.x;
        this.y = c * this.config.y;
        this.content.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    Loop: function(b) {
        this.loopControl.each(function() {
            var c = this.loopControl[0].getContext("2d");
            c.clearRect(0, 0, 80, 80);
            c.beginPath();
            c.moveTo(40, 40);
            c.arc(40, 40, 40, 0, 2 * Math.PI, !1);
            c.closePath();
            c.fillStyle = "rgba(0,0,0,1)";
            c.fill();
            c.beginPath();
            c.moveTo(40, 40);
            c.arc(40, 40, 40, 0, b / (80 * Math.PI), !1);
            c.closePath();
            c.fillStyle = "white";
            c.fill();
            c.beginPath();
            c.moveTo(40, 40);
            c.arc(40, 40, 34, 0, 2 * Math.PI, !0);
            c.closePath();
            c.fillStyle = "rgba(0,0,0,1)";
            c.fill();
            c.beginPath();
            c.arc(40, 40, 37.5, 0, 2 * Math.PI, !0);
            c.closePath();
            c.strokeStyle = "rgba(170,170,170,0.4)";
            c.stroke();
            c.font = "bold 9pt Arial";
            c.fillStyle = "#e74c3c";
            c.textAlign = "center";
            c.textBaseline = "middle";
            c.moveTo(40, 40);
            c.closePath()
        }.bind(this))
    },
    muteVolume: function() { ! 0 == this.video[0].muted ? (this.video[0].muted = !1, this.volume.removeClass("video-circle-volume-mute")) : (this.video[0].muted = !0, this.volume.addClass("video-circle-volume-mute"));
        return ! 1
    },
    fullScreen: function() {
        fullScreenApi.supportsFullScreen && (fullScreenApi.isFullScreen() ? fullScreenApi.cancelFullScreen() : fullScreenApi.requestFullScreen(this.video[0]));
        this.video[0].webkitSupportsFullscreen && this.video[0].webkitEnterFullscreen();
        return ! 1
    },
    initEvent: function() {
        this.fullscreen.bind(_event._click, this.fullScreen.bind(this));
        this.control.bind(fullScreenApi.fullScreenEventName,
        function() {
            fullScreenApi.isFullScreen() ? this.fullscreen.addClass("video-circle-exit-fullscreen") : this.fullscreen.removeClass("video-circle-exit-fullscreen")
        }.bind(this));
        this.video.bind(_event._click, this.onPlayClick.bind(this));
        this.playVideo.bind(_event._click, this.onPlayClick.bind(this));
        this.volume.bind(_event._click, this.muteVolume.bind(this));
        this.video.bind("play",
        function() {
            this.playVideo.addClass("video-paused-button")
        }.bind(this));
        this.video.on("timeupdate",
        function() {
            this.totalTime = this.video[0].duration;
            this.currentTime = this.video[0].currentTime;
            this.Loop(1E3 * this.currentTime / this.totalTime * 1E3 / 360)
        }.bind(this));
        this.video.bind("pause",
        function() {
            this.playVideo.removeClass("video-paused-button")
        }.bind(this));
        this.video.bind("ended",
        function() {
            this.playVideo.removeClass("video-paused-button")
        }.bind(this));
        this.control.on("mouseenter",
        function() {
            this.control.css("opacity", "1")
        }.bind(this));
        this.control.on("mouseleave",
        function() {
            this.control.css("opacity", "0")
        }.bind(this))
    },
    setCss: function() {
        this.canvasDiv.css({
            position: "absolute",
            width: "80px",
            height: "80px",
            margin: "auto",
            top: "0",
            bottom: "0",
            left: "0",
            right: "0",
            transform: "rotate(270deg)",
            "-webkit-transform": "rotate(270deg)",
            "-ms-transform": "rotate(270deg)",
            "-o-transform": "rotate(270deg)",
            "-moz-transform": "rotate(270deg)"
        });
        this.control.css({
            position: "absolute",
            width: this.width + "px",
            opacity: "1",
            height: this.height + "px"
        });
        this.content.css({
            position: "absolute",
            left: this.x + "px",
            top: this.y + "px",
            width: this.width + "px",
            height: this.height + "px",
            "background-color": "black"
        });
        this.setRotation(this.content, this.config.rotation);
        this.video.css({
            position: "absolute",
            "z-index": 1,
            left: "0px",
            top: "0px",
            width: "100%",
            height: "100%",
            opacity: this.config.alpha
        })
    }
}).extend("Item");
Class("WindowHtml", {
    Package: "PageItem",
    create: function(b, c) {
        this.parent = b;
        this.config = c;
        var d = this.config.windowURL;
        "http://" != d.substr(0, 7) && "https://" != d.substr(0, 8) && (d = d.startWith("http:\\") ? "http://" + d.substr(6, d.length) : "http://" + d);
        isPhone() && (this.config.windowWidth = windowWidth);
        this.background = $("<div></div>");
        this.htmlFrame = $("<iframe class='flip-action' src='" + d + "' width='" + this.config.windowWidth + "' height='" + this.config.windowHeight + "'></iframe>");
        this.closeButton = $("<img src='" + uiBaseURL + "close_down.png' style='position:absolute;z-index:500cursor:pointer;right:30px;top:30px;'/>");
        this.parent.append(this.background);
        this.background.append(this.htmlFrame);
        this.background.append(this.closeButton);
        this.setCss();
        this.initEvent()
    },
    initEvent: function() {
        this.background.bind(_event._down,
        function(b) {
            this.background.remove();
            b.stopPropagation()
        }.bind(this));
        this.closeButton.bind(_event._end,
        function(b) {
            this.background.remove();
            b.stopPropagation()
        }.bind(this))
    },
    setCss: function() {
        this.htmlFrame.css({
            background: "#FFFFFF",
            position: "absolute",
            margin: "auto",
            left: "0",
            top: "0",
            bottom: "0",
            right: "0"
        });
        this.background.css({
            position: "absolute",
            width: "100%",
            height: "100%",
            "background-color": "rgba(0,0,0,0.5)",
            "z-index": "10"
        })
    },
    onResize: function() {}
}).extend(PageItem.Item);
Class("RollerText", {
    Package: "PageItem",
    create: function(b, c, d, f) {
        this._super(b, c, d, f);
        this.bgColor = Color(this.config.bgcolor).toString();
        this.originWidth = this.config.pageW;
        this.originHeight = this.config.pageH;
        this.initText();
        this.initEvents();
        parseBool(this.config.reflection) && this.imageReflection(this.rollerText);
        this.onResize(this.pageWidth, this.pageHeight)
    },
    initText: function() {
        this.textli = "";
        this.rollerText = $("<div></div>");
        this.textDown = $("<img/>");
        this.textUp = $("<img/>");
        var b = getInnerHtml(this.config.textStr);
        this.text = b.$text;
        this.fontSize = b.fontSize;
        this.adjustFontSize = $.browser.chrome ? Math.max(1, 12 / this.fontSize) : 1;
        this.width = this.config.width * this.originWidth * this.adjustFontSize;
        this.height = this.config.height * this.originHeight * this.adjustFontSize; ! 0 == parseBool(this.config.highlightsBool) && this.rollerText.flash({
            swf: this.config.highlightsURL,
            width: this.width + "px",
            height: this.height + "px",
            wmode: "transparent"
        }); ! 0 === parseBool(this.config.fillBg) ? this.rollerText.css({
            "background-color": Color(this.config.bgcolor).rgba()
        }) : this.rollerText.css({
            background: ""
        });
        this.addShadow(this.rollerText);
        1 == this.config.barType ? (this.rollerText.append(this.textDown), this.rollerText.append(this.textUp), this.setBarType(), this.textDown.attr({
            src: uiBaseURL + "textDown.png"
        }), this.textUp.attr({
            src: uiBaseURL + "textUp.png"
        })) : this.rollerText.css({
            "word-break": "break-word",
            "overflow-x": "hidden",
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.rollerText.append(this.text);
        this.parent.append(this.rollerText);
        this.rollerText.addClass("flip-action")
    },
    parseConfig: function(b) {
        return {
            x: b.location.x,
            y: b.location.y,
            width: b.location.width,
            height: b.location.height,
            reflection: b.location.reflection,
            reflectionType: b.location.reflectionType,
            reflectionAlpha: b.location.reflectionAlpha,
            alpha: b.alpha,
            rotation: b.location.rotation,
            textStr: b.textStr,
            selectable: b.selectable,
            highlightsBool: b.highlightsBool,
            highlightsURL: b.highlightsURL,
            highlightsLabel: b.highlightsLabel,
            pageH: b.formats.defaultFormat.pageH,
            pageW: b.formats.defaultFormat.pageW,
            barType: b.barType,
            bgalpha: b.background.alpha,
            fillBg: b.background.fillBg,
            bgcolor: b.background.color,
            action: b.action,
            hasShadow: parseBool(b.shadow.hasDropShadow),
            shadow: b.shadow
        }
    },
    initEvents: function() {
        this.textDown.click(function() {
            var b = this.rollerText2.scrollTop();
            this.rollerText2.animate({
                scrollTop: b + 50
            },
            100)
        }.bind(this));
        this.textUp.click(function() {
            var b = this.rollerText2.scrollTop();
            this.rollerText2.animate({
                scrollTop: b - 50
            },
            100)
        }.bind(this));
        this.addActionEvent(this.text)
    },
    setBarType: function() {
        this.textUp.css({
            "background-attachment": "fixed",
            position: "absolute",
            margin: "auto",
            width: "23px",
            height: "23px",
            bottom: "0px",
            right: "26px",
            "background-color": "#FFFFFF",
            border: "1px solid"
        });
        this.textDown.css({
            position: "absolute",
            margin: "auto",
            width: "23px",
            height: "23px",
            bottom: "0px",
            right: "0px",
            "background-attachment": "fixed",
            "background-color": "#FFFFFF",
            border: "1px solid"
        });
        this.rollerText.css({
            "word-break": "break-word",
            "overflow-x": "hidden",
            position: "absolute",
            left: this.config.x * this.pageWidth + "px",
            top: this.config.y * this.pageHeight + "px",
            width: this.width + "px",
            height: this.height + "px"
        });
        this.setRotation(this.rollerText, this.config.rotation);
        this.rollerText2.css({
            overflow: "auto",
            "word-break": "break-word",
            "font-family": this.config.fontName,
            width: this.width - 55 + "px",
            height: "100%",
            "font-size": this.config.fontSize + "px"
        })
    },
    onResize: function(b, c) {
        this.pageWidth = b;
        this.pageHeight = c;
        this.setPosition();
        this.resizeText(this.pageHeight)
    },
    setPosition: function() {
        this.x = this.config.x * this.pageWidth;
        this.y = this.config.y * this.pageHeight;
        this.rollerText.css({
            left: this.x + "px",
            top: this.y + "px"
        })
    },
    resizeText: function(b) {
        b = b / this.originHeight / this.adjustFontSize;
        this.rollerText.css({
            "-webkit-transform-origin": "0% 0%",
            "-moz-transform-origin": "0% 0%",
            "-ms-transform-origin": "0% 0%",
            "-o-transform-origin": "0% 0%",
            "transform-origin": "0% 0%",
            "-webkit-transform": "scale(" + b + ")",
            "-moz-transform": "scale(" + b + ")",
            "-ms-transform": "scale(" + b + ")",
            "-o-transform": "scale(" + b + ")",
            transform: "scale(" + b + ")"
        })
    }
}).extend(PageItem.Item);
function addNormalCoverShadow(b, c) {
    var d = parseBool(bookConfig.RightToLeft),
    f = $.browser.msie && 11 > $.browser.version,
    f = parseBool(bookConfig.HardPageEnable) && !f,
    g = 1 == c,
    h = 2 == c,
    k = totalPageCount,
    l = c == k,
    m = c == k - 1,
    k = 4 < k,
    n = bookConfig.BindingType;
    n || (n = "side");
    if (d) if (f) {
        if (g || l) return new OuterHardCoverShadow(b, n, g);
        if (h || m) return new InnerHardCoverShadow(b, n, m, bookConfig.hardCoverBorderWidth, k)
    } else {
        if (g || l) return new NormalCoverShadow(b, n, g)
    } else if (f) {
        if (g || l) return new OuterHardCoverShadow(b, n, l);
        if (h || m) return new InnerHardCoverShadow(b, n, h, bookConfig.hardCoverBorderWidth, k)
    } else if (g || l) return new NormalCoverShadow(b, n, l);
    return null
}
function addSingleCoverShadow(b, c) {
    var d = parseBool(bookConfig.RightToLeft),
    f = $.browser.msie && 11 > $.browser.version,
    f = parseBool(bookConfig.HardPageEnable) && !f,
    g = 1 == c,
    h = c == bookConfig.totalPageCount,
    k = bookConfig.BindingType;
    k || (k = "side");
    if (d) if (f) {
        if (g) return new OuterHardCoverShadow(b, k, !0);
        if (h) return new InnerHardCoverShadow(b, k, !0, bookConfig.hardCoverBorderWidth, !0)
    } else {
        if (g) return new NormalCoverShadow(b, k, !0)
    } else if (f) {
        if (g) return new OuterHardCoverShadow(b, k, !1);
        if (h) return new InnerHardCoverShadow(b, k, !1, bookConfig.hardCoverBorderWidth, !0)
    } else if (g) return new NormalCoverShadow(b, k, !1);
    return null
}
function addCatalogCoverShadow(b, c) {
    var d = parseBool(bookConfig.RightToLeft),
    f = $.browser.msie && 11 > $.browser.version,
    f = parseBool(bookConfig.HardPageEnable) && !f,
    g = 1 == c,
    h = 2 == c,
    k = totalPageCount,
    l = c == k,
    m = c == k - 1,
    k = 4 < k;
    if (d) if (f) {
        if (g || l) return new OuterHardCoverShadow(b, "catalog", g);
        if (h || m) return new InnerHardCoverShadow(b, "catalog", m, 0, k)
    } else {
        if (g || l) return new NormalCoverShadow(b, "catalog", g)
    } else if (f) {
        if (g || l) return new OuterHardCoverShadow(b, "catalog", l);
        if (h || m) return new InnerHardCoverShadow(b, "catalog", h, 0, k)
    } else if (g || l) return new NormalCoverShadow(b, "catalog", l);
    return null
}
Class("CoverShadow", {
    create: function(b) {
        this.parent = b;
        this.init()
    },
    init: virtual_function,
    destroy: virtual_function,
    onResize: function() {
        this.parentWidth = this.parent.width();
        this.parentHeight = this.parent.height()
    }
});
Class("HardCoverShadow", {
    init: function() {
        this.coverShadow = $('<div class="cover_shadow"></div>');
        this.leftBorder = $("<div></div>");
        this.topBorder = $('<div class="hard_top_border"></div>');
        this.bottomBorder = $('<div class="hard_bottom_border hard_bottom_border_width"></div>');
        this.rightBorder = $('<div class="hard_right_border"></div>');
        this.parent.append(this.coverShadow);
        this.coverShadow.append(this.leftBorder);
        this.coverShadow.append(this.topBorder);
        this.coverShadow.append(this.bottomBorder);
        this.coverShadow.append(this.rightBorder)
    },
    onResize: function() {
        this._super();
        this.rightBorder.css({
            height: this.parentHeight - 3 + "px"
        })
    },
    destroy: function() {
        this.coverShadow.empty();
        this.coverShadow.remove()
    }
}).extend(CoverShadow);
Class("OuterHardCoverShadow", {
    create: function(b, c, d) {
        this.style = c;
        this.flip = !!d;
        this._super(b)
    },
    init: function() {
        this._super();
        this.leftBorder.addClass("hard_left_border");
        this.leftBody = $('<div class="hard_left_body"></div>');
        this.coverShadow.append(this.leftBody);
        this.coverShadow.addClass(this.style);
        this.flip && this.coverShadow.addClass("flip_x");
        this.onResize()
    }
}).extend(HardCoverShadow);
Class("InnerHardCoverShadow", {
    create: function(b, c, d, f, g) {
        this.style = c;
        this.flip = !!d;
        void 0 == f && (f = 0);
        this.borderWidth = f;
        this.showLeftShadow = g;
        this._super(b)
    },
    init: function() {
        this._super();
        this.leftBorder.addClass("hard_inner_left_border");
        this.leftCoverBorder = $('<div class="hard_left_cover_border"></div>');
        this.coverShadow.append(this.leftCoverBorder);
        this.flip && this.coverShadow.addClass("flip_x");
        this.onResize()
    },
    onResize: function() {
        this._super();
        this.showLeftShadow && (this.bottomBorder.css({
            left: "0px",
            width: "100%"
        }), this.leftBorder.css({
            top: this.borderWidth + "px",
            height: this.parentHeight - 2 * this.borderWidth + "px"
        }))
    }
}).extend(HardCoverShadow);
Class("NormalCoverShadow", {
    create: function(b, c, d) {
        this.style = c;
        this.flip = !!d;
        this._super(b)
    },
    init: function() {
        this.coverShadow = $('<div class="cover_shadow"></div>');
        this.coverShadow.addClass(this.style);
        this.leftBorder = $('<div class="normal_left_border"></div>');
        this.leftBody = $('<div class="normal_left_body"></div>');
        this.parent.append(this.coverShadow);
        this.coverShadow.append(this.leftBorder);
        this.coverShadow.append(this.leftBody);
        this.flip && this.coverShadow.addClass("flip_x");
        this.onResize()
    },
    destroy: function() {
        this.coverShadow.empty();
        this.coverShadow.remove()
    }
}).extend(CoverShadow);
var a = hddr.soo2,
i = 0,
BookSide = Class({
    slider: null,
    playSliderAfterLoad: !1,
    hasProfessional: function() {
        var b = global.pageEditor;
        if (void 0 == b || null == b) return ! 1;
        var c = b;
        b instanceof Array || (c = b.pageAnnos);
        if (void 0 == c || null == c || 0 == c.length) return ! 1;
        for (b = 0; b < c.length; b++) {
            var d = c[b];
            if (d && 0 < d.length) return ! 0
        }
        return ! 1
    },
    initMMItems: function() {
        this.Items = new ObjectPool
    },
    destroyMM: function() {
        this.Items.find("cart").each(function(b) {
            b.destroy()
        })
    },
    hideMM: function() {
        this.MMBackground.css({
            display: "none"
        })
    },
    showMM: function() {
        this.MMBackground.css({
            display: "block"
        })
    },
    clearMM: function() {
        this.MMBackground.empty();
        this.initMMItems()
    },
    initMM: function() {
        if (this.hasProfessional()) {
            var b = pageEditor;
            pageEditor instanceof Array || (b = pageEditor.pageAnnos);
            if (! (0 >= this.pageIndex || b.length < this.pageIndex || 0 == b[this.pageIndex - 1].length)) {
                for (var b = b[this.pageIndex - 1], c = 0; c < b.length; c++) {
                    var d = b[c];
                    if (d) {
                        var f = d.annotype,
                        g = null;
                        f == PageEditor.AnnoType.ANNO_LINK && (g = new PageItem.Link(this.MMBackground, d, this.attachW, this.attachH));
                        if (f == PageEditor.AnnoType.ANNO_YOUTUBE || f == PageEditor.AnnoType.ANNO_YOUTUBE1 || f == PageEditor.AnnoType.ANNO_YOUTUBE2 || f == PageEditor.AnnoType.ANNO_YOUTUBE3 || f == PageEditor.AnnoType.ANNO_YOUTUBE4) g = new PageItem.Youtube(this.MMBackground, d, this.attachW, this.attachH);
                        f == PageEditor.AnnoType.ANNO_YOUTUBE5 && (g = new PageItem.PopUpVimeo(this.MMBackground, d, this.attachW, this.attachH, "youtube"));
                        f == PageEditor.AnnoType.ANNO_VIMEO && (g = new PageItem.Vimeo(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_VIMEO2 && (g = new PageItem.PopUpVimeo(this.MMBackground, d, this.attachW, this.attachH, "vimeo"));
                        f == PageEditor.AnnoType.ANNO_AUDIO && "Skin 3" == d.playerType && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "default"));
                        f == PageEditor.AnnoType.ANNO_AUDIO && "Skin 1" == d.playerType && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "skin1"));
                        f == PageEditor.AnnoType.ANNO_AUDIO && "Skin 2" == d.playerType && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "skin2"));
                        f == PageEditor.AnnoType.ANNO_AUDIO1 && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "advanced"));
                        f == PageEditor.AnnoType.ANNO_AUDIO2 && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "wave"));
                        f == PageEditor.AnnoType.ANNO_AUDIO4 && (g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, "background"));
                        if (f == PageEditor.AnnoType.ANNO_PLUGIN && d.className in audioThemeNames) {
                            var g = void 0,
                            h = d.className;
                            "GlassAudioPlayer" == h && (g = "glass");
                            "SimpleAudioPlayer" == h && (g = "simple");
                            "StandardAudioPlayer" == h && (g = "enjoy");
                            "StandardAudioPlayer02" == h && (g = "decent");
                            "StandardAudioPlayer03" == h && (g = "tree");
                            "StandardAudioPlayer04" == h && (g = "christmas");
                            "StandardAudioPlayer05" == h && (g = "turnonoff");
                            "StandardAudioPlayer06" == h && (g = "fade");
                            g = new PageItem.Audio(this.MMBackground, d, this.attachW, this.attachH, g)
                        }
                        f == PageEditor.AnnoType.ANNO_IMAGE && (d.imgOriginalProportions || (d.imgOriginalProportions = "false"), g = new PageItem.Image(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_BUTTON && (g = new PageItem.Button(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_SWF && (g = new PageItem.FlashSwf(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_FLASHSHOW && (g = new PageItem.FlashShow(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_HOTSPOTS && (g = $.browser.device == $.browser.DEVICE_PHONE ? new PageItem.HotSpotsMobile(this.MMBackground, d, this.attachW, this.attachH) : new PageItem.HotSpots(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_LINE && (g = new PageItem.Line(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_ARROW && (g = new PageItem.Arrow(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_TRIANGLE && (g = new PageItem.Triangle(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_PRISMATIC && (g = new PageItem.Prismatic(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_CROSS && (g = new PageItem.Cross(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_VIRTUALEND && (g = new PageItem.VirtualEnd(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_RIGHTARROW && (g = new PageItem.RightArrow(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_TRAPEZOID && (g = new PageItem.Trapezoid(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_DOVETAILED && (g = new PageItem.Dovetailed(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_FLOWCHART && (g = new PageItem.FlowChart(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_CYLINDER && (g = new PageItem.Cylinder(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_PENTAGON && (g = new PageItem.Pentagon(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_HEXAGON && (g = new PageItem.Hexagon(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_PARALLELOGRAM && (g = new PageItem.Parallelogram(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_ROUND && (g = new PageItem.Round(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_RECTANGLE && (g = new PageItem.Rectangle(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_TEXT && (g = new PageItem.Text(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_ROLLERTEXT && (g = new PageItem.RollerText(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_AREA && (g = new PageItem.Area(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_CALLOUT && (g = new PageItem.Callout(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_ATEXT && (g = new PageItem.AText(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_STARTEXT && (g = new PageItem.StarText(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_TEXTANIM && (g = new PageItem.AminText(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_ATIMAGE && (g = new PageItem.PngImage(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_EFFECTTEXT && (g = new PageItem.EffText(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_ADVANCEDSOUND && (g = new PageItem.Sound(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_CAROUSEL && (g = new PageItem.Carousel(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_DYNSHOW && (g = new PageItem.DynamicShow(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_BANNER && (g = new PageItem.Banner(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_FLIPJUMP && (g = new PageItem.FlipJump(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_PLUGIN && d.className == PLUGIN_MAGNETICS && (g = new PageItem.FocusJump(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_PLUGIN && d.className == PLUGIN_ROTATE3D && (g = new PageItem.Rotate3D(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex + c));
                        f == PageEditor.AnnoType.ANNO_VIDEO1 && (g = new PageItem.Video(this.MMBackground, d, this.attachW, this.attachH, "smallblack"));
                        f == PageEditor.AnnoType.ANNO_VIDEO2 && (g = new PageItem.LoopControlVideo(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_PLUGIN && d.className == PLUGIN_VIDEO1 && (g = new PageItem.Video(this.MMBackground, d, this.attachW, this.attachH, "classic"));
                        f == PageEditor.AnnoType.ANNO_PLUGIN && d.className == PLUGIN_VIDEO2 && (g = new PageItem.PopUpVideoItem(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_VIDEO && (g = new PageItem.Video(this.MMBackground, d, this.attachW, this.attachH, "round"));
                        f == PageEditor.AnnoType.ANNO_ALPHATRANSITIONBANNER && (g = new PageItem.AlphaTransitionBanner(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_EMBEDDEDSLIDESHOW && (g = new PageItem.EmbeddedSlideshow(this.MMBackground, d, this.attachW, this.attachH));
                        f == PageEditor.AnnoType.ANNO_PRINT && (g = new PageItem.Print(this.MMBackground, d, this.attachW, this.attachH, this.pageIndex));
                        f == PageEditor.AnnoType.ANNO_CART && (g = new PageItem.ShoppingCart(this.MMBackground, d, this.attachW, this.attachH));
                        g && this.Items.add(g)
                    }
                }
                this.preventMMBackEvent()
            }
        }
    },
    initSlider: function() {
        if (window.hiSliderFactory) {
            var b = (global.sliderJS || [])[this.pageIndex - 1];
            b && 0 < b.elements.length && (this.slider = window.hiSliderFactory({
                container: this.MMBackground,
                slide: b,
                initialWidth: this.attachW,
                initialHeight: this.attachH,
                focusOnFunc: this.focusOn.bind(this),
                resetFocusFunc: this.resetFocus.bind(this)
            }), this.slider.resize(this.attachW, this.attachH), !0 == this.playSliderAfterLoad && this.playSlider());
            this.preventMMBackEvent()
        }
    },
    playSlider: function() {
        this.slider ? (this.slider.replay(), this.playSliderAfterLoad = !1) : this.playSliderAfterLoad = !0
    },
    resetSlider: function() {
        this.resetFocus(0);
        this.slider && this.slider.reset();
        this.playSliderAfterLoad = !1
    },
    openSliderOrNot: function(b) {
        if (void 0 != b && null != b) {
            for (var c = !1,
            d = 0; d < b.length; d++) if (b[d] == this.pageIndex) {
                c = !0;
                break
            } ! 0 == c ? this.playSlider() : this.resetSlider()
        }
    },
    resizeSlider: function(b, c) {
        this.slider && this.slider.resize(b, c)
    },
    onMMResize: function(b, c) {
        this.MMBackground.css({
            width: b + "px",
            height: c + "px"
        });
        this.resizeSlider(b, c);
        this.Items.each(function(d) {
            d.onResize(b, c)
        })
    },
    preventMMBackEvent: function() {
        document.body.ondragstart = function() {
            return ! 1
        };
        $(this.MMBackground).on(_event._down, ".hi-action",
        function(b) {
            b.stopPropagation()
        });
        $(this.MMBackground).on(_event._end, ".hi-action",
        function(b) {
            b.stopPropagation()
        });
        $(this.MMBackground).on(_event._down, ".slider-action",
        function(b) {
            b.stopPropagation()
        });
        $(this.MMBackground).on(_event._end, ".slider-action",
        function(b) {
            b.stopPropagation()
        });
        $(this.MMBackground).on("mousedown touchstart", ".flip-action",
        function(b) {
            b.stopPropagation()
        })
    },
    showLoading: function() {
        this.side.append(this.loadingImg)
    },
    hideLoading: function() {
        this.loadingImg.remove()
    },
    focusOn: function(b) {
        this.option = b;
        this.focusSet(b)
    },
    focusSet: function(b) {
        this.focusIng = !0;
        var c = b.pageWidth,
        d = b.duration / 1E3,
        f = this.attachW / (b.width * this.attachW / c),
        c = -b.left * f * this.attachW / c;
        b = -b.top * f * this.attachH / b.pageHeight;
        f = Math.max(1, f);
        c = Number.between(c, (1 - f) * this.attachW, 0);
        b = Number.between(b, (1 - f) * this.attachH, 0);
        this.origin = "0% 0%";
        f = this.zoomSide("0% 0%", f, c, b);

        animateOnce(this.tmpContent, f, d,
        function() {
            this.focusIng = !1
        }.bind(this), "%stransform")
    },
    resetFocus: function(b) {
        b || (b = 0);
        this.origin = "0% 0%";
        var c = this.zoomSide(this.origin, 1, 0, 0);
        animateOnce(this.tmpContent, c, b / 1E3,
        function() {
            this.focusIng = !1
        }.bind(this), "%stransform")
    },
    zoomSide: function(b, c, d, f) {
        d || (d = 0);
        f || (f = 0);
        d = translate(d, f);
        c = " scale(" + c + ")";
        return {
            "-webkit-transform-origin": b,
            "-moz-transform-origin": b,
            "-ms-transform-origin": b,
            "-o-transform-origin": b,
            "-webkit-transform": d + c,
            "-moz-transform": d + c,
            "-ms-transform": d + c,
            "-o-transform": d + c
        }
    },
    enterSide: function() {
        this.Items.find("youtube", "flashSwf", "button", "Video").each(function(b) {
            b.show && b.show()
        });
        this.Items.find("audio").each(function(b) {
            b.getPlayEvt() == PageEditor.PlayEvt.EVT_PLAY && b.play();
            b.background && b.isBackgroundAudio() && b.play()
        });
        this.Items.match("Video").each(function(b) {
            b.getPlayEvt() == PageEditor.PlayEvt.EVT_PLAY && b.playVideo()
        });
        this.Items.match("AminText").each(function(b) {
            b.play()
        })
    },
    leaveSide: function() {
        this.Items.each(function(b) {
            b.audios && b.audios.stop && b.audios.stop()
        });
        this.Items.find("youtube", "flashSwf", "button", "Video").each(function(b) {
            b.hide && b.hide()
        });
        this.Items.find("audio").each(function(b) {
            b.pause();
            b.isBackgroundAudio && b.isBackgroundAudio() && b.pause()
        });
        this.Items.match("Video").each(function(b) {
            b.getStopEvt() == PageEditor.PlayEvt.EVT_STOP && b.pauseVideo();
            if ("1" == b.getReplayWhenPlayEvent() && b.getPlayEvt() == PageEditor.PlayEvt.EVT_PLAY) {
                var c = b.getTotalTime();
                c && b.setCurrentTime(c)
            }
        });
        this.searchHighlight.css({
            "background-image": ""
        });
        this.resetSlider()
    }
}),
imageLoaded = [];
bdor[33] = function(b, c) {
    return b / bdor[30](c, 20)
};
var NormalSide = Class({
    create: function(b, c, d) {
        this.bookType = d;
        this.pageIndex = b;
        this.zIndex = this.height = this.width = 0;
        this.visible = !0;
        this.initHtml(b, c)
    },
    initHtml: function(b, c) {
        this.initSide();
        this.side.attr("id", c + b);
        this.initContents();
        this.addFlipShadow()
    },
    initSide: function() {
        this.side = $("<div style='overflow:hidden;position:absolute;'></div>")
    },
    initContents: function() {
        this.initPageSide();
        var b = getColor("pageBackgroundColor", "#f5f5f5");
        this.tmpContent = $("<div class='side-content' style='background-color : " + b + ";'></div>");
        this.pageSide.append(this.tmpContent)
    },
    initPageSide: function() {
        this.pageSide = this.side
    },
    addFlipShadow: function() {
        this.flipBackShadow = $("<div class='flip-shadowB'></div>");
        this.flipFrontShadow = $("<div class='flip-topshadow'></div>");
        this.side.append(this.flipBackShadow);
        this.side.append(this.flipFrontShadow)
    },
    loading: function() {
        this.loadingImage || (this.loadingImage = $("<img class='loadingImage' src='" + uiBaseURL + "progress.gif'/>"));
        this.tmpContent.append(this.loadingImage)
    },
    addAttachment: function() {
        this.attachment = !0;
        this.slider = null;
        this.playSliderAfterLoad = !1;
        this.MMBackground = $("<div id='MMBackground' style='width:100%;height:100%;position:absolute;z-index:4;'></div>");
        this.searchHighlight = $("<div class='kong' id='highlight' style='width:100%;height:100%;'></div>");
        this.addCoil();
        this.initMMItems();
        this.midShadow = $("<div style='z-index:5;pointer-events:none;'></div>");
        this.side.append(this.midShadow);
        this.tmpContent.append(this.MMBackground)
    },
    hideMiddleAttachment: function() {
        this.midShadow && this.midShadow.remove()
    },
    addCoil: function() {
        parseBool(bookConfig.addPaperCoil) && (this.midCoil = $("<div style='z-index:6;'></div>"), this.side.append(this.midCoil))
    },
    mirrorSide: function() {
        this.isMirrorSide = !0;
        this.loadingImage && this.loadingImage.remove()
    },
    setZIndex: function(b) {
        this.zIndex = b;
        this.side.css("z-index", b)
    },
    getZIndex: function() {
        return this.zIndex
    },
    setCSSByStyle: function(b) {
        this.side.css(b)
    },
    setCSSByName: function(b) {
        this.side.attr("class", b)
    },
    wrap: function(b) {
        this.side.wrap(b)
    },
    unwrap: function() {
        this.side.unwrap()
    },
    remove: function() {
        this.side.remove();
        this.side = void 0
    },
    getSide: function() {
        return this.side
    },
    setLeftOrRight: function(b) {
        this.isLeft = b;
        this.setAttachment(b);
        b ? this.setCSSByName("left-side") : this.setCSSByName("right-side")
    },
    centerPage: function() {
        this.isLeft = !1;
        this.setAttachment(this.isLeft);
        this.setCSSByName("center-side")
    },
    setAttachment: function(b) {
        this.attachment && (this.midCoil && (b ? this.midCoil.attr("class", "leftPaperCoil") : this.midCoil.attr("class", "rightPaperCoil")), null != this.coverShadow && (this.coverShadow.destroy(), this.coverShadow = null), this.bookType == BookType.normal_book && (this.coverShadow = addNormalCoverShadow(this.side, this.pageIndex)), this.bookType == BookType.single_book && (this.coverShadow = addSingleCoverShadow(this.side, this.pageIndex)), this.bookType == BookType.catalog_book && (this.coverShadow = addCatalogCoverShadow(this.side, this.pageIndex)), null != this.coverShadow || null != this.midCoil ? this.midShadow.css({
            display: "none"
        }) : (this.midShadow.css({
            display: "block"
        }), b ? (bookType == BookType.catalog_book ? this.midShadow.attr("class", "catalogLeftShadow") : this.midShadow.attr("class", "leftShadow"), this.midShadow.css({
            width: parseInt(bookConfig.LeftShadowWidth * this.width / 450),
            opacity: bookConfig.LeftShadowAlpha
        })) : (bookType == BookType.catalog_book ? this.midShadow.attr("class", "catalogRightShadow") : this.midShadow.attr("class", "rightShadow"), this.midShadow.css({
            width: parseInt(bookConfig.RightShadowWidth * this.width / 450),
            opacity: bookConfig.RightShadowAlpha
        }))))
    },
    fillContent: function() {
        this.fillPage(this.pageIndex)
    },
    loaded: function(b) {
        b && (this.fullContent = !0, this.loadingInterval && this.loadingInterval.stop(), this.loadingImage && this.loadingImage.remove(), this.sideImage ? this.sideImage.css({
            "background-image": "url(" + b + ")"
        }) : (this.sideImage = $("<div style='position:absolute;z-index:0;background-size:100% 100%;background-repeat:no-repeat;'></div>"), this.sideImage.css({
            "background-image": "url(" + b + ")"
        }), this.sideImage.css({
            filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + b + "',sizingMethod='scale')"
        }), this.resizeSideImage(), this.tmpContent.append(this.sideImage), this.attachment && (this.tmpContent.append(this.searchHighlight), this.searchHighlight.css({
            opacity: 0.8
        }), this.clearMM(), this.initMM(), this.initSlider())), Log.print("loaded:" + b))
    },
    fillImageOrNot: function(b, c) {
        return ! b || "string" != typeof b || b == this.imageURL && !c || passwardType() && bookConfig.excludeFrontPages && this.pageIndex > parseInt(bookConfig.excludeFrontPages) && !verifyPassward() ? !1 : !0
    },
    fillPage: function(b, c) {
        if (b == this.pageIndex) {
            var d = getPageDir(this.pageIndex, "normal", originTotalPageCount);
            this.fillImageOrNot(d, c) ? (this.fullContent = !1, this.imageURL = d, -1 < d.indexOf(".js") ? global[decodeDatabasePrefix("normal") + b] && "string" == typeof global[decodeDatabasePrefix("normal") + b] ? (imageLoaded[b] = !0, this.loaded(dataBase64Str(b, "normal"))) : loadJavascript(d,
            function(c) {
                imageLoaded[b] = !0;
                this.loaded(dataBase64Str(b, "normal", c))
            }.bind(this),
            function() {}) : (Log.print("load_start:" + d), $("<img src='" + d + "'/>").load(function() {
                imageLoaded[b] = !0;
                this.loaded(d)
            }.bind(this)))) : this.fullContent && (this.loadingInterval && this.loadingInterval.stop(), this.loadingImage && this.loadingImage.remove())
        }
    },
    initMM: function() {
        this.attachment && (this._super(), AddNotesByContainers(this.bookType, this.pageIndex, this.MMBackground), this.showOrHideYoutube(getShownPage()))
    },
    showOrHideYoutube: function(b) {
        if (void 0 != b && null != b) {
            for (var c = !1,
            d = 0; d < b.length; d++) if (b[d] == this.pageIndex) {
                c = !0;
                break
            } ! 0 == c ? this.showYoutube() : this.hideYoutube()
        }
    },
    hideYoutube: function() {
        this.Items.find("Youtube").each(function(b) {
            b.hide()
        })
    },
    showYoutube: function() {
        this.Items.find("Youtube").each(function(b) {
            b.show()
        })
    },
    setVisible: function(b) {
        b ? this.side.show() : this.side.hide();
        this.visible = b
    },
    addHistoryTexts: function(b) {
        if (this.attachment && void 0 != b && null != b) {
            for (var c = !1,
            d = 0; d < b.length; d++) if (b[d] == this.pageIndex) {
                c = !0;
                break
            } ! 0 == c && AddNotesByContainers(this.bookType, this.pageIndex, this.MMBackground)
        }
    },
    showGray: function() {
        if (this.attachment) {
            this.searchHighlight.css({
                display: "block"
            });
            for (var b = 0; b < this.youtubeArray.length; b++) this.youtubeArray[b].show();
            for (b = 0; b < this.flashSwfArray.length; b++) this.flashSwfArray[b].show();
            for (b = 0; b < this.buttonArray.length; b++) this.buttonArray[b].show()
        }
    },
    hideGray: function() {
        if (this.attachment) {
            this.clearHighlight();
            for (var b = 0; b < this.youtubeArray.length; b++) this.youtubeArray[b].hide();
            for (b = 0; b < this.flashSwfArray.length; b++) this.flashSwfArray[b].hide();
            for (b = 0; b < this.buttonArray.length; b++) this.buttonArray[b].hide()
        }
    },
    highlightSearch: function() {
        this.attachment && highlightSearchFun(this.searchHighlight, this.pageIndex)
    },
    clearHighlight: function() {
        this.attachment && clearHighlightFun(this.searchHighlight)
    },
    onResize: function(b, c) {
        this.resizePage(b, c);
        this.flipFrontShadow.css({
            height: 3 * this.maskWidth,
            top: -this.maskWidth
        });
        this.flipBackShadow.css({
            height: this.maskWidth,
            top: (this.height - this.maskWidth) / 2
        });
        if (this.attachment && (this.isLeft ? this.midShadow.css({
            width: parseInt(bookConfig.LeftShadowWidth * this.width / 450)
        }) : this.midShadow.css({
            width: parseInt(bookConfig.RightShadowWidth * this.width / 450)
        }), this.onMMResize(this.attachW, this.attachH), this.coverShadow)) this.coverShadow.onResize()
    },
    resizePage: function(b, c) {
        this.width = b;
        this.height = c;
        this.maskWidth = Math.sqrt(Math.pow(b, 2) + Math.pow(c, 2));
        this.attachW = parseInt(100 * b / ( - parseFloat(bookConfig.visibleAreaLeft) + parseFloat(bookConfig.visibleAreaRight)));
        this.attachH = parseInt(100 * c / (parseFloat(bookConfig.visibleAreaBottom) - parseFloat(bookConfig.visibleAreaTop)));
        this.side.css({
            width: b,
            height: c
        });
        this.tmpContent.css({
            width: this.attachW,
            height: this.attachH,
            top: -this.attachH * parseFloat(bookConfig.visibleAreaTop) / 100,
            left: -this.attachW * parseFloat(bookConfig.visibleAreaLeft) / 100
        });
        this.resizeSideImage()
    },
    resizeSideImage: function() {
        if (this.sideImage) if ($.system.name != $.system.ANDROID && (isPhone() || isPad())) {
            var b = 1024,
            c = 1024;
            windowWidth > windowHeight && bookType == BookType.normal_book && (c = b = 512);
            isPad() && (c = b = 2048, windowWidth > windowHeight && bookType == BookType.normal_book && (c = b = 768));
            b = getPageWidthHeight(b, c, bookConfig.largePageWidth, bookConfig.largePageHeight);
            this.sideImage.css({
                width: Math.ceil(b.x) + "px",
                height: Math.ceil(b.y) + "px"
            });
            c = transformCSS({
                scale: this.width / b.x,
                origin: {
                    x: 0,
                    y: 0
                }
            });
            this.isMirrorSide && (c = transformCSS({
                scaleX: -this.width / b.x,
                scaleY: this.width / b.x,
                origin: {
                    x: 0,
                    y: 0
                },
                tran: {
                    x: this.width,
                    y: 0
                }
            }), this.sideImage.css({
                opacity: 0.2
            }));
            this.sideImage.css(c)
        } else this.sideImage.css({
            width: "100%",
            height: "100%"
        }),
        this.isMirrorSide && this.sideImage.css({
            "-webkit-transform": "scaleX(-1)",
            "-moz-transform": "scaleX(-1)",
            "-o-transform": "scaleX(-1)",
            "-ms-transform": "scaleX(-1)",
            opacity: 0.2
        })
    },
    sideAddChild: function(b) {
        this.side.append(b)
    },
    setFlipShadow: function(b, c) {
        c ? (this.flipBackShadow && this.flipBackShadow.css({
            visibility: "hidden"
        }), this.flipFrontShadow && this.flipFrontShadow.css({
            visibility: "visible"
        })) : (this.flipBackShadow && this.flipBackShadow.css({
            visibility: "visible"
        }), this.flipFrontShadow && this.flipFrontShadow.css({
            visibility: "hidden"
        }));
        var d = b.shadowRate,
        f = b.rotate,
        g = 0.9 < d ? 1 + 2 * (1 - d) / 0.1 : 3 * d / 0.9,
        d = 0.9 < d ? 0.2 * (1 - d) / 0.1 : 0.1 > d ? 0.2 * d / 0.1 : 0.2,
        h = (b.frontShadowDistance - 100 * (90 < f ? 0 : g)) / Math.cos(f * Math.PI / 180),
        h = transformCSS({
            scaleX: g,
            rotate: -f,
            tran: {
                x: h,
                y: 0
            }
        }),
        g = transformCSS({
            scaleX: g,
            rotate: f,
            tran: {
                x: b.maskTranX,
                y: b.maskTranY
            }
        }),
        k = 90 < f ? 100 : 0,
        l = 0 <= f && 180 > f ? 100 * (this.height + this.maskWidth) / (3 * this.maskWidth) : 100 / 3;
        this.flipFrontShadow.css({
            "transform-origin": k + "% " + l + "%",
            "-webkit-transform-origin": k + "% " + l + "%",
            "-moz-transform-origin": k + "% " + l + "%",
            "-ms-transform-origin": k + "% " + l + "%"
        });
        90 < f ? (this.flipFrontShadow.css({
            right: "0px"
        }), this.flipBackShadow.css({
            left: "100%"
        })) : (this.flipFrontShadow.css({
            right: "auto"
        }), this.flipBackShadow.css({
            left: "0px"
        }));
        this.flipFrontShadow.css(h);
        this.flipFrontShadow.css({
            opacity: d
        });
        this.flipBackShadow.css(g);
        this.flipBackShadow.css({
            opacity: d
        })
    },
    clearFlipShadow: function() {
        this.flipBackShadow && this.flipBackShadow.css({
            visibility: "hidden"
        });
        this.flipFrontShadow && this.flipFrontShadow.css({
            visibility: "hidden"
        });
        this.side.removeClass("boxShadow")
    }
}).extend(BookSide);
bdor[36] = 36;
global.bdor[35] = function() {
    return 3
} ();
global.bdor[37] = 80;
bdor[38] = function() {
    return bdor[30](37, 40)
} ();
var NormalMask = Class({
    create: function(b, c) {
        this.width = this.zIndex = 0;
        this.pageIndex = b;
        this.container = $("<div class='mask'></div>");
        this.container.attr("id", c + b)
    },
    remove: function() {
        this.container.remove();
        this.page = this.container = void 0
    },
    setPage: function(b) {
        this.page = b
    },
    setCSSByStyle: function(b) {
        this.container.css(b)
    },
    setCSSByName: function(b) {
        this.container.addClass(b)
    },
    onResize: function(b, c) {
        var d = Math.sqrt(Math.pow(b, 2) + Math.pow(c, 2));
        this.container.css({
            width: d,
            height: d,
            top: (c - d) / 2
        });
        this.width = d
    },
    getWidth: function() {
        return this.width
    },
    setZIndex: function(b) {
        this.zIndex = b;
        this.container.css({
            "z-index": b
        })
    },
    getZIndex: function() {
        return this.zIndex
    }
});
bdor[39] = function() {
    return 8
} ();
var bookMouseDown = !1,
nBookStatu = 0;
global.bdor[200] = function(b) {
    return bdor[b]
};
var NormalBook = Class({
    coordinate_bottom_left: "bl",
    coordinate_top_left: "tl",
    coordinate_bottom_right: "br",
    coordinate_top_right: "tr",
    direction_left: "left",
    direction_right: "right",
    create: function(b, c) {
        this.bookType = BookType.normal_book;
        this.pageArray = [];
        this.pageMaskArray = [];
        this.pageBackArray = [];
        this.pageBackMaskArray = [];
        this.flipArray = {};
        this.maskWidth = this.height = this.width = this.pageHeight = this.pageWidth = 0;
        this.currentPageIndex = c;
        this.flipToPage = this.flippingPage = null;
        this.flipPoint = Point(0, 0);
        this.taskList = new TaskList;
        this.taskList.setLargeLength(5);
        this.flippingTime = 1E3 * bookConfig.flippingTime;
        this.createBook(b);
        global.rand100 = Math.floor(100 * Math.random())
    },
    initThickness: function() {
        this.thicknessWidth = 30;
        this.leftThickness = new LeftThickness(this.flipBook, this.thicknessWidth);
        this.rightThickness = new RightThickness(this.flipBook, this.thicknessWidth)
    },
    createBook: function(b) {
        this.flipBook = $("<div class='book' id='flipBook' ></div>");
        this.setBookPageByIndex(this.currentPageIndex);
        this.initThickness();
        this.isHardPage(1, 2) ? (this.leftThickness.setMinScale(0), this.rightThickness.setMinScale(0)) : (this.leftThickness.setMinScale(6), this.rightThickness.setMinScale(6));
        this.leftFlipShotBar = new flipShotBar(!0);
        this.rightFlipShotBar = new flipShotBar(!1);
        this.normalBookShadow = new BookShadow(this.flipBook);
        this.resetBookShadow(this.currentPageIndex);
        isPhone() || isPad() || (this.bmt = new initBookMarkTab(this.flipBook, rightToLeft));
        this.showOrHideGrayShadow(this.currentPageIndex);
        this.init1 = 50;
        b.append(this.flipBook);
        setCurrentIndexTextField(this.currentPageIndex, !0);
        this.rightThickness.resetPosition();
        this.leftThickness.resetPosition();
        setLocationHash(this.currentPageIndex);
        this.setAttachmentBefore(this.currentPageIndex);
        this.initEvent();
        isTouchDevice() || this.initZoomHintTimer(b);
        1 == this.currentPageIndex && this.initMiniFullscreen();
        void 0 != global.staticAd && !0 == staticAd.haveAd && this.insertStaticAd();
        this.adContainer = $("<div id='adContainer'></div>");
        this.adContainer.css({
            position: "absolute",
            "z-index": 1
        });
        this.bookMap || bookType == BookType.catalog_book || (this.showPage = this.flipBook, this.bookMap = new ZoomMap(this), this.bookMap.fillContent(this.currentPageIndex))
    },
    showOrHideGrayShadow: function(b) {
        if (!$.browser.msie && !$.browser.safari && this.bookType == BookType.normal_book) {
            if (!this.grayShadow) {
                this.grayShadow = $("<div class='grayShadow'></div>");
                var c = $("<div class='kong edgeShadow' ></div>");
                this.grayShadow.append(c);
                this.flipBook.append(this.grayShadow)
            }
            rightToLeft && (b == totalPageCount || 1 == this.currentPageIndex || this.currentPageIndex == totalPageCount) || !rightToLeft && (1 == b || 1 == this.currentPageIndex || this.currentPageIndex == totalPageCount) ? this.grayShadow.hide() : this.grayShadow.show()
        }
    },
    resetBookShadow: function(b) {
        1 == b && this.currentPageIndex == totalPageCount || b == totalPageCount && 1 == this.currentPageIndex ? this.normalBookShadow.hide() : (this.normalBookShadow.doubleWidth(1 != b && b != totalPageCount && 1 != this.currentPageIndex && this.currentPageIndex != totalPageCount), this.normalBookShadow.right(!rightToLeft && (1 == b || 1 == this.currentPageIndex) || rightToLeft && (b == totalPageCount || this.currentPageIndex == totalPageCount)))
    },
    setBookPageByIndex: function(b) {
        isNaN(b) || 0 >= b || (b = 2 * parseInt(b / 2), this.unWrapPageExcludeArray([b, b + 1, b + 2, b + 3, b - 1, b - 2]), this.addPageArray([b, b + 1, b + 2, b + 3, b - 1, b - 2]), this.loading(), this.currentPage = this.pageArray[b], this.currentPage2 = this.pageArray[b + 1], this.nextPage = this.pageArray[b + 2], this.nextPage2 = this.pageArray[b + 3], this.previousPage = this.pageArray[b - 1], this.previousPage2 = this.pageArray[b - 2], this.setPageCss(), this.currentPage && this.currentPage.enterSide(), this.currentPage2 && this.currentPage2.enterSide())
    },
    addPageArray: function(b) {
        if (b && this.pageArray) for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount || (this.pageArray[b[c]] && this.fillContent(b[c]), this.pageArray[b[c]]))) {
            var d = this.newPage(b[c]);
            d.addAttachment();
            d.onResize(this.pageWidth, this.pageHeight);
            this.pageArray[b[c]] = d;
            this.fillContent(b[c]);
            this.flipBook.append(d.getSide())
        }
    },
    newPage: function(b) {
        return new NormalSide(b, "page", BookType.normal_book)
    },
    fillContent: function(b) {
        if (!this.flipping || imageLoaded[b]) this.pageArray[b] && this.pageArray[b].fillContent(),
        this.pageBackArray && this.pageBackArray[b] && this.pageBackArray[b].fillContent()
    },
    fillPage: function(b, c) {
        if (b) for (var d = this.pageArray.length,
        f = 0; f < d; f++) this.pageArray[f] && this.pageArray[f].fillPage(b, c),
        this.pageBackArray && this.pageBackArray[f] && this.pageBackArray[f].fillPage(b, c)
    },
    removePage: function(b) { ! isNaN(b) && this.pageArray[b] && (this.pageArray[b].remove(), this.pageArray[b] = void 0)
    },
    addPageMaskArray: function(b) {
        if (b && this.pageMaskArray) {
            for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount || this.pageMaskArray[b[c]])) {
                this.pageArray[b[c]] || this.addPageArray([b[c]]);
                var d = this.pageArray[b[c]],
                f = new NormalMask(b[c], "pageMask");
                f.onResize(this.pageWidth, this.pageHeight);
                d.setCSSByStyle({
                    top: (f.width - d.height) / 2
                });
                d.wrap(f.container);
                f.container = $("#pageMask" + b[c]);
                f.setPage(d);
                this.pageMaskArray[b[c]] = f
            }
            this.setPageMaskCss()
        }
    },
    setPageMaskCss: function() {
        $(".mask").css({
            right: "50%"
        })
    },
    unWrapPageExcludeArray: function(b) {
        if (b && this.pageArray) for (var c = this.pageArray.length,
        d = 0; d < c; d++) ! this.pageArray[d] || 0 <= b.indexOf(d) || (this.pageArray[d].remove(), this.pageArray[d] = void 0)
    },
    unWrapPageMaskArray: function(b) {
        if (b && this.pageMaskArray) for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount)) {
            var d = this.pageMaskArray[b[c]];
            if (this.pageArray[b[c]]) {
                var f = transformCSS({
                    rotate: 0,
                    tran: {
                        x: 0,
                        y: 0
                    }
                });
                d && this.pageArray[b[c]].unwrap();
                this.pageArray[b[c]].setCSSByStyle({
                    top: 0
                });
                this.pageArray[b[c]].setCSSByStyle(f)
            }
            this.pageMaskArray[b[c]] = void 0
        }
    },
    setPageCss: function() {
        var b = transformCSS({
            rotate: 0,
            tran: {
                x: 0,
                y: 0
            }
        });
        this.currentPage && (this.currentPage.setZIndex(2), this.currentPage.setLeftOrRight(!0), this.currentPage.setCSSByStyle(b));
        this.previousPage && (this.previousPage.setZIndex(1), this.previousPage.setLeftOrRight(!0), this.previousPage.setCSSByStyle(b));
        this.previousPage2 && (this.previousPage2.setZIndex(0), this.previousPage2.setLeftOrRight(!0), this.previousPage2.setCSSByStyle(b));
        this.currentPage2 && (this.currentPage2.setZIndex(2), this.currentPage2.setLeftOrRight(!1), this.currentPage2.setCSSByStyle(b));
        this.nextPage && (this.nextPage.setZIndex(1), this.nextPage.setLeftOrRight(!1), this.nextPage.setCSSByStyle(b));
        this.nextPage2 && (this.nextPage2.setZIndex(0), this.nextPage2.setLeftOrRight(!1), this.nextPage2.setCSSByStyle(b));
        rightToLeft && (this.currentPage && this.currentPage.setLeftOrRight(!1), this.previousPage && this.previousPage.setLeftOrRight(!1), this.previousPage2 && this.previousPage2.setLeftOrRight(!1), this.currentPage2 && this.currentPage2.setLeftOrRight(!0), this.nextPage && this.nextPage.setLeftOrRight(!0), this.nextPage2 && this.nextPage2.setLeftOrRight(!0))
    },
    resizePage: function(b, c) {
        for (var d = this.pageArray.length,
        f = 0; f < d; f++) if (this.pageArray[f]) this.pageArray[f].onResize(b, c);
        d = this.pageBackArray.length;
        for (f = 0; f < d; f++) if (this.pageBackArray[f]) this.pageBackArray[f].onResize(b, c)
    },
    hardFlipByIndex: function(b, c, d) {
        d = this.getDownUpHardPage(b, c, d);
        this.flipArray[b + "-" + c] || (this.flipArray[b + "-" + c] = {});
        this.flipArray.array || (this.flipArray.array = []);
        this.flipArray.curlingArray || (this.flipArray.curlingArray = []);
        this.flipArray.fallbackArray || (this.flipArray.fallbackArray = []);
        this.flipArray.flipArray || (this.flipArray.flipArray = []);
        this.flipArray.zoomArray || (this.flipArray.zoomArray = []);
        this.flipArray.resizeArray || (this.flipArray.resizeArray = []);
        this.flipArray[b + "-" + c].downMask = d[0];
        this.flipArray[b + "-" + c].upMask = d[1];
        this.flipArray[b + "-" + c].currentIndex = b;
        this.flipArray[b + "-" + c].nextIndex = c;
        this.flipArray[b + "-" + c].hardPage = !0;
        this.flipArray.array.push(b + "-" + c);
        return this.flipArray[b + "-" + c]
    },
    getDownUpHardPage: function(b, c, d) {
        this.addPageArray([b, c]);
        d ? (this.pageArray[b] && this.pageArray[b].setCSSByName("flip-hard-left-side"), this.pageArray[c] && this.pageArray[c].setCSSByName("flip-hard-right-side")) : (this.pageArray[b] && this.pageArray[b].setCSSByName("flip-hard-right-side"), this.pageArray[c] && this.pageArray[c].setCSSByName("flip-hard-left-side"));
        this.pageArray[c] && this.pageArray[c].setAttachment(!d);
        return [this.pageArray[b], this.pageArray[c]]
    },
    getDownUpPage: function(b, c, d) {
        this.addPageMaskArray([b, c]);
        this.pageMaskArray[b] && (this.pageMaskArray[b].page.setCSSByName("right-side"), this.pageMaskArray[b].page.setZIndex(2));
        this.pageMaskArray[c] && (this.pageMaskArray[c].page.setCSSByName("flip-side"), this.pageMaskArray[c].page.side.addClass("boxShadow"), this.pageMaskArray[c].page.setZIndex(1), this.pageMaskArray[c].page.setAttachment(!d));
        return [this.pageMaskArray[b], this.pageMaskArray[c]]
    },
    beginFlipByIndex: function(b, c, d) {
        if (this.isHardPage(b, c)) return this.hardFlipByIndex(b, c, d);
        d = this.getDownUpPage(b, c, d);
        this.flipArray[b + "-" + c] || (this.flipArray[b + "-" + c] = {});
        this.flipArray.array || (this.flipArray.array = []);
        this.flipArray.curlingArray || (this.flipArray.curlingArray = []);
        this.flipArray.fallbackArray || (this.flipArray.fallbackArray = []);
        this.flipArray.flipArray || (this.flipArray.flipArray = []);
        this.flipArray.zoomArray || (this.flipArray.zoomArray = []);
        this.flipArray.resizeArray || (this.flipArray.resizeArray = []);
        this.flipArray[b + "-" + c].downMask = d[0];
        this.flipArray[b + "-" + c].upMask = d[1];
        this.flipArray[b + "-" + c].currentIndex = b;
        this.flipArray[b + "-" + c].nextIndex = c;
        this.flipArray[b + "-" + c].hardPage = !1;
        this.flipArray.array.push(b + "-" + c);
        this.resetBookShadow(c);
        this.showOrHideGrayShadow(c);
        return this.flipArray[b + "-" + c]
    },
    isHardPage: function(b, c) {
        return $.browser.msie && 11 > $.browser.version || !bookConfig.HardPageEnable || 1 != b && 1 != c && b != totalPageCount && c != totalPageCount ? !1 : !0
    },
    flipToMax: function(b, c, d, f) {
        var g = this.beginFlipByIndex(b, c, f);
        this.addPageArray([c + 1]);
        this.pageArray[c + 1] && (this.pageArray[c + 1].setZIndex(0), this.pageArray[c + 1].setLeftOrRight(f), g.nextPage = this.pageArray[c + 1]);
        d && (this.addPageArray([c + 2, c + 3]), this.pageArray[c + 1] && this.pageArray[c + 1].setZIndex(2), this.pageArray[c + 2] && (this.pageArray[c + 2].setZIndex(1), this.pageArray[c + 2].setLeftOrRight(f)), this.pageArray[c + 3] && (this.pageArray[c + 3].setZIndex(0), this.pageArray[c + 3].setLeftOrRight(f)));
        for (d = c + 4; d <= originTotalPageCount; d++) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        for (d = b + 1; d < c; d++) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        return g
    },
    flipToMin: function(b, c, d, f) {
        var g = this.beginFlipByIndex(b, c, f);
        this.addPageArray([c - 1]);
        this.pageArray[c - 1] && (this.pageArray[c - 1].setZIndex(0), this.pageArray[c - 1].setLeftOrRight(f), g.nextPage = this.pageArray[c - 1]);
        d && (this.addPageArray([c - 2, c - 3]), this.pageArray[c - 1] && this.pageArray[c - 1].setZIndex(2), this.pageArray[c - 2] && (this.pageArray[c - 2].setZIndex(1), this.pageArray[c - 2].setLeftOrRight(f)), this.pageArray[c - 3] && (this.pageArray[c - 3].setZIndex(0), this.pageArray[c - 3].setLeftOrRight(f)));
        for (d = c - 4; 0 <= d; d--) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        for (d = b - 1; d > c; d--) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        return g
    },
    getFlipTo: function(b) {
        var c = 2 * parseInt(this.currentPageIndex / 2);
        b = 2 * parseInt(b / 2);
        var d = c + 1,
        f = "";
        b > d && (f = "max");
        b + 1 < c && (f = "min", b += 1);
        return {
            flipTo: f,
            minIndex: c,
            maxIndex: d,
            toIndex: b
        }
    },
    beforeFlipTo: function(b, c) {
        this.setAttachmentBefore(b);
        var d = this.getFlipTo(b),
        f = d.minIndex,
        g = d.maxIndex,
        h = d.toIndex,
        k;
        "max" == d.flipTo && (k = this.flipToMax(g, h, c, rightToLeft));
        "min" == d.flipTo && (k = this.flipToMin(f, h, c, !rightToLeft));
        this.setPageMaskZIndex(k, d);
        return k
    },
    setAttachmentBefore: function(b) {
        bookConfig.RightToLeft ? (b > this.currentPageIndex && this.setLeftThicknessVisible(b), b < this.currentPageIndex && this.setRightThicknessVisible(b)) : (b < this.currentPageIndex && this.setLeftThicknessVisible(b), b > this.currentPageIndex && this.setRightThicknessVisible(b));
        this.adContainer && this.adContainer.css({
            "z-index": 1
        });
        this.bmt && (1 >= b && (parseBool(bookConfig.RightToLeft) ? this.bmt.rightBox.hide() : this.bmt.leftBox.hide()), b >= originTotalPageCount && (parseBool(bookConfig.RightToLeft) ? this.bmt.leftBox.hide() : this.bmt.rightBox.hide()))
    },
    setBookmarkVisible: function(b) {
        this.bmt && (1 < b && (rightToLeft ? this.bmt.rightBox.show() : this.bmt.leftBox.show()), b < originTotalPageCount && (rightToLeft ? this.bmt.leftBox.show() : this.bmt.rightBox.show()))
    },
    setPageMaskZIndex: function(b, c) {
        if (b) {
            var d = b.downMask.pageIndex,
            f = b.upMask.pageIndex,
            g = originTotalPageCount + 5 + f,
            h = originTotalPageCount + 5 - d;
            "min" == c.flipTo && (g = 2 * originTotalPageCount + 5 - f);
            "min" == c.flipTo && (h = 5 + d);
            b.upMask.setZIndex(g);
            b.downMask.setZIndex(h)
        }
    },
    flippingTo: function(b) {
        b > this.currentPageIndex ? rightToLeft ? this.leftThickness.resetPosition(b) : this.rightThickness.resetPosition(b) : rightToLeft ? this.rightThickness.resetPosition(b) : this.leftThickness.resetPosition(b);
        this.currentPageIndex = b;
        this.currentPageIndex = Math.max(1, this.currentPageIndex);
        this.currentPageIndex = Math.min(originTotalPageCount, this.currentPageIndex);
        setCurrentIndexTextField(this.currentPageIndex, !0);
        setLocationHash(this.currentPageIndex)
    },
    afterFlipToMax: function(b, c) {
        var d = 2 * parseInt(b / 2);
        this.addPageArray([d, d - 1, d - 2]);
        this.pageArray[d] && (this.pageArray[d].setZIndex(2), this.pageArray[d].setLeftOrRight(c));
        this.pageArray[d - 1] && (this.pageArray[d - 1].setZIndex(1), this.pageArray[d - 1].setLeftOrRight(c));
        this.pageArray[d - 2] && (this.pageArray[d - 2].setZIndex(0), this.pageArray[d - 2].setLeftOrRight(c));
        this.pageArray[d + 1] && this.fillContent(d + 1);
        this.pageArray[d + 2] && this.fillContent(d + 2);
        this.pageArray[d + 3] && this.fillContent(d + 3);
        for (d -= 3; 0 <= d; d--) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        rightToLeft ? this.rightThickness.resetPosition(b) : this.leftThickness.resetPosition(b);
        this.leftThickness.resetScale(b);
        this.rightThickness.resetScale(b)
    },
    afterFlipToMin: function(b, c) {
        var d = 2 * parseInt(b / 2) + 1;
        this.addPageArray([d, d + 1, d + 2]);
        this.pageArray[d] && (this.pageArray[d].setZIndex(2), this.pageArray[d].setLeftOrRight(c));
        this.pageArray[d + 1] && (this.pageArray[d + 1].setZIndex(1), this.pageArray[d + 1].setLeftOrRight(c));
        this.pageArray[d + 2] && (this.pageArray[d + 2].setZIndex(0), this.pageArray[d + 2].setLeftOrRight(c));
        this.pageArray[d - 1] && this.fillContent(d - 1);
        this.pageArray[d - 2] && this.fillContent(d - 2);
        this.pageArray[d - 3] && this.fillContent(d - 3);
        for (d += 3; d <= originTotalPageCount; d++) this.pageArray[d] && (this.pageArray[d].remove(), this.pageArray[d] = void 0);
        rightToLeft ? this.leftThickness.resetPosition(b) : this.rightThickness.resetPosition(b);
        this.leftThickness.resetScale(b);
        this.rightThickness.resetScale(b)
    },
    afterFlipTo: function(b, c) {
        if (b && b.downMask && b.upMask) {
            var d = b.downMask.pageIndex,
            f = b.upMask.pageIndex,
            g = d < c;
            this.flipArray.flipArray.removeElement(b.currentIndex + "-" + b.nextIndex);
            this.endFlipByIndex(d, f);
            this.removeFlipArrayByIndex(b.currentIndex, b.nextIndex);
            this.checkFlipping();
            g ? this.afterFlipToMax(c, !rightToLeft) : this.afterFlipToMin(c, rightToLeft);
            this.setAttachmentAfter()
        }
    },
    getCurrentPages: function() {
        var b = 2 * parseInt(this.currentPageIndex / 2);
        return [b, b + 1]
    },
    getPagesByIndex: function(b) {
        b = 2 * parseInt(b / 2);
        return [b, b + 1]
    },
    loading: function() {
        if (!this.flipping) {
            var b = this.getCurrentPages();
            if (b && !(0 >= b.length)) for (var c = b.length,
            d = 0; d < c; d++) b[d] && this.pageArray[b[d]] && this.pageArray[b[d]].loading()
        }
    },
    checkFlipping: function() {
        this.flipping = !1;
        for (var b = this.flipArray.array.length,
        c = 0; c < b; c++) if (this.flipArray.array[c]) {
            var d = this.flipArray.array[c];
            if (this.flipArray[d]) {
                if (this.flipArray[d].flipping) {
                    this.flipping = !0;
                    return
                }
                this.flipToDirection = ""
            }
        }
        this.loading()
    },
    setAttachmentAfter: function() {
        this.addHistoryTexts();
        this.stopMedia();
        this.stopAllSlider();
        this.addSearchHighlight();
        this.showOrHideGrayShadow(this.currentPageIndex);
        this.flipping || this.openShownSlider();
        this.flipping || this.openShownMedia();
        this.flipping || (this.resetBookShadow(this.currentPageIndex), this.normalBookShadow.show());
        this.setThicknessVisible(this.currentPageIndex);
        this.setBookmarkVisible(this.currentPageIndex);
        this.currentPageIndex < originTotalPageCount && (rightToLeft ? this.leftFlipShotBar.setVisible(!0) : this.rightFlipShotBar.setVisible(!0));
        bookConfig.ThumbnailsButtonVisible && thumbnail.clearHighLight();
        bookConfig.ThumbnailsButtonVisible && thumbnail.setHighLight(this.currentPageIndex);
        this.bmt && this.bmt.separated(this.currentPageIndex);
        resizeBookAfterFlip && !this.flipping && window.setTimeout(function() {
            onStageResize()
        },
        30);
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        });
        this.bookMap && this.bookMap.fillContent(this.currentPageIndex)
    },
    removeFlipArrayByIndex: function(b, c) {
        var d = b + "-" + c;
        this.flipArray[d].nextPage && this.flipArray[d].nextPage.clearFlipShadow();
        this.flipArray[d] && delete this.flipArray[d];
        this.flipArray.array && this.flipArray.array.removeElement(d)
    },
    flipToPoint: function(b, c, d, f, g, h) {
        if (b && g && h) if (!0 == b.hardPage) this.flipToHardPoint(b, c, d, g, h);
        else if (b.downMask && b.upMask && b.downMask.page && b.upMask.page && (b.coordinate = h, d = computePoint(c, d, f, g, h))) {
            f = transformCSS({
                rotate: d.rotate,
                tran: {
                    x: d.maskTranX,
                    y: d.maskTranY
                }
            });
            var k = transformCSS({
                rotate: d.rotate,
                tran: {
                    x: d.maskTranX,
                    y: d.maskTranY
                }
            }),
            l = transformCSS({
                rotate: -d.rotate,
                tran: {
                    x: -d.pageTranX,
                    y: 0
                }
            }),
            m = transformCSS({
                rotate: d.rotate,
                tran: {
                    x: d.pageTranX,
                    y: 0
                }
            });
            b.downMask && b.downMask.setCSSByStyle(f);
            b.upMask && b.upMask.setCSSByStyle(k);
            b.downMask && b.downMask.page && b.downMask.page.setCSSByStyle(l);
            b.upMask && b.upMask.page && b.upMask.page.setCSSByStyle(m);
            this.setFlipAlpha(b, c, g, h);
            this.setFlipShadow(b, d);
            this.followToPoint(b, g, h)
        }
    },
    followToPoint: function(b, c, d) {},
    setFlipAlpha: function(b, c, d, f) {},
    setFlipShadow: function(b, c) {
        b && c && (b.upMask.page && b.upMask.page.setFlipShadow(c, !0), b.nextPage && b.nextPage.setFlipShadow(c, !1))
    },
    flipToHardPoint: function(b, c, d, f, g) {
        b && f && g && (g.x > c && (g.x = c), g.x < -c && (g.x = -c), b.coordinate = g, d = -90 + 90 * Math.abs(g.x / f.x), 0 > g.x && (d = 90 - 90 * Math.abs(g.x / f.x)), c = transformCSS({
            perspective: 3E3,
            rotateY: d
        }), d = transformCSS({
            perspective: 3E3,
            rotateY: d
        }), b.downMask && b.downMask.setCSSByStyle(c), b.upMask && b.upMask.setCSSByStyle(d), 0 > g.x / f.x ? (b.upMask.setVisible(!0), b.downMask.setVisible(!1)) : (b.upMask.setVisible(!1), b.downMask.setVisible(!0)), this.followToPoint(b, f, g))
    },
    endFlipByIndex: function(b, c, d) {
        isNaN(b) || isNaN(c) || (this.unWrapPageMaskArray([b, c]), d ? (this.pageArray[b] && this.pageArray[b].setLeftOrRight(!0), this.pageArray[c] && this.pageArray[c].setLeftOrRight(!0)) : (this.pageArray[b] && this.pageArray[b].setLeftOrRight(!1), this.pageArray[c] && this.pageArray[c].setLeftOrRight(!1)), this.pageArray[b].clearFlipShadow(), this.pageArray[c].clearFlipShadow())
    },
    endFlip: function() {
        if (this.flipArray && this.flipArray.array && 0 != this.flipArray.array.length) for (var b = this.flipArray.array.length,
        c = 0; c < b; c++) if (this.flipArray.array[c]) {
            var d = this.flipArray[this.flipArray.array[c]];
            d && (this.endFlipByIndex(d.downMask.pageIndex, d.upMask.pageIndex), this.removeFlipArrayByIndex(d.currentIndex, d.nextIndex))
        }
    },
    onResize: function(b, c) {
        this.resize(b, c);
        if (this.leftThickness) this.leftThickness.onResize();
        if (this.rightThickness) this.rightThickness.onResize();
        if (this.leftFlipShotBar) this.leftFlipShotBar.onResize(this.width, this.height);
        if (this.rightFlipShotBar) this.rightFlipShotBar.onResize(this.width, this.height);
        this.doublePage = windowWidth < windowHeight ? !1 : !0;
        this.bookMap && (this.bookMap.onResize(b, c), this.bookMap.refreshArea())
    },
    resizeBook: function(b, c) {
        this.endFlip();
        this.width = 2 * b;
        this.height = c;
        this.pageWidth = b;
        this.pageHeight = c;
        this.maskWidth = Math.sqrt(b * b + c * c);
        this.flipBook.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.resizePage(this.pageWidth, this.pageHeight);
        this.resetBookShadow(this.currentPageIndex)
    },
    resize: function(b, c) {
        this.resizeBook(b, c);
        this.setBookPageByIndex(this.currentPageIndex);
        this.bmt && this.bmt.resize(c, 60);
        if (this.miniFullScreen) this.miniFullScreen.onResize();
        var d = this.flipBook.css("left"),
        f = this.flipBook.css("top");
        this.adContainer.css({
            left: d,
            top: f,
            width: b + "px",
            height: c + "px"
        });
        this.adInstance && this.adInstance.resize()
    },
    initZoomHintTimer: function(b) {
        var c = this;
        this.mouseInBook = new Point( - 1, -1);
        this.oldMouseInBook = new Point( - 1, -1);
        this.zoomHint = null;
        this.trackMousePoint = function(b) {
            b = isTouch ? b.originalEvent.touches: [b];
            var f = b[0].pageY;
            c.mouseInBook.x = b[0].pageX;
            c.mouseInBook.y = f
        };
        bookContainer.bind(_event._move, this.trackMousePoint);
        this.zoomHintTimer = window.setInterval(function() {
            if (bookType != BookType.normal_book) c.clearZoomHintTimer();
            else if (null == c.zoomHint) if ( - 1 == c.oldMouseInBook.x) c.oldMouseInBook.x = c.mouseInBook.x,
            c.oldMouseInBook.y = c.mouseInBook.y;
            else if (c.oldMouseInBook.x == c.mouseInBook.x && c.oldMouseInBook.y == c.mouseInBook.y) {
                var d = globalToBook(!0, c.mouseInBook.x, c.mouseInBook.y);
                if (! (0 > d.x || d.x > c.width || 0 > d.y || d.y > c.height)) {
                    var d = c.mouseInBook.x + 15,
                    f = c.mouseInBook.y;
                    c.zoomHint = new divHint(getLanguage("lblDoubleClickToZoomIn", "Double click to zoom in."), d, f, b);
                    c.zoomHint.show();
                    c.hideCount = 0
                }
            } else c.oldMouseInBook.x = c.mouseInBook.x,
            c.oldMouseInBook.y = c.mouseInBook.y;
            else 2 == ++c.hideCount && (bookContainer.unbind(_event._move, c.trackMousePoint), c.zoomHint.destroy(), c.zoomHint = null, window.clearInterval(c.zoomHintTimer))
        },
        1500)
    },
    clearZoomHintTimer: function() {
        try {
            window.clearInterval(this.zoomHintTimer)
        } catch(b) {}
        null != this.zoomHint && (bookContainer.unbind(_event._move, this.trackMousePoint), this.zoomHint.destroy(), this.zoomHint = null)
    },
    insertStaticAd: function() {
        var b = this.flipBook.css("left"),
        b = parseInt(b.replace("px", "")),
        c = this.flipBook.css("top"),
        d = this.flipBook.css("width"),
        d = parseInt(d.replace("px", ""));
        rightToLeft && (b += d / 2);
        this.adContainer.css({
            left: b + "px",
            top: c
        });
        this.adInstance = new HTML5AdSlider(this.adContainer, {
            paddingLeft: 30,
            paddingTop: 30,
            paddingRight: 30,
            paddingBottom: 30,
            loop: !1,
            timeout: 2E3,
            effectDuration: 1E3,
            data: staticAd.data
        });
        bookContainer.append(this.adContainer);
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        })
    },
    getCurrentPageIndex: function() {
        return this.currentPageIndex
    },
    getPageWidth: function(b) {
        if (void 0 == b) return this.pageWidth;
        this.pageWidth = b
    },
    getPageHeight: function(b) {
        if (void 0 == b) return this.pageHeight;
        this.pageHeight = b
    },
    getWidth: function() {
        return this.width
    },
    getHeight: function() {
        return this.height
    },
    getScale: function() {
        return 1
    },
    getLeft: function() {
        return this.flipBook.offset().left
    },
    getTop: function() {
        return this.flipBook.offset().top
    },
    getCssLeft: function() {
        return parseInt(this.flipBook.css("left"))
    },
    getCssTop: function() {
        return parseInt(this.flipBook.css("top"))
    },
    setCSS: function(b) {
        this.flipBook.css(b)
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        this.flipBook.css(d[0], b + "px");
        this.flipBook.css(d[1], c + "px")
    },
    endReset: function() {},
    resetFrameNum: function(b, c) {
        var d = (windowWidth - bookConfig.leftMargin - bookConfig.rightMargin - this.width) / 2 + bookConfig.leftMargin,
        f = d - this.width / 4,
        g = d + this.width / 4,
        h = this.getCssLeft();
        1 == c && (d = f);
        c == totalPageCount && (d = g);
        return 10 > Math.abs(d - h) ? b: 10
    },
    movetoCenter: function(b, c, d) {
        if (!1 != parseBool(bookConfig.retainBookCenter)) {
            var f = bookConfig.totalPageCount;
            1 == f % 2 && (f += 1);
            var g = -this.pageWidth / 2,
            h = this.pageWidth / 2;
            rightToLeft && (g = this.pageWidth / 2, h = -this.pageWidth / 2);
            if (! (1 < b && b < f && 1 < c & c < f)) {
                var k = 0,
                l = 0;
                1 == b && (k = g);
                b == f && (k = h);
                1 == c && (l = g);
                c == f && (l = h);
                b = 2 * this.pageWidth;
                void 0 == d && (d = b);
                isNaN(d) || (d = $.easing.easeInOutSine(null, d, k, l - k, b), d = transformCSS({
                    tran: {
                        x: d,
                        y: 0
                    }
                }), this.setCSS(d))
            }
        }
    },
    setThicknessMovingScale: function(b, c, d) {
        this.leftThickness.setMovingScale(b, c, d);
        this.rightThickness.setMovingScale(b, c, d)
    },
    initMiniFullscreen: function() {
        if (!0 != bookConfig.hideMiniFullscreen && !(isPhone() || isPad() || isIE() || miniStyle.isMini() || fullScreenApi.supportsFullScreen && fullScreenApi.isFullScreen() || this.miniFullScreen)) {
            this.miniFullscreenEnter = !1;
            this.miniFullScreen = $("<div class='miniFullscreen' id='miniFullscreen'></div>");
            this.miniFullScreen.html(getLanguage("lblFullscreen", "Click to view in fullscreen."));
            var b = this.flipBook.offset().top;
            this.miniFullScreen.css({
                top: b + this.pageHeight - 50 + "px"
            });
            bookContainer.append(this.miniFullScreen);
            this.miniFullScreen.onResize = function() {
                var b = this.flipBook.offset().top;
                this.miniFullScreen.css({
                    top: b + this.pageHeight - 50 + "px"
                })
            }.bind(this);
            this.miniFullScreen.bind(_event._end,
            function() {
                bookType == BookType.catalog_book ? this.guidBar.fullscreenBtn.trigger(_event._end) : toolBar.btnFullscreen.trigger(_event._end);
                this.miniFullScreen.remove();
                this.miniFullScreen = void 0
            }.bind(this));
            this.miniFullScreen.bind(_event._enter,
            function() {
                this.miniFullscreenEnter = !0
            }.bind(this));
            this.miniFullScreen.bind(_event._leave,
            function() {
                this.miniFullscreenEnter = !1;
                this.miniFullscreenTimeout && window.clearTimeout(this.miniFullscreenTimeout);
                this.miniFullscreenTimeout = window.setTimeout(function() {
                    this.removeFullscreenBtn(!0)
                }.bind(this), 3E3)
            }.bind(this));
            this.miniFullscreenEnter || (this.miniFullscreenTimeout && window.clearTimeout(this.miniFullscreenTimeout), this.miniFullscreenTimeout = window.setTimeout(function() {
                this.removeFullscreenBtn(!0)
            }.bind(this), 3E3))
        }
    },
    removeFullscreenBtn: function(b) {
        if (!0 != bookConfig.hideMiniFullscreen && !(isPhone() || isPad() || isIE() || miniStyle.isMini())) {
            var c = {
                alpha: b ? 0.5 : 0
            },
            d = this;
            $(c).animate({
                alpha: b ? 0 : 0.5
            },
            {
                duration: 300,
                easing: "easeOutSine",
                step: function() {
                    d.miniFullScreen && !0 != d.miniFullscreenEnter && d.miniFullScreen.css({
                        opacity: c.alpha
                    })
                },
                complete: function() {
                    d.miniFullScreen && !0 != d.miniFullscreenEnter && (d.miniFullScreen.remove(), d.miniFullScreen = void 0)
                }
            })
        }
    },
    translate: function(b, c) {
        transformCSS({});
        this.flipBook.css(style)
    },
    gotoPage: function(b) {
        if (! (isAndroidWeChat() || isAndroidDefault() || this.status_zoom) || !this.flipping) {
            if (1 >= b || b >= originTotalPageCount) if (1 != this.currentPageIndex || 1 != b) {
                var c = 1 >= b ? getLanguage("lblFirst", "This is the first page") : getLanguage("lblLast", "This is the last page");
                _tipsBox.setCaption(c);
                _tipsBox.showTipsBox()
            }
            if (! (0 >= b || b > originTotalPageCount || this.hasAlicePage(b) || this.hasAliceHardPage(b))) {
                var c = this.getFromStartPointByIndex(b),
                d = this.currentPageIndex;
                if (c && !this.handleHardPage(b)) {
                    var f = this.beforeFlipTo(b, !0);
                    if (f) {
                        var g = f.currentIndex + "-" + f.nextIndex;
                        0 < this.flipArray.curlingArray.indexOf(g) && (f.dragMoveToFlip = !0);
                        0 > this.flipArray.flipArray.indexOf(g) && this.flipArray.flipArray.push(g);
                        this.flipArray.fallbackArray.removeElement(g);
                        this.flipArray.curlingArray.removeElement(g);
                        this.optionPage == g && (this.optionPage = null);
                        f.flipping = !0;
                        f.loosen = !0;
                        f.AliceToLeft = !1;
                        f.AliceToRight = !1;
                        f.fallback = !1;
                        this.flipping = !0;
                        this.isDragMoveToFlip(f);
                        f.dragMoveToFlip || (this.flipToPoint(f, this.pageWidth, this.pageHeight, this.maskWidth, c[0], c[1]), c = Math.abs(c[1].x - c[0].x), this.setThicknessMovingScale(this.currentPageIndex, b, c), this.movetoCenter(this.currentPageIndex, b, c));
                        this.flippingTo(b);
                        var h = this.flipToDirection;
                        playFlipSound(); (function() {
                            this.flipIntervalTmp(f, d, b, h)
                        }).delay(this, 50);
                        1 == b ? this.initMiniFullscreen() : this.miniFullScreen && (this.miniFullScreen.remove(), this.miniFullScreen = void 0)
                    }
                }
            }
        }
    },
    boundaryPages: function() {
        return [2, 3, totalPageCount - 1, totalPageCount - 2]
    },
    hasAliceHardPage: function(b) {
        if (!bookConfig.HardPageEnable) return ! 1;
        if ((1 == b || b == totalPageCount || 0 <= this.boundaryPages().indexOf(this.currentPageIndex)) && this.flipArray.flipArray && 0 < this.flipArray.flipArray.length) {
            var c = window.setInterval(function() {
                this.flipArray.flipArray && 0 < this.flipArray.flipArray.length || (c && 0 > this.boundaryPages().indexOf(this.currentPageIndex) || gotoPageFun(b), window.clearInterval(c), c = void 0)
            }.bind(this), 20);
            return ! 0
        }
    },
    handleHardPage: function(b) {
        if (!bookConfig.HardPageEnable || 1 != b && b != totalPageCount && 1 != this.currentPageIndex && this.currentPageIndex != totalPageCount) return ! 1;
        if (1 == b && 0 > BookInfo.getCurrentPages().indexOf(2) || b == totalPageCount && 0 > BookInfo.getCurrentPages().indexOf(totalPageCount - 1)) return 1 == b && gotoPageFun(2),
        b == totalPageCount && gotoPageFun(totalPageCount - 1),
        window.setTimeout(function() {
            gotoPageFun(b)
        },
        20),
        !0;
        if (1 == this.currentPageIndex && 2 != b && 3 != b || this.currentPageIndex == totalPageCount && b != totalPageCount - 1 && b != totalPageCount - 2) return 1 == this.currentPageIndex && gotoPageFun(2),
        this.currentPageIndex == totalPageCount && gotoPageFun(totalPageCount - 1),
        window.setTimeout(function() {
            gotoPageFun(b)
        },
        20),
        !0
    },
    hasAlicePage: function(b) {
        if (this.flipArray.fallbackArray && 0 < this.flipArray.fallbackArray.length) return ! 0;
        var c = "right";
        if (b > this.currentPageIndex && !rightToLeft || b < this.currentPageIndex && rightToLeft) c = "left";
        b = this.getPagesByIndex(b);
        if (0 <= c.indexOf("l")) {
            if (this.flipping && this.flipToDirection == this.direction_right) return ! 0;
            if (this.flipArray.curlingArray && 0 < this.flipArray.curlingArray.length) for (var d = this.flipArray.curlingArray.length,
            f = 0; f < d; f++) {
                var g = this.flipArray.curlingArray[f];
                if (this.flipArray[g] && this.flipArray[g].AliceToRight || 0 > b.indexOf(this.flipArray[g].nextIndex)) return ! 0
            }
        }
        if (0 <= c.indexOf("r")) {
            if (this.flipping && this.flipToDirection == this.direction_left) return ! 0;
            if (this.flipArray.curlingArray && 0 < this.flipArray.curlingArray.length) for (d = this.flipArray.curlingArray.length, f = 0; f < d; f++) if (g = this.flipArray.curlingArray[f], this.flipArray[g] && this.flipArray[g].AliceToLeft || 0 > b.indexOf(this.flipArray[g].nextIndex)) return ! 0
        }
        return ! 1
    },
    getFromStartPointByIndex: function(b) {
        var c = 2 * parseInt(this.currentPageIndex / 2),
        d = c + 1;
        if (b != d && b != c) {
            var f = {
                x: 0,
                y: 0
            },
            g = {
                x: 0,
                y: 0
            },
            h = !1;
            if (b > d && !rightToLeft || b < c && rightToLeft) f = {
                x: this.pageWidth,
                y: this.pageHeight
            },
            h = !0;
            if (b < c && !rightToLeft || b > d && rightToLeft) f = {
                x: -this.pageWidth,
                y: this.pageHeight
            },
            h = !1;
            if (!this.flipping || !h || "right" != this.flipToDirection) if (!this.flipping || h || "left" != this.flipToDirection) return g.x = f.x,
            g.y = f.y,
            this.flipToDirection = h ? "left": "right",
            [f, g]
        }
    },
    isDragMoveToFlip: function(b) {
        b.dragMoveToFlip = !1;
        b.coordinate && b.startPoint && b.coordinate.x != b.startPoint.x && (b.dragMoveToFlip = !0)
    },
    setFlipOringinPoint: function(b, c) {
        b.dragMoveToFlip || "left" != c || (b.fromPoint = {
            x: this.pageWidth,
            y: this.pageHeight
        });
        b.dragMoveToFlip || "right" != c || (b.fromPoint = {
            x: -this.pageWidth,
            y: this.pageHeight
        });
        b.toPoint = {
            x: -b.fromPoint.x,
            y: b.fromPoint.y
        };
        b.startPoint || (b.startPoint = {
            x: 0,
            y: 0
        });
        b.startPoint.x = b.fromPoint.x;
        b.startPoint.y = b.fromPoint.y
    },
    flipIntervalTmp: function(b, c, d, f) {
        if (b) {
            this.flipping = !0;
            b.flipping = !0;
            this.setFlipOringinPoint(b, f);
            b.coordinate || (b.coordinate = b.startPoint);
            var g = b.coordinate.x,

            h = b.coordinate.y,
            k, l = this.flippingTime;
            f = isAndroidWeChat() || isAndroidDefault() ?
            function() {
                var b = 0;
                k = function() {
                    m(b, 25, "Sine");
                    b++
                }.interval(this, l / 25)
            }.bind(this) : function() {
                k = function(b, c) {
                    m(b, c, "Sine")
                }.runInAnimate(this, l)
            }.bind(this);
            var m = function(f, l, m) {
                if (!b) return ! 1;
                var t = $.easing["easeInOut" + m],
                r = $.easing["easeOut" + m];
                m = r(null, f, g, b.toPoint.x - g, l);
                r = r(null, f, h, b.toPoint.y - h, l);
                b.dragMoveToFlip || (m = t(null, f, g, b.toPoint.x - g, l));
                b.dragMoveToFlip || (r = this.pageHeight - 0.1 * Math.sqrt(this.pageWidth * this.pageWidth - m * m));
                if (f < l) {
                    this.flipToPoint(b, this.pageWidth, this.pageHeight, this.maskWidth, b.fromPoint, {
                        x: m,
                        y: r
                    });
                    var s = Math.abs(m - b.fromPoint.x);
                    this.setThicknessMovingScale(c, d, s);
                    this.movetoCenter(c, d, s)
                } else this.flipToPoint(b, this.pageWidth, this.pageHeight, this.maskWidth, b.fromPoint, b.toPoint),
                this.setThicknessMovingScale(c, d),
                this.movetoCenter(c, d, s),
                this.afterFlipTo(b, d),
                k.stop()
            }.bind(this);
            f()
        }
    },
    setShowOrHide: function() {},
    reShowOrHide: function() {},
    resetPageCorner: function() {},
    stopTimer: function() {
        window.clearInterval(this.intervalID)
    },
    openShownSlider: function() {
        var b = getShownPage();
        if (void 0 != b && null != b) for (var c = 0; c < b.length; c++) {
            var d = b[c];
            this.pageArray[d] && this.pageArray[d].playSlider()
        }
    },
    stopAllSlider: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].resetSlider()
    },
    openShownMedia: function() {
        var b = getShownPage();
        if (void 0 != b && null != b) for (var c = 0; c < b.length; c++) {
            var d = b[c];
            this.pageArray[d] && this.pageArray[d].enterSide()
        }
    },
    stopMedia: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].leaveSide()
    },
    hide: function() {
        Log.debug("normal book hide.");
        this.setCSS({
            display: "none"
        });
        this.stopMedia();
        this.stopAllSlider();
        this.bookMap && this.bookMap.hide();
        this.controlBar && this.controlBar.setVisible(!1);
        this.adContainer && this.adContainer.hide()
    },
    show: function() {
        Log.debug("normal book show.");
        this.setCSS({
            display: "block"
        });
        this.openShownSlider();
        this.openShownMedia();
        this.addHistoryTexts();
        this.addSearchHighlight();
        this.bmt && this.bmt.refresh();
        this.adContainer && this.adContainer.show();
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        })
    },
    addHistoryTexts: function() {
        var b = [1];
        try {
            b = getShownPage()
        } catch(c) {
            b = [1]
        }
        for (var d = this.pageArray.length,
        f = 0; f < d; f++) this.pageArray[f] && this.pageArray[f].addHistoryTexts(b)
    },
    addSearchHighlight: function() {
        var b = this.currentPageIndex,
        b = 0 == b % 2 ? b + 1 : b - 1;
        this.pageArray[b] && this.pageArray[b].highlightSearch();
        this.pageArray[b + 1] && this.pageArray[b + 1].highlightSearch();
        this.pageArray[b - 1] && this.pageArray[b - 1].highlightSearch();
        this.pageArray[b + 2] && this.pageArray[b + 2].highlightSearch()
    },
    clearSearchHighlight: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].clearHighlight()
    },
    setLeftThicknessVisible: function(b) {
        1 < b && !rightToLeft && (3 < b && this.leftThickness.setVisible(!0), this.leftFlipShotBar.setVisible(!0));
        b < originTotalPageCount - 1 && rightToLeft && (b < originTotalPageCount - 2 && this.leftThickness.setVisible(!0), this.leftFlipShotBar.setVisible(!0));
        3 >= b && !bookConfig.RightToLeft && (this.leftThickness.setVisible(!1), 1 >= b && this.leftFlipShotBar.setVisible(!1));
        b >= originTotalPageCount - 2 && bookConfig.RightToLeft && (this.leftThickness.setVisible(!1), b >= originTotalPageCount - 1 && this.leftFlipShotBar.setVisible(!1))
    },
    setRightThicknessVisible: function(b) {
        1 < b && rightToLeft && (3 < b && this.rightThickness.setVisible(!0), this.rightFlipShotBar.setVisible(!0));
        b < originTotalPageCount - 1 && !rightToLeft && (b < originTotalPageCount - 2 && this.rightThickness.setVisible(!0), this.rightFlipShotBar.setVisible(!0));
        3 >= b && bookConfig.RightToLeft && (this.rightThickness.setVisible(!1), 1 >= b && this.rightFlipShotBar.setVisible(!1));
        b >= originTotalPageCount - 2 && !bookConfig.RightToLeft && (this.rightThickness.setVisible(!1), b >= originTotalPageCount - 1 && this.rightFlipShotBar.setVisible(!1))
    },
    setThicknessVisible: function(b) {
        this.setLeftThicknessVisible(b);
        this.setRightThicknessVisible(b)
    },
    edgeX: function() {
        this.MiddleX = 0
    },
    aroundCorner: function(b) {
        this.edgeX();
        if (! (Math.abs(b.x) > this.pageWidth - 1 || b.y > this.height - 1 || 1 > b.y || Math.abs(b.x) < 0.8 * this.pageWidth || b.y > 0.2 * this.height && b.y < 0.8 * this.height)) {
            var c = Math.sqrt(Math.pow(0.2 * this.height, 2) - Math.pow((this.pageWidth - Math.abs(b.x)) * this.height / this.pageWidth, 2));
            if (b.y < c && b.x < this.MiddleX) return "tl";
            if (b.y < c && b.x > this.MiddleX) return "tr";
            if (b.y > this.height - c && b.x < this.MiddleX) return "bl";
            if (b.y > this.height - c && b.x > this.MiddleX) return "br"
        }
    },
    setFlipInterval: function() {
        this.flipInterval = function() {
            if (this.flipArray && this.flipArray.array && 0 != this.flipArray.array.length) for (var b = 0; b < this.flipArray.array.length; b++) if (this.flipArray.array[b]) {
                var c = this.flipArray.array[b];
                if (!this.flipArray[c]) this.flipArray.array.removeElement(c),
                b--;
                else if (this.flipArray[c].fromPoint && this.flipArray[c].startPoint && this.flipArray[c].toPoint && this.flipArray[c].downMask && this.flipArray[c].upMask && !this.flipArray[c].flipping) {
                    this.flipArray[c].Alice = !0;
                    this.flipArray[c].coordinate || (this.flipArray[c].coordinate = this.flipArray[c].startPoint);
                    var d = 0.42 * (this.flipArray[c].toPoint.x - this.flipArray[c].coordinate.x) + this.flipArray[c].coordinate.x,
                    f = 0.52 * (this.flipArray[c].toPoint.y - this.flipArray[c].coordinate.y) + this.flipArray[c].coordinate.y,
                    g = this.flipArray[c].downMask.pageIndex,
                    h = this.flipArray[c].upMask.pageIndex;
                    this.flipToPoint(this.flipArray[c], this.pageWidth, this.pageHeight, this.maskWidth, this.flipArray[c].fromPoint, {
                        x: d,
                        y: f
                    });
                    var k = Math.abs(d - this.flipArray[c].fromPoint.x);
                    this.setThicknessMovingScale(g, h, k);
                    this.movetoCenter(g, h, k); ! this.flipArray[c].flipping && this.flipArray[c].loosen && 1 > Math.abs(d - this.flipArray[c].toPoint.x) && 1 > Math.abs(f - this.flipArray[c].toPoint.y) && (this.flipArray.curlingArray.removeElement(c), this.flipArray.fallbackArray.removeElement(c), this.flipArray.flipArray.removeElement(c), this.flipArray[c].Alice = !1, d = this.flipArray[c].toPoint.x, f = this.flipArray[c].toPoint.y, this.flipToPoint(this.flipArray[c], this.pageWidth, this.pageHeight, this.maskWidth, this.flipArray[c].fromPoint, {
                        x: d,
                        y: f
                    }), k = Math.abs(d - this.flipArray[c].fromPoint.x), this.setThicknessMovingScale(g, h, k), this.movetoCenter(g, h, k), this.endFlipByIndex(g, h, 0 > this.flipArray[c].toPoint.x), this.removeFlipArrayByIndex(this.flipArray[c].currentIndex, this.flipArray[c].nextIndex), this.resetBookShadow(this.currentPageIndex), this.setBookmarkVisible(this.currentPageIndex), this.setThicknessVisible(this.currentPageIndex), this.showOrHideGrayShadow(this.currentPageIndex), this.afterCurling(), b--)
                }
            }
        }.interval(this, 20)
    },
    afterCurling: function() {},
    mouseWheelFlip: function() {
        if (bookConfig.mouseWheelFlip) {
            var b;
            this.flipBook.bind(_event._mousewheel,
            function(c) {
                var d;
                void 0 != b && 150 > new Date - b ? d = !1 : (b = new Date, d = !0);
                if (!d) return ! 1;
                d = c.originalEvent;
                0 > Math.max( - 1, Math.min(1, d.wheelDelta || -d.detail)) ? rightToLeft ? previousPageFun() : nextPageFun() : rightToLeft ? nextPageFun() : previousPageFun();
                stopEvent(c);
                return ! 1
            })
        }
    },
    initEvent: function() {
        this.moveDirectionType = {
            MOVE_LEFT: -1,
            MOVE_RIGHT: 1,
            MOVE_NONE: 0
        };
        this.mouseMoveDirection = this.moveDirectionType.MOVE_NONE;
        this.hammerEventModular();
        this.mouseWheelFlip()
    },
    hammerEventModular: function() {
        var b = new Hammer.Manager(this.flipBook[0]);
        b.add(new Hammer.Pan);
        b.add((new Hammer.Swipe).recognizeWith(b.get("pan")));
        b.add(new Hammer.Press);
        b.add(new Hammer.Pinch);
        b.add(new Hammer.Tap({
            event: "doubletap",
            taps: 2
        }));
        b.add(new Hammer.Tap);
        b.on("panstart panmove", this.onPan.bind(this));
        b.on("press", this.onPress.bind(this));
        b.on("tap", this.onTap.bind(this));
        this.flipBook.bind("mouseover mousemove", this.onOver.bind(this));
        this.flipBook.bind(_event._down, this.onDown.bind(this));
        $("body").bind(_event._end, this.onUp.bind(this));
        this.flipBook.speed(this.onSwipe.bind(this));
        this.flipBook.zoom({
            zoomStart: function() {
                this.zoomStart()
            }.bind(this),
            zoomIn: function() {
                this.zoomIn()
            }.bind(this),
            onPan: function() {
                this.bookMap && this.bookMap.refreshArea()
            }.bind(this),
            zoomOut: function() {
                this.zoomOut()
            }.bind(this),
            onZoomed: function(b) {
                this.onZoomed(b)
            }.bind(this)
        })
    },
    zoomStart: function() {
        var b = this.pageArray.length,
        c = this.getCurrentPages();
        this.zoomPageArray = [];
        for (var d = 0; d < b; d++) this.pageArray[d] && 0 > c.indexOf(d) && this.pageArray[d].visible && (this.zoomPageArray.push(this.pageArray[d]), this.pageArray[d].setVisible(!1))
    },
    zoomIn: function() {
        isPhone() || isPad() || (this.controlBar || (this.controlBar = new zoomControlBar(bookContainer), this.controlBar.setPosition((windowWidth - this.controlBar.width) / 2, toolBar.getTopHeight() + 5)), this.controlBar && this.controlBar.setVisible(!0), this.bookMap && (this.bookMap.show(), this.bookMap.fillContent(this.currentPageIndex)));
        this.status_zoom = !0;
        this.adContainer && this.adContainer.css({
            "z-index": 1
        });
        this.flipBook.parameters.zoomFlag = !0
    },
    zoomOut: function() {
        this.flipBook.parameters.zoomFlag = !1;
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        });
        this.status_zoom = !1;
        this.controlBar && this.controlBar.setVisible(!1);
        this.bookMap && this.bookMap.hide()
    },
    onDown: function() {
        this.status_zoom || this.isZomming || (this.fingleDown = !0)
    },
    onUp: function(b) {
        this.status_zoom || this.isZomming || bookType != this.bookType || (b = this.realPoint(b)[0], b = this.aroundCorner(b), this.fingleDown = !1, bookConfig.CurlingPageCorner && b && 0 <= b.indexOf("l") && this.optionPage && this.flipArray[this.optionPage] && this.flipArray[this.optionPage].AliceToRight || bookConfig.CurlingPageCorner && b && 0 <= b.indexOf("r") && this.optionPage && this.flipArray[this.optionPage] && this.flipArray[this.optionPage].AliceToLeft || (this.optionPage && (b = this.mouseMoveDirection == this.moveDirectionType.MOVE_LEFT && 0 < this.flipArray[this.optionPage].startPoint.x || this.mouseMoveDirection == this.moveDirectionType.MOVE_RIGHT && 0 > this.flipArray[this.optionPage].startPoint.x, (this.flipArray[this.optionPage].toPoint.x < this.MiddleX && 0 < this.flipArray[this.optionPage].startPoint.x || this.flipArray[this.optionPage].toPoint.x > this.MiddleX && 0 > this.flipArray[this.optionPage].startPoint.x || b) && this.pageDragToFlip(), this.flipArray[this.optionPage] && (this.flipArray[this.optionPage].loosen = !0), this.optionPage = null), this.unCurling()))
    },
    onPinch: function(b) {
        this.status_zoom || this.isZomming || this.status_zoom || this.status_resize || this.flipping || "pinchout" != b.type || (this.endFlip(), this.zoomToPage(this.currentPageIndex))
    },
    onDoubleTap: function(b) {
        if (!this.status_resize && !this.flipping) {
            var c = this.realPoint(b.srcEvent)[0];
            this.aroundCorner(c) || (this.endFlip(), this.zoomToPage(this.currentPageIndex, b.srcEvent.pageX, b.srcEvent.pageY))
        }
    },
    pageDragToFlip: function() {
        this.flipArray[this.optionPage].toPoint.y = this.flipArray[this.optionPage].startPoint.y;
        this.flipArray[this.optionPage].toPoint.x = -this.flipArray[this.optionPage].startPoint.x;
        this.mouseMoveDirection = this.moveDirectionType.MOVE_NONE;
        this.flipArray[this.optionPage].AliceToLeft = !1;
        this.flipArray[this.optionPage].AliceToRight = !1;
        this.flipArray[this.optionPage].Alice = !1;
        this.flipArray[this.optionPage].flipping = !0;
        this.flipArray[this.optionPage].dragMoveToFlip = !0;
        this.flipToDirection = 0 > this.flipArray[this.optionPage].startPoint.x ? "right": "left";
        var b = this.getNextPageIndex();
        this.tmpDragToFlipTimeout && window.clearTimeout(this.tmpDragToFlipTimeout);
        this.dragToFlip = !0;
        this.tmpDragToFlipTimeout = window.setTimeout(function() {
            this.dragToFlip = !1
        }.bind(this), 500);
        gotoPageFun(b)
    },
    onPan: function(b) {
        if (! (this.status_zoom || this.isZomming || bookType != this.bookType || this.status_zoom || this.status_resize || this.flipping || this.flipArray.fallbackArray && 0 < this.flipArray.fallbackArray.length)) {
            var c = this.realPoint(b.srcEvent)[0],
            d = this.aroundCorner(c);
            this.optionPage ? (this.flipArray[this.optionPage].toPoint = c, this.lastMousePoint && (this.mouseMoveDirection = 0 <= c.x - this.lastMousePoint.x ? this.moveDirectionType.MOVE_RIGHT: this.moveDirectionType.MOVE_LEFT), this.lastMousePoint = c) : ("panstart" == b.type && d || 30 < Math.abs(b.deltaX) && (c.x < this.MiddleX && 0 < b.deltaX || c.x > this.MiddleX && 0 > b.deltaX)) && this.curling(c, d)
        }
    },
    onPress: function(b) {
        if (! (this.status_zoom || this.isZomming || bookType != this.bookType || this.status_zoom || this.status_resize || this.flipping || this.flipArray.fallbackArray && 0 < this.flipArray.fallbackArray.length)) {
            b = this.realPoint(b.srcEvent)[0];
            var c = this.aroundCorner(b);
            this.optionPage ? this.flipArray[this.optionPage].toPoint = b: (c || (c = b.x > this.MiddleX ? "r": "l"), this.curling(b, c))
        }
    },
    onRotate: function(b) {},
    onSwipe: function(b, c) {
        if (!this.status_zoom && !this.isZomming && !this.dragToFlip) {
            var d;
            d = 30 * windowWidth / 1600;
            Math.abs(b) <= d || (b < -d ? this.flipFromDirection(this.coordinate_bottom_right) : b > d && this.flipFromDirection(this.coordinate_bottom_left))
        }
    },
    onTap: function(b) {
        if (this.status_zoom || this.isZomming) onWindowTap(b.srcEvent),
        isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1);
        else if (bookType == this.bookType && !this.status_zoom && !this.status_resize) {
            var c = this.realPoint(b.srcEvent)[0]; (c = this.aroundCorner(c)) ? this.flipFromDirection(c) : (onWindowTap(b.srcEvent), isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1))
        }
    },
    flipFromDirection: function(b) {
        if (! (this.flipArray.fallbackArray && 0 < this.flipArray.fallbackArray.length)) if (0 <= b.indexOf("l")) {
            if (!this.flipping || this.flipToDirection != this.direction_left) {
                if (this.flipArray.curlingArray && 0 < this.flipArray.curlingArray.length) {
                    b = this.flipArray.curlingArray.length;
                    for (var c = 0; c < b; c++) if (this.flipArray.curlingArray[c].AliceToLeft) return
                }
                this.flipToDirection = this.direction_right;
                b = this.getNextPageIndex();
                gotoPageFun(b)
            }
        } else if (0 <= b.indexOf("r") && (!this.flipping || this.flipToDirection != this.direction_right)) {
            if (this.flipArray.curlingArray && 0 < this.flipArray.curlingArray.length) for (b = this.flipArray.curlingArray.length, c = 0; c < b; c++) if (this.flipArray.curlingArray[c].AliceToRight) return;
            this.flipToDirection = this.direction_left;
            b = this.getNextPageIndex();
            gotoPageFun(b)
        }
    },
    onOver: function(b) {
        if (!this.status_zoom && !this.isZomming && bookType == this.bookType && !this.fingleDown && bookConfig.CurlingPageCorner) {
            b = this.realPoint(b)[0];
            var c = this.aroundCorner(b);
            c ? this.curling(b, c) : (this.flipArray[this.optionPage] && (this.flipArray[this.optionPage].loosen = !0), this.optionPage = null);
            this.unCurling()
        }
    },
    curling: function(b, c) {
        this.status_zoom || this.status_resize || (this.optionPage = this.curlingPage(b, c)) && (this.flipInterval || this.setFlipInterval())
    },
    curlingPage: function(b, c) {
        var d, f, g, h;
        if (!c && b.x < this.MiddleX || c && 0 <= c.indexOf("l")) {
            if (this.flipping && "left" == this.flipToDirection) return;
            f = this.realIndex(!1)[0];
            g = this.realIndex(!1)[1];
            d = f + "-" + g;
            h = !1
        }
        if (!c && b.x > this.MiddleX || c && 0 <= c.indexOf("r")) {
            if (this.flipping && "right" == this.flipToDirection) return;
            f = this.realIndex(!0)[0];
            g = this.realIndex(!0)[1];
            d = f + "-" + g;
            h = !0
        }
        if (! (! (d && f && g) || 0 >= f || f > originTotalPageCount || 0 >= g || g > originTotalPageCount || this.flipArray[d] && this.flipArray[d].fallback || this.flipArray[d] && this.flipArray[d].flipping)) return this.defineFlipPage(d, b, c, f, g, h),
        d
    },
    defineFlipPage: function(b, c, d, f, g, h) { ! c || 0 >= f || f > originTotalPageCount || 0 >= g || g > originTotalPageCount || (d = this.getFromStartPointByCoordinate(c, d), this.flipArray[b] || (this.flipArray[b] = {}), h ? (this.flipArray[b].AliceToLeft = !0, this.flipArray[b].AliceToRight = !1) : (this.flipArray[b].AliceToLeft = !1, this.flipArray[b].AliceToRight = !0), this.flipArray[b].loosen = !1, this.flipArray[b].fromPoint = d[0], this.flipArray[b].startPoint = d[1], this.flipArray[b].toPoint = c, this.flipArray[b].downMask || this.flipArray[b].upMask || (this.beforeFlipTo(g), this.flipToPoint(this.flipArray[b], this.pageWidth, this.pageHeight, this.maskWidth, this.flipArray[b].fromPoint, this.flipArray[b].startPoint), c = Math.abs(this.flipArray[b].startPoint - this.flipArray[b].fromPoint.x), this.setThicknessMovingScale(f, g, c), this.movetoCenter(f, g, c)), 0 > this.flipArray.curlingArray.indexOf(b) && this.flipArray.curlingArray.push(b), this.flipArray.fallbackArray.removeElement(b), this.flipArray.flipArray.removeElement(b))
    },
    unCurling: function() {
        if (!this.status_zoom && !this.status_resize && this.flipArray.array) for (var b = this.flipArray.array.length,
        c = 0; c < b; c++) {
            var d = this.flipArray.array[c];
            d == this.optionPage || !this.flipArray[d] || this.flipArray[d].fallback || this.flipArray[d].flipping || !this.flipArray[d].AliceToRight && !this.flipArray[d].AliceToLeft || (this.flipArray[d].AliceToRight = !1, this.flipArray[d].AliceToLeft = !1, this.flipArray[d].fallback = !0, this.flipArray[d].toPoint = this.flipArray[d].startPoint, 0 > this.flipArray.fallbackArray.indexOf(d) && this.flipArray.fallbackArray.push(d), this.flipArray.curlingArray.removeElement(d), this.flipArray.flipArray.removeElement(d))
        }
    },
    getFromStartPointByCoordinate: function(b, c) {
        if (b) {
            var d = {
                x: 0,
                y: 0
            },
            f = {
                x: 0,
                y: 0
            },
            g = b.y > this.pageHeight / 2 ? b.y - 5 : b.y + 5;
            0 > b.x && (d = {
                x: -this.pageWidth,
                y: g
            });
            0 < b.x && (d = {
                x: this.pageWidth,
                y: g
            });
            c && 0 <= c.indexOf("r") && (d.x = this.pageWidth);
            c && 0 <= c.indexOf("l") && (d.x = -this.pageWidth);
            "tl" == c && (d = {
                x: -this.pageWidth,
                y: 0
            });
            "bl" == c && (d = {
                x: -this.pageWidth,
                y: this.pageHeight
            });
            "tr" == c && (d = {
                x: this.pageWidth,
                y: 0
            });
            "br" == c && (d = {
                x: this.pageWidth,
                y: this.pageHeight
            });
            f.x = d.x;
            f.y = d.y;
            return [d, f]
        }
    },
    realIndex: function(b) {
        var c = 2 * parseInt(this.currentPageIndex / 2);
        if (b && !rightToLeft || !b && rightToLeft) return [c + 1, c + 2];
        if (!b && !rightToLeft || b && rightToLeft) return [c, c - 1]
    },
    getNextPageIndex: function() {
        var b = this.currentPageIndex + 2;
        if ("right" == this.flipToDirection && !rightToLeft || "left" == this.flipToDirection && rightToLeft) b = this.currentPageIndex - 2;
        b = Math.max(1, b);
        return b = Math.min(originTotalPageCount, b)
    },
    realBookPosition: function() {
        var b = this.flipBook.offset().left,
        c = this.flipBook.offset().top;
        return [b, c]
    },
    realPoint: function(b) {
        if ((b = isTouch ? b.originalEvent ? b.originalEvent.changedTouches: b.changedTouches: [b]) && !(3 <= b.length)) {
            var c = this.realBookPosition()[0],
            d = this.realBookPosition()[1],
            f = b[0].pageX,
            g = b[0].pageY,
            f = f - c - this.pageWidth,
            g = g - d;
            if (!b[1]) return [{
                x: f,
                y: g
            }];
            var h = b[1].pageX;
            b = b[1].pageY;
            h = h - c - this.pageWidth;
            return [{
                x: f,
                y: g
            },
            {
                x: h,
                y: b - d
            }]
        }
    },
    getThicknessWidth: function() {
        return [this.leftThickness ? this.leftThickness.getWidth() : 0, this.rightThickness ? this.rightThickness.getWidth() : 0]
    }
}),
PinchZoomBook = Class({
    onZoomed: function(b) {
        for (var c = this.zoomPageArray.length,
        d = 0; d < c; d++) this.zoomPageArray[d] && this.zoomPageArray[d].setVisible(!0);
        this.zoomPageArray = [];
        isPhone() || isPad() || !b || !this.flipBook.parameters || this.flipBook.parameters.resize || (this.flipBook.parameters.resize = !0, b = this.flipBook.offset().left, c = this.flipBook.offset().top, b -= this.flipBook.parameters.left, c -= this.flipBook.parameters.top, d = this.flipBook.parameters.scale, 1 != d && (this.resizeBook(parseInt(this.width * d / 2), parseInt(this.height * d)), this.setThicknessPosition(d)), transformCSS({
            tran: {
                x: b,
                y: c
            },
            scale: 1,
            origin: {
                x: 0,
                y: 0
            },
            obj: this.flipBook
        }), this.flipBook.parameters.tran = {
            x: b,
            y: c
        },
        this.flipBook.parameters.scale = 1, this.flipBook.parameters.toScale = 1, this.flipBook.parameters.width = $(this.flipBook).width(), this.flipBook.parameters.height = $(this.flipBook).height(), this.flipBook.parameters.origin = {
            x: 0,
            y: 0
        },
        this.flipBook.parameters.resize = !1, this.bookMap && this.bookMap.refreshArea())
    },
    setThicknessPosition: function(b) {
        b || (b = 1);
        this.leftFlipShotBar && this.leftFlipShotBar.setScale(b);
        this.rightFlipShotBar && this.rightFlipShotBar.setScale(b);
        if (this.leftThickness) this.leftThickness.onResize();
        if (this.rightThickness) this.rightThickness.onResize();
        this.leftFlipShotBar && this.leftFlipShotBar.setThicknessPosition(this.width, this.height);
        this.rightFlipShotBar && this.rightFlipShotBar.setThicknessPosition(this.width, this.height)
    }
}),
NormalPhoneBook = Class({}).extend(NormalBook).extend(PinchZoomBook),
SingleBook = Class({
    create: function(b, c) {
        this.bookType = BookType.single_book;
        this.pageArray = [];
        this.pageMaskArray = [];
        this.pageBackArray = [];
        this.pageBackMaskArray = [];
        this.flipArray = {};
        this.maskWidth = this.height = this.width = this.pageHeight = this.pageWidth = 0;
        this.currentPageIndex = c;
        this.flipToPage = this.flippingPage = null;
        this.flipPoint = Point(0, 0);
        this.thicknessWidth = 30;
        this.taskList = new TaskList;
        this.taskList.setLargeLength(5);
        this.flippingTime = 1E3 * bookConfig.flippingTime;
        this.adContainer = $("<div id='adContainer'></div>");
        this.adContainer.css({
            position: "absolute",
            "z-index": 1
        });
        this.createBook(b);
        global.rand100 = Math.floor(100 * Math.random());
        this.initMiniFullscreen();
        this.bookMap || (this.showPage = this.flipBook, this.bookMap = new ZoomMap(this), this.bookMap.fillContent(this.currentPageIndex))
    },
    createBook: function(b) {
        this.flipBook = $("<div class='book' id='singleFlipBook' ></div>");
        this.setBookPageByIndex(this.currentPageIndex);
        this.thickness = rightToLeft ? new LeftThickness(this.flipBook, this.thicknessWidth, !0) : new RightThickness(this.flipBook, this.thicknessWidth, !0);
        this.isHardPage(1, 2) ? this.thickness.setMinScale(0) : this.thickness.setMinScale(6);
        this.normalBookShadow = new BookShadow(this.flipBook);
        this.resetBookShadow();
        isPhone() || isPad() || (this.bmt = new initBookMarkTab(this.flipBook));
        this.init1 = 50;
        b.append(this.flipBook);
        setCurrentIndexTextField(this.currentPageIndex, !1);
        this.thickness.resetPosition();
        setLocationHash(this.currentPageIndex);
        this.currentPageIndex >= originTotalPageCount - 1 && this.thickness.setVisible(!1);
        this.initEvent();
        isTouchDevice() || this.initZoomHintTimer(b)
    },
    boundaryPages: function() {
        return [2]
    },
    hasAliceHardPage: function(b) {
        if (!bookConfig.HardPageEnable) return ! 1;
        if ((1 == b || 0 <= this.boundaryPages().indexOf(this.currentPageIndex)) && this.flipArray.flipArray && 0 < this.flipArray.flipArray.length) {
            var c = window.setInterval(function() {
                this.flipArray.flipArray && 0 < this.flipArray.flipArray.length || (gotoPageFun(b), window.clearInterval(c))
            }.bind(this), 20);
            return ! 0
        }
    },
    handleHardPage: function(b) {
        if (!bookConfig.HardPageEnable || 1 != b && 1 != this.currentPageIndex) return ! 1;
        if (1 == b && 0 > BookInfo.getCurrentPages().indexOf(2)) return 1 == b && gotoPageFun(2),
        window.setTimeout(function() {
            gotoPageFun(b)
        },
        20),
        !0;
        if (1 == this.currentPageIndex && 2 != b) return 1 == this.currentPageIndex && gotoPageFun(2),
        window.setTimeout(function() {
            gotoPageFun(b)
        },
        20),
        !0
    },
    newPage: function(b) {
        return new NormalSide(b, "page", BookType.single_book)
    },
    setBookPageByIndex: function(b) {
        isNaN(b) || 0 >= b || (this.unWrapPageExcludeArray([b, b + 1]), this.addPageArray([b, b + 1]), this.addPageBackArray([b]), this.loading(), this.currentPage = this.pageArray[b], this.currentPage2 = this.pageBackArray[b], this.nextPage = this.pageArray[b + 1], this.previousPage = this.pageArray[b - 1], this.previousPage2 = this.pageBackArray[b - 1], this.setPageCss())
    },
    addPageBackMaskArray: function(b) {
        if (b && this.pageBackMaskArray) {
            for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount || this.pageBackMaskArray[b[c]])) {
                this.pageBackArray[b[c]] || this.addPageBackArray([b[c]]);
                var d = this.pageBackArray[b[c]],
                f = new NormalMask(b[c], "pageBackMask");
                f.onResize(this.pageWidth, this.pageHeight);
                d.setCSSByStyle({
                    top: (f.width - d.height) / 2
                });
                d.wrap(f.container);
                f.container = $("#pageBackMask" + b[c]);
                f.setPage(d);
                this.pageBackMaskArray[b[c]] = f
            }
            this.setPageMaskCss()
        }
    },
    setPageMaskCss: function() {
        $(".mask").css({
            right: "100%"
        });
        rightToLeft && $(".mask").css({
            right: "0px"
        })
    },
    addPageBackArray: function(b) {
        if (b && this.pageBackArray) for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount || (!this.pageBackArray[b[c]] || this.flipping && !imageLoaded[b[c]] || this.fillContent(b[c]), this.pageBackArray[b[c]]))) {
            var d = new NormalSide(b[c], "pageBack", BookType.single_book);
            d.onResize(this.pageWidth, this.pageHeight);
            d.mirrorSide();
            this.pageBackArray[b[c]] = d;
            this.flipping && !imageLoaded[b[c]] || this.fillContent(b[c]);
            this.flipBook.append(d.side)
        }
    },
    setPageCss: function() {
        var b = transformCSS({
            rotate: 0,
            tran: {
                x: 0,
                y: 0
            }
        });
        this.currentPage && (this.currentPage.setZIndex(4), this.currentPage.setLeftOrRight(!1), this.currentPage.setCSSByStyle(b));
        this.previousPage && (this.previousPage.setZIndex(1), this.previousPage.setLeftOrRight(!1), this.previousPage.setCSSByStyle(b));
        this.previousPage2 && (this.previousPage2.setZIndex(0), this.previousPage2.setLeftOrRight(!1), this.previousPage2.setCSSByStyle(b));
        this.currentPage2 && (this.currentPage2.setZIndex(3), this.currentPage2.setLeftOrRight(!1), this.currentPage2.setCSSByStyle(b));
        this.nextPage && (this.nextPage.setZIndex(2), this.nextPage.setLeftOrRight(!1), this.nextPage.setCSSByStyle(b));
        rightToLeft && (this.currentPage && this.currentPage.setLeftOrRight(!0), this.previousPage && this.previousPage.setLeftOrRight(!0), this.previousPage2 && this.previousPage2.setLeftOrRight(!0), this.currentPage2 && this.currentPage2.setLeftOrRight(!0), this.nextPage && this.nextPage.setLeftOrRight(!0))
    },
    realBookPosition: function() {
        var b = this.flipBook.offset().left - (rightToLeft ? 0 : this.pageWidth),
        c = this.flipBook.offset().top;
        return [b, c]
    },
    edgeX: function() {
        this.MiddleX = this.pageWidth / 2;
        rightToLeft && (this.MiddleX = -this.pageWidth / 2)
    },
    realIndex: function(b) {
        var c = this.currentPageIndex;
        if (b && !rightToLeft || !b && rightToLeft) return [c, c + 1];
        if (!b && !rightToLeft || b && rightToLeft) return [c, c - 1]
    },
    getCurrentPages: function() {
        return [this.currentPageIndex]
    },
    getPagesByIndex: function(b) {
        return [b]
    },
    getNextPageIndex: function() {
        var b = this.currentPageIndex + 1;
        if ("right" == this.flipToDirection && !rightToLeft || "left" == this.flipToDirection && rightToLeft) b = this.currentPageIndex - 1;
        b = Math.max(1, b);
        return b = Math.min(originTotalPageCount, b)
    },
    getFromStartPointByCoordinate: function(b, c) {
        if (b) {
            var d = {
                x: 0,
                y: 0
            },
            f = {
                x: 0,
                y: 0
            },
            g = b.y > this.pageHeight / 2 ? b.y - 5 : b.y + 5;
            b.x < this.MiddleX && (d.y = g, f.x = -this.pageWidth);
            b.x > this.MiddleX && (d.y = g, f.x = this.pageWidth);
            c && 0 <= c.indexOf("r") && (f.x = this.pageWidth);
            c && 0 <= c.indexOf("l") && (f.x = -this.pageWidth);
            "tl" == c && (d.y = 0);
            "bl" == c && (d.y = this.pageHeight);
            "tr" == c && (d.y = 0);
            "br" == c && (d.y = this.pageHeight);
            d.x = rightToLeft ? -this.pageWidth: this.pageWidth;
            f.y = d.y;
            return [d, f]
        }
    },
    getFromStartPointByIndex: function(b) {
        var c = this.currentPageIndex;
        if (b != c && b != c) {
            var d = {
                x: 0,
                y: 0
            },
            f = {
                x: 0,
                y: 0
            },
            g = !1,
            d = {
                x: this.pageWidth,
                y: this.pageHeight
            };
            rightToLeft && (d = {
                x: -this.pageWidth,
                y: this.pageHeight
            });
            if (b > c && !rightToLeft || b < c && rightToLeft) g = !0;
            if (b < c && !rightToLeft || b > c && rightToLeft) g = !1;
            b > c && (f = {
                x: d.x,
                y: this.pageHeight
            });
            b < c && (f = {
                x: -d.x,
                y: this.pageHeight
            });
            if (!this.flipping || !g || "right" != this.flipToDirection) if (!this.flipping || g || "left" != this.flipToDirection) return this.flipToDirection = g ? "left": "right",
            [d, f]
        }
    },
    setFlipOringinPoint: function(b) {
        b.dragMoveToFlip || rightToLeft || (b.fromPoint = {
            x: this.pageWidth,
            y: this.pageHeight
        }); ! b.dragMoveToFlip && rightToLeft && (b.fromPoint = {
            x: -this.pageWidth,
            y: this.pageHeight
        });
        b.toPoint = "left" == this.flipToDirection ? {
            x: -this.pageWidth,
            y: b.fromPoint.y
        }: {
            x: this.pageWidth,
            y: b.fromPoint.y
        };
        b.startPoint || (b.startPoint = {
            x: 0,
            y: 0
        });
        b.startPoint.x = -b.toPoint.x;
        b.startPoint.y = b.toPoint.y
    },
    getDownUpPage: function(b, c) {
        var d = b;
        b > c && (d = c);
        this.addPageMaskArray([d]);
        this.addPageBackMaskArray([d]);
        this.pageMaskArray[d] && this.pageMaskArray[d].page.setCSSByName("right-side");
        this.pageBackMaskArray[d] && (this.pageBackMaskArray[d].page.setCSSByName("flip-side"), this.pageBackMaskArray[d].page.side.addClass("boxShadow"));
        return [this.pageMaskArray[d], this.pageBackMaskArray[d]]
    },
    getDownUpHardPage: function(b, c) {
        var d = b;
        b > c && (d = c);
        this.addPageArray([d]);
        this.addPageBackArray([d]);
        rightToLeft ? (this.pageArray[d] && this.pageArray[d].setCSSByName("flip-hard-left-side"), this.pageBackArray[d] && this.pageBackArray[d].setCSSByName("flip-hard-right-side")) : (this.pageArray[d] && this.pageArray[d].setCSSByName("flip-hard-right-side"), this.pageBackArray[d] && this.pageBackArray[d].setCSSByName("flip-hard-left-side"));
        return [this.pageArray[d], this.pageBackArray[d]]
    },
    setFlipAlpha: function(b, c, d, f) {
        if (b && d && f) {
            var g = 1;
            0 >= f.x / d.x && (g = 1 - Math.abs(f.x / c));
            c = {
                opacity: g
            };
            b.downMask && b.downMask.setCSSByStyle(c);
            b.upMask && b.upMask.setCSSByStyle(c)
        }
    },
    flipToHardPoint: function(b, c, d, f, g) {
        b && f && g && (b.coordinate = g, d = -90 + 90 * Math.abs(g.x / f.x), 0 > g.x && (d = 90 - 90 * Math.abs(g.x / f.x)), c = transformCSS({
            perspective: 3E3,
            rotateY: d
        }), d = transformCSS({
            perspective: 3E3,
            rotateY: d
        }), b.downMask && b.downMask.setCSSByStyle(c), b.upMask && b.upMask.setCSSByStyle(d), 0 > g.x / f.x ? (b.upMask.setVisible(!1), b.downMask.setVisible(!1)) : (b.upMask.setVisible(!1), b.downMask.setVisible(!0)), this.followToPoint(b, f, g))
    },
    getFlipTo: function(b) {
        var c = this.currentPageIndex,
        d = "";
        b > c && (d = "max");
        b < c && (d = "min");
        return {
            flipTo: d,
            minIndex: c,
            maxIndex: c,
            toIndex: b
        }
    },
    setPageMaskZIndex: function(b) {
        if (b) {
            var c = originTotalPageCount + 5 - b.downMask.pageIndex;
            b.upMask.setZIndex(originTotalPageCount + 5 + b.upMask.pageIndex);
            b.downMask.setZIndex(c)
        }
    },
    setAttachmentBefore: function(b) {
        b >= originTotalPageCount && this.thickness.hide()
    },
    setAttachmentAfter: function() {
        this.stopMedia();
        this.stopAllSlider();
        this.flipping || this.openShownSlider();
        this.flipping || this.openShownMedia();
        this.currentPageIndex < originTotalPageCount && this.thickness.show();
        bookConfig.ThumbnailsButtonVisible && thumbnail.clearHighLight();
        bookConfig.ThumbnailsButtonVisible && thumbnail.setHighLight(this.currentPageIndex);
        resizeBookAfterFlip && !this.flipping && window.setTimeout(function() {
            onStageResize()
        },
        30);
        this.bookMap && this.bookMap.fillContent(this.currentPageIndex)
    },
    isHardPage: function(b, c) {
        var d = b;
        b > c && (d = c);
        return $.browser.msie && 11 > $.browser.version || !bookConfig.HardPageEnable || 1 != d && d != totalPageCount ? !1 : !0
    },
    flipToMax: function(b, c) {
        var d = this.beginFlipByIndex(b, c);
        this.addPageArray([c]);
        this.pageArray[c] && (this.pageArray[c].setZIndex(2), this.pageArray[c].setAttachment(rightToLeft), d.nextPage = this.pageArray[c]);
        this.pageBackArray[c] && (this.pageBackArray[c].remove(), this.pageBackArray[c] = void 0);
        for (var f = c + 1; f <= originTotalPageCount; f++) if (this.pageArray[f] || this.pageBackArray[f]) this.pageArray[f] && this.pageArray[f].remove(),
        this.pageBackArray[f] && this.pageBackArray[f].remove(),
        this.pageArray[f] = void 0,
        this.pageBackArray[f] = void 0;
        for (f = b + 1; f < c; f++) if (this.pageArray[f] || this.pageBackArray[f]) this.pageArray[f] && this.pageArray[f].remove(),
        this.pageBackArray[f] && this.pageBackArray[f].remove(),
        this.pageArray[f] = void 0,
        this.pageBackArray[f] = void 0;
        return d
    },
    flipToMin: function(b, c) {
        var d = this.beginFlipByIndex(b, c);
        this.pageArray[b] && (d.nextPage = this.pageArray[b]);
        this.pageArray[c] && this.pageArray[c].setAttachment(rightToLeft);
        for (var f = c - 1; 0 <= f; f--) if (this.pageArray[f] || this.pageBackArray[f]) this.pageArray[f] && this.pageArray[f].remove(),
        this.pageBackArray[f] && this.pageBackArray[f].remove(),
        this.pageArray[f] = void 0,
        this.pageBackArray[f] = void 0;
        for (f = b - 1; f > c; f--) if (this.pageArray[f] || this.pageBackArray[f]) this.pageArray[f] && this.pageArray[f].remove(),
        this.pageBackArray[f] && this.pageBackArray[f].remove(),
        this.pageArray[f] = void 0,
        this.pageBackArray[f] = void 0;
        return d
    },
    afterFlipToMax: function(b) {
        this.addPageArray([b - 1]);
        this.addPageBackArray([b]);
        this.pageArray[b] && this.pageArray[b].setZIndex(4);
        this.pageBackArray[b] && this.pageBackArray[b].setZIndex(3);
        this.pageArray[b + 1] && this.pageArray[b + 1].setZIndex(2);
        this.pageArray[b - 1] && this.pageArray[b - 1].setZIndex(1);
        this.pageBackArray[b - 1] && this.pageBackArray[b - 1].setZIndex(0);
        this.pageArray[b + 1] && this.fillContent(b + 1);
        for (var c = b - 2; 0 <= c; c--) if (this.pageArray[c] || this.pageBackArray[c]) this.pageArray[c] && this.pageArray[c].remove(),
        this.pageBackArray[c] && this.pageBackArray[c].remove(),
        this.pageArray[c] = void 0,
        this.pageBackArray[c] = void 0;
        this.thickness.resetPosition(b);
        this.thickness.resetScale(b)
    },
    afterFlipToMin: function(b) {
        this.addPageArray([b + 1]);
        this.addPageBackArray([b]);
        this.pageArray[b] && this.pageArray[b].setZIndex(4);
        this.pageBackArray[b] && this.pageBackArray[b].setZIndex(3);
        this.pageArray[b + 1] && this.pageArray[b + 1].setZIndex(2);
        this.pageArray[b - 1] && this.pageArray[b - 1].setZIndex(1);
        this.pageBackArray[b - 1] && this.pageBackArray[b - 1].setZIndex(0);
        this.pageArray[b - 1] && this.fillContent(b - 1);
        for (var c = b + 2; c <= originTotalPageCount; c++) if (this.pageArray[c] || this.pageBackArray[c]) this.pageArray[c] && this.pageArray[c].remove(),
        this.pageBackArray[c] && this.pageBackArray[c].remove(),
        this.pageArray[c] = void 0,
        this.pageBackArray[c] = void 0;
        this.thickness.resetPosition(b);
        this.thickness.resetScale(b)
    },
    unWrapPageBackMaskArray: function(b) {
        if (b && this.pageBackMaskArray) for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount)) {
            var d = this.pageBackMaskArray[b[c]];
            if (this.pageBackArray[b[c]]) {
                var f = transformCSS({
                    rotate: 0,
                    tran: {
                        x: 0,
                        y: 0
                    }
                });
                d && this.pageBackArray[b[c]].unwrap();
                this.pageBackArray[b[c]].setCSSByStyle({
                    top: 0
                });
                this.pageBackArray[b[c]].setCSSByStyle(f)
            }
            this.pageBackMaskArray[b[c]] = void 0
        }
    },
    endFlipByIndex: function(b, c, d) {
        isNaN(b) || isNaN(c) || (this.unWrapPageMaskArray([b]), this.unWrapPageBackMaskArray([b]), this.pageArray[b].setLeftOrRight(rightToLeft), this.pageBackArray[b].setLeftOrRight(rightToLeft), this.pageArray[b].clearFlipShadow(), this.pageBackArray[b].clearFlipShadow())
    },
    onResize: function(b, c) {
        this.resizeBook(b, c);
        this.thickness.onResize();
        this.bmt && this.bmt.resize(c, 60);
        var d = this.flipBook.css("left"),
        f = this.flipBook.css("top");
        this.miniFullScreen && this.miniFullScreen.css({
            top: parseInt(f) + c - 50 + "px"
        });
        this.adContainer.css({
            left: d,
            top: f,
            width: b + "px",
            height: c + "px"
        });
        this.adInstance && this.adInstance.resize();
        this.doublePage = windowWidth < windowHeight ? !1 : !0;
        this.controlBar && this.controlBar.setPosition((windowWidth - this.controlBar.width) / 2, toolBar.getTopHeight() + 5);
        this.bookMap && (this.bookMap.onResize(b, c), this.bookMap.refreshArea())
    },
    resizeBook: function(b, c) {
        this.width = b;
        this.height = c;
        this.pageWidth = b;
        this.pageHeight = c;
        this.maskWidth = Math.sqrt(b * b + c * c);
        this.flipBook.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.endFlip();
        this.resizePage(this.pageWidth, this.pageHeight);
        this.setBookPageByIndex(this.currentPageIndex);
        this.resetBookShadow()
    },
    resetBookShadow: function() {
        this.normalBookShadow.doubleWidth(!0);
        this.normalBookShadow.right(!1)
    },
    movetoCenter: function() {},
    setThicknessMovingScale: function(b, c, d) {
        this.thickness.setMovingScale(b, c, d)
    },
    setThicknessVisible: function(b) {
        b >= originTotalPageCount - 1 ? this.thickness.setVisible(!1) : this.thickness.setVisible(!0)
    },
    flippingTo: function(b) {
        b > this.currentPageIndex && this.thickness.resetPosition(b);
        this.currentPageIndex = b;
        this.currentPageIndex = Math.max(1, this.currentPageIndex);
        this.currentPageIndex = Math.min(originTotalPageCount, this.currentPageIndex);
        setCurrentIndexTextField(this.currentPageIndex, !1);
        setLocationHash(this.currentPageIndex)
    },
    getThicknessWidth: function() {
        if (rightToLeft) return [this.thickness ? this.thickness.getWidth() : 0, 0];
        if (!rightToLeft) return [0, this.thickness ? this.thickness.getWidth() : 0]
    }
}).extend(NormalBook),
PinchZoomSingleBook = Class({
    zoomOut: !0,
    onZoomed: function(b) {
        for (var c = this.pageArray.length,
        d = 0; d < c; d++) this.pageArray[d] && this.pageArray[d].setVisible(!0);
        isPhone() || isPad() || !b || !this.flipBook.parameters || this.flipBook.parameters.resize || (this.flipBook.parameters.resize = !0, b = this.flipBook.offset().left, c = this.flipBook.offset().top, b -= this.flipBook.parameters.left, c -= this.flipBook.parameters.top, d = this.flipBook.parameters.scale, 1 != d && this.resizeBook(parseInt(this.width * d), parseInt(this.height * d)), transformCSS({
            tran: {
                x: b,
                y: c
            },
            scale: 1,
            origin: {
                x: 0,
                y: 0
            },
            obj: this.flipBook
        }), this.flipBook.parameters.tran = {
            x: b,
            y: c
        },
        this.flipBook.parameters.scale = 1, this.flipBook.parameters.toScale = 1, this.flipBook.parameters.width = $(this.flipBook).width(), this.flipBook.parameters.height = $(this.flipBook).height(), this.flipBook.parameters.origin = {
            x: 0,
            y: 0
        },
        this.flipBook.parameters.resize = !1, this.bookMap && this.bookMap.refreshArea())
    }
}),
SinglePhoneBook = Class({}).extend(SingleBook).extend(PinchZoomSingleBook);
bdor[41] = function() {
    return bdor[32](bdor[30](37, 0), bdor[38] / bdor[40])
} ();
bdor[500] = global.bdor[404];
bdor[13] = "p";
var zoomControlBar = Class({
    create: function(b) {
        this.dir = uiBaseURL;
        this.bar = $("<div></div>");
        this.btnZoomUp = $("<div title='Zoom up' id='zu' style='cursor:pointer;position:absolute;'></div>");
        this.btnProgressBar = $("<div title='pb' id='pb' style='cursor:pointer;position:absolute;'></div>");
        this.btnZoomDown = $("<div title='Zoom down' id='zd' style='cursor:pointer;position:absolute;'></div>");
        this.btnZoomOut = $("<div title='Zoom out' id='zo' style='cursor:pointer;position:absolute;'></div>");
        this.btnPre = $("<div title='Previous' id='pr' style='cursor:pointer;position:absolute;'></div>");
        this.btnNext = $("<div title='Next' id='ne' style='cursor:pointer;position:absolute;'></div>");
        this.btnMoveMode = $("<div title = 'Move by mouse position' id='md' style='cursor:pointer;position:absolute;'></div>");
        this.moveByMousePosition = !1;
        this.width = 260;
        this.height = 40;
        b.append(this.bar);
        this.bar.append(this.btnZoomUp);
        this.bar.append(this.btnZoomDown);
        this.bar.append(this.btnZoomOut);
        this.bar.append(this.btnPre);
        this.bar.append(this.btnNext);
        this.bar.append(this.btnMoveMode);
        this.btnZoomUp.append($('<img src="' + uiBaseURL + 'ZU.png" id = "zu"></img>')).attr("title", getLanguage("btnZoomIn", "zoom in"));
        this.btnProgressBar.append($('<img src="' + uiBaseURL + 'PB.png" id = "pb"></img>'));
        this.btnZoomDown.append($('<img src="' + uiBaseURL + 'ZD.png" id = "zd"></img>')).attr("title", getLanguage("btnZoomOut", "zoom out"));
        this.btnZoomOut.append($('<img src="' + uiBaseURL + 'ZO.png" id = "zo"></img>')).attr("title", getLanguage("btnZoomOut", "zoom out"));
        this.btnPre.append($('<img src="' + uiBaseURL + 'PR.png" id = "pr"></img>')).attr("title", getLanguage("btnPrePage", "pre"));
        this.btnNext.append($('<img src="' + uiBaseURL + 'NE.png" id = "ne"></img>')).attr("title", getLanguage("btnNextPage", "next"));
        this.btnMoveMode.append(getImage(toolBarIconsURL[ICON_MOVE_POSITION])).attr("title", getLanguage("btnPositionToMove", "Move by mouse position"));
        this.bar.css({
            width: this.width + "px",
            height: this.height + "px",
            position: "absolute",
            "z-index": 5,
            "-webkit-border-radius": "5px",
            "-moz-border-radius": "5px",
            "-ms-border-radius": "5px",
            "-o-border-radius": "5px",
            "border-radius": "5px",
            "-webkit-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-moz-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-ms-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-o-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            display: "none",
            "background-color": "#000000",
            opacity: 0.3,
            "-moz-transition": "all 0.2s ease-in-out",
            "-webkit-transition": "all 0.2s ease-in-out",
            "-o-transition": "all 0.2s ease-in-out",
            "-ms-transition": "all 0.2s ease-in-out",
            transition: "all 0.2s ease-in-out"
        });
        this.btnZoomUp.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomDown.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomOut.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnPre.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnNext.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnMoveMode.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomUp.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.btnZoomDown.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.btnZoomOut.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.btnPre.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.btnNext.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.btnMoveMode.children("img").css({
            "margin-left": "4px",
            "margin-top": "4px"
        });
        this.initEvt();
        this.setButtonsPos();
        this.initColor()
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        this.bar.css(d[0], b + "px");
        this.bar.css(d[1], c + "px")
    },
    setVisible: function(b) {
        this.bar.css({
            display: b ? "block": "none"
        })
    },
    setChildIndex: function(b) {
        this.bar.css({
            "z-index": b
        })
    },
    onResize: function(b, c) {
        this.bar.css({
            width: b + "px",
            height: c + "px"
        })
    },
    initEvt: function() {
        var b = this;
        this.bar.bind(_event._enter,
        function() {
            b.bar.css({
                opacity: 0.7
            })
        });
        this.bar.bind(_event._down,
        function() {
            b.bar.css({
                opacity: 0.7
            })
        });
        this.bar.bind(_event._end,
        function() {
            b.bar.css({
                opacity: 0.7
            })
        });
        this.bar.bind(_event._leave,
        function() {
            b.bar.css({
                opacity: 0.3
            })
        });
        this.btnZoomUp.bind(_event._end,
        function() {
            b.zoomUp()
        });
        this.btnZoomDown.bind(_event._end,
        function() {
            b.zoomDown()
        });
        this.btnZoomOut.bind(_event._end,
        function() {
            b.zoomOut()
        });
        this.btnPre.bind(_event._end,
        function() {
            rightToLeft ? nextPageFun() : previousPageFun()
        });
        this.btnNext.bind(_event._end,
        function() {
            rightToLeft ? previousPageFun() : nextPageFun()
        });
        this.btnMoveMode.bind(_event._end,
        function() {
            b.changeMoveMode()
        });
        this.btnZoomUp.mouseEnterShine("#333333", "111111", "#999999");
        this.btnZoomDown.mouseEnterShine("#333333", "111111", "#999999");
        this.btnZoomOut.mouseEnterShine("#333333", "111111", "#999999");
        this.btnPre.mouseEnterShine("#333333", "111111", "#999999");
        this.btnNext.mouseEnterShine("#333333", "111111", "#999999");
        this.btnMoveMode.mouseEnterShine("#333333", "111111", "#999999")
    },
    initColor: function(b) {},
    setButtonsPos: function() {
        this.btnZoomUp.css({
            position: "absolute",
            "margin-left": "20px",
            top: "6px"
        });
        this.btnZoomDown.css({
            position: "absolute",
            "margin-left": "60px",
            top: "6px"
        });
        this.btnZoomOut.css({
            position: "absolute",
            "margin-left": "100px",
            top: "6px"
        });
        this.btnPre.css({
            position: "absolute",
            "margin-left": "140px",
            top: "6px"
        });
        this.btnNext.css({
            position: "absolute",
            "margin-left": "180px",
            top: "6px"
        });
        this.btnMoveMode.css({
            position: "absolute",
            "margin-left": "220px",
            top: "6px"
        })
    },
    changeMoveMode: function() { ! 0 == this.moveByMousePosition ? (this.moveByMousePosition = !1, this.btnMoveMode.empty().append(getImage(toolBarIconsURL[ICON_MOVE_POSITION])).attr("title", getLanguage("btnPositionToMove", "Move by mouse position"))) : (this.moveByMousePosition = !0, this.btnMoveMode.empty().append(getImage(toolBarIconsURL[ICON_MOVE_DRAG])).attr("title", getLanguage("btnDragToMove", "Move by mouse drag")));
        this.btnMoveMode.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        })
    },
    zoomUp: function() {
        var b = BookInfo.getBook().bookMap.book.showPage,
        c = {
            pointers: [{
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            },
            {
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            }]
        };
        b.scale = b.parameters.toScale;
        b.parameters.origin = mathOrigin(b, c);
        originObj(b, b.parameters.origin);
        animateToScale(b, Math.min(b.parameters.naturalWidth * b.maxScale / b.parameters.width, 1.5 * parseFloat(b.scale)), c)
    },
    zoomDown: function() {
        var b = BookInfo.getBook().bookMap.book.showPage,
        c = {
            pointers: [{
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            },
            {
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            }]
        };
        b.scale = b.parameters.toScale;
        b.parameters.origin = mathOrigin(b, c);
        originObj(b, b.parameters.origin);
        var d = b.parameters.naturalWidth / b.parameters.width,
        f = 0.5 * parseFloat(b.scale);
        f <= d && (b.parameters.zoomOut = !0);
        animateToScale(b, Math.max(d, f), c)
    },
    zoomOut: function() {
        onDoubleTap.bind(BookInfo.getBook().bookMap.book.showPage)({
            pointers: [{
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            }]
        })
    }
}),
CatalogControlBar = Class({
    create: function(b) {
        this.dir = uiBaseURL;
        this.bar = $("<div id='catalogControlBar'></div>");
        this.btnZoomUp = $("<div title='Zoom up' id='zu' style='cursor:pointer;position:absolute;'></div>");
        this.btnProgressBar = $("<div title='pb' id='pb' style='cursor:pointer;position:absolute;'></div>");
        this.btnZoomDown = $("<div title='Zoom down' id='zd' style='cursor:pointer;position:absolute;'></div>");
        this.btnZoomOut = $("<div title='Zoom out' id='zo' style='cursor:pointer;position:absolute;'></div>");
        this.btnPre = $("<div title='Previous' id='pr' style='cursor:pointer;position:absolute;'></div>");
        this.btnNext = $("<div title='Next' id='ne' style='cursor:pointer;position:absolute;'></div>");
        this.btnMoveMode = $("<div title = 'Move by mouse position' id='md' style='cursor:pointer;position:absolute;'></div>");
        this.moveByMousePosition = !0;
        this.width = 150;
        this.height = 40;
        b.append(this.bar);
        this.bar.append(this.btnZoomOut);
        this.bar.append(this.btnPre);
        this.bar.append(this.btnNext);
        this.btnZoomUp.append($('<img src="' + uiBaseURL + 'ZU.png" id = "zu"></img>'));
        this.btnProgressBar.append($('<img src="' + uiBaseURL + 'PB.png" id = "pb"></img>'));
        this.btnZoomDown.append($('<img src="' + uiBaseURL + 'ZD.png" id = "zd"></img>'));
        this.btnZoomOut.append($('<img src="' + uiBaseURL + 'ZO.png" id = "zo"></img>'));
        this.btnPre.append($('<img src="' + uiBaseURL + 'PR.png" id = "pr"></img>'));
        this.btnNext.append($('<img src="' + uiBaseURL + 'NE.png" id = "ne"></img>'));
        this.btnMoveMode.append(getImage(toolBarIconsURL[ICON_MOVE_DRAG]));
        this.bar.css({
            width: this.width + "px",
            height: this.height + "px",
            position: "absolute",
            "z-index": 5,
            "-webkit-border-radius": "5px",
            "-moz-border-radius": "5px",
            "-ms-border-radius": "5px",
            "-o-border-radius": "5px",
            "border-radius": "5px",
            "-webkit-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-moz-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-ms-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "-o-box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            "box-shadow": "0px 0px 10px rgba(0, 0, 60, 0.8)",
            display: "none",
            "background-color": "#333333",
            opacity: 0.3,
            "-moz-transition": "all 0.2s ease-in-out",
            "-webkit-transition": "all 0.2s ease-in-out",
            "-o-transition": "all 0.2s ease-in-out",
            "-ms-transition": "all 0.2s ease-in-out",
            transition: "all 0.2s ease-in-out"
        });
        this.btnZoomUp.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomDown.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomOut.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnPre.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnNext.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnMoveMode.css({
            width: "26px",
            height: "26px",
            "border-radius": "5px"
        });
        this.btnZoomUp.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.btnZoomDown.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.btnZoomOut.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.btnPre.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.btnNext.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.btnMoveMode.children("img").css({
            "margin-left": "3px",
            "margin-top": "3px"
        });
        this.initEvt();
        this.setButtonsPos();
        this.initColor()
    },
    setButtonsPos: function() {
        this.btnPre.css({
            position: "absolute",
            "margin-left": "20px",
            top: "6px"
        });
        this.btnZoomOut.css({
            position: "absolute",
            "margin-left": "60px",
            top: "6px"
        });
        this.btnNext.css({
            position: "absolute",
            "margin-left": "100px",
            top: "6px"
        });
        this.btnMoveMode.css({
            position: "absolute",
            "margin-left": "140px",
            top: "6px"
        })
    },
    zoomOut: function() { ! 1 == catalogBook.zoomOut && catalogBook.zoomToPage()
    }
}).extend(zoomControlBar),
ZoomMap = Class({
    create: function(b) {
        this.book = b;
        this.maxWidth = 80;
        this.maxHeight = 100;
        this.pageHeight = this.pageWidth = this.height = this.width = 0;
        this.init();
        this.doublePage = this.mouseDown = !1;
        this.initCursorEvent()
    },
    init: function() {
        this.map = $("<div class='thumbnail_map'></div>");
        this.imageLeft = $("<img class='map_img map_img_left'></img>");
        this.imageRight = $("<img class='map_img map_img_right'></img>");
        this.mapCursor = $("<div class='map_cursor'></div>");
        bookContainer.append(this.map);
        this.map.append(this.imageLeft);
        this.map.append(this.imageRight);
        this.map.append(this.mapCursor)
    },
    show: function() {
        this.visible = !0;
        this.refreshArea();
        this.map.show()
    },
    hide: function() {
        this.visible = !1;
        this.map.hide()
    },
    onResize: function() {
        bookConfig.largePageWidth / bookConfig.largePageHeight < this.maxWidth / this.maxHeight ? (this.pageWidth = this.maxWidth, this.pageHeight = bookConfig.largePageHeight * this.maxWidth / bookConfig.largePageWidth) : (this.pageHeight = this.maxHeight, this.pageWidth = bookConfig.largePageWidth * this.maxHeight / bookConfig.largePageHeight);
        this.height = this.pageHeight + 2;
        this.width = this.book.doublePage ? 2 * (this.pageWidth + 1) : this.pageWidth;
        var b = windowWidth - this.width - 20 - bookConfig.rightMargin,
        c = toolBar.getTopHeight() + 10 + bookConfig.topMargin;
        this.map.css({
            left: b,
            top: c,
            width: this.width + "px",
            height: this.height + "px"
        });
        $(".map_img").css({
            width: this.pageWidth + "px",
            height: this.pageHeight + "px"
        });
        this.doublePage = this.book.doublePage
    },
    fillContent: function(b) {
        if (this.visible) {
            var c, d, f, g;
            c = 2 * parseInt(b / 2);
            d = c + 1;
            this.book.doublePage && (this.doublePage = 0 == c || c == bookConfig.totalPageCount ? !1 : !0);
            f = c;
            g = d;
            rightToLeft && (f = d, g = c);
            this.doublePage ? (this.fillImage(this.imageLeft, f), this.fillImage(this.imageRight, g), this.imageLeft.show(), this.imageRight.show(), this.imageLeft.css({
                "border-right": "none"
            })) : (this.fillImage(this.imageLeft, parseInt(b)), this.imageLeft.show(), this.imageRight.hide(), this.imageLeft.css({
                "border-right": "1px solid gray"
            }));
            this.width = this.pageWidth;
            this.doublePage && (this.width = 2 * (this.pageWidth + 1));
            b = windowWidth - this.width - 20 - bookConfig.rightMargin;
            c = toolBar.getTopHeight() + 10 + bookConfig.topMargin;
            this.map.css({
                left: b,
                top: c,
                width: this.width + "px",
                height: this.height + "px"
            });
            $(".map_img").css({
                width: this.pageWidth + "px",
                height: this.pageHeight + "px"
            })
        }
    },
    fillImageOrNot: function(b, c) {
        return ! b || "string" != typeof b || passwardType() && bookConfig.excludeFrontPages && c > parseInt(bookConfig.excludeFrontPages) && !verifyPassward() ? !1 : !0
    },
    fillImage: function(b, c) {
        if (b) {
            var d = getPageDir(c, "thumb", originTotalPageCount);
            d && "string" == typeof d && this.fillImageOrNot(d, c) && ( - 1 < d.indexOf(".js") ? global[decodeDatabasePrefix("thum") + c] && "string" == typeof global[decodeDatabasePrefix("thum") + c] ? b.attr("src", dataBase64Str(c, "thum")) : loadJavascript(d,
            function(d) {
                b.attr("src", dataBase64Str(c, "thum", d))
            },
            function() {}) : b.attr("src", d))
        }
    },
    setArea: function(b) {
        this.mapCursor.css({
            left: b.left,
            top: b.top,
            width: b.width,
            height: b.height
        })
    },
    getArea: function() {
        var b = this.mapCursor.css("left"),
        b = parseInt(b),
        c = this.mapCursor.css("top"),
        c = parseInt(c),
        d = this.mapCursor.css("width"),
        d = parseInt(d),
        f = this.mapCursor.css("height"),
        f = parseInt(f);
        return {
            left: b,
            top: c,
            width: d,
            height: f
        }
    },
    refreshArea: function() {
        if (this.book.showPage) {
            var b = this.book.showPage,
            c = b.width(),
            d = b.height(),
            f = getBookPoint(b),
            g = this.getBookPosition(); ! 0 == this.book.doublePage && !1 == this.doublePage && (c /= 2, b = BookInfo.getBook().getCurrentPageIndex(), 1 == b && !rightToLeft || rightToLeft && b == totalPageCount) && (g.left += c);
            var b = -(g.left + f.x),
            h = -(g.top + f.y),
            f = h / d,
            g = (b + windowWidth) / c,
            d = (h + windowHeight) / d,
            c = Math.max(0, b / c),
            f = Math.max(0, f),
            g = Math.min(1, g),
            d = Math.min(1, d),
            b = this.width;
            this.setArea({
                left: c * b,
                top: f * this.height,
                width: (g - c) * b,
                height: (d - f) * this.height
            })
        }
    },
    getBookPosition: function() {
        var b = this.book.showPage.css("left"),
        b = parseInt(b.replace("px", "")),
        c = this.book.showPage.css("top"),
        c = parseInt(c.replace("px", ""));
        return {
            left: b,
            top: c
        }
    },
    initCursorEvent: function() {
        var b, c, d = 1,
        f = 1,
        g = this.book.showPage,
        h;
        this.mapCursor.bind(_event._down,
        function(h) {
            h = isTouch ? h.originalEvent.touches: [h];
            if (1 < h.length) return ! 1;
            this.mouseDown = !0;
            b = h[0].pageX;
            c = h[0].pageY;
            g = this.book.showPage;
            d = g.width() / this.width;
            f = g.height() / this.height;
            this.mapCursor.css({
                "background-color": "RGBA(245,225,135,0.8)"
            });
            return ! 1
        }.bind(this));
        this.mapCursor.bind(_event._move,
        function(g) {
            g = isTouch ? g.originalEvent.touches: [g];
            if (1 < g.length) return ! 1;
            if (this.mouseDown) this.mapCursor.css({
                cursor: "move"
            });
            else return this.mapCursor.css({
                cursor: ""
            }),
            !1;
            h = panForMove(this.book.showPage, (b - g[0].pageX) * d, (c - g[0].pageY) * f, !1);
            this.refreshArea();
            return ! 1
        }.bind(this));
        this.mapCursor.bind(_event._end,
        function(b) {
            this.mouseDown = !1;
            this.mapCursor.css({
                cursor: "",
                "background-color": "RGBA(250,240,185,0.5)"
            });
            setZoomParameters(this.book.showPage, h);
            return ! 1
        }.bind(this));
        this.mapCursor.bind(_event._leave,
        function(b) {
            this.mouseDown = !1;
            this.mapCursor.css({
                cursor: "",
                "background-color": "RGBA(250,240,185,0.5)"
            });
            setZoomParameters(this.book.showPage, h);
            return ! 1
        }.bind(this));
        $(this.book.showPage).bind(_event._move,
        function(b) {
            if (!isPhone() && !isPad()) {
                var c = BookInfo.getBook();
                if (c.status_zoom && !this.book.showPage.parameters.zoomming && c.controlBar && c.controlBar.moveByMousePosition) {
                    b = isTouch ? b.originalEvent.touches: [b];
                    if (1 < b.length) return ! 1;
                    var c = this.book.showPage,
                    d = c.width(),
                    f = c.height(),
                    g = b[0].pageX;
                    b = b[0].pageY;
                    d = g - g * d / windowWidth;
                    f = b - b * f / windowHeight;
                    b = {};
                    b.origin = c.parameters.origin;
                    b.scale = c.parameters.scale;
                    d -= c.parameters.left;
                    f -= c.parameters.top;
                    b.tran = {
                        x: d,
                        y: f
                    };
                    f = transformCSS(b);
                    c.css(f);
                    this.refreshArea()
                }
            }
        }.bind(this))
    }
}),
SlideBookPage = Class({
    create: function(b, c, d) {
        this.pageHeight = this.pageWidth = this.height = this.width = this.zIndex = 0;
        this.pageIndex = b;
        this.pageArray = [];
        this.bookType = d;
        this.side = $("<div class='slide_side'></div>");
        this.side.attr("id", c + b);
        this.init(b)
    },
    init: function(b) {
        isNaN(b) || (this.pages = $("<div class='slide_pages'></div>"), this.initPages(b), this.setPageCss(), this.side.append(this.pages), this.initEvent())
    },
    initEvent: function() {
        this.adContainer && this.adContainer.css({
            "z-index": 1
        });
        this.pages.zoom({
            zoomIn: this.zoomIn.bind(this),
            zoomOut: this.zoomOut.bind(this),
            onZoomed: this.onZoomed.bind(this)
        })
    },
    zoomIn: function() {
        this.pages.parameters.zoomFlag = !0;
        var b = BookInfo.getBook();
        b.status_zoom = !0;
        b.adContainer && b.adContainer.css({
            "z-index": 1
        })
    },
    zoomOut: function() {
        this.pages.parameters.zoomFlag = !1;
        var b = BookInfo.getBook();
        b.status_zoom = !1;
        b.adContainer && 1 == b.currentPageIndex && b.adContainer.css({
            "z-index": 3
        })
    },
    onZoomed: function(b) {
        if (!isPhone() && !isPad() && b && !this.pages.parameters.resize) {
            this.pages.parameters.resize = !0;
            b = this.pages.offset().left;
            var c = this.pages.offset().top;
            b -= this.pages.parameters.left;
            var c = c - this.pages.parameters.top,
            d = this.pages.parameters.scale;
            1 != d && this.resizePages(parseInt(this.pageWidth * d), parseInt(this.pageHeight * d));
            d = transformCSS({
                tran: {
                    x: b,
                    y: c
                },
                scale: 0,
                origin: {
                    x: 0,
                    y: 0
                }
            });
            this.pages.css(d);
            this.pages.parameters && (this.pages.parameters.tran = {
                x: b,
                y: c
            },
            this.pages.parameters.scale = 1, this.pages.parameters.toScale = 1, this.pages.parameters.width = $(this.pages).width(), this.pages.parameters.height = $(this.pages).height(), this.pages.parameters.origin = {
                x: 0,
                y: 0
            },
            this.pages.parameters.resize = !1)
        }
    },
    initPages: function(b) {
        b = 2 * b - 1;
        index2 = b - 1;
        var c = rightToLeft ? b: index2;
        b = rightToLeft ? index2: b;
        this.addPageArray([c, b]);
        this.leftPage = this.pageArray[c];
        this.rightPage = this.pageArray[b]
    },
    setPageCss: function() {
        var b = transformCSS({
            rotate: 0,
            tran: {
                x: 0,
                y: 0
            }
        }); ! this.rightPage && this.leftPage && bookConfig.retainBookCenter && bookConfig.showDoublePage ? (this.leftPage.centerPage(), this.leftPage.setCSSByStyle(b)) : !this.leftPage && this.rightPage && bookConfig.retainBookCenter ? (this.rightPage.centerPage(), this.rightPage.setCSSByStyle(b)) : (this.leftPage && (this.leftPage.setLeftOrRight(!0), this.leftPage.setCSSByStyle(b)), this.rightPage && (this.rightPage.setLeftOrRight(!1), this.rightPage.setCSSByStyle(b)))
    },
    addPageArray: function(b) {
        if (b && this.pageArray) for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > originTotalPageCount || (this.pageArray[b[c]] && this.fillContent(b[c]), this.pageArray[b[c]]))) {
            var d = new NormalSide(b[c], "page", this.bookType);
            d.addAttachment();
            d.hideMiddleAttachment();
            d.onResize(this.pageWidth, this.pageHeight);
            this.pageArray[b[c]] = d;
            this.fillContent(b[c]);
            this.pages.append(d.getSide())
        }
    },
    fillContent: function(b) {
        this.pageArray[b] && this.pageArray[b].fillContent()
    },
    remove: function() {
        this.side.remove();
        this.side = void 0
    },
    setCSSByStyle: function(b) {
        this.side.css(b)
    },
    setCSSByName: function(b) {
        this.side.addClass(b)
    },
    onResize: function(b, c) {
        this.width = b;
        this.height = c;
        this.resetPages()
    },
    resetPages: function() {
        if (this.pages) {
            var b = getPageWidthHeight(this.width, this.height, 2 * bookConfig.largePageWidth, bookConfig.largePageHeight),
            c = 2 * parseInt(b.x / 2),
            b = parseInt(b.y);
            this.resizePages(c, b);
            this.pages.css({
                left: (this.width - c) / 2 + "px",
                top: (this.height - b) / 2 + "px"
            });
            c = transformCSS({
                rotate: 0,
                tran: {
                    x: 0,
                    y: 0
                }
            });
            this.pages.css(c)
        }
    },
    resizePages: function(b, c) {
        if (this.pages) {
            this.pageWidth = b;
            this.pageHeight = c;
            this.pages.css({
                width: this.pageWidth + "px",
                height: this.pageHeight + "px"
            });
            for (var d = this.pageWidth / 2,
            f = this.pageHeight,
            g = 0; g < this.pageArray.length; g++) if (this.pageArray[g]) this.pageArray[g].onResize(d, f)
        }
    },
    loading: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].loading()
    },
    setLeftOrRight: function(b) {
        this.isLeft = b
    },
    reset: function() {},
    getSide: function() {
        return this.side
    },
    setZIndex: function(b) {
        this.zIndex = b;
        this.side.css({
            "z-index": b
        })
    },
    getZIndex: function() {
        return this.zIndex
    },
    enterSide: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].enterSide()
    },
    leaveSide: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].leaveSide()
    },
    addHistoryTexts: function(b) {
        for (var c = 0; c < this.pageArray.length; c++) this.pageArray[c] && this.pageArray[c].addHistoryTexts(b)
    },
    highlightSearch: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].highlightSearch()
    },
    clearHighlight: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].clearHighlight()
    },
    resetSlider: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].resetSlider()
    },
    playSlider: function() {
        for (var b = 0; b < this.pageArray.length; b++) this.pageArray[b] && this.pageArray[b].playSlider()
    }
}),
SingleSlideBookPage = Class({
    initPages: function(b) {
        this.addPageArray([b]);
        this.page = this.pageArray[b]
    },
    resetPages: function() {
        if (this.pages) {
            var b = getPageWidthHeight(this.width, this.height, bookConfig.largePageWidth, bookConfig.largePageHeight),
            c = parseInt(b.x),
            b = parseInt(b.y);
            this.resizePages(c, b);
            this.pages.css({
                left: (this.width - c) / 2 + "px",
                top: (this.height - b) / 2 + "px"
            });
            c = transformCSS({
                rotate: 0,
                tran: {
                    x: 0,
                    y: 0
                }
            });
            this.pages.css(c)
        }
    },
    resizePages: function(b, c) {
        if (this.pages) {
            this.pageWidth = b;
            this.pageHeight = c;
            this.pages.css({
                width: this.pageWidth + "px",
                height: this.pageHeight + "px"
            });
            for (var d = this.pageWidth,
            f = this.pageHeight,
            g = 0; g < this.pageArray.length; g++) if (this.pageArray[g]) this.pageArray[g].onResize(d, f)
        }
    },
    setPageCss: function() {
        var b = transformCSS({
            rotate: 0,
            tran: {
                x: 0,
                y: 0
            }
        });
        this.page && (this.page.centerPage(), this.page.setCSSByStyle(b))
    }
}).extend(SlideBookPage),
SlideBook = Class({
    create: function(b, c) {
        this.pageArray = [];
        this.flipArray = {};
        this.currentTranX = this.height = this.width = this.pageHeight = this.pageWidth = 0;
        this.currentPageIndex = this.getRealBookIndex(c);
        this.mainPageIndex = this.getRealBookIndex(c);
        this.flipToPage = this.flippingPage = null;
        this.flippingTime = 1E3 * bookConfig.flippingTime;
        this.initBookType();
        this.createBook(b)
    },
    initBookType: function() {
        this.bookType = BookType.slide_book
    },
    createBook: function(b) {
        this.flipBook = $("<div class='SlideBook' id='SlideBook' ></div>");
        this.setBookPageByIndex(this.currentPageIndex);
        b.append(this.flipBook);
        setCurrentIndexTextField(this.getRealPageIndex(), !0);
        setLocationHash(this.getRealPageIndex());
        this.initEvent();
        void 0 != global.staticAd && !0 == staticAd.haveAd && bookConfig.showDoublePage && this.insertStaticAd()
    },
    setBookPageByIndex: function(b) {
        isNaN(b) || 0 >= b || (this.unWrapPageExcludeArray([b, b + 1, b - 1]), this.addPageArray([b, b + 1, b - 1]), this.loading(), this.currentPage = this.pageArray[b], this.nextPage = this.pageArray[b + 1], this.previousPage = this.pageArray[b - 1], this.setPageCss())
    },
    addPageArray: function(b) {
        if (b && this.pageArray) {
            for (var c = 0; c < b.length; c++) if (! (0 >= b[c] || b[c] > this.pageLength() || (this.pageArray[b[c]] && this.fillContent(b[c]), this.pageArray[b[c]]))) {
                var d = this.newPage(b[c]);
                d.onResize(this.width, this.height);
                this.pageArray[b[c]] = d;
                this.fillContent(b[c]);
                this.flipBook.append(d.getSide())
            }
            this.orderPages()
        }
    },
    setPagePosition: function(b, c) {
        var d = {
            left: c * this.width + "px"
        };
        this.pageArray[b] && this.pageArray[b].setCSSByStyle(d)
    },
    orderPages: function() {
        this.sequenceList = {};
        for (var b = this.pageArray.length,
        c = 0,
        d = this.mainPageIndex + 1; d < b; d++) this.pageArray[d] && (rightToLeft ? c--:c++, this.pageArray[d].sequence = c, this.sequenceList[c] = d, this.setPagePosition(d, c));
        c = 0;
        for (b = this.mainPageIndex; 0 < b; b--) this.pageArray[b] && (this.pageArray[b].sequence = c, this.sequenceList[c] = b, this.setPagePosition(b, c), rightToLeft ? c++:c--)
    },
    setPageCss: function() {
        var b = transformCSS({
            rotate: 0,
            tran: {
                x: 0,
                y: 0
            }
        });
        this.currentPage && this.currentPage.setCSSByStyle(b);
        this.previousPage && this.previousPage.setCSSByStyle(b);
        this.nextPage && this.nextPage.setCSSByStyle(b)
    },

    fillContent: function(b) { (!this.flipping || imageLoaded[b]) && this.pageArray[b] && this.pageArray[b].fillContent()
    },
    newPage: function(b) {
        return new SlideBookPage(b, "slidePage", this.bookType)
    },
    pageLength: function() {
        return parseInt(totalPageCount / 2) + 1
    },
    unWrapPageExcludeArray: function(b) {
        if (b && this.pageArray) {
            for (var c = this.pageArray.length,
            d = 0; d < c; d++) ! this.pageArray[d] || 0 <= b.indexOf(d) || (this.pageArray[d].remove(), this.pageArray[d] = void 0);
            this.orderPages()
        }
    },
    initEvent: function() {
        this.moveDirectionType = {
            MOVE_LEFT: -1,
            MOVE_RIGHT: 1,
            MOVE_NONE: 0
        };
        this.mouseMoveDirection = this.moveDirectionType.MOVE_NONE;
        this.hammerEventModular()
    },
    hammerEventModular: function() {
        var b = new Hammer.Manager(this.flipBook[0]);
        b.add(new Hammer.Pan);
        b.add((new Hammer.Swipe).recognizeWith(b.get("pan")));
        b.add(new Hammer.Press);
        b.add(new Hammer.Pinch);
        b.add(new Hammer.Tap({
            event: "doubletap",
            taps: 2
        }));
        b.add(new Hammer.Tap);
        b.on("panstart panmove", this.onPan.bind(this));
        b.on("press", this.onPress.bind(this));
        b.on("tap", this.onTap.bind(this));
        this.flipBook.bind("mouseover mousemove", this.onOver.bind(this));
        this.flipBook.bind(_event._down, this.onDown.bind(this));
        $("body").bind(_event._end, this.onUp.bind(this));
        this.flipBook.speed(this.onSwipe.bind(this))
    },
    onPan: function(b) {},
    onPress: function(b) {},
    onTap: function(b) {
        onWindowTap(b.srcEvent);
        isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
    },
    onOver: function(b) {},
    onDown: function(b) {},
    onUp: function(b) {},
    onSwipe: function(b, c) {
        if (!this.status_zoom && !this.isZomming && !this.dragToFlip) {
            var d;
            d = 30 * this.width / 1600;
            Math.abs(b) <= d || (b < -d ? rightToLeft ? previousPageFun() : nextPageFun() : b > d && (rightToLeft ? nextPageFun() : previousPageFun()))
        }
    },
    flippingTo: function(b) {
        this.currentPageIndex = b;
        this.currentPageIndex = Math.max(1, this.currentPageIndex);
        this.currentPageIndex = Math.min(originTotalPageCount, this.currentPageIndex);
        this.setCurrentIndexTextField();
        setLocationHash(this.getRealPageIndex())
    },
    setCurrentIndexTextField: function() {
        setCurrentIndexTextField(this.getRealPageIndex(), !0)
    },
    getRealPageIndex: function() {
        var b = 2 * this.currentPageIndex - 1;
        return b = Number.between(b, 1, bookConfig.totalPageCount)
    },
    getRealBookIndex: function(b) {
        b = parseInt(b / 2) + 1;
        return b = Number.between(b, 1, bookConfig.totalPageCount)
    },
    gotoPage: function(b) {
        if (!isNaN(b)) {
            b = this.getRealBookIndex(b);
            if (1 >= b || b >= this.pageLength()) if (1 != this.currentPageIndex || 1 != b) {
                var c = 1 >= b ? getLanguage("lblFirst", "This is the first page") : getLanguage("lblLast", "This is the last page");
                _tipsBox.setCaption(c);
                _tipsBox.showTipsBox()
            }
            0 >= b || b > this.pageLength() || !this.flipEffect(b) || (this.flippingTo(b), this.flipInterval && this.flipInterval.stop(), this.refreshPages(b), this.flipIntervalTmp(b))
        }
    },
    flipIntervalTmp: function(b) {
        var c = this.currentTranX,
        d = this.getFlipToX(b);
        this.flipping = !0;
        var f = function(b, f, k) {
            b < f ? (b = (0, $.easing["easeInOut" + k])(null, b, c, d - c, f), this.setBookTranX(b)) : (this.afterFlipTo(), this.flipInterval.stop())
        }.bind(this);
        this.flipInterval = function(b, c) {
            f(b, c, "Sine")
        }.runInAnimate(this, this.flippingTime)
    },
    refreshPages: function(b) {
        this.setAttachmentBefore(b);
        if (!this.pageArray[b]) {
            var c = this.getCurrentViewPageIndex(),
            d = this.currentTranX - this.width; (b > c || b < this.mainPageIndex) && !rightToLeft && (d = this.currentTranX); (b < c || b > this.mainPageIndex) && rightToLeft && (d = this.currentTranX);
            this.addPageArray([b]);
            this.setBookTranX(d)
        }
    },
    getCurrentViewPageIndex: function() {
        var b = Math.abs(this.currentTranX),
        b = Math.floor(b / this.width) + 1 + (b % this.width > this.width / 2) ? 0 : 1,
        b = (0 >= this.currentTranX ? 1 : -1) * b;
        return this.sequenceList[b]
    },
    getFlipToX: function(b) {
        return this.pageArray[b] && this.pageArray[b].sequence ? -this.pageArray[b].sequence * this.width: 0
    },
    flipEffect: function(b) {
        return this.status_zoom || b == this.currentPageIndex || this.flipping ? !1 : !0
    },
    getCurrentTranX: function() {
        return this.currentTranX
    },
    setBookTranX: function(b) {
        var c = transformCSS({
            rotate: 0,
            tran: {
                x: b,
                y: 0
            }
        });
        isBelowIE9() && (c = {
            left: b + "px",
            top: 0
        });
        this.setCSSByStyle(c);
        this.currentTranX = b
    },
    onResize: function() {
        this.resize()
    },
    resize: function() {
        this.endFlip();
        this.resizeBook();
        this.resizePage(this.width, this.height);
        this.setBookPageByIndex(this.currentPageIndex);
        this.resizeAdvertisement()
    },
    getTop: function() {
        return this.bookTop
    },
    resizeBook: function() {
        var b = global.toolBar && global.toolBar.getHeight ? global.toolBar.getHeight() : 0,
        c = global.toolBar && global.toolBar.getTopHeight ? global.toolBar.getTopHeight() : 0;
        this.width = windowWidth - bookConfig.leftMargin - bookConfig.leftMargin;
        this.height = windowHeight - bookConfig.topMargin - bookConfig.bottomMargin - b - thumbnailHeight;
        this.bookTop = bookConfig.topMargin + c;
        this.flipBook.css({
            width: this.width + "px",
            height: this.height + "px",
            left: bookConfig.leftMargin + "px",
            top: bookConfig.topMargin + c + "px"
        })
    },
    resizeAdvertisement: function() {
        var b = getPageWidthHeight(this.width, this.height, 2 * bookConfig.largePageWidth, bookConfig.largePageHeight);
        this.pageWidth = 2 * parseInt(b.x / 2);
        this.pageHeight = parseInt(b.y);
        this.adContainer && this.adContainer.css({
            left: (this.width - this.pageWidth) / 2 + "px",
            top: (this.height - this.pageHeight) / 2 + this.getTop() + "px",
            width: this.pageWidth / 2 + "px",
            height: this.pageHeight + "px"
        });
        this.adInstance && this.adInstance.resize()
    },
    resizePage: function(b, c) {
        for (var d = this.pageArray.length,
        f = 0; f < d; f++) if (this.pageArray[f]) this.pageArray[f].onResize(b, c)
    },
    getHeight: function() {
        return this.height
    },
    getWidth: function() {
        return this.width
    },
    getScale: function() {
        return 1
    },
    insertStaticAd: function() {
        var b = this.flipBook.css("left"),
        b = parseInt(b.replace("px", "")),
        c = this.flipBook.css("top"),
        d = this.flipBook.css("width"),
        d = parseInt(d.replace("px", ""));
        rightToLeft && (b += d / 2);
        this.adContainer = $("<div id='adContainer'></div>");
        this.adContainer.css({
            position: "absolute",
            "z-index": -1
        });
        this.adContainer.css({
            left: b + "px",
            top: c
        });
        this.adInstance = new HTML5AdSlider(this.adContainer, {
            paddingLeft: 30,
            paddingTop: 30,
            paddingRight: 30,
            paddingBottom: 30,
            loop: !1,
            timeout: 2E3,
            effectDuration: 1E3,
            data: staticAd.data
        });
        bookContainer.append(this.adContainer);
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        })
    },
    checkFlipping: function() {
        this.flipping = !1;
        this.loading()
    },
    afterFlipTo: function() {
        this.mainPageIndex = this.currentPageIndex;
        this.setBookPageByIndex(this.currentPageIndex);
        this.setBookTranX(0);
        this.checkFlipping();
        this.setAttachmentAfter()
    },
    setAttachmentBefore: function() {
        this.adContainer && this.adContainer.css({
            "z-index": 1
        })
    },
    setAttachmentAfter: function() {
        this.addHistoryTexts();
        this.stopMedia();
        this.stopAllSlider();
        this.addSearchHighlight();
        this.flipping || this.openShownSlider();
        this.flipping || this.openShownMedia();
        bookConfig.ThumbnailsButtonVisible && thumbnail.clearHighLight();
        bookConfig.ThumbnailsButtonVisible && thumbnail.setHighLight(this.getRealPageIndex());
        resizeBookAfterFlip && !this.flipping && window.setTimeout(function() {
            onStageResize()
        },
        30);
        this.adContainer && 1 == this.currentPageIndex && this.adContainer.css({
            "z-index": 3
        })
    },
    endFlip: function() {
        this.flipping = !1
    },
    loading: function() {
        if (!this.flipping) {
            var b = this.getCurrentPages();
            if (b && !(0 >= b.length)) for (var c = b.length,
            d = 0; d < c; d++) b[d] && this.pageArray[b[d]] && this.pageArray[b[d]].loading()
        }
    },
    getCurrentPageIndex: function() {
        return this.getRealPageIndex()
    },
    getCurrentPages: function() {
        return [this.currentPageIndex]
    },
    setCSSByStyle: function(b) {
        this.flipBook.css(b)
    },
    setShow: function(b) {},
    hide: function() {
        Log.debug("slide book hide.");
        this.setCSSByStyle({
            display: "none"
        });
        this.stopMedia();
        this.stopAllSlider()
    },
    show: function() {
        Log.debug("slide book show.");
        this.setCSSByStyle({
            display: "block"
        });
        this.openShownSlider();
        this.openShownMedia();
        this.addHistoryTexts();
        this.addSearchHighlight()
    },
    addHistoryTexts: function() {
        var b = [1];
        try {
            b = getShownPage()
        } catch(c) {
            b = [1]
        }
        for (var d = this.pageArray.length,
        f = 0; f < d; f++) this.pageArray[f] && this.pageArray[f].addHistoryTexts(b)
    },
    addSearchHighlight: function() {
        var b = this.currentPageIndex;
        this.pageArray[b] && this.pageArray[b].highlightSearch()
    },
    clearSearchHighlight: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].clearHighlight()
    },
    openShownSlider: function() {
        var b = this.currentPageIndex;
        this.pageArray[b] && this.pageArray[b].playSlider()
    },
    stopAllSlider: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].resetSlider()
    },
    openShownMedia: function() {
        var b = this.currentPageIndex;
        this.pageArray[b] && this.pageArray[b].enterSide()
    },
    stopMedia: function() {
        for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].leaveSide()
    }
}),
SingleSlideBook = Class({
    initBookType: function() {
        this.bookType = BookType.singleSlide_book
    },
    getRealPageIndex: function() {
        var b = this.currentPageIndex;
        return b = Number.between(b, 1, bookConfig.totalPageCount)
    },
    getRealBookIndex: function(b) {
        return b = Number.between(b, 1, bookConfig.totalPageCount)
    },
    setCurrentIndexTextField: function() {
        setCurrentIndexTextField(this.getRealPageIndex(), !1)
    },
    pageLength: function() {
        return bookConfig.totalPageCount
    },
    newPage: function(b) {
        return new SingleSlideBookPage(b, "slidePage", this.bookType)
    }
}).extend(SlideBook),
DockMenu = Class({
    create: function(b, c, d) {
        this.menu = $("<div id='dockMenu' class='dockMenu'></div>");
        this.menuContent = $("<div id='dockMenuContent' class='dockMenuContent'></div>");
        this.itemArray = [];
        this.fromIndex = c;
        this.toIndex = d;
        this.width = 0;
        this.height = 130;
        b.append(this.menu);
        this.menu.append(this.menuContent);
        this.initStyle();
        this.addItem();
        this.initEvent();
        this.hide()
    },
    initStyle: function() {
        this.menu.css({
            width: "100%",
            height: this.height + "px"
        });
        this.menuContent.css({
            height: "100%",
            width: "100%",
            left: 0,
            bottom: 0
        })
    },
    addItem: function() {
        for (var b = Math.ceil((this.toIndex - this.fromIndex + 1) / 2), c = 0; c < b; c++) {
            var d;
            d = rightToLeft ? this.fromIndex + 2 * (b - 1 - c) + 1 : this.fromIndex + 2 * c;
            var f = rightToLeft ? this.fromIndex + 2 * (b - 1 - c) : this.fromIndex + 2 * c + 1,
            g = [{
                url: getPageDir(d, "thumb", originTotalPageCount),
                index: d
            },
            {
                url: getPageDir(f, "thumb", originTotalPageCount),
                index: f
            }];
            if (0 >= d || d > bookConfig.totalPageCount) g = [{
                url: getPageDir(f, "thumb", originTotalPageCount),
                index: f
            }];
            if (0 >= f || f > bookConfig.totalPageCount) g = [{
                url: getPageDir(d, "thumb", originTotalPageCount),
                index: d
            }];
            d = new DockMenuItem(this.menuContent, g);
            f = Math.min(f, bookConfig.totalPageCount);
            f = Math.max(1, f);
            d.pageIndex = f;
            this.itemArray.push(d)
        }
        this.resize()
    },
    addObj: function(b, c) {
        "before" == c ? b.prependTo(this.menuContent) : b.appendTo(this.menuContent)
    },
    resize: function() {
        windowWidth < $(this.menuContent).width() ? $(this.menuContent).css({
            "margin-left": (windowWidth - $(this.menuContent).width()) / 2 - 25 + "px"
        }) : $(this.menuContent).css({
            "margin-left": "0px"
        })
    },
    setPosition: function(b, c, d) {
        if (void 0 == d || null == d) d = ["left", "top"];
        this.menu.css(d[0], b);
        this.menu.css(d[1], c)
    },
    initEvent: function() {
        function b() {
            h || (h = !0, window.setTimeout(c, 15))
        }
        function c() {
            for (var c = 0; c < l.itemArray.length; c++) l.itemArray[c] && l.itemArray[c].sizeDockIcons(d, f);
            h = !1;
            k && (k = !1, b())
        }
        var d, f, g = this.menu,
        h = !1,
        k = !1,
        l = this;
        $(g).bind(_event._move,
        function(c) {
            g.is(":visible") && (d = c.pageX, f = c.pageY, k = !0, b())
        });
        $(g).bind(_event._leave,
        function(c) {
            g.is(":visible") && (f = d = 1E3, k = !0, b())
        })
    },
    show: function() {
        this.menu.show();
        this.resize();
        for (var b = 0; b < this.itemArray.length; b++) this.itemArray[b].fillContent()
    },
    hide: function() {
        this.menu.hide()
    },

    clearHighLight: function() {
        this.currentItem && this.currentItem.clearHighLight()
    },
    setHighLight: function(b) {
        b = parseInt(b % 20 / 2);
        rightToLeft && (b = this.itemArray.length - b - 1);
        this.itemArray[b].setHighLight();
        for (var c = 0; c < this.itemArray.length; c++) this.itemArray[c].fillContent();
        this.currentItem = this.itemArray[b]
    }
}),
DockMenuItem = Class({
    create: function(b, c) {
        this.item = $("<div id='item' class='dockMenuItem'></div>");
        this.imgArr = c;
        this.doubleImage = 2 > c.length ? !1 : !0;
        this.itemHeight = 60;
        this.itemWidth = 0;
        this.toScale = 1.5;
        this.padding = 10;
        b.append(this.item);
        this.initItem()
    },
    initItem: function() {
        this.itemContent = $("<div class='dockMenuItemContent dockMenuItemShadow'></div>");
        this.itemCaption = $("<span class='dockMenuItemCaption'/>");
        this.itemCaptionAfter = $("<div class='dockMenuItemCaptionAfter'/>");
        this.item.append(this.itemContent);
        this.item.append(this.itemCaption);
        this.itemCaption.after(this.itemCaptionAfter);
        $(this.itemCaptionAfter).css({
            "background-image": "url(" + uiBaseURL + "span.png)"
        });
        this.addContent();
        this.resize(this.itemHeight);
        this.addEvent()
    },
    resize: function(b) {
        var c = b * bookConfig.largePageWidth * 2 / bookConfig.largePageHeight; ! 1 === this.doubleImage && (c /= 2);
        this.item.css({
            width: c + "px",
            height: "130px"
        });
        this.item.css({
            "padding-left": this.padding + "px"
        });
        this.itemContent.css({
            width: c + "px",
            height: b + "px"
        });
        this.resizeContent(c, b)
    },
    addContent: function() { ! 1 === this.doubleImage ? (this.itemIcon = $("<img/>"), this.itemContent.append(this.itemIcon)) : !0 === this.doubleImage && (this.itemLeftIcon = $("<img/>"), this.itemRightIcon = $("<img/>"), this.itemContent.append(this.itemLeftIcon), this.itemContent.append(this.itemRightIcon))
    },
    fillContent: function() { ! 1 === this.doubleImage ? (this.itemIcon.attr("src", this.imgArr[0].url), fillImage(this.itemIcon, this.imgArr[0].url, this.imgArr[0].index, "thum"), this.itemCaption.text(this.imgArr[0].index)) : !0 === this.doubleImage && (fillImage(this.itemLeftIcon, this.imgArr[0].url, this.imgArr[0].index, "thum"), fillImage(this.itemRightIcon, this.imgArr[1].url, this.imgArr[1].index, "thum"), this.itemCaption.text(this.imgArr[0].index + "-" + this.imgArr[1].index))
    },
    resizeContent: function(b, c) { ! 1 === this.doubleImage ? this.itemIcon.css({
            width: b + "px",
            height: c + "px"
        }) : !0 === this.doubleImage && (this.itemLeftIcon.css({
            width: b / 2 + "px",
            height: c + "px"
        }), this.itemRightIcon.css({
            width: b / 2 + "px",
            height: c + "px"
        }), this.itemLeftIcon.css({
            position: "absolute",
            left: "0px"
        }), this.itemRightIcon.css({
            position: "absolute",
            left: b / 2 + "px"
        }))
    },
    sizeDockIcons: function(b, c) {
        var d = this.itemHeight,
        f = this.itemHeight * this.toScale - d,
        g = $(this.item).offset().left + $(this.item).outerWidth() / 2,
        h = $(this.item).offset().top + $(this.item).outerHeight() / 2,
        g = this.distance(g, h, b, c),
        d = (1 - Math.min(1, Math.max(0, g / 180))) * f + d;
        this.resize(d)
    },
    distance: function(b, c, d, f) {
        b = d - b;
        c = f - c;
        return Math.sqrt(b * b + c * c)
    },
    addEvent: function() {
        this.item.bind(_event._end,
        function() {
            gotoPageFun(this.pageIndex)
        }.bind(this));
        this.item.bind(_event._over,
        function() {
            this.itemCaption.css("display", "inline-block");
            this.itemCaptionAfter.css("display", "block")
        }.bind(this));
        this.item.bind(_event._leave,
        function() {
            this.itemCaption.hide();
            this.itemCaptionAfter.hide()
        }.bind(this))
    },
    clearHighLight: function() {
        this.itemContent.css("border", "");
        this.itemContent.css("border-radius", "0px")
    },
    setHighLight: function() {
        this.itemContent.css("border", "3px solid #6bc30d");
        this.itemContent.css("border-radius", "3px")
    }
}),
PhoneSlideBookPage = Class({}).extend(SlideBookPage),
PhoneSingleSlideBookPage = Class({}).extend(SingleSlideBookPage),
PhoneSlideBook = Class({
    initBookType: function() {
        this.bookType = BookType.slide_book
    },
    newPage: function(b) {
        return new PhoneSlideBookPage(b, "slidePage", this.bookType)
    }
}).extend(SlideBook),
PhoneSingleSlideBook = Class({
    initBookType: function() {
        this.bookType = BookType.singleSlide_book
    },
    newPage: function(b) {
        return new PhoneSingleSlideBookPage(b, "slidePage", this.bookType)
    }
}).extend(SingleSlideBook),
PcSlideBookPage = Class({}).extend(SlideBookPage),
PcSingleSlideBookPage = Class({}).extend(SingleSlideBookPage),
PcSlideBook = Class({
    initBookType: function() {
        this.bookType = BookType.slide_book
    },
    newPage: function(b) {
        return new PcSlideBookPage(b, "slidePage", this.bookType)
    }
}).extend(SlideBook),
PcSingleSlideBook = Class({
    initBookType: function() {
        this.bookType = BookType.singleSlide_book
    },
    newPage: function(b) {
        return new PcSingleSlideBookPage(b, "slidePage", this.bookType)
    }
}).extend(SingleSlideBook),
HardSide = Class({
    create: function(b, c, d) {
        this._super(b, c, d);
        this.isHard = !0;
        this.borderWidth = bookConfig.hardCoverBorderWidth;
        this.outerCoverBorder = bookConfig.outerCoverBorder || 1 != b && (b != totalPageCount || b == totalPageCount && d == BookType.single_book)
    },
    initPageSide: function() {
        this.pageSide = $("<div class='pageSide'></div>");
        this.side.append(this.pageSide)
    },
    initSide: function() {
        this.side = $("<div class='hardSide' style='background-color:" + bookConfig.borderColor + ";'></div>")
    },
    addCoil: function() {
        parseBool(bookConfig.addPaperCoil) && (this.midCoil = $("<div style='z-index:6;'></div>"), this.pageSide.append(this.midCoil))
    },
    resizePage: function(b, c) {
        this.width = b + this.borderWidth;
        this.height = c + 2 * this.borderWidth;
        this.maskWidth = Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2));
        this.attachW = parseInt(100 * (this.outerCoverBorder ? b: this.width) / ( - parseFloat(bookConfig.visibleAreaLeft) + parseFloat(bookConfig.visibleAreaRight)));
        this.attachH = parseInt(100 * (this.outerCoverBorder ? c: this.height) / (parseFloat(bookConfig.visibleAreaBottom) - parseFloat(bookConfig.visibleAreaTop)));
        this.pageSideWidth = this.outerCoverBorder ? b: b + this.borderWidth;
        this.pageSideHeight = this.outerCoverBorder ? c: c + 2 * this.borderWidth;
        this.side.css({
            width: this.width,
            height: this.height
        });
        this.tmpContent.css({
            width: this.attachW,
            height: this.attachH,
            top: -this.attachH * parseFloat(bookConfig.visibleAreaTop) / 100,
            left: -this.attachW * parseFloat(bookConfig.visibleAreaLeft) / 100
        });
        this.pageSide.css({
            position: "absolute",
            top: this.outerCoverBorder ? this.borderWidth: 0,
            width: this.pageSideWidth,
            height: this.pageSideHeight
        });
        this.resizeSideImage()
    },
    resizeSideImage: function() {
        if (this.sideImage) {
            var b = getPageWidthHeight(1024, 1024, this.pageSideWidth, this.pageSideHeight);
            this.sideImage.css({
                width: Math.ceil(b.x) + "px",
                height: Math.ceil(b.y) + "px"
            });
            transformCSS({
                scale: this.pageSideWidth / b.x,
                origin: {
                    x: 0,
                    y: 0
                },
                obj: this.sideImage
            })
        }
    },
    setLeftOrRight: function(b) {
        this._super(b);
        var c = b && this.outerCoverBorder ? this.borderWidth: 0,
        d = bookConfig.cornerRound;
        b ? (this.side.css({
            "border-radius": d + "px 0px 0px " + d + "px"
        }), 1 != this.pageIndex && 2 != this.pageIndex && this.pageIndex != totalPageCount && this.pageIndex != totalPageCount - 1 || this.side.css({
            "margin-top": -this.borderWidth + "px",
            "margin-left": -this.borderWidth + "px"
        })) : (this.side.css({
            "border-radius": "0px " + d + "px " + d + "px 0px"
        }), 1 != this.pageIndex && 2 != this.pageIndex && this.pageIndex != totalPageCount && this.pageIndex != totalPageCount - 1 || this.side.css({
            "margin-top": -this.borderWidth + "px",
            "margin-right": -this.borderWidth + "px"
        }));
        this.pageSide.css({
            left: c + "px"
        })
    }
}).extend(NormalSide),
HardCover = Class({
    create: function(b) {
        this.parent = b;
        this.borderWidth = bookConfig.hardCoverBorderWidth;
        this.rightToLeft = bookConfig.RightToLeft;
        this.cover = $("<div class='hardCover'></div>");
        this.initPage();
        this.initBookSpine();
        this.parent.append(this.cover)
    },
    initPage: function() {
        this.leftPage = new HardSide(this.rightToLeft ? totalPageCount - 1 : 2, "coverPage", BookType.normal_book);
        this.rightPage = new HardSide(this.rightToLeft ? 2 : totalPageCount - 1, "coverPage", BookType.normal_book);
        this.cover.append(this.leftPage.getSide());
        this.cover.append(this.rightPage.getSide());
        this.leftPage.addAttachment();
        this.rightPage.addAttachment();
        this.leftPage.setLeftOrRight(!0);
        this.rightPage.setLeftOrRight(!1);
        this.leftPage.setCSSByStyle({
            top: "0",
            left: "0",
            "margin-top": 0,
            "margin-left": 0
        });
        this.rightPage.setCSSByStyle({
            top: "0",
            right: "0",
            "margin-top": 0,
            "margin-right": 0
        })
    },
    initBookSpine: function() {
        this.topSpine = new BookSpine(this.cover);
        this.bottomSpine = new BookSpine(this.cover);
        this.topSpine.setCSSByName("top_spine");
        this.bottomSpine.setCSSByName("botoom_spine")
    },
    onResize: function(b, c, d) {
        if (this.leftPage) this.leftPage.onResize(b, c);
        if (this.rightPage) this.rightPage.onResize(b, c);
        this.topSpine.onResize(d);
        this.bottomSpine.onResize(d);
        this.pageWidth = b;
        this.pageHeight = c;
        this.resizeCover(b, c, d)
    },
    resizeCover: function(b, c, d) {
        this.thicknessWidthArray = d;
        this.width = 2 * b + (d[0] + d[1]) + 2 * this.borderWidth;
        this.height = c + 2 * this.borderWidth;
        this.cover.css({
            width: this.width + "px",
            height: this.height + "px",
            left: -(this.borderWidth + d[0]) + "px",
            top: -this.borderWidth + "px"
        })
    },
    getSensitiveIndex: function() {
        return {
            min: 3,
            max: totalPageCount - 2
        }
    },
    refresh: function(b, c, d) {
        this.refreshBookSpine(c);
        this.refreshPage(b, d);
        this.resizeCover(this.pageWidth, this.pageHeight, c)
    },
    refreshPage: function(b, c) {
        var d = this.getSensitiveIndex().min,
        f = this.getSensitiveIndex().max;
        if (b <= d || b >= f) {
            if (b <= d && bookConfig.RightToLeft || !bookConfig.RightToLeft && b >= f) this.rightPage && this.rightPage.setVisible(!1),
            (c < f && bookConfig.RightToLeft || c > d && !bookConfig.RightToLeft) && this.leftPage && this.leftPage.setVisible(!0);
            if (b <= d && !bookConfig.RightToLeft || bookConfig.RightToLeft && b >= f) this.leftPage && this.leftPage.setVisible(!1),
            (c < f && !bookConfig.RightToLeft || c > d && bookConfig.RightToLeft) && this.rightPage && this.rightPage.setVisible(!0);
            this.hideBookSpine()
        } else this.showBookSpine(),
        this.leftPage && this.leftPage.setVisible(!0),
        this.rightPage && this.rightPage.setVisible(!0)
    },
    refreshBookSpine: function(b) {
        this.topSpine.refresh(b);
        this.bottomSpine.refresh(b)
    },
    hideBookSpine: function() {
        this.topSpine.hide();
        this.bottomSpine.hide()
    },
    showBookSpine: function() {
        this.topSpine.show();
        this.bottomSpine.show()
    },
    show: function() {
        this.cover.show()
    },
    hide: function() {
        this.cover.hide()
    }
}),
BookSpine = Class({
    create: function(b) {
        this.parent = b;
        this.initSpine()
    },
    initSpine: function() {
        this.height = bookConfig.hardCoverBorderWidth;
        this.bookSpine = $("<div class='bookSpine'></div>");
        this.bookSpine.css({
            height: this.height,
            "background-color": bookConfig.borderColor
        });
        this.parent.append(this.bookSpine);
        this.addShadow()
    },
    addShadow: function() {
        this.leftShadow = $("<div class='left_shadow shadow'></div>");
        this.rightShadow = $("<div class='right_shadow shadow'></div>");
        this.bookSpine.append(this.leftShadow);
        this.bookSpine.append(this.rightShadow)
    },
    refresh: function(b) {
        this.onResize(b)
    },
    show: function() {
        this.bookSpine.show()
    },
    hide: function() {},
    setCSSByStyle: function(b) {
        this.bookSpine.css(b)
    },
    setCSSByName: function(b) {
        this.bookSpine.attr("class", b);
        this.bookSpine.addClass("bookSpine")
    },
    onResize: function(b) {
        this.width = b[0] + b[1];
        this.bookSpine.css({
            width: this.width,
            "margin-left": -this.width / 2 + "px"
        })
    }
}),
SingleHardCover = Class({
    initPage: function() {
        bookConfig.RightToLeft && (this.leftPage = new HardSide(this.rightToLeft ? bookConfig.totalPageCount: 2, "coverPage", BookType.single_book));
        bookConfig.RightToLeft || (this.rightPage = new HardSide(this.rightToLeft ? 2 : bookConfig.totalPageCount, "coverPage", BookType.single_book));
        this.leftPage && this.cover.append(this.leftPage.getSide());
        this.rightPage && this.cover.append(this.rightPage.getSide());
        this.leftPage && this.leftPage.addAttachment();
        this.rightPage && this.rightPage.addAttachment();
        this.leftPage && this.leftPage.setLeftOrRight(!0);
        this.rightPage && this.rightPage.setLeftOrRight(!1);
        this.leftPage && this.leftPage.setCSSByStyle({
            top: "0",
            left: "0",
            "margin-top": 0,
            "margin-left": 0
        });
        this.rightPage && this.rightPage.setCSSByStyle({
            top: "0",
            right: "0",
            "margin-top": 0,
            "margin-right": 0
        })
    },
    initBookSpine: function() {
        this.topSpine = new SingleBookSpine(this.cover);
        this.bottomSpine = new SingleBookSpine(this.cover);
        this.topSpine.setCSSByName("top_spine");
        this.bottomSpine.setCSSByName("botoom_spine")
    },
    getSensitiveIndex: function() {
        return {
            min: 2,
            max: bookConfig.totalPageCount
        }
    },
    resizeCover: function(b, c, d) {
        this.thicknessWidthArray = d;
        this.width = b + (d[0] + d[1]) + this.borderWidth;
        this.height = c + 2 * this.borderWidth;
        this.cover.css({
            width: this.width + "px",
            height: this.height + "px",
            left: (bookConfig.RightToLeft ? -(this.borderWidth + d[0]) : 0) + "px",
            top: -this.borderWidth + "px"
        })
    }
}).extend(HardCover),
SingleBookSpine = Class({
    onResize: function(b) {
        this.width = b[0] + b[1];
        this.bookSpine.css({
            width: this.width
        });
        bookConfig.RightToLeft ? this.bookSpine.css({
            left: "auto",
            right: "0"
        }) : this.bookSpine.css({
            right: "auto",
            left: "0"
        })
    }
}).extend(BookSpine),
HardBook = Class({
    createBook: function(b) {
        this._super(b);
        this.hardCover = new HardCover(this.flipBook)
    },
    newPage: function(b) {
        return 1 == b || 2 == b || b == totalPageCount || b == totalPageCount - 1 ? new HardSide(b, "page", BookType.normal_book) : new NormalSide(b, "page", BookType.normal_book)
    },
    followToPoint: function(b, c, d) {
        this._super(b, c, d);
        this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth())
    },
    getDownUpHardPage: function(b, c, d) {
        this.addPageArray([b, c]);
        d ? (this.pageArray[b] && this.pageArray[b].setLeftOrRight(!0), this.pageArray[c] && this.pageArray[c].setLeftOrRight(!1), this.pageArray[b] && this.pageArray[b].setCSSByName("flip-hard-left-side"), this.pageArray[c] && this.pageArray[c].setCSSByName("flip-hard-right-side")) : (this.pageArray[b] && this.pageArray[b].setLeftOrRight(!1), this.pageArray[c] && this.pageArray[c].setLeftOrRight(!0), this.pageArray[b] && this.pageArray[b].setCSSByName("flip-hard-right-side"), this.pageArray[c] && this.pageArray[c].setCSSByName("flip-hard-left-side"));
        this.pageArray[c] && this.pageArray[c].setAttachment(!d);
        return [this.pageArray[b], this.pageArray[c]]
    },
    setAttachmentBefore: function(b) {
        this._super(b);
        this.hardCover && this.hardCover.refresh(b, this.getThicknessWidth(), this.currentPageIndex)
    },
    afterCurling: function() {
        this._super();
        this.hardCover && this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    setAttachmentAfter: function() {
        this._super();
        this.hardCover && this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    onResize: function(b, c) {
        this._super(b, c);
        this.hardCover.onResize(b, c, this.getThicknessWidth());
        this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    resizeBook: function(b, c) {
        this._super(b, c);
        this.hardCover.onResize(b, c, this.getThicknessWidth());
        this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    show: function() {
        this._super();
        this.hardCover.show()
    },
    hide: function() {
        this._super();
        this.hardCover.hide()
    }
}).extend(NormalBook),
HardPhoneBook = Class({}).extend(HardBook).extend(PinchZoomBook),
SingleHardBook = Class({
    createBook: function(b) {
        this._super(b);
        this.hardCover = new SingleHardCover(this.flipBook)
    },
    newPage: function(b) {
        1 == b || b == bookConfig.totalPageCount ? (b = new HardSide(b, "page", BookType.single_book), bookConfig.RightToLeft ? b.setLeftOrRight(!0) : b.setLeftOrRight(!1)) : b = new NormalSide(b, "page", BookType.single_book);
        return b
    },
    followToPoint: function(b, c, d) {
        this._super(b, c, d);
        this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth())
    },
    getDownUpHardPage: function(b, c) {
        var d = b;
        b > c && (d = c);
        this.addPageArray([d]);
        this.addPageBackArray([d]);
        bookConfig.RightToLeft ? (this.pageArray[d] && this.pageArray[d].setLeftOrRight(!0), this.pageBackArray[d] && this.pageBackArray[d].setLeftOrRight(!0), this.pageArray[d] && this.pageArray[d].setCSSByName("flip-hard-left-side"), this.pageBackArray[d] && this.pageBackArray[d].setCSSByName("flip-hard-right-side")) : (this.pageArray[d] && this.pageArray[d].setLeftOrRight(!1), this.pageBackArray[d] && this.pageBackArray[d].setLeftOrRight(!1), this.pageArray[d] && this.pageArray[d].setCSSByName("flip-hard-right-side"), this.pageBackArray[d] && this.pageBackArray[d].setCSSByName("flip-hard-left-side"));
        return [this.pageArray[d], this.pageBackArray[d]]
    },
    setAttachmentBefore: function(b) {
        this._super(b);
        this.hardCover && this.hardCover.refresh(b, this.getThicknessWidth(), this.currentPageIndex)
    },
    afterCurling: function() {
        this._super();
        this.hardCover && this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    onResize: function(b, c) {
        this._super(b, c)
    },
    resizeBook: function(b, c) {
        this._super(b, c);
        this.hardCover.onResize(b, c, this.getThicknessWidth());
        this.hardCover.refresh(this.currentPageIndex, this.getThicknessWidth(), this.currentPageIndex)
    },
    show: function() {
        this._super();
        this.hardCover.show()
    },
    hide: function() {
        this._super();
        this.hardCover.hide()
    }
}).extend(SingleBook),
SingleHardPhoneBook = Class({}).extend(SingleHardBook).extend(PinchZoomSingleBook);
Class("TaskList", {
    create: function() {
        this.taskList = [];
        this.largeLength = 0
    },
    unShiftList: function(b, c) {
        this.taskList.unshift(b);
        this.popList();
        for (var d = this.taskList.length,
        f = 0; f < d && !this.stop; f++) c && c(this.taskList[f])
    },
    popList: function(b) {
        var c = this.taskList.length;
        if (! (c <= this.largeLength)) {
            this.stop = !0;
            for (var d = 0; d < c - this.largeLength; d++) {
                var f = this.taskList.pop();
                b && b(f)
            }
            this.stop = !1
        }
    },
    setLargeLength: function(b) {
        this.largeLength = b
    }
});
function shareButton(b, c) {
    this.config = $.extend({
        iconURL: "",
        caption: "",
        link: ""
    },
    c);
    this.bg = $("<div></div>");
    this.icon = $("<img />");
    this.caption = new label(this.config.caption, this.bg);
    this.width = 200;
    this.height = 40;
    this.bg.css({
        position: "absolute",
        width: this.width + "px",
        height: this.height + "px",
        "-webkit-border-radius": "6px",
        "-moz-border-radius": "6px",
        "-o-border-radius": "6px",
        "-ms-border-radius": "6px",
        "border-radius": "6px",
        "background-color": "#666666"
    });
    this.icon.attr({
        src: this.config.iconURL
    });
    this.icon.css({
        position: "absolute",
        left: "5px",
        top: "-7px"
    });
    b.append(this.bg);
    this.bg.append(this.icon);
    this.caption.setLabelPosition(40, 10);
    this.initEvent()
}
shareButton.prototype.onResize = function(b, c) {
    this.bg.css({
        width: b + "px",
        height: c + "px"
    })
};
shareButton.prototype.initEvent = function() {
    this.bg.css({
        cursor: "pointer"
    });
    var b = this;
    this.bg.bind(_event._down,
    function(c) {
        window.open(b.config.link, "_blank")
    })
};
shareButton.prototype.setPosition = function(b, c) {
    this.bg.css({
        left: b + "px",
        top: c + "px"
    })
};
function shareForm(b, c) {
    form.call(this, b, c);
    this.visible = !1;
    this.addItem();
    this.setButtonPos();
    this.background.css({
        left: -windowWidth / 2 - 20 + "px",
        overflow: "hidden"
    })
}
$.extend(shareForm.prototype, form.prototype);
shareForm.prototype.addItem = function() {
    var b = window.location.href,
    c = window.document.title,
    d = window.location.pathname,
    d = d.substring(0, d.lastIndexOf("/")) + "/files/thumb/1.jpg",
    b = "?&url=" + b + "&title=" + c + "&description=" + bookConfig.bookDescription + "&screenshot=" + d,
    c = {
        iconURL: uiBaseURL + "facebook.png",
        caption: "Facebook",
        link: "http://api.addthis.com/oexchange/0.8/forward/facebook/offer" + b
    },
    d = {
        iconURL: uiBaseURL + "google.png",
        caption: "Google+",
        link: "http://api.addthis.com/oexchange/0.8/forward/igoogle/offer" + b
    },
    f = {
        iconURL: uiBaseURL + "myspace.png",
        caption: "MySpace",
        link: "http://api.addthis.com/oexchange/0.8/forward/myspace/offer" + b
    },
    g = {
        iconURL: uiBaseURL + "twitter.png",
        caption: "Twitter",
        link: "http://api.addthis.com/oexchange/0.8/forward/twitter/offer" + b
    },
    h = {
        iconURL: uiBaseURL + "digg.png",
        caption: "Digg",
        link: "http://api.addthis.com/oexchange/0.8/forward/digg/offer" + b
    },
    k = {
        iconURL: uiBaseURL + "more.png",
        caption: "More",
        link: "http://api.addthis.com/oexchange/0.8/offer" + b
    };
    this.emailButton = new shareButton(this.contentBox, {
        iconURL: uiBaseURL + "email.png",
        caption: "Email",
        link: "http://api.addthis.com/oexchange/0.8/forward/email/offer" + b
    });
    this.fbButton = new shareButton(this.contentBox, c);
    this.ggButton = new shareButton(this.contentBox, d);
    this.msButton = new shareButton(this.contentBox, f);
    this.twButton = new shareButton(this.contentBox, g);
    this.diggButton = new shareButton(this.contentBox, h);
    this.moreButton = new shareButton(this.contentBox, k)
};
shareForm.prototype.onResize = function(b, c) {
    this.width = 100 > b ? 100 : b;
    this.height = 100 > c ? 100 : c;
    this.background.css({
        width: this.width + "px",
        height: this.height + "px",
        left: this.visible ? "0px": -this.width - 20 + "px"
    });
    this.titleBox.css({
        width: this.width + "px"
    });
    this.contentBox.css({
        width: this.width + "px",
        height: this.height - this.titleBox.height() + "px"
    });
    this.emailButton.onResize(this.width / 2 - 20, 40);
    this.fbButton.onResize(this.width / 2 - 20, 40);
    this.ggButton.onResize(this.width / 2 - 20, 40);
    this.msButton.onResize(this.width / 2 - 20, 40);
    this.twButton.onResize(this.width / 2 - 20, 40);
    this.diggButton.onResize(this.width / 2 - 20, 40);
    this.moreButton.onResize(this.width / 2 - 20, 40);
    this.setButtonPos()
};
shareForm.prototype.setButtonPos = function() {
    this.emailButton.setPosition(5, 10);
    this.fbButton.setPosition(this.width / 2, 10);
    this.ggButton.setPosition(5, 68);
    this.msButton.setPosition(this.width / 2, 68);
    this.twButton.setPosition(5, 126);
    this.diggButton.setPosition(this.width / 2, 126);
    this.moreButton.setPosition(5, 184)
};
shareForm.prototype.show = function() {
    var b = this;
    this.background.animate({
        left: 0
    },
    400,
    function() {
        b.visible = !0;
        window.setTimeout(function() {
            b.background.css({
                left: "0px"
            })
        },
        100)
    })
};
shareForm.prototype.hide = function() {
    var b = this;
    this.background.animate({
        left: -(this.width + 20)
    },
    400,
    function() {
        b.visible = !1;
        window.setTimeout(function() {
            b.background.css({
                left: -(this.width + 20) + "px"
            })
        },
        100)
    })
};
shareForm.prototype.closeForm = function() {
    this.hide()
};
var passwardPannel = {
    show: function() {
        this.found || this.init();
        this.background.show();
        this.view.show()
    },
    init: function() {
        this.found = !0;
        this.background = $("<div class='passwardPannel-background'></div>");
        this.view = $("<div class='passwardPannel'></div>");
        this.icon = $("<div id='icon' class='icon'></div>");
        this.username = $("<input id='username' placeholder='" + getLanguage("lblName", "Name") + "' class='username'></input>");
        this.passward = $("<input id='passward' type='password' placeholder='" + getLanguage("lblPassword", "Password") + "' class='passward'></input>");
        this.loginIn = $("<p id='loginIn' class='loginIn'>" + getLanguage("lblLogin", "Login") + "</p>");
        this.cancleIn = $("<p id='cancleIn' class='cancleIn'>" + getLanguage("lblCancel", "Cancel") + "</p>");
        this.passwardResult = $("<span id='passwardResult' class='passwardResult'></span>");
        $("body").append(this.background);
        $("body").append(this.view);
        this.view.append(this.icon);
        2 == passwardType() && (this.view.css("height", "390px"), this.view.append(this.username));
        this.view.append(this.passward);
        this.view.append(this.loginIn);
        this.view.append(this.cancleIn);
        this.view.append(this.passwardResult);
        this.icon.addCssSprite(phoneIconsURL[0], "passward", 100, 100, phoneIconInfo);
        this.background.bind(_event._down,
        function() {
            return ! 1
        });
        this.background.bind(_event._move,
        function() {
            return ! 1
        });
        this.background.bind(_event._end,
        function() {
            return ! 1
        });
        this.cancleIn.bind(_event._end,
        function() {
            this.hide()
        }.bind(this));
        this.loginIn.bind(_event._end,
        function() {
            this.login()
        }.bind(this))
    },
    login: function() {
        verifyPassward() ? (this.hide(), fillCurrentPageContent()) : this.showResult()
    },
    hide: function() {
        this.background.hide();
        this.view.hide()
    },
    showResult: function() {
        document.getElementById("username") && !this.username.val() ? this.passwardResult.html(getLanguage("lblNoName", "User name can not be empty.")) : this.passward.val() ? this.passwardResult.html(getLanguage("lblNoCorrectLogin", "Please enter the correct user name and password.")) : this.passwardResult.html(getLanguage("lblNoPassword", "Password can not be empty."))
    }
},
getLogoLink = function() {
    var b = bookConfig.appLogoLinkURL,
    c = getString("appLogoOpenWindow", "_blank");
    if ("_Self" == c || "Self" == c || "self" == c) c = "_self";
    void 0 == b || "" == b ? (b = "javascript:void(0);", c = "_self") : "http" != b.substr(0, 4) && (b = "http://" + b);
    return [b, c]
},
logoBar,
initLogoBar = function(b) {
    logoBar = $("#logoBar");
    if (void 0 != bookConfig.appLogoIcon || "" != bookConfig.appLogoIcon) {
        var c = $("<img />"),
        d = 0,
        f = 0,
        g = getLogoLink();
        c.load(function() {
            if (isNaN(bookConfig.logoHeight) || "" == bookConfig.logoHeight || null == bookConfig.logoHeight || void 0 == bookConfig.logoHeight) try {
                d = b.getLogoHeight()
            } catch(g) {
                d = toolBar.getLogoHeight()
            } else d = bookConfig.logoHeight;
            var h = c.width() * d / c.height();
            c.css({
                width: h + "px",
                height: d + "px"
            });
            try {
                f = (b.getLogoHeight() - d) / 2
            } catch(m) {
                f = 0
            }
            logoBar.css({
                position: "absolute"
            });
            logoBar.append(c)
        });
        c.attr({
            src: bookConfig.appLogoIcon
        });
        c.css({
            position: "absolute"
        })
    }
    var h = 0,
    h = isNaN(bookConfig.logoPadding) || "" == bookConfig.logoPadding || null == bookConfig.logoPadding || void 0 == bookConfig.logoPadding ? 0 : bookConfig.logoPadding,
    f = (toolBar.getLogoHeight() - bookConfig.logoHeight) / 2;
    logoBar.css({
        left: h + "px"
    });
    logoBar.css({
        top: f + "px"
    });
    logoBar.bind(_event._down,
    function() {
        window.open(g[0], g[1])
    });
    logoBar.bind("mouseover",
    function() {
        logoBar.css({
            cursor: "pointer"
        })
    })
},
setPageIndexTextField = function() {
    setCurrentIndexTextField(BookInfo.getBook().getCurrentPageIndex(), bookType == BookType.normal_book || bookType == BookType.phone_slide_book || bookType == BookType.slide_book || bookType == BookType.catalog_book);
    void 0 != $("#currentPageIndexTextField") && null != $("#currentPageIndexTextField") && void 0 != $("#currentPageIndexTextField")[0] && null != $("#currentPageIndexTextField")[0] && ($("#currentPageIndexTextField").bind("keydown",
    function(b) {
        13 == b.keyCode && (b = $("#currentPageIndexTextField").val(), b = parseInt(getRealPage(b)), isNaN(b) || (b = Math.min(Math.max(b, 1), totalPageCount), gotoPageFun(b)))
    }), $("#currentPageIndexTextField").bind("blur",
    function() {}), $("#currentPageIndexTextField").bind(_event._end,
    function(b) {
        $("#currentPageIndexTextField").val("")
    }))
},
languageChange = Class({
    create: function(b) {
        var c = this;
        this.background = $("<div class='printBar'></div>");
        this.contentBox = $("<div class='printBG'></div>");
        var d = 0;
        this.showing = !1;
        $(this.background).css({
            width: windowWidth + "px",
            height: windowHeight + "px"
        });
        $(this.contentBox).css({
            width: "200px"
        });
        $(this.contentBox).css({
            background: "transparent"
        });
        b.append(this.background);
        b.append(this.contentBox);
        d = 45 * language.length + 10;
        this.contentBox.css({
            height: d + "px"
        });
        $(this.contentBox).css({
            left: (windowWidth - 200) / 2 + "px",
            top: (windowHeight - d) / 2 + "px"
        });
        b = [];
        b = [];
        for (d = 0; d < language.length; d++) {
            var f = $("<div></div>"),
            g = language[d].language;
            $(f).css({
                width: "80px",
                height: "35px",
                position: "absolute"
            });
            $(f).css({
                left: "60px",
                top: 45 * d + 10 + "px"
            });
            $(f).html(g);
            f.attr("language", g);
            b.push(f);
            $(c.contentBox).append($(b[d]));
            $(b[d]).css({
                "font-size": "20px",
                "text-align": "center",
                "line-height": "35px",
                "vertical-align": "middle",
                color: "#ffffff"
            });
            $(b[d]).css({
                "font-family": "Tahoma",
                "border-radius": "5px",
                position: "absolute"
            });
            $(b[d]).css({
                cursor: "pointer"
            });
            $(b[d]).bind(_event._end,
            function() {
                changeLanguage($(this).attr("language"));
                c.hideBox()
            });
            $(b[d]).bind(_event._enter,
            function() {
                $(this).css({
                    background: "#transparent",
                    border: "2px solid #ff8040"
                })
            });
            $(b[d]).bind(_event._end,
            function() {
                $(this).css({
                    background: "transparent",
                    border: ""
                })
            });
            $(b[d]).bind(_event._leave,
            function() {
                $(this).css({
                    background: "transparent",
                    border: ""
                })
            })
        }
        this.initEvent();
        $(this.background).css({
            display: "none"
        });
        $(this.contentBox).css({
            display: "none"
        })
    },
    onResize: function() {
        var b = 45 * language.length + 10;
        $(this.background).css({
            width: windowWidth + "px",
            height: windowHeight + "px"
        });
        $(this.contentBox).css({
            width: "200px",
            height: b + "px"
        });
        $(this.contentBox).css({
            left: (windowWidth - 200) / 2 + "px",
            top: (windowHeight - b) / 2 + "px"
        })
    },
    hideBox: function() {
        $(this.background).fadeOut(1E3);
        $(this.contentBox).fadeOut(1E3);
        this.showing = !1
    },
    showshow: function() {
        $(this.background).css({
            display: "block"
        });
        $(this.contentBox).fadeIn(1E3);
        this.showing = !0
    },
    getShowStatu: function() {
        return this.showing
    },
    initEvent: function() {
        var b = this;
        $(this.background).bind(_event._end,
        function() {
            b.hideBox();
            b.showing = !1
        })
    }
}),
phoneLanguageChange = Class({
    create: function(b) {
        this.contentBox = b;
        this.width = this.contentBox.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miLanguage").title.height();
        this.mainColor = colorDiv(bookConfig.toolbarColor, 30);
        this.itemArray = [];
        this.isDrag = !1;
        this.scrollBox = $("<div></div>");
        this.contentBox.append(this.scrollBox);
        $(this.contentBox).css({
            background: this.mainColor
        });
        for (b = 0; b < language.length; b++) language[b].language && this.addItem(language[b].language);
        this.initScrollBox();
        this.scrollBox.css("height", this.height + "px");
        this.initEvent()
    },
    initScrollBox: function() {
        this.scrollBox.css({
            "line-height": "50px",
            "verticale-align": "middle",
            "font-size": "20px",
            color: "#ffffff",
            "font-family": "Arial,Tahoma"
        })
    },
    addItem: function(b) {
        var c = $("<div style='position:relative;cursor:pointer;width:100%;height:50px;'></div>"),
        d = $("<img style='position:absolute;display:none;width:25px;height:25px;top:13px;right:15px;'/>");
        d.attr("src", toolBarIconsURL[38]);
        var f = $("<div/>");
        f.css({
            "line-height": "50px",
            "font-size": "13px"
        });
        c.css("border-top", "1px solid " + colorAdd(this.mainColor, 10));
        c.css("border-bottom", "1px solid " + colorDiv(this.mainColor, 10));
        c.append($(f));
        c.append($(d));
        $(f).html("&nbsp;&nbsp;&nbsp;" + b);
        b.toLowerCase() === bookConfig.language.toLowerCase() && (d.show(), this.currentItem = c);
        this.scrollBox.append(c);
        c.bind(_event._end,
        function() {
            b && "" != b && global.phoneLanguageBody && !global.phoneLanguageBody.isDrag && (bookConfig.language = b, selectLanguage(bookConfig.language), toolBar.changeLanguage && toolBar.changeLanguage(), this.currentItem && this.currentItem.find("img").hide(), this.currentItem = c, d.show())
        }.bind(this))
    },
    initEvent: function() {
        this.scrollBox.css({
            "overflow-y": "auto",
            "overflow-x": "hidden",
            "-webkit-overflow-scrolling": "touch"
        })
    },
    onResize: function() {}
}).extend(languageChange),
cursor,
AnnotationPannel = Class({
    create: function(b) {
        var c = this;
        this.width = 65;
        this.itemWidth = 37;
        this.itemHeight = 33;
        this.showButtonHeight = 18;
        this.padding = 8;
        isBelowIE9() ? this.buttonCount = 6 : this.buttonCount = 7;
        this.itemBoxWidth = this.width - 10;
        this.itemBoxHeight = this.buttonCount * (this.itemHeight + this.padding) + 2 * this.padding + this.itemHeight;
        this.height = this.itemBoxHeight + this.showButtonHeight + 10;
        this.background = $("<div></div>");
        this.showHideButton = $("<div></div>");
        this.contentBox = $("<div></div>");
        b.append(this.background);
        this.background.append(this.showHideButton);
        this.background.append(this.contentBox);
        this.background.css({
            width: this.width + "px",
            height: this.height + "px",
            left: "100px",
            top: (windowHeight - this.height) / 2 + "px",
            "z-index": "10",
            position: "absolute"
        });
        this.contentBox.css({
            width: this.itemBoxWidth + "px",
            height: this.itemBoxHeight + "px",
            left: (this.width - this.itemBoxWidth) / 2 + "px",
            top: 6 + this.showButtonHeight + "px",
            position: "absolute",
            background: "#535353",
            "border-top": "1px solid #6a6a6a",
            "border-radius": "0px 0px 2px 2px",
            "-webkit-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-moz-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-o-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)"
        });
        this.showHideButton.css({
            top: "5px",
            left: (this.width - this.itemBoxWidth) / 2 + "px",
            width: this.itemBoxWidth + "px",
            height: this.showButtonHeight + "px",
            position: "absolute",
            "border-radius": "3px 3px 0px 0px",
            "border-bottom": "1px solid #000000",
            background: "#383838",
            "-webkit-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-moz-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-o-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)"
        });
        b = $("<img/>");
        b.attr("src", uiBaseURL + "noteclose.png");
        b.css({
            position: "absolute",
            right: "5px",
            width: 10,
            height: 10,
            top: (this.showButtonHeight - 10) / 2 + "px"
        });
        b.asImageButton();
        b.bind(_event._end,
        function() {
            c.hideBox()
        });
        this.showHideButton.append(b);
        this.buttonType = 0;
        CreateNoteRemark.bind(this)();
        this.addItem(this.contentBox);
        this.addSonItem(this.background);
        this.changeCursor();
        this.initEvent();
        this.background.css("display", "none");
        this.showing = !1
    },
    addItem: function(b) {
        for (var c = this,
        d = this.buttonType = 0; d < this.buttonCount; d++) {
            var f = $("<div></div>"),
            g = $("<img/>");
            $(f).attr("buttonType", d);
            f.css({
                width: c.itemWidth + "px",
                height: c.itemHeight + "px",
                left: (c.itemBoxWidth - c.itemWidth) / 2 + "px",
                top: c.itemWidth / 2 + c.padding + d * (c.itemHeight + this.padding) + "px",
                position: "absolute",
                "border-radius": "2px"
            });
            g.css({
                "margin-left": "5px",
                "margin-top": "3px",
                position: "absolute"
            });
            b.append(f);
            f.append(g);
            f.bind(_event._over,
            function() {
                $(this).removeClass();
                $(this).attr("class", "item-enter")
            });
            f.bind(_event._end,
            function() {
                $(this).removeClass();
                $(this).attr("class", "item-enter")
            });
            f.bind(_event._leave,
            function() {
                c.buttonType != $(this).attr("buttonType") && ($(this).removeClass(), $(this).attr("class", "item-transparent"))
            });
            switch (d) {
            case 0:
                g.attr("src", uiBaseURL + "cursor.png");
                g.attr("title", getLanguage("tltCursor", "cursor"));
                c.cursorButton = f;
                $(f).bind(_event._down,
                function() {
                    c.resetButton()
                });
                break;
            case 1:
                g.attr("src", uiBaseURL + "highligh.png");
                g.attr("title", getLanguage("tltAddHighlight", "add highlight"));
                $(f).bind(_event._down,
                function() {
                    global.annotationImage.offCreateEvents();
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.hide();
                    textRemark.unbindCreateEvents();
                    textRemark.addHighlightEvent();
                    noteCookie.hide();
                    cursor = !1;
                    1 != c.buttonType && c.changeCursor();
                    c.buttonType = 1;
                    c.selectButton = c.highLightButton;
                    c.shapesPanelHide()
                });
                c.highLightButton = f;
                break;
            case 2:
                g.attr("src", uiBaseURL + "remark.png");
                g.attr("title", getLanguage("tltAddTexts", "add texts"));
                $(f).bind(_event._down,
                function() {
                    global.annotationImage.offCreateEvents();
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.hide();
                    textRemark.unbindCreateEvents();
                    textRemark.addEvents();
                    noteCookie.hide();
                    cursor = !1;
                    2 != c.buttonType && c.changeCursor();
                    c.buttonType = 2;
                    c.selectButton = c.textRemarkButton;
                    c.shapesPanelHide()
                });
                c.textRemarkButton = f;
                break;
            case 3:
                g.attr("src", uiBaseURL + "shape.png");
                g.attr("title", getLanguage("tltAddShapes", "add shapes"));
                $(f).bind(_event._down,
                function() {
                    global.annotationImage.offCreateEvents();
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.hide();
                    textRemark.unbindCreateEvents();
                    noteCookie.hide();
                    cursor = !1;
                    3 != c.buttonType && c.changeCursor();
                    c.buttonType = 3;
                    c.selectButton = c.shapeButton
                });
                $(f).bind(_event._over,
                function() {});
                $(f).bind(_event._leave,
                function() {
                    3 != c.buttonType && c.shapesPanelHide()
                });
                $(f).bind(_event._end,
                function() {
                    c.shapesPanelShowOrHide()
                });
                c.shapeButton = f;
                break;
            case 4:
                g.attr("src", uiBaseURL + "notesadd.png");
                g.attr("title", getLanguage("tltAddNotes", "add notes"));
                $(f).bind(_event._down,
                function() {
                    global.annotationImage.offCreateEvents();
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.hide();
                    textRemark.unbindCreateEvents();
                    noteCookie.showHide();
                    cursor = !1;
                    4 != c.buttonType && c.changeCursor();
                    c.buttonType = 4;
                    c.selectButton = c.noteCookieButton;
                    c.shapesPanelHide()
                });
                c.noteCookieButton = f;
                break;
            case 5:
                g.attr("src", uiBaseURL + "addImage.png");
                g.attr("title", getLanguage("tltAddImageFile", "add image file"));
                $(f).bind(_event._down,
                function() {
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.hide();
                    textRemark.unbindCreateEvents();
                    global.annotationImage.addCreateEvents();
                    noteCookie.hide();
                    cursor = !1;
                    5 != c.buttonType && c.changeCursor();
                    c.buttonType = 5;
                    c.selectButton = c.annotationImageButton;
                    c.shapesPanelHide()
                });
                c.annotationImageButton = f;
                break;
            case 6:
                g.attr("src", uiBaseURL + "signature.png"),
                g.attr("title", getLanguage("tltAddSignature", "add signature")),
                $(f).bind(_event._down,
                function() {
                    global.annotationImage.offCreateEvents();
                    annotationShapes.delEvents();
                    isBelowIE9() || signature.showHide();
                    textRemark.unbindCreateEvents();
                    noteCookie.hide();
                    cursor = !1;
                    6 != c.buttonType && c.changeCursor();
                    c.buttonType = 6;
                    c.selectButton = c.signatureButton;
                    c.shapesPanelHide()
                }),
                c.signatureButton = f
            }
        }
    },
    addSonItem: function(b) {
        var c = parseInt(this.contentBox.css("left")) + parseInt(this.contentBox.css("width")),
        d = parseInt(this.shapeButton.css("top")) + parseInt(this.contentBox.css("top")) - this.padding / 2,
        f = (parseInt(this.contentBox.css("width")) - this.itemWidth) / 2 + 8;
        this.shapesPannel = $("<div></div>");
        this.shapesContentBox = $("<div></div>");
        this.shapesPannel.css({
            width: f + 180 + 8,
            height: 49,
            position: "absolute",
            left: c - f + "px",
            top: d + "px"
        });
        this.shapesContentBox.css({
            width: 188,
            height: 49,
            position: "absolute",
            left: f + "px",
            background: "#535353",
            "border-radius": "0px 2px 2px 0px",
            "-webkit-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-moz-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "-o-box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)",
            "box-shadow": "0 0 5px rgba(54, 54, 54, 0.95)"
        });
        b.append(this.shapesPannel);
        this.shapesPannel.append(this.shapesContentBox);
        this.shapesPanelHide();
        var g = this;
        this.shapesPannel.bind(_event._end + " " + _event._enter,
        function() {
            g.shapesPanelShow()
        });
        for (b = 0; 4 > b; b++) {
            var f = $("<div></div>"),
            h = $("<img/>"),
            d = 8,
            c = 8 + 45 * b;
            f.css({
                width: "37px",
                height: "33px",
                left: c + "px",
                top: d + "px",
                position: "absolute",
                "border-radius": "2px"
            });
            h.css({
                "margin-left": "5px",
                "margin-top": "3px",
                position: "absolute"
            });
            this.shapesContentBox.append(f);
            f.append(h);
            switch (b) {
            case 0:
                h.attr("src", uiBaseURL + "shapes_line.png");
                h.attr("title", getLanguage("tltAddLine", "add line"));
                $(f).bind(_event._down,
                function() {
                    g.clickShape();
                    annotationShapes.addEvents("line");
                    g.shapesPanelHide()
                });
                break;
            case 1:
                h.attr("src", uiBaseURL + "shapes_arrow.png");
                h.attr("title", getLanguage("tltAddArrow", "add arrow"));
                $(f).bind(_event._down,
                function() {
                    g.clickShape();
                    annotationShapes.addEvents("arrow");
                    g.shapesPanelHide()
                });
                break;
            case 2:
                h.attr("src", uiBaseURL + "shapes_rect.png");
                h.attr("title", getLanguage("tltAddRect", "add rect"));
                $(f).bind(_event._down,
                function() {
                    g.clickShape();
                    annotationShapes.addEvents("rect");
                    g.shapesPanelHide()
                });
                break;
            case 3:
                h.attr("src", uiBaseURL + "shapes_ellipse.png"),
                h.attr("title", getLanguage("tltAddEllipse", "add ellipse")),
                $(f).bind(_event._down,
                function() {
                    g.clickShape();
                    annotationShapes.addEvents("ellipse");
                    g.shapesPanelHide()
                })
            }
            f.bind(_event._over,
            function() {
                $(this).removeClass();
                $(this).attr("class", "item-enter")
            });
            f.bind(_event._end,
            function() {
                $(this).removeClass();
                $(this).attr("class", "item-transparent")
            });
            f.bind(_event._leave,
            function() {
                $(this).removeClass();
                $(this).attr("class", "item-transparent")
            })
        }
    },
    shapesPanelShow: function() {
        this.shapesPannelShowHide = !0;
        this.shapesPannel.show()
    },
    shapesPanelHide: function() {
        this.shapesPannelShowHide = !1;
        this.shapesPannel.hide()
    },
    shapesPanelShowOrHide: function() {
        this.shapesPannelShowHide ? this.shapesPanelHide() : this.shapesPanelShow()
    },
    clickShape: function() {},
    resetButton: function() {
        cursor = !0;
        0 != this.buttonType && this.changeCursor();
        this.buttonType = 0;
        this.selectButton = this.cursorButton;
        this.shapesPanelHide();
        void 0 != textRemark && textRemark.unbindCreateEvents();
        void 0 != noteCookie && noteCookie.hide();
        void 0 != annotationShapes && annotationShapes.delEvents();
        void 0 == signature || isBelowIE9() || signature.hide();
        void 0 != global.annotationImage && global.annotationImage.offCreateEvents()
    },
    changeCursor: function() {
        void 0 == this.selectButton && (this.selectButton = this.cursorButton);
        cursor ? ($(this.selectButton).removeClass(), $(this.selectButton).attr("class", "item-transparent"), $(this.cursorButton).removeClass(), $(this.cursorButton).attr("class", "item-enter")) : ($(this.selectButton).removeClass(), $(this.selectButton).attr("class", "item-transparent"))
    },
    onResize: function() {
        this.background.css({
            left: "100px",
            top: (windowHeight - this.height) / 2 + "px"
        })
    },
    hideBox: function() {
        $(this.background).fadeOut(500);
        this.showing = !1;
        this.resetButton()
    },
    showshow: function() {
        $(this.background).fadeIn(500);
        this.showing = !0
    },
    getShowStatu: function() {
        return this.showing
    },
    initEvent: function() {
        $(this.background).dragToMove(this.background)
    }
}),
phoneSetting = Class({
    create: function(b) {
        this.width = b.width();
        this.height = foldingMenu.height - foldingMenu.getItemById("miSetting").title.height();
        this.mainColor = colorDiv(bookConfig.toolbarColor, 30);
        this.isDrag = !1;
        this.itemArray = [];
        this.contentBox = $("<div></div>");
        b.append(this.contentBox);
        this.initContent()
    },
    initContent: function() {
        this.contentBox.css({
            width: this.width - 40,
            height: this.height,
            left: 20,
            "vertical-align": "middle",
            color: "#ffffff",
            "font-family": "Arial,Tahoma",
            position: "absolute"
        });
        this.scrollBox = $("<div style='position:absolute;width:100%;'></div>");
        this.contentBox.append(this.scrollBox);
        this.addItem()
    },
    addItem: function() {
        for (var b = 0; 2 > b; b++) {
            var c = $("<div style='position:relative;width:100%;height:60px;'></div>"),
            d = $("<div style='position:absolute;width:100%;height:35px;'></div>");
            d.css({
                "border-radius": "5px",
                position: "absolute",
                bottom: "0px",
                "line-height": "35px",
                "font-size": "15px",
                background: colorDiv(bookConfig.toolbarColor, 20)
            });
            c.append(d);
            this.itemArray.push({
                element: c,
                title: d
            })
        }
        this.scrollBox.append(this.itemArray[0].element);
        for (b = 0; 3 > b; b++) if (2 == b) c = this.itemArray[1].element,
        c.css("border-top", "1px solid " + colorAdd(this.mainColor, 10));
        else {
            var c = $("<div style='position:relative;width:100%;height:50px;'></div>"),
            f = $("<img style='position:absolute;cursor:pointer;width:25px;height:25px;top:13px;right:15px;'/>");
            f.attr("src", toolBarIconsURL[38]);
            d = $("<div/>");
            d.css({
                "line-height": "50px",
                "font-size": "13px"
            });
            0 != b && 3 != b && c.css("border-top", "1px solid " + colorAdd(this.mainColor, 10));
            5 != b && (c.css("border-bottom", "1px solid " + colorDiv(this.mainColor, 10)), c.append($(d)), c.append($(f)), c.css({
                cursor: "pointer"
            }));
            this.scrollBox.append(c);
            this.itemArray.push({
                element: c,
                title: d,
                icon: f
            })
        }
        this.initDifferItem();
        this.initItemEvent()
    },
    initDifferItem: function() {
        this.itemArray[0].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("soundSettingTitle", "Sound Setting"));
        this.itemArray[1].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("pageSettingTitle", "Page Setting"));
        this.itemArray[2].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("closeFlipSound", "Close Flip Sound"));
        this.itemArray[3].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("closeBackgroundSound", "Close Background Sound"));
        bookConfig.FlipSound || this.itemArray[2].element.hide();
        bookConfig.BackgroundSoundButtonVisible || this.itemArray[3].element.hide();
        bookConfig.FlipSound || bookConfig.BackgroundSoundButtonVisible || this.itemArray[0].element.hide();
        this.itemArray[3].element.attr("id", "btnSound");
        isFlipBook()
    },
    initItemEvent: function() {
        this.itemArray[2].element.bind(_event._end,
        function() {
            bookConfig.FlipSound = !bookConfig.FlipSound;
            bookConfig.FlipSound ? this.itemArray[2].icon.attr("src", toolBarIconsURL[38]) : this.itemArray[2].icon.attr("src", toolBarIconsURL[39])
        }.bind(this));
        this.itemArray[3].element.bind(_event._end,
        function() { ! 0 === isPlaying ? this.itemArray[3].icon.attr("src", toolBarIconsURL[39]) : this.itemArray[3].icon.attr("src", toolBarIconsURL[38])
        }.bind(this))
    },
    changeLanguage: function() {
        this.itemArray[0].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("soundSettingTitle", "Sound Setting"));
        this.itemArray[1].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("pageSettingTitle", "Page Setting"));
        this.itemArray[2].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("closeFlipSound", "Close Flip Sound"));
        this.itemArray[3].title.html("&nbsp;&nbsp;&nbsp;" + getLanguage("closeBackgroundSound", "Close Background Sound"))
    }
}),
phoneGotoPage = Class({
    create: function(b) {
        this.mainColor = "#000000";
        this.menu = $("<div id='menu' style='position:absolute;width:100%;height:75px;z-index:98;bottom:-80px;'></div>");
        this.background = $("<div id='background' style='position:absolute;width:100%;height:75px;'></div>");
        this.contentBox = $("<div id='contentBox' class='phoneGotoPageContent' style='position:absolute;width:100%;height:75px;'></div>");
        this.background.css({
            background: this.mainColor,
            opacity: 0.8
        });
        b.append(this.menu);
        this.menu.append(this.background);
        this.menu.append(this.contentBox);
        this.initContentBox();
        this.initEvent();
        this.visible = !1
    },
    initContentBox: function() {
        this.contentBox.css({
            "text-align": "center",
            display: "inline-block"
        });
        this.firstButton = $("<div class='btn' style='margin-left:0px;'></div>");
        this.prevButton = $("<div class='btn'></div>");
        this.nextButton = $("<div class='btn'></div>");
        this.lastButton = $("<div class='btn'></div>");
        this.goButton = $("<div class='goBtn'></div>");
        this.firstButton.addCssSprite(phoneIconsURL[0], "firstBtn", 25, 25, phoneIconInfo);
        this.prevButton.addCssSprite(phoneIconsURL[0], "prevBtn", 25, 25, phoneIconInfo);
        this.nextButton.addCssSprite(phoneIconsURL[0], "nextBtn", 25, 25, phoneIconInfo);
        this.lastButton.addCssSprite(phoneIconsURL[0], "lastBtn", 25, 25, phoneIconInfo);
        this.goButton.addCssSprite(phoneIconsURL[0], "goBtn", 20, 20, phoneIconInfo);
        this.inputButton = $("<div class='inputButton' style='width:100px;'><input id='currentPageIndexTextField' type='text'/></div>");
        this.contentBox.append(this.firstButton);
        this.contentBox.append(this.prevButton);
        this.contentBox.append(this.inputButton);
        this.contentBox.append(this.nextButton);
        this.contentBox.append(this.lastButton);
        this.inputButton.append(this.goButton);
        $("#currentPageIndexTextField").css({
            padding: "0px",
            "text-align": "center",
            "border-width": "0px",
            background: "#ffffff",
            width: "70px",
            "padding-right": "30px",
            height: "35px",
            "border-radius": "0px",
            position: "absolute",
            left: 0,
            top: 0
        })
    },
    show: function() {
        this.menu.animate({
            bottom: 40
        },
        300);
        this.visible = !0
    },
    hide: function() {
        this.menu.animate({
            bottom: -80
        },
        300);
        this.visible = !1
    },
    showOrHide: function() { ! 0 === this.visible ? this.hide() : this.show()
    },
    initEvent: function() {
        this.firstButton.bind(_event._end,
        function() {
            rightToLeft ? lastPageFun() : firstPageFun();
            return ! 1
        });
        this.prevButton.bind(_event._end,
        function() {
            rightToLeft ? nextPageFun() : previousPageFun();
            return ! 1
        });
        this.nextButton.bind(_event._end,
        function() {
            rightToLeft ? previousPageFun() : nextPageFun();
            return ! 1
        });
        this.lastButton.bind(_event._end,
        function() {
            rightToLeft ? firstPageFun() : lastPageFun();
            return ! 1
        });
        this.goButton.bind(_event._end,
        function() {
            var b = parseInt($("#currentPageIndexTextField").val().replace(/\D/g, "")),
            b = Math.min(Math.max(b, 1), totalPageCount);
            gotoPageFun(b);
            return ! 1
        }.bind(this))
    }
}),
homeButtonEvent = function() {
    if ("%first page%" == bookConfig.HomeURL.toLowerCase()) firstPageFun();
    else if (void 0 != bookConfig.HomeURL && "" != bookConfig.HomeURL) {
        var b = bookConfig.HomeURL;
        "http" != b.substr(0, 4) && (b = "http://" + b);
        window.open(b, bookConfig.OpenWindow)
    }
};
thumbnailBar = Class({
    create: function(b) {
        this.show = !1;
        this.totalPageCount = bookConfig.totalPageCount;
        this.itemWidth = 90;
        this.marginLeft = 20;
        this.marginTop = 10;
        this.itemBorderWidth = 3;
        this.toolBarHeight = 80;
        this.itemBorderColor = "#f76c6c";
        this.itemArray = [];
        this.taskList = new TaskList;
        this.itemHeightArray = this.getHeightArray();
        this.background = $("<div id='phoneThum' style='opacity:0;display:none;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;text-align:center;position:absolute;z-index:98;background:rgba(51,51,51,0.8);width:100%;top:40px;left:0px;'></div>");
        this.itemBox = $("<div style='text-align:left;display:inline-block;padding:0px 0px " + this.marginLeft + "px 0px;'></div>");
        b.append(this.background);
        this.background.append(this.itemBox);
        this.initEvent();
        this.addItem();
        this.setHighLight(1)
    },
    onResize: function() {
        this.countHorizatal = parseInt((windowWidth - this.marginLeft) / (this.itemWidth + this.marginLeft));
        this.countVertical = parseInt((windowHeight - this.toolBarHeight - this.marginTop) / (this.itemHeightArray.itemHeight + this.marginTop)) + 1;
        this.itemBox.css({
            width: this.countHorizatal * (this.itemWidth + this.marginLeft) + this.marginLeft
        });
        this.background.css({
            height: windowHeight - this.toolBarHeight
        });
        this.taskList.setLargeLength(this.countHorizatal * this.countVertical)
    },
    fillContent: function() {
        this.interval && !this.interval.isRunning() ? this.interval.start() : this.interval = function() {
            this.LoadCount = 0;
            for (var b = -this.itemBox.offset().top + 40, b = parseInt(b / (this.itemHeightArray.itemHeight + this.marginTop)), c = this.countHorizatal * b, b = c + this.countHorizatal * this.countVertical, b = Math.min(b, this.totalPageCount), c = Math.max(0, c); c < b && !(1 <= this.LoadCount); c++) this.taskList.unShiftList({
                index: c
            },
            function(b) {
                this.fillImage(b.index)
            }.bind(this))
        }.interval(this, 60)
    },
    hideBox: function() {
        this.show && this.background.animate({
            opacity: "0"
        },
        300, "linear",
        function() {
            this.background.hide();
            this.show = !1;
            this.interval && this.interval.stop()
        }.bind(this))
    },
    getShowStatu: function() {
        return this.show
    },
    showshow: function() {
        this.show || (this.background.show(), this.fillContent(), this.background.animate({
            opacity: "1"
        },
        300, "linear",
        function() {
            this.show = !0
        }.bind(this)))
    },
    setHighLight: function(b) {
        this.itemArray && this.itemArray[b - 1] && this.itemArray[b - 1].imgContainer && this.itemArray[b - 1].imgContainer.css({
            "border-color": this.itemBorderColor
        })
    },
    clearHighLight: function() {
        if (this.itemArray) for (var b = this.itemArray.length,
        c = 0; c < b; c++) this.itemArray[c].imgContainer && this.itemArray[c].imgContainer.css({
            "border-color": "transparent"
        })
    },
    fissionAll: function() {},
    mergeAll: function() {},
    showOrHide: function() {
        this.show ? this.hideBox() : this.showshow()
    },
    addItem: function() {
        for (var b = 0; b < this.totalPageCount; b++) {
            var c = this.initItem(b);
            this.itemBox.append(c.item);
            this.itemArray.push(c)
        }
    },
    getHeight: function() {
        return 0
    },
    getHeightArray: function() {
        var b = (this.itemWidth - 2 * this.itemBorderWidth) * bookConfig.largePageHeight / bookConfig.largePageWidth;
        return {
            imageHeight: b,
            titleHeight: 15,
            itemHeight: b + 15 + 4 * this.itemBorderWidth
        }
    },
    initItem: function(b) {
        var c = $("<div style='display:inline-block;'></div>"),
        d = $("<p><span>" + (b + 1) + "</span></p>"),
        f = $("<div></div>"),
        g = $("<img/>");
        c.css({
            cursor: "pointer",
            width: this.itemWidth,
            height: this.itemHeightArray.itemHeight,
            padding: this.marginTop + "px 0px 0px " + this.marginLeft + "px",
            "text-align": "center"
        });
        f.css({
            width: this.itemWidth - 2 * this.itemBorderWidth,
            height: this.itemHeightArray.imageHeight,
            "border-style": "solid",
            "border-width": this.itemBorderWidth + "px",
            "border-radius": this.itemBorderWidth + "px",
            "border-color": "transparent"
        });
        g.css({
            width: "100%",
            height: "100%",
            "background-color": "#ffffff",
            "background-image": "url(" + uiBaseURL + "loading.gif)",
            "background-repeat": "no-repeat",
            "background-position": "center"
        });
        d.css({
            width: this.itemWidth - 2 * this.itemBorderWidth,
            height: this.itemHeightArray.titleHeight + "px",
            "line-height": this.itemHeightArray.titleHeight + "px",
            "vertical-align": "middle",
            color: "#eeeeee",
            "font-family": "Arial",
            "font-size": this.itemHeightArray.titleHeight + "px",
            padding: "0px",
            margin: "0px",
            "border-style": "solid",
            "border-width": this.itemBorderWidth + "px",
            "border-color": "transparent"
        });
        c.append(f);
        c.append(d);
        f.append(g);
        c.attr("id", b);
        c.bind(_event._end,
        function(b) {
            b.stopPropagation()
        }.bind(this));
        c.bind("click",
        function(c) {
            gotoPageFun(b + 1);
            this.hideBox();
            c.stopPropagation()
        }.bind(this));
        return {
            item: c,
            imgContainer: f,
            img: g,
            title: d,
            fill: !1
        }
    },
    fillImageOrNot: function(b, c) {
        return ! b || "string" != typeof b || passwardType() && bookConfig.excludeFrontPages && c > parseInt(bookConfig.excludeFrontPages) && !verifyPassward() ? !1 : !0
    },
    fillImage: function(b) {
        if (this.itemArray && this.itemArray[b] && !this.itemArray[b].fill && this.itemArray[b].img) {
            var c = getPageDir(b + 1, "thumb", originTotalPageCount);
            c && "string" == typeof c && this.fillImageOrNot(c, b + 1) && ( - 1 < c.indexOf(".js") ? (this.LoadCount++, global[decodeDatabasePrefix("thum") + (b + 1)] && "string" == typeof global[decodeDatabasePrefix("thum") + (b + 1)] ? (this.itemArray[b].img.attr("src", dataBase64Str(b + 1, "thum")), this.itemArray[b].fill = !0) : loadJavascript(c,
            function(c) {
                this.itemArray[b].img.attr("src", dataBase64Str(b + 1, "thum", c));
                this.itemArray[b].fill = !0
            }.bind(this),
            function() {})) : (this.LoadCount++, this.itemArray[b].img.attr("src", c), this.itemArray[b].fill = !0))
        }
    },
    initEvent: function() {
        this.background.bind(_event._end,
        function() {
            this.hideBox()
        }.bind(this))
    }
});
loadToolBar = Class({
    create: function(b, c) {
        this.visible = !1;
        this.icons = c;
        this.topBG = $("<div class='pbTopBar' id='pbTopBar' style='font-family:Arial,sans-serif;'></div>");
        this.bottomBG = $("<div class='pbToolBar' id='pbToolBar' style='font-family:Arial,sans-serif;'></div>");
        this.btnThumb = $("<div title='Thumbnails'  id='btnThumb' class='phoneMoreButton'></div>");
        this.btnMore = $("<div title='More'  id='btnMore' class='phoneMoreButton' ></div>");
        this.mainColor = bookConfig.toolbarColor;
        this.logo = $("<img src='" + bookConfig.appLogoIcon + "' style='cursor:pointer;position:absolute;'/>");
        b.append(this.topBG);
        b.append(this.bottomBG);
        bookConfig.appLogoIcon && this.topBG.append(this.logo);
        this.topBG.append(this.btnThumb);
        this.topBG.append(this.btnMore);
        this.initToolBar();
        bookConfig.AutoPlayButtonVisible || this.btnAutoPlay.hide();
        global.phoneGotoPagePanel = new phoneGotoPage(tmpContainer);
        this.initEvent();
        this.visible = !1;
        this.initFoldingMenu();
        this.initThumbnail();
        this.enterToShow()
    },
    initToolBar: function() {
        this.btnMore.addCssSprite(phoneIconsURL[0], "more", 25, 25, phoneIconInfo);
        this.btnThumb.addCssSprite(phoneIconsURL[0], "thumb", 25, 25, phoneIconInfo);
        this.btnMore.attr("title", getLanguage("btnMoreOptionsLeft", "More"));
        this.btnThumb.attr("title", getLanguage("btnThumb", "Thumb"));
        this.btnFirst = $("<div title='First Page' id='btnFirst' class='phonebutton' ></div>");
        this.btnLast = $("<div title='Last Page' id='btnLast' class='phonebutton' ></div>");
        this.btnGotoPage = $("<div title='Go To Page' id='btnGotoPage' class='phonebutton' ></div>");
        this.btnZoom = $("<div title='Zoom'  id='btnZoom'  class='phonebutton'></div>");
        this.btnAutoPlay = $("<div title='Auto play' id='btnAutoPlay' class='phonebutton'></div>");
        this.btnSearch = $("<div title='search' id='btnSearch' class='phonebutton'></div>");
        this.btnTableOfContent = $("<div title='Table Of Content' id='btnTableOfContent' class='phonebutton'></div>");
        this.btnShoppingCart = $("<div title='shopping cart' id='btnShoppingCart' class='phonebutton'></div>");
        this.btnBookMark = $("<div title='bookMark' id='btnBookMark' class='phonebutton'></div>");
        this.btnFirst.addCssSprite(phoneIconsURL[0], "firstBtn", 25, 25, phoneIconInfo);
        this.btnLast.addCssSprite(phoneIconsURL[0], "lastBtn", 25, 25, phoneIconInfo);
        this.btnGotoPage.addCssSprite(phoneIconsURL[0], "gotoPage", 25, 25, phoneIconInfo);
        this.btnZoom.addCssSprite(phoneIconsURL[0], "zoomIn", 25, 25, phoneIconInfo);
        getAliasValue("autoPlayAutoStart", !1) ? (this.btnAutoPlay.addCssSprite(phoneIconsURL[0], "stopAutoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip"))) : (this.btnAutoPlay.addCssSprite(phoneIconsURL[0], "autoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip")));
        this.btnSearch.addCssSprite(phoneIconsURL[0], "search", 25, 25, phoneIconInfo);
        this.btnTableOfContent.addCssSprite(phoneIconsURL[0], "tableofcontent", 25, 25, phoneIconInfo);
        this.btnShoppingCart.addCssSprite(phoneIconsURL[0], "shoppingCart", 25, 25, phoneIconInfo);
        this.btnBookMark.addCssSprite(phoneIconsURL[0], "addBookmark", 25, 25, phoneIconInfo);
        this.btnFirst.attr("title", getLanguage("btnFirst", "first"));
        this.btnLast.attr("title", getLanguage("btnLast", "last"));
        this.btnGotoPage.attr("title", getLanguage("btnGotoPage", "Go To Page"));
        this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"));
        this.btnSearch.attr("title", getLanguage("btnSearch", "search"));
        this.btnTableOfContent.attr("title", getLanguage("btnTableOfContent", "Table Of Content"));
        this.btnBookMark.attr("title", getLanguage("btnBookMark", "bookmark"));
        this.btnShoppingCart.attr("title", getLanguage("btnShoppingCart", "shopping cart"));
        this.btnShoppingCart.append(shoppingCountHTML);
        $(this.bottomBG).css({
            "-webkit-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-moz-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-o-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)"
        });
        $(this.topBG).css({
            "-webkit-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-moz-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-o-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)"
        });
        this.barWidth = windowWidth;
        this.barHeight = 40;
        this.bottomBG.css({
            width: this.barWidth + "px",
            height: this.barHeight + "px",
            bottom: "-60px"
        });
        this.topBG.css({
            width: this.barWidth + "px",
            height: this.barHeight + "px",
            color: "#ffffff",
            "line-height": this.barHeight + "px",
            top: "-60px"
        });
        var b = colorDiv(this.mainColor, 30),
        c = colorAdd(this.mainColor, 30);
        this.topBG.css("background", this.mainColor);
        this.bottomBG.css("background", this.mainColor);
        this.topBG.css("border-bottom", "1px solid " + b);
        this.bottomBG.css("border-top", "1px solid " + c);
        var d = getLogoLink();
        $(this.logo).click(function() {
            $.browser.mozilla ? window.location = d[0] : window.open(d[0], d[1])
        });
        this.initBottomBarArray()
    },
    initBottomBarArray: function() {
        this.bottomBarArray = [];
        global.pageEditor && global.pageEditor.setting && parseBool(global.pageEditor.setting.shoppingCartHTML) && this.bottomBarArray.push(this.btnShoppingCart);
        bookConfig.BookMarkButtonVisible && this.bottomBarArray.push(this.btnBookMark);
        this.bottomBarArray.push(this.btnGotoPage);
        bookConfig.AutoPlayButtonVisible && this.bottomBarArray.push(this.btnAutoPlay);
        bookConfig.SearchButtonVisible && 4 > this.bottomBarArray.length && this.bottomBarArray.unshift(this.btnSearch);
        bookConfig.TableOfContentButtonVisible && 4 > this.bottomBarArray.length && this.bottomBarArray.unshift(this.btnTableOfContent);
        3 > this.bottomBarArray.length && (this.bottomBarArray.unshift(this.btnFirst), this.bottomBarArray.push(this.btnLast));
        for (var b = 0; b < this.bottomBarArray.length; b++) this.bottomBG.append(this.bottomBarArray[b])
    },
    initFoldingMenu: function() {
        bookConfig.BookMarkButtonVisible || bookConfig.SearchButtonVisible || bookConfig.TableOfContentButtonVisible || bookConfig.ShareButtonVisible || bookConfig.DownloadButtonVisible || bookConfig.PrintButtonVisible || bookConfig.HomeButtonVisible || bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound || language && !(1 >= language.length) || this.btnMore.hide();
        var b = function() {
            "" != bookConfig.DownloadURL && window.open(bookConfig.DownloadURL, "_blank")
        },
        c = function() {
            homeButtonEvent()
        };
        global.foldingMenu = new FoldingMenu($("#tmpContainer"));
        bookConfig.HomeButtonVisible && foldingMenu.addMenuItem("miHome", getLanguage("btnHome", "Home"), "miHome", !0, c);
        bookConfig.SearchButtonVisible && foldingMenu.addMenuItem("miSearch", getLanguage("btnSearch", "Search"), "miSearch");
        bookConfig.TableOfContentButtonVisible && foldingMenu.addMenuItem("miTableOfContent", getLanguage("btnTableOfContent", "Table of Content"), "tableofcontent");
        bookConfig.BookMarkButtonVisible && foldingMenu.addMenuItem("miBookmark", getLanguage("btnBookMark", "Bookmark"), "miBookmark");
        bookConfig.ShareButtonVisible && foldingMenu.addMenuItem("miShare", getLanguage("btnSocialShare", "Share"), "miShare");
        bookConfig.DownloadButtonVisible && foldingMenu.addMenuItem("miDownload", getLanguage("btnDownload", "Download"), "download", !0, b);
        bookConfig.PrintButtonVisible && foldingMenu.addMenuItem("miPrint", getLanguage("btnPrint", "Print"), "print");
        language && 1 < language.length && foldingMenu.addMenuItem("miLanguage", getLanguage("btnLanguage", "Language change"), "languageChange"); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && foldingMenu.addMenuItem("miSetting", getLanguage("btnSettings", "Settings"), "setting");
        bookConfig.SearchButtonVisible && (global.phoneSearch = new phoneSearchForm({
            caption: getLanguage("frmSearch", "Search"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.searchBackground,
            fontColor: bookConfig.searchFontColor
        },
        foldingMenu.getItemBody("miSearch")));
        bookConfig.TableOfContentButtonVisible && (global.phoneTableOfContent = new phoneTableContent({
            caption: getLanguage("frmTableOfContent", "Table of Content"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.bookmarkBackground,
            fontColor: bookConfig.bookmarkFontColor
        },
        foldingMenu.getItemBody("miTableOfContent")));
        bookConfig.ShareButtonVisible && (global.phoneShare = new phoneSharePanel(foldingMenu.getItemBody("miShare")));
        bookConfig.BookMarkButtonVisible && (global.phoneBookmark = new PhoneBookMark(foldingMenu.getItemBody("miBookmark")));
        bookConfig.PrintButtonVisible && (global.phonePrintBody = new phonePrintBar(foldingMenu.getItemBody("miPrint")));
        language && 1 < language.length && (global.phoneLanguageBody = new phoneLanguageChange(foldingMenu.getItemBody("miLanguage")));
        if (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) global.phoneSettingBody = new phoneSetting(foldingMenu.getItemBody("miSetting"))
    },
    setButtonPosition: function() {
        this.bottomBG.css({
            width: windowWidth + "px"
        });
        this.topBG.css({
            width: windowWidth + "px"
        });
        this.barWidth = Math.min(windowWidth, 340);
        this.buttonWidth = 40;
        this.buttonTop = (this.barHeight - this.buttonWidth) / 2;
        this.barLeft = (windowWidth - this.barWidth) / 2 + 7;
        autoCenter(this.bottomBarArray, this.barWidth - 15, this.buttonWidth, this.barLeft);
        this.btnMore.css({
            left: "0px",
            top: this.buttonTop + "px"
        });
        this.btnThumb.css({
            right: "0px",
            top: this.buttonTop + "px"
        });
        this.logo.css({
            "margin-left": "65px"
        });
        this.logo.css({
            top: (toolBar.getLogoHeight() - bookConfig.logoHeight) / 2 + "px"
        });
        this.logo.css({
            "max-width": windowWidth - 130 + "px",
            "max-height": "40px"
        });
        this.logo.css({
            height: bookConfig.logoHeight + "px"
        });
        $(".phonebutton").css({
            top: this.buttonTop + "px"
        })
    },
    initEvent: function() {
        var b = this;
        this.btnShoppingCart.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            window.shoppingCart && window.shoppingCart.showCart()
        }.bind(this));
        this.btnSearch.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miSearch"));
            return ! 1
        }.bind(this));
        this.btnTableOfContent.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miTableOfContent"));
            return ! 1
        }.bind(this));
        this.btnMore.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);

            global.foldingMenu && foldingMenu.showOrHide(foldingMenu.width);
            return ! 1
        }.bind(this));
        this.btnThumb.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            thumbnail.showOrHide();
            return ! 1
        }.bind(this));
        this.btnLast.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            rightToLeft ? firstPageFun() : lastPageFun();
            return ! 1
        }.bind(this));
        this.btnFirst.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            rightToLeft ? lastPageFun() : firstPageFun();
            return ! 1
        }.bind(this));
        this.btnZoom.bind(_event._end,
        function() {
            isZoomStatus() ? this.changeZoomIcon(!0) : this.changeZoomIcon(!1);
            onDoubleTap.bind(BookInfo.getBook().bookMap.book.showPage)({
                pointers: [{
                    pageX: windowWidth / 2,
                    pageY: windowHeight / 2
                }]
            });
            this.enterOption && window.clearTimeout(this.enterOption);
            auto_player.isPlaying() && (auto_player.stop(), this.changeAutoPlayIcon())
        }.bind(this));
        this.btnAutoPlay.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            auto_player.isPlaying() ? auto_player.stop() : auto_player.start();
            b.changeAutoPlayIcon();
            return ! 1
        }.bind(this));
        this.btnGotoPage.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.phoneGotoPagePanel.showOrHide()
        }.bind(this));
        this.btnBookMark.bind(_event._end,
        function() {
            var b = {
                page: BookInfo.getCurrentPages()[0],
                color: "#bababa",
                text: "",
                isCookie: 1,
                key: (new Date).getTime()
            };
            global.phoneBookmark && global.phoneBookmark.addBookmark(b);
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miBookmark"));
            return ! 1
        }.bind(this))
    },
    changeButtonColor: function(b) {},
    changeZoomIcon: function(b) {},
    changeFullscreenIcon: function(b) {},
    changeAutoPlayIcon: function(b) {
        void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? (this.btnAutoPlay.children().cssSprite(phoneIconsURL[0], "stopAutoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip"))) : (this.btnAutoPlay.children().cssSprite(phoneIconsURL[0], "autoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip"))))
    },
    changeBookmarkIcon: function(b) {
        b ? this.btnBookMark.children().cssSprite(phoneIconsURL[0], "addBookmark", 25, 25, phoneIconInfo) : this.btnBookMark.children().cssSprite(phoneIconsURL[0], "bookmark", 25, 25, phoneIconInfo);
        this.btnBookMark.attr("title", getLanguage("btnBookMark", "Bookmark"))
    },
    changeSoundIcon: function(b) {},
    show: function() {
        this.visible || (this.visible = !0, this.bottomBG.animate({
            bottom: 0
        },
        300), this.topBG.animate({
            top: 0
        },
        300), bookType == BookType.singlePhone_slide_book && singlePhoneSlideBook.setShow(!1), bookType == BookType.phone_slide_book && phoneSlideBook.setShow(!1))
    },
    initThumbnail: function() {
        if (bookConfig.ThumbnailsButtonVisible) {
            var b = thumbnailBar;
            isCatalogBook() && "lite" == bookConfig.ToolbarViewMode.toLowerCase() && (b = CatalogThumbnailBar);
            isSlideBook() && "lite" == bookConfig.ToolbarViewMode.toLowerCase() && (b = SlideThumbnailBar);
            thumbnail = new b(tmpContainer)
        } else this.btnThumb.hide();
        this.timmingArray = [this.topBG, this.bottomBG, global.phoneGotoPagePanel, global.foldingMenu]
    },
    getHeight: function() {
        return this.getTopHeight() + this.getBottomHeight()
    },
    getTopHeight: function() {
        return miniStyle.isMini() ? 0 : !0 == this.visible ? 40 : 0
    },
    getBottomHeight: function() {
        return miniStyle.isMini() ? 0 : !0 == this.visible ? 40 : 0
    },
    getLogoHeight: function() {
        return this.topBG.height()
    },
    hide: function() {
        this.visible && (this.enterOption && window.clearTimeout(this.enterOption), this.visible = !1, this.bottomBG.animate({
            bottom: -60
        },
        300), this.topBG.animate({
            top: -60
        },
        300), global.phoneGotoPagePanel.hide(), bookType == BookType.singlePhone_slide_book && singlePhoneSlideBook.setShow(!0), bookType == BookType.phone_slide_book && phoneSlideBook.setShow(!0))
    },
    enterToShow: function() {},
    showOrHide: function() { ! 0 === this.visible ? this.hide() : this.show()
    },
    changeZoomIcon: function(b) {
        b ? (this.btnZoom.children().cssSprite(phoneIconsURL[0], "zoomIn", 25, 25, phoneIconInfo), this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"))) : (this.btnZoom.children().cssSprite(phoneIconsURL[0], "zoomOut", 25, 25, phoneIconInfo), this.btnZoom.attr("title", getLanguage("btnZoomOut", "zoom out")))
    },
    changeSoundIcon: function(b) {},
    lastPage: function() {
        rightToLeft ? firstPageFun() : lastPageFun()
    },
    nextPage: function() {
        rightToLeft ? previousPageFun() : nextPageFun()
    },
    prePage: function() {
        rightToLeft ? nextPageFun() : previousPageFun()
    },
    firstPage: function() {
        rightToLeft ? lastPageFun() : firstPageFun()
    },
    changeLanguage: function() {
        this.btnBookMark && this.btnBookMark.attr("title", getLanguage("btnBookMark", "bookmark"));
        this.btnShoppingCart && this.btnShoppingCart.attr("title", getLanguage("btnShoppingCart", "Shopping Cart"));
        this.btnGotoPage && this.btnGotoPage.attr("title", getLanguage("btnGotoPage", "Go To Page"));
        this.btnSearch && this.btnSearch.attr("title", getLanguage("btnSearch", "search"));
        this.btnTableOfContent && this.btnTableOfContent.attr("title", getLanguage("btnTableOfContent", "Table of content"));
        rightToLeft ? (this.btnFirst && this.btnFirst.attr("title", getLanguage("btnLast", "Last")), this.btnLast && this.btnLast.attr("title", getLanguage("btnFirst", "First"))) : (this.btnFirst && this.btnFirst.attr("title", getLanguage("btnFirst", "First")), this.btnLast && this.btnLast.attr("title", getLanguage("btnLast", "Last")));
        isZoomStatus() ? this.btnZoom && this.btnZoom.attr("title", getLanguage("btnZoomOut", "zoom out")) : this.btnZoom && this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"));
        void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip")) : this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip")));
        bookConfig.HomeButtonVisible && foldingMenu.getItemById("miHome").setCaption(getLanguage("btnHome", "Home"));
        bookConfig.SearchButtonVisible && foldingMenu.getItemById("miSearch").setCaption(getLanguage("btnSearch", "Search"));
        bookConfig.TableOfContentButtonVisible && foldingMenu.getItemById("miTableOfContent").setCaption(getLanguage("btnTableOfContent", "Table of Content"));
        bookConfig.BookMarkButtonVisible && foldingMenu.getItemById("miBookmark").setCaption(getLanguage("btnBookMark", "Bookmark"));
        bookConfig.ShareButtonVisible && foldingMenu.getItemById("miShare").setCaption(getLanguage("btnSocialShare", "Share"));
        bookConfig.DownloadButtonVisible && foldingMenu.getItemById("miDownload").setCaption(getLanguage("btnDownload", "Download"));
        bookConfig.PrintButtonVisible && foldingMenu.getItemById("miPrint").setCaption(getLanguage("btnPrint", "Print"));
        language && 1 < language.length && foldingMenu.getItemById("miLanguage").setCaption(getLanguage("btnLanguage", "Language change")); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && foldingMenu.getItemById("miSetting").setCaption(getLanguage("btnSettings", "Settings"));
        bookConfig.PrintButtonVisible && global.phonePrintBody.changeLanguage(); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && global.phoneSettingBody.changeLanguage()
    }
});
function initMoreButton(b, c, d, f) {
    this.name = c;
    this.moreButtonString = "<div class='moreButton' id='" + c + "'></div>";
    this.moreButton = $(this.moreButtonString);
    this.moreImg = $("<div><img src='" + d + "' class='moreImg'/></div>");
    this.moreLable = new label(f, this.moreButton);
    this.moreLable.setLabelPosition(35, 7);
    b.append(this.moreButton);
    $(this.moreButton).append(this.moreImg);
    $(this.moreButton).append(this.moreLable);
    $(this.moreLable).css({
        "vertical-align": "middle"
    });
    $(this.moreButton).css({
        "text-shadow": "1px 1px " + colorDiv(bookConfig.toolbarColor, 40)
    });
    $(this.moreButton).css({
        color: "#ffffff"
    });
    $(this.moreButton).mouseEnterGradient(bookConfig.toolbarColor, colorDiv(bookConfig.toolbarColor, 30), colorAdd(bookConfig.toolbarColor, 105));
    $(this.moreButton).css({
        cursor: "pointer"
    });
    return this
}
initMoreButton.prototype.setPosition = function(b, c) {
    $(this.moreButton).css({
        left: c + "px"
    });
    $(this.moreButton).css({
        top: b + "px"
    })
};
initMoreButton.prototype.changeIcon = function(b) {
    this.moreImg.empty().append("<img src='" + b + "' class='moreImg'/>")
};
initMoreButton.prototype.src = function() {
    return this.moreImg.attr("src")
};
initMoreButton.prototype.bind = function(b, c) {
    $(this.moreButton).bind(b, c)
};
initMoreButton.prototype.hide = function() {
    $(this.moreButton).css({
        display: "none"
    })
};
initMoreButton.prototype.show = function() {
    $(this.moreButton).css({
        display: "block"
    })
};
initMoreButton.prototype.changeButtonColor = function(b) {
    $(this.moreImg).changeButtonColor(b)
};
initMoreButton.prototype.setCaption = function(b) {
    this.moreLable.setCaption(b)
};
var isMoreShow = !1,
moreConfig = {
    autoPlayButtonVisible: !1,
    zoomButtonEnable: !1,
    thumbButtonEnable: !1,
    shareButtonEnable: !1,
    searchButtonEnable: !1,
    bookmarkButtonEnable: !1,
    tableofcontentButtonEnable: !1,
    downloadButtonVisible: !1,
    homeButtonVisible: !1,
    printButtonVisible: !1,
    bgSoundButtonVisible: !1,
    helpButtonVisible: !1,
    aboutButtonVisible: !1,
    languageButtonVisible: !1,
    flipButtonVisible: !1,
    fullscreenButtonVisible: !1,
    AnnotationButtonVisible: !1,
    VideoButtonVisible: !1,
    SlideshowButtonVisible: !1
};
function initMoreBar() {
    var b = this;
    this.moreBar = $("<div style='display:none;opacity:0;'>");
    this.moreBar.css("z-index", 2002);
    this.moreBar.css("bottom", "38px");
    this.moreBar.css("right", "300px");
    this.moreBar.css({
        width: "160px",
        position: "absolute",
        background: bookConfig.toolbarColor,
        "overflow-y": "auto"
    });
    this.moreBar.addBorderShadow(bookConfig.toolbarColor, 3, 3);
    this.btnLast = new initMoreButton(this.moreBar, "moreBtnLast", toolBarIconsURL[1], getLanguage("btnLastPage", "Last"));
    this.btnNext = new initMoreButton(this.moreBar, "moreBtnNext", toolBarIconsURL[2], getLanguage("btnNextPage", "Next"));
    this.btnPrevious = new initMoreButton(this.moreBar, "moreBtnPrevious", toolBarIconsURL[3], getLanguage("btnPrePage", "Previous"));
    this.btnFirst = new initMoreButton(this.moreBar, "moreBtnFirst", toolBarIconsURL[4], getLanguage("btnFirstPage", "First"));
    this.btnZoom = new initMoreButton(this.moreBar, "moreBtnZoom", toolBarIconsURL[5], getLanguage("btnZoomIn", "Zoom In"));
    this.btnAutoPlay = new initMoreButton(this.moreBar, "moreBtnAutoPlay", toolBarIconsURL[7], getLanguage("btnAutoFlip", "Auto Flip"));
    this.btnThumb = new initMoreButton(this.moreBar, "moreBtnThumb", toolBarIconsURL[9], getLanguage("btnThumb", "Thumbnails"));
    this.btnShare = new initMoreButton(this.moreBar, "moreBtnShare", toolBarIconsURL[10], getLanguage("btnSocialShare", "Share"));
    this.btnSearch = new initMoreButton(this.moreBar, "moreBtnSearch", toolBarIconsURL[11], getLanguage("btnSearch", "Search"));
    this.btnBookMark = new initMoreButton(this.moreBar, "moreBtnBookMark", toolBarIconsURL[14], getLanguage("btnBookMark", "Book Mark"));
    this.btnTableOfContent = new initMoreButton(this.moreBar, "moreBtnTableOfContent", toolBarIconsURL[32], getLanguage("btnTableOfContent", "table of content"));
    this.btnDownload = new initMoreButton(this.moreBar, "moreBtnDownload", toolBarIconsURL[12], getLanguage("btnDownload", "Download"));
    this.btnHome = new initMoreButton(this.moreBar, "moreBtnHome", toolBarIconsURL[13], getLanguage("btnGoToHome", "Home"));
    this.btnPrint = new initMoreButton(this.moreBar, "moreBtnPrint", toolBarIconsURL[21], getLanguage("btnPrint", "Print"));
    this.btnSound = new initMoreButton(this.moreBar, "moreBtnSound", toolBarIconsURL[15], getLanguage("btnSoundOn", "soundOn"));
    this.btnHelp = new initMoreButton(this.moreBar, "moreBtnHelp", toolBarIconsURL[22], getLanguage("btnHelp", "Help"));
    this.btnAbout = new initMoreButton(this.moreBar, "moreBtnAbout", toolBarIconsURL[23], getLanguage("btnAbout", "About"));
    this.btnLanguage = new initMoreButton(this.moreBar, "moreBtnLanguage", toolBarIconsURL[25], getLanguage("btnLanguage", "LanguageChange"));
    this.btnFullscreen = new initMoreButton(this.moreBar, "moreBtnFullscreen", toolBarIconsURL[27], getLanguage("btnFullscreen", "fullscreen"));
    this.btnNote = new initMoreButton(this.moreBar, "moreBtnNote", toolBarIconsURL[31], getLanguage("btnNote", "add note"));
    this.btnVideo = new initMoreButton(this.moreBar, "moreBtnVideo", toolBarIconsURL[33], getLanguage("btnVideo", "videoGallery"));
    this.btnSlideShow = new initMoreButton(this.moreBar, "moreBtnSlideShow", toolBarIconsURL[34], getLanguage("btnSlideShow", "photoGallery"));
    $.fn.extend(this, {
        showMoreBar: function() {
            b.moreBar.css("display", "block");
            b.moreBar.animate({
                opacity: 1
            },
            200, "linear")
        },
        hideMoreBar: function() {
            b.moreBar.animate({
                opacity: 0
            },
            200, "linear",
            function() {
                b.moreBar.css("display", "none")
            })
        },
        setMorePosition: function(c, d, f) {
            void 0 == f && (f = ["right", "bottom"]);
            b.moreBar.css(f[0], c + "px");
            b.moreBar.css(f[1], d + "px")
        }
    });
    tmpContainer.append(this.moreBar);
    moreConfig.autoPlayButtonVisible && bookConfig.AutoPlayButtonVisible || this.btnAutoPlay.hide();
    moreConfig.zoomButtonEnable && bookConfig.ZoomButtonVisible && isFlipModel || this.btnZoom.hide();
    moreConfig.thumbButtonEnable && bookConfig.ThumbnailsButtonVisible || this.btnThumb.hide();
    moreConfig.shareButtonEnable && bookConfig.ShareButtonVisible || this.btnShare.hide();
    moreConfig.searchButtonEnable && bookConfig.SearchButtonVisible || this.btnSearch.hide();
    moreConfig.bookmarkButtonEnable && bookConfig.BookMarkButtonVisible || this.btnBookMark.hide();
    moreConfig.tableofcontentButtonEnable && bookConfig.TableOfContentButtonVisible || this.btnTableOfContent.hide();
    moreConfig.downloadButtonVisible && bookConfig.DownloadButtonVisible || this.btnDownload.hide();
    moreConfig.homeButtonVisible && bookConfig.HomeButtonVisible || this.btnHome.hide();
    moreConfig.printButtonVisible && bookConfig.PrintButtonVisible || this.btnPrint.hide();
    moreConfig.bgSoundButtonVisible && bookConfig.BackgroundSoundButtonVisible || this.btnSound.hide();
    moreConfig.helpButtonVisible && bookConfig.HelpButtonVisible || this.btnHelp.hide();
    moreConfig.aboutButtonVisible && bookConfig.aboutButtonVisible || this.btnAbout.hide(); (!moreConfig.languageButtonVisible || 1 >= language.length) && this.btnLanguage.hide();
    moreConfig.fullscreenButtonVisible && bookConfig.FullscreenButtonVisible || this.btnFullscreen.hide();
    moreConfig.AnnotationButtonVisible && bookConfig.AnnotationButtonVisible || this.btnNote.hide();
    moreConfig.VideoButtonVisible && bookConfig.VideoButtonVisible || this.btnVideo.hide();
    moreConfig.SlideshowButtonVisible && bookConfig.SlideshowButtonVisible || this.btnSlideShow.hide();
    moreConfig.flipButtonVisible || (this.btnLast.hide(), this.btnNext.hide(), this.btnPrevious.hide(), this.btnFirst.hide());
    this.initEvent()
}
initMoreBar.prototype.onResize = function(b, c) {
    isMoreShow = !1;
    var d = 0;
    shareButtonTop = function(b) {
        return 8 + 35 * b
    };
    moreConfig.flipButtonVisible ? (this.btnLast.setPosition(shareButtonTop(d), 10), d++, this.btnNext.setPosition(shareButtonTop(d), 10), d++, this.btnPrevious.setPosition(shareButtonTop(d), 10), d++, this.btnFirst.setPosition(shareButtonTop(d), 10), d++, this.btnFirst.show(), this.btnPrevious.show(), this.btnNext.show(), this.btnLast.show()) : (this.btnFirst.hide(), this.btnPrevious.hide(), this.btnNext.hide(), this.btnLast.hide());
    moreConfig.autoPlayButtonVisible && bookConfig.AutoPlayButtonVisible ? (this.btnAutoPlay.setPosition(shareButtonTop(d), 10), this.btnAutoPlay.show(), d++) : this.btnAutoPlay.hide();
    moreConfig.AnnotationButtonVisible && bookConfig.AnnotationButtonVisible ? (this.btnNote.setPosition(shareButtonTop(d), 10), this.btnNote.show(), d++) : this.btnNote.hide();
    moreConfig.VideoButtonVisible && bookConfig.VideoButtonVisible ? (this.btnVideo.setPosition(shareButtonTop(d), 10), this.btnVideo.show(), d++) : this.btnVideo.hide();
    moreConfig.SlideshowButtonVisible && bookConfig.SlideshowButtonVisible ? (this.btnSlideShow.setPosition(shareButtonTop(d), 10), this.btnSlideShow.show(), d++) : this.btnSlideShow.hide();
    moreConfig.zoomButtonEnable && bookConfig.ZoomButtonVisible && isFlipModel ? (this.btnZoom.setPosition(shareButtonTop(d), 10), this.btnZoom.show(), d++) : this.btnZoom.hide();
    moreConfig.thumbButtonEnable && bookConfig.ThumbnailsButtonVisible ? (this.btnThumb.setPosition(shareButtonTop(d), 10), this.btnThumb.show(), d++) : this.btnThumb.hide();
    moreConfig.shareButtonEnable && bookConfig.ShareButtonVisible ? (this.btnShare.setPosition(shareButtonTop(d), 10), this.btnShare.show(), d++) : this.btnShare.hide();
    moreConfig.searchButtonEnable && bookConfig.SearchButtonVisible ? (this.btnSearch.setPosition(shareButtonTop(d), 10), this.btnSearch.show(), d++) : this.btnSearch.hide();
    moreConfig.bookmarkButtonEnable && bookConfig.BookMarkButtonVisible ? (this.btnBookMark.setPosition(shareButtonTop(d), 10), this.btnBookMark.show(), d++) : this.btnBookMark.hide();
    moreConfig.tableofcontentButtonEnable && bookConfig.TableOfContentButtonVisible ? (this.btnTableOfContent.setPosition(shareButtonTop(d), 10), this.btnTableOfContent.show(), d++) : this.btnTableOfContent.hide();
    moreConfig.downloadButtonVisible && bookConfig.DownloadButtonVisible ? (this.btnDownload.setPosition(shareButtonTop(d), 10), this.btnDownload.show(), d++) : this.btnDownload.hide();
    moreConfig.homeButtonVisible && bookConfig.HomeButtonVisible ? (this.btnHome.setPosition(shareButtonTop(d), 10), this.btnHome.show(), d++) : this.btnHome.hide();
    moreConfig.printButtonVisible && bookConfig.PrintButtonVisible ? (this.btnPrint.setPosition(shareButtonTop(d), 10), this.btnPrint.show(), d++) : this.btnPrint.hide();
    moreConfig.bgSoundButtonVisible && bookConfig.BackgroundSoundButtonVisible ? (this.btnSound.setPosition(shareButtonTop(d), 10), this.btnSound.show(), d++) : this.btnSound.hide();
    moreConfig.helpButtonVisible && bookConfig.HelpButtonVisible ? (this.btnHelp.setPosition(shareButtonTop(d), 10), this.btnHelp.show(), d++) : this.btnHelp.hide();
    moreConfig.aboutButtonVisible && bookConfig.aboutButtonVisible ? (this.btnAbout.setPosition(shareButtonTop(d), 10), this.btnAbout.show(), d++) : this.btnAbout.hide();
    moreConfig.languageButtonVisible && 1 < language.length ? (this.btnLanguage.setPosition(shareButtonTop(d), 10), this.btnLanguage.show(), d++) : this.btnLanguage.hide();
    moreConfig.fullscreenButtonVisible && bookConfig.FullscreenButtonVisible ? (this.btnFullscreen.setPosition(shareButtonTop(d), 10), this.btnFullscreen.show(), d++) : this.btnFullscreen.hide();
    0 == d ? (b.css({
        display: "none"
    }), null != c && c.css({
        display: "none"
    }), this.hideMoreBar()) : (b.css({
        display: "block"
    }), null != c && c.css({
        display: "block"
    }), d = Math.min(shareButtonTop(d), 250), this.moreBar.css({
        height: d + "px"
    })); (function() {
        this.changeButtonColor(bookConfig.iconColor)
    }).delay(this, 50)
};
initMoreBar.prototype.changeZoomIcon = function(b) {
    b ? (this.btnZoom.changeIcon(toolBarIconsURL[5]), this.btnZoom.setCaption(getLanguage("btnZoomIn", "Zoom In"))) : (this.btnZoom.changeIcon(toolBarIconsURL[6]), this.btnZoom.setCaption(getLanguage("btnZoomOut", "Zoom Out")));
    this.btnZoom.changeButtonColor(bookConfig.iconColor)
};
initMoreBar.prototype.changeFullscreenIcon = function(b) {
    b ? (this.btnFullscreen.changeIcon(toolBarIconsURL[28]), this.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Exit fullscreen"))) : (this.btnFullscreen.changeIcon(toolBarIconsURL[27]), this.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Enter fullscreen")));
    this.btnFullscreen.changeButtonColor(bookConfig.iconColor)
};
initMoreBar.prototype.changeAutoPlayIcon = function(b) {
    void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? (this.btnAutoPlay.changeIcon(toolBarIconsURL[7]), this.btnAutoPlay.setCaption(getLanguage("btnAutoFlip", "Auto Flip"))) : (this.btnAutoPlay.changeIcon(toolBarIconsURL[8]), this.btnAutoPlay.setCaption(getLanguage("btnStopAutoFlip", "Stop Auto Flip"))), this.btnAutoPlay.changeButtonColor(bookConfig.iconColor))
};
initMoreBar.prototype.changeSoundIcon = function(b) {
    void 0 != isPlaying && (isPlaying ? (this.btnSound.changeIcon(toolBarIconsURL[16]), this.btnSound.setCaption(getLanguage("btnSoundOff", "soundOff"))) : (this.btnSound.changeIcon(toolBarIconsURL[15]), this.btnSound.setCaption(getLanguage("btnSoundOn", "soundOn"))), this.btnSound.changeButtonColor(bookConfig.iconColor))
};
initMoreBar.prototype.height = function() {
    return this.moreBar.height()
};
initMoreBar.prototype.initEvent = function() {
    var b = this;
    this.btnLast.bind(_event._end,
    function() {
        b.lastPage();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnNext.bind(_event._end,
    function() {
        b.nextPage();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnPrevious.bind(_event._end,
    function() {
        b.prePage();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnFirst.bind(_event._end,
    function() {
        b.firstPage();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnZoom.bind(_event._end,
    function() {
        isZoomStatus() ? (b.btnZoom.changeIcon(toolBarIconsURL[5]), b.btnZoom.setCaption(getLanguage("btnZoomIn", "Zoom In"))) : (b.btnZoom.changeIcon(toolBarIconsURL[6]), b.btnZoom.setCaption(getLanguage("btnZoomOut", "Zoom Out")));
        onDoubleTap.bind(BookInfo.getBook().bookMap.book.showPage)({
            pointers: [{
                pageX: windowWidth / 2,
                pageY: windowHeight / 2
            }]
        });
        this.enterOption && window.clearTimeout(this.enterOption);
        auto_player.isPlaying() && (auto_player.stop(), this.changeAutoPlayIcon());
        isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
    }.bind(this));
    this.btnAutoPlay.bind(_event._end,
    function() {
        auto_player.isPlaying() ? (auto_player.stop(), b.btnAutoPlay.changeIcon(toolBarIconsURL[7]), b.btnAutoPlay.setCaption(getLanguage("btnAutoFlip", "Auto Flip"))) : (auto_player.start(), b.btnAutoPlay.changeIcon(toolBarIconsURL[8]), b.btnAutoPlay.setCaption(getLanguage("btnStopAutoFlip", "Stop Auto Flip")));
        b.btnAutoPlay.changeButtonColor(bookConfig.iconColor);
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnThumb.bind(_event._end,
    function() {
        thumbnail.getShowStatu() ? thumbnail.hideBox() : thumbnail.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnShare.bind(_event._end,
    function() {
        sharePanel.getShowStatu() ? sharePanel.hideBox() : sharePanel.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnShare.bind(_event._down,
    function() {
        return ! 1
    });
    this.btnPrint.bind(_event._end,
    function() {
        printBody.getShowStatu() ? printBody.hideBox() : printBody.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnSearch.bind(_event._end,
    function() {
        frmSearch.isSearchShow ? frmSearch.closeForm() : frmSearch.showForm();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnTableOfContent.bind(_event._end,
    function() {
        frmBookmark.getShowStatu() ? frmBookmark.closeForm() : frmBookmark.showForm();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnBookMark.bind(_event._end,
    function() {
        bookmark.showHide();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnDownload.bind(_event._end,
    function() {
        "" != bookConfig.DownloadURL && (window.location = bookConfig.DownloadURL);
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnSound.bind(_event._end,
    function() {
        isPlaying ? (b.btnSound.changeIcon(toolBarIconsURL[16]), b.btnSound.setCaption(getLanguage("btnSoundOff", "soundOff"))) : (b.btnSound.changeIcon(toolBarIconsURL[15]), b.btnSound.setCaption(getLanguage("btnSoundOn", "soundOn")));
        b.btnSound.changeButtonColor(bookConfig.iconColor);
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnHome.bind(_event._end,
    function() {
        homeButtonEvent();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnHelp.bind(_event._end,
    function() {
        helpBody.getShowStatu() ? helpBody.hideBox() : helpBody.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnAbout.bind(_event._end,
    function() {
        aboutBody.getShowStatu() ? aboutBody.hideBox() : aboutBody.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnLanguage.bind(_event._end,
    function() {
        languagePanel.getShowStatu() ? languagePanel.hideBox() : languagePanel.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnNote.bind(_event._end,
    function() {
        annotationPannel.getShowStatu() ? annotationPannel.hideBox() : annotationPannel.showshow();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnVideo.bind(_event._end,
    function() {
        videoGallery.showHide();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnSlideShow.bind(_event._end,
    function() {
        photoGallery.showHide();
        moreBar.hideMoreBar();
        isMoreShow = !1
    });
    this.btnFullscreen.bind(_event._end,
    function() {
        fullscreenFun();
        return ! 1
    });
    $(document).bind(fullScreenApi.fullScreenEventName,
    function() {
        fullScreenApi.isFullScreen() ? (b.btnFullscreen.changeIcon(toolBarIconsURL[28]), b.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Exit fullscreen"))) : (b.btnFullscreen.changeIcon(toolBarIconsURL[27]), b.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Enter fullscreen")));
        b.btnFullscreen.changeButtonColor(bookConfig.iconColor)
    })
};
initMoreBar.prototype.changeButtonColor = function(b) {
    moreConfig.fullscreenButtonVisible && bookConfig.FullscreenButtonVisible && fullScreenApi.supportsFullScreen && (fullScreenApi.isFullScreen() ? (this.btnFullscreen.changeIcon(toolBarIconsURL[28]), this.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Exit fullscreen"))) : (this.btnFullscreen.changeIcon(toolBarIconsURL[27]), this.btnFullscreen.setCaption(getLanguage("btnFullscreen", "Enter fullscreen"))));
    moreConfig.zoomButtonEnable && bookConfig.ZoomButtonVisible && isFlipModel && (isZoomStatus() ? (this.btnZoom.changeIcon(toolBarIconsURL[6]), this.btnZoom.setCaption(getLanguage("btnZoomOut", "Zoom Out"))) : (this.btnZoom.changeIcon(toolBarIconsURL[5]), this.btnZoom.setCaption(getLanguage("btnZoomIn", "Zoom In"))));
    moreConfig.autoPlayButtonVisible && bookConfig.AutoPlayButtonVisible && void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? (this.btnAutoPlay.changeIcon(toolBarIconsURL[8]), this.btnAutoPlay.setCaption(getLanguage("btnStopAutoFlip", "Stop Auto Flip"))) : (this.btnAutoPlay.changeIcon(toolBarIconsURL[7]), this.btnAutoPlay.setCaption(getLanguage("btnAutoFlip", "Auto Flip"))));
    moreConfig.bgSoundButtonVisible && bookConfig.BackgroundSoundButtonVisible && void 0 != isPlaying && (isPlaying ? (this.btnSound.changeIcon(toolBarIconsURL[15]), this.btnSound.setCaption(getLanguage("btnSoundOn", "soundOn"))) : (this.btnSound.changeIcon(toolBarIconsURL[16]), this.btnSound.setCaption(getLanguage("btnSoundOff", "soundOff"))));
    moreConfig.homeButtonVisible && bookConfig.HomeButtonVisible && this.btnHome.changeButtonColor(b);
    moreConfig.downloadButtonVisible && bookConfig.DownloadButtonVisible && this.btnDownload.changeButtonColor(b);
    moreConfig.printButtonVisible && bookConfig.PrintButtonVisible && this.btnPrint.changeButtonColor(b);
    moreConfig.thumbButtonEnable && bookConfig.ThumbnailsButtonVisible && this.btnThumb.changeButtonColor(b);
    moreConfig.zoomButtonEnable && bookConfig.ZoomButtonVisible && isFlipModel && this.btnZoom.changeButtonColor(b);
    moreConfig.bookmarkButtonEnable && bookConfig.BookMarkButtonVisible && this.btnBookMark.changeButtonColor(b);
    moreConfig.tableofcontentButtonEnable && bookConfig.TableOfContentButtonVisible && this.btnTableOfContent.changeButtonColor(b);
    moreConfig.shareButtonEnable && bookConfig.ShareButtonVisible && this.btnShare.changeButtonColor(b);
    moreConfig.autoPlayButtonVisible && bookConfig.AutoPlayButtonVisible && this.btnAutoPlay.changeButtonColor(b);
    moreConfig.bgSoundButtonVisible && bookConfig.BackgroundSoundButtonVisible && this.btnSound.changeButtonColor(b);
    moreConfig.helpButtonVisible && bookConfig.HelpButtonVisible && this.btnHelp.changeButtonColor(b);
    moreConfig.aboutButtonVisible && bookConfig.aboutButtonVisible && this.btnAbout.changeButtonColor(b);
    moreConfig.fullscreenButtonVisible && bookConfig.FullscreenButtonVisible && this.btnFullscreen.changeButtonColor(b);
    moreConfig.AnnotationButtonVisible && bookConfig.AnnotationButtonVisible && this.btnNote.changeButtonColor(b);
    moreConfig.SlideshowButtonVisible && bookConfig.SlideshowButtonVisible && this.btnSlideShow.changeButtonColor(b);
    moreConfig.VideoButtonVisible && bookConfig.VideoButtonVisible && this.btnVideo.changeButtonColor(b);
    moreConfig.languageButtonVisible && 1 < language.length && this.btnLanguage.changeButtonColor(b);
    moreConfig.flipButtonVisible && (this.btnLast.changeButtonColor(b), this.btnNext.changeButtonColor(b), this.btnPrevious.changeButtonColor(b), this.btnFirst.changeButtonColor(b));
    moreConfig.searchButtonEnable && bookConfig.SearchButtonVisible && this.btnSearch.changeButtonColor(b)
};
initMoreBar.prototype.nextPage = function() {
    rightToLeft ? previousPageFun() : nextPageFun()
};
initMoreBar.prototype.prePage = function() {
    rightToLeft ? nextPageFun() : previousPageFun()
};
initMoreBar.prototype.firstPage = function() {
    rightToLeft ? lastPageFun() : firstPageFun()
};
initMoreBar.prototype.lastPage = function() {
    rightToLeft ? firstPageFun() : lastPageFun()
};
initMoreBar.prototype.changeLanguage = function() {
    this.btnLast.setCaption(getLanguage("btnLastPage", "Last"));
    this.btnNext.setCaption(getLanguage("btnNextPage", "Next"));
    this.btnPrevious.setCaption(getLanguage("btnPrePage", "Previous"));
    this.btnFirst.setCaption(getLanguage("btnFirstPage", "First"));
    this.btnZoom.setCaption(isZoomStatus() ? getLanguage("btnZoomOut", "Zoom Out") : getLanguage("btnZoomIn", "Zoom In"));
    this.btnAutoPlay.setCaption(auto_player.isPlaying() ? getLanguage("btnStopAutoFlip", "Stop Auto Flip") : getLanguage("btnAutoFlip", "Auto Flip"));
    this.btnThumb.setCaption(getLanguage("btnThumb", "Thumbnails"));
    this.btnShare.setCaption(getLanguage("btnSocialShare", "Share"));
    this.btnSearch.setCaption(getLanguage("btnSearch", "Search"));
    this.btnBookMark.setCaption(getLanguage("btnBookMark", "Book Mark"));
    this.btnDownload.setCaption(getLanguage("btnDownload", "Download"));
    this.btnHome.setCaption(getLanguage("btnGoToHome", "Home"));
    this.btnPrint.setCaption(getLanguage("btnPrint", "Print"));
    this.btnHelp.setCaption(getLanguage("btnHelp", "Help"));
    this.btnAbout.setCaption(getLanguage("btnAbout", "About"));
    this.btnLanguage.setCaption(getLanguage("btnLanguage", "languageChange"));
    this.btnFullscreen.setCaption(getLanguage("btnFullscreen", "fullscreen"));
    this.btnNote.setCaption(getLanguage("btnNote", "annotation"));
    this.btnVideo.setCaption(getLanguage("btnVideo", "videoGallery"));
    this.btnSlideShow.setCaption(getLanguage("btnSlideShow", "photoGallery"));
    this.btnSound.setCaption(isPlaying ? getLanguage("btnSoundOn", "soundOn") : getLanguage("btnSoundOff", "soundOff"));
    this.btnTableOfContent.setCaption(getLanguage("btnTableOfContent", "Show Table of Content"));
    rightToLeft && (this.btnFirst.setCaption(getLanguage("btnLastPage", "Last")), this.btnLast.setCaption(getLanguage("btnFirstPage", "First")), this.btnNext.setCaption(getLanguage("btnPrePage", "Previous")), this.btnPrevious.setCaption(getLanguage("btnNextPage", "Next")))
};
var CatalogThumbnailItem = Class({
    create: function(b, c, d) {
        this.itemContent = b;
        this.dockMenuContent = c;
        this.index = d;
        this.item = $("<div class='thumbnailItem'></div>");
        this.rect = $("<div class='thumbnailRect'></div>");
        this.caption = $("<div class='dockMenuItemCaption'></div>");
        this.captionAfter = $("<div class='dockMenuItemCaptionAfter'></div>");
        this.itemContent.append(this.item);
        this.item.append(this.rect);
        this.item.append(this.caption);
        this.caption.after(this.captionAfter);
        this.initEvent()
    },
    initItem: function(b, c) {
        this.initCaption(b, c);
        this.dockMenu = new DockMenu(this.dockMenuContent, b, c);
        1 < b && (rightToLeft ? this.addNext() : this.addPrev());
        c < bookConfig.totalPageCount && (rightToLeft ? this.addPrev() : this.addNext())
    },
    addPrev: function() {
        var b = $("<div class='dockMenuItem dockMenuItemShadow dockButton'></div>");
        b.append("<div></div>");
        b.append("<img src='" + uiBaseURL + "slide_leftButton.png'/>");
        b.click(function() {
            thumbnail.gotoItemByIndex(this.index - 1);
            return ! 1
        }.bind(this));
        this.dockMenu.addObj(b, "before")
    },
    addNext: function() {
        var b = $("<div class='dockMenuItem dockMenuItemShadow dockButton'></div>");
        b.append("<div></div>");
        b.append("<img src='" + uiBaseURL + "slide_rightButton.png'/>");
        b.click(function() {
            thumbnail.gotoItemByIndex(this.index + 1);
            return ! 1
        }.bind(this));
        this.dockMenu.addObj(b, "after")
    },
    initCaption: function(b, c) {
        this.fromIndex = b;
        this.toIndex = c;
        this.fromIndex = Math.max(this.fromIndex, 1);
        this.toIndex = Math.min(this.toIndex, bookConfig.totalPageCount);
        this.fromIndex != this.toIndex ? this.caption.html(rightToLeft ? this.toIndex + "-" + this.fromIndex: this.fromIndex + "-" + this.toIndex) : this.caption.html(this.fromIndex);
        $(this.caption).css({
            position: "absolute",
            height: "16px",
            top: "-30px",
            "white-space": "nowrap",
            width: "auto",
            left: "50%"
        });
        $(this.caption).css({
            "margin-left": -$(this.caption).outerWidth() / 2
        });
        $(this.captionAfter).css({
            position: "absolute",
            top: "-5px",
            left: "50%",
            "margin-left": "-8px",
            "background-image": "url(" + uiBaseURL + "span.png)"
        })
    },
    initEvent: function() {
        this.choosedColor = "#505a60";
        this.item.bind(_event._enter,
        function() {
            this.rect.css("background", "#ffffff")
        }.bind(this));
        this.item.bind(_event._leave,
        function() {
            this.rect.css("background", this.choosedColor)
        }.bind(this));
        this.item.bind(_event._end,
        function() {
            thumbnail.gotoItemByIndex(this.index)
        }.bind(this));
        this.item.bind(_event._over,
        function() {
            this.caption.css("display", "block");
            this.captionAfter.css("display", "block")
        }.bind(this));
        this.item.bind(_event._leave,
        function() {
            this.caption.hide();
            this.captionAfter.hide()
        }.bind(this))
    },
    show: function() {
        this.rect.css("background", "#ffffff");
        this.choosedColor = "#ffffff";
        this.dockMenu.show()
    },
    hide: function() {
        this.rect.css("background", "#505a60");
        this.choosedColor = "#505a60";
        this.dockMenu.hide()
    },
    clearHighLight: function() {
        this.dockMenu.clearHighLight()
    },
    setHighLight: function(b) {
        this.dockMenu.setHighLight(b)
    },
    onResize: function() {
        this.dockMenu.resize()
    }
});
var CatalogThumbnailBar = Class({
    create: function(b) {
        this.menu = $("<div class='menu'></div>");
        b.append(this.menu);
        this.initMenu()
    },
    initMenu: function() {
        this.visible = !1;
        this.height = 170;
        this.dockMenuContent = $("<div class='dockMenuContent'></div>");
        this.thumbnailItemContent = $("<div class='thumbnailItemContent'></div>");
        this.dockMenuContent.css({
            width: windowWidth - 50 + "px"
        });
        this.menu.append(this.dockMenuContent);
        this.menu.append(this.thumbnailItemContent);
        this.addItem()
    },
    addItem: function() {
        this.itemArray = [];
        for (var b = parseInt((bookConfig.totalPageCount + 1) / 20), b = b + (0 == (bookConfig.totalPageCount + 1) % 20 ? 0 : 1), c = 0; c < b; c++) {
            var d = new CatalogThumbnailItem(this.thumbnailItemContent, this.dockMenuContent, c),
            f = bookConfig.RightToLeft ? b - 1 - c: c,
            g = 20 * f,
            f = 20 * (f + 1) - 1,
            f = f > bookConfig.totalPageCount ? bookConfig.totalPageCount: f;
            d.initItem(g, f);
            0 == c && (this.highLightItem = this.currentItem = d, d.setHighLight(1), d.show());
            this.itemArray.push(d)
        }
    },
    gotoItemByIndex: function(b) {
        this.currentItem && this.currentItem.index !== b && (this.currentItem.hide(), this.itemArray[b].show(), this.currentItem = this.itemArray[b])

    },
    onResize: function() {
        var b = 1,
        c = 10 * (140 * bookConfig.largePageWidth / bookConfig.largePageHeight + 10);
        origin = 0;
        c > windowWidth - 50 && (b = (windowWidth - 50) / c, origin = parseInt(100 * (1 - (windowWidth - 50) / c) / 2));
        this.dockMenuContent.css({
            "-webkit-transform": "scale3d(" + b + "," + b + ",1)",
            "-moz-transform": "scale3d(" + b + "," + b + ",1)",
            "-ms-transform": "scale3d(" + b + "," + b + ",1)",
            "-o-transform": "scale3d(" + b + "," + b + ",1)",
            transform: "scale3d(" + b + "," + b + ",1)",
            "-webkit-transform-origin": "50% 100%",
            "-moz-transform-origin": "50% 100%",
            "-ms-transform-origin": "50% 100%",
            "-o-transform-origin": "50% 100%",
            "transform-origin": "50% 100%"
        });
        this.dockMenuContent.css({
            width: windowWidth - 50 + "px"
        });
        this.thumbnailItemContent.css({
            "-webkit-transform": "scale3d(" + b + "," + b + ",1)",
            "-moz-transform": "scale3d(" + b + "," + b + ",1)",
            "-ms-transform": "scale3d(" + b + "," + b + ",1)",
            "-o-transform": "scale3d(" + b + "," + b + ",1)",
            transform: "scale3d(" + b + "," + b + ",1)",
            "-webkit-transform-origin": "50% 100%",
            "-moz-transform-origin": "50% 100%",
            "-ms-transform-origin": "50% 100%",
            "-o-transform-origin": "50% 100%",
            "transform-origin": "50% 100%"
        });
        for (b = 0; b < this.itemArray.length; b++) this.itemArray[b].onResize()
    },
    showshow: function() {
        this.showing = this.visible = !0;
        this.menu.animate.delay(this.menu, 100, [{
            bottom: -5 + toolBar.getBottomHeight() + "px"
        },
        300])
    },
    hideBox: function() {
        this.menu.animate.delay(this.menu, 100, [{
            bottom: -this.height + "px"
        },
        300]);
        this.showing = this.visible = !1
    },
    getOccuHeight: function() {
        return 110
    },
    transparent: function() {
        this.menu.animate({
            opacity: 0,
            "z-index": -1
        },
        200)
    },
    noTransparent: function() {
        this.menu.animate({
            opacity: 1,
            "z-index": 10
        },
        200)
    },
    mergeAll: function() {},
    fissionAll: function() {},
    getShowStatu: function() {
        return this.visible
    },
    clearHighLight: function() {
        this.highLightItem && this.highLightItem.clearHighLight()
    },
    setHighLight: function(b) {
        for (var c = 0; c < this.itemArray.length; c++) if (b <= this.itemArray[c].toIndex && b >= this.itemArray[c].fromIndex) {
            this.gotoItemByIndex(c);
            this.itemArray[c].setHighLight(b);
            this.highLightItem = this.currentItem;
            break
        }
    },
    fillContent: function() {
        this.setHighLight(this.highLightItem.index)
    },
    showOrHide: function() { ! 1 === this.visible ? this.showshow() : this.hideBox()
    },
    hide: function() {
        this.menu.css("bottom", -this.height + "px");
        this.showing = this.visible = !1
    },
    show: function() {
        this.menu.css("bottom", -5 + toolBar.getBottomHeight() + "px");
        this.showing = this.visible = !0
    },
    setPosition: function() {},
    getHeight: function() {
        return ! 0 == this.visible ? 110 : 0
    }
});
var GuidToolbar = Class({
    create: function(b) {
        this.background = $("<div class='catalogGuidToolbar'></div>");
        this.numBtn = $("<div style='position:absolute;color:#bababa;' id='guidPageIndex'></div>");
        this.thumBtn = $("<div style='position:absolute;'  class='guidbutton'></div>");
        this.moreBtn = $("<div style='position:absolute;'  class='guidbutton'></div>");
        this.fullscreenBtn = $("<div style='position:absolute;'  class='guidbutton'></div>");
        this.searchBtn = $("<div style='position:absolute;' class='guidbutton'></div>");
        this.shareBtn = $("<div style='position:absolute;' class='guidbutton'></div>");
        this.buttonColor = bookConfig.iconColor;
        this.toolBarColor = "#f6f6f6";
        this.iconWidth = 38;
        this.numWidth = 60;
        this.fontSize = 38;
        b.append(this.background);
        this.background.append(this.shareBtn);
        this.background.append(this.searchBtn);
        this.background.append(this.numBtn);
        this.background.append(this.thumBtn);
        this.background.append(this.moreBtn);
        this.background.append(this.fullscreenBtn);
        this.thumBtn.addCssSprite(toolBarIconsURL[42], "thumb", 38, 38, catalogIconInfo);
        this.moreBtn.addCssSprite(toolBarIconsURL[42], "more", 38, 38, catalogIconInfo);
        this.fullscreenBtn.addCssSprite(toolBarIconsURL[42], "fullScreen", 38, 38, catalogIconInfo);
        this.searchBtn.addCssSprite(toolBarIconsURL[42], "search", 38, 38, catalogIconInfo);
        this.shareBtn.addCssSprite(toolBarIconsURL[42], "share", 38, 38, catalogIconInfo);
        this.thumBtn.attr("id", "thumb");
        this.moreBtn.attr("id", "more");
        this.fullscreenBtn.attr("id", "fullScreen");
        this.searchBtn.attr("id", "search");
        this.shareBtn.attr("id", "share");
        this.thumBtn.enterToChange(toolBarIconsURL[42], "thumb", 38, 38, catalogIconInfo);
        this.moreBtn.enterToChange(toolBarIconsURL[42], "more", 38, 38, catalogIconInfo);
        this.fullscreenBtn.enterToChange(toolBarIconsURL[42], "fullScreen", 38, 38, catalogIconInfo);
        this.searchBtn.enterToChange(toolBarIconsURL[42], "search", 38, 38, catalogIconInfo);
        this.shareBtn.enterToChange(toolBarIconsURL[42], "share", 38, 38, catalogIconInfo);
        this.initTitle();
        this.resetItem();
        this.initEvent()
    },
    initTitle: function() {
        this.shareBtn.attr("title", getLanguage("btnSocialShare", "Share"));
        this.searchBtn.attr("title", getLanguage("btnSearch", "Search"));
        this.thumBtn.attr("title", getLanguage("btnThumb", "Thumbnails"));
        this.moreBtn.attr("title", getLanguage("btnMore", "More"));
        this.fullscreenBtn.attr("title", getLanguage("btnFullscreen", "Fullscreen"))
    },
    resetItem: function() {
        var b = 12;
        this.numBtn.css({
            width: this.numWidth + "px",
            height: this.iconWidth + "px",
            "line-height": this.iconWidth + "px",
            verticalAlign: "middle",
            textAlign: "center",
            "font-family": "arial,tahoma,sans-serif",
            left: b + "px"
        });
        b += this.numWidth;
        bookConfig.ShareButtonVisible ? (this.shareBtn.css({
            width: this.iconWidth + "px",
            height: this.iconWidth + "px",
            left: b + "px"
        }), b += this.iconWidth) : this.shareBtn.hide();
        bookConfig.SearchButtonVisible ? (this.searchBtn.css({
            width: this.iconWidth + "px",
            height: this.iconWidth + "px",
            left: b + "px"
        }), b += this.iconWidth) : this.searchBtn.hide();
        bookConfig.ThumbnailsButtonVisible ? (this.thumBtn.css({
            width: this.iconWidth + "px",
            height: this.iconWidth + "px",
            left: b + "px"
        }), b += this.iconWidth) : this.thumBtn.hide();
        this.moreBtn.css({
            width: this.iconWidth + "px",
            height: this.iconWidth + "px",
            left: b + "px"
        });
        b += this.iconWidth;
        bookConfig.FullscreenButtonVisible ? (this.fullscreenBtn.css({
            width: this.iconWidth + "px",
            height: this.iconWidth + "px",
            left: b + "px"
        }), b += this.iconWidth) : this.fullscreenBtn.hide();
        this.background.css({
            width: b + "px",
            height: this.iconWidth + "px",
            background: this.toolBarColor
        });
        this.buttonWidth = b
    },
    initEvent: function() {
        var b = this,
        c = 5,
        d, f = !1;
        if (bookConfig.ThumbnailsButtonVisible) {
            var g = function() {
                catalogBook.autoMove && catalogBook.clearAutoMoveCorner();
                if (! (catalogBook.flipArray.array && 0 < catalogBook.flipArray.array.length) && (catalogBook.resetPageCorner(), nBookStatu == normalBookStatu.book_statu_ready && !1 !== catalogBook.zoomOut && !0 != catalogBook.isFlipping && !0 != catalogBook.isZomming)) {
                    thumbnail.showOrHide();
                    catalogBook.pageWidthHeight = catalogBook.getFitWH();
                    var b = catalogBook.getTranY();
                    if (catalogBook.pageWidthHeight.x !== catalogBook.width || 0 != b) {
                        var c = catalogBook.pageWidthHeight.x / catalogBook.width,
                        d = catalogBook.getTranX(c);
                        catalogBook.zoomToScale(c, d, b);
                        return ! 1
                    }
                }
            };
            this.thumBtn.bind(_event._end, g);
            "lite" == bookConfig.ToolbarViewMode.toLowerCase() && ($("#btnThumb").unbind(), $("#btnThumb").bind(_event._end, g))
        }
        bookConfig.FullscreenButtonVisible && (g = function() {
            fullscreenFun();
            "lite" == bookConfig.ToolbarViewMode.toLowerCase() && toolBar.hide();
            return ! 1
        },
        this.fullscreenBtn.bind(_event._end, g), $("#btnfullscreen").unbind(), $("#btnfullscreen").bind(_event._end, g), $(document).bind(fullScreenApi.fullScreenEventName,
        function() {
            b.changeFullscreenIcon(fullScreenApi.isFullScreen())
        }));
        this.moreBtn.bind(_event._end,
        function() {
            catalogBook.autoMove && catalogBook.clearAutoMoveCorner();
            catalogBook.gotoComplexMode();
            "complex" == catalogBook.mode && (c = 5, k(), h());
            return ! 1
        }.bind(this));
        bookConfig.SearchButtonVisible && this.searchBtn.bind(_event._end,
        function() {
            $("#btnSearch").trigger(_event._end);
            $("#btnSearch").trigger(_event._leave)
        });
        bookConfig.ShareButtonVisible && this.shareBtn.bind(_event._end,
        function() {
            $("#btnShare").trigger(_event._end);
            $("#btnShare").trigger(_event._leave)
        });
        var h = function() {
            if (!0 != f) {
                f = !0;
                for (var b = 0; b < toolBar.timmingArray.length; b++) toolBar.timmingArray[b].bind(_event._over,
                function() {
                    window.clearInterval(d)
                }),
                toolBar.timmingArray[b].bind(_event._leave,
                function() {
                    c = 5;
                    k()
                })
            }
        },
        k = function() {
            d = window.setInterval(function() {
                c--;
                0 >= c && (catalogBook.gotoSimpleMode(), "simple" == catalogBook.mode ? window.clearInterval(d) : c = 5)
            },
            1E3)
        }
    },
    changeFullscreenIcon: function(b) {
        b ? (this.fullscreenBtn.changeCssSprite(toolBarIconsURL[42], "exitFullScreen", 35, 35, catalogIconInfo), this.fullscreenBtn.attr("id", "exitFullScreen")) : (this.fullscreenBtn.changeCssSprite(toolBarIconsURL[42], "fullScreen", 35, 35, catalogIconInfo), this.fullscreenBtn.attr("id", "fullScreen"));
        this.fullscreenBtn.css({
            background: "transparent"
        })
    },
    show: function() {
        this.background.show();
        catalogBook.logo && catalogBook.logo.show()
    },
    hide: function() {
        this.background.hide();
        catalogBook.logo && catalogBook.logo.hide()
    },
    onResize: function() {}
});
var CatalogBook = Class({
    create: function(b, c) {
        this.bookType = BookType.catalog_book;
        this._super(b, c);
        this.bookType = BookType.catalog_book
    },
    createBook: function(b) {
        this.bookType = BookType.catalog_book;
        this._super(b);
        this.guidBar = new GuidToolbar(b);
        this.controlBar = new CatalogControlBar(b);
        this.controlBar.setPosition((windowWidth - this.controlBar.width) / 2, toolBar.getBottomHeight() + 5, ["left", "bottom"]);
        this.controlBar.setVisible(!1);
        this.initLogo();
        this.guidBarHeight = "lite" == bookConfig.ToolbarViewMode.toLowerCase() ? 50 : 0;
        this.flipBook.append(this.leftFlipShotBar.getContainer());
        this.flipBook.append(this.rightFlipShotBar.getContainer())
    },
    newPage: function(b) {
        return new NormalSide(b, "page", BookType.catalog_book)
    },
    initThickness: function() {
        this.thicknessWidth = 18;
        this.leftThickness = new LeftThickness(this.flipBook, this.thicknessWidth);
        this.rightThickness = new RightThickness(this.flipBook, this.thicknessWidth)
    },
    resetSize: function(b, c) {
        this.width = 2 * b;
        this.height = c;
        this.pageWidth = b;
        this.pageHeight = c;
        this.maskWidth = Math.sqrt(b * b + c * c);
        this.flipBook.css({
            width: this.width + "px",
            height: this.height + "px"
        });
        this.endFlip();
        this.resizePage(this.pageWidth, this.pageHeight);
        this.setBookPageByIndex(this.currentPageIndex);
        this.resetBookShadow(this.currentPageIndex);
        this.bmt && this.bmt.resize(c, 60);
        if (this.miniFullScreen) this.miniFullScreen.onResize();
        var d = this.flipBook.css("left"),
        f = this.flipBook.css("top");
        this.adContainer.css({
            left: d,
            top: f,
            width: b + "px",
            height: c + "px"
        });
        this.adInstance && this.adInstance.resize()
    },
    zoomToScale: function(b, c, d, f, g) {
        this.autoMove && this.clearAutoMoveCorner();
        this.resetPageCorner();
        if (! (this.moveing || this.moveFromLeft || this.moveFromRight || this.flipArray.array && 0 < this.flipArray.array.length || c == this.flipBook.parameters.tran.x && d == this.flipBook.parameters.tran.y && b == this.flipBook.parameters.scale || !0 == this.isZomming)) {
            this.isZomming = !0;
            this.hidePage();
            var h = getTransform(this.flipBook[0]),
            k = {
                toScale: 1,
                x: h.x,
                y: h.y
            };
            this.toScale = b;
            var l = 50;
            1 == this.currentPageIndex && (l = 50);
            this.currentPageIndex == totalPageCount && (l = 50);
            c || (c = 0);
            d || (d = 0);
            f || (f = 0);
            var m = function() {
                g && g();
                this.isZomming = !1;
                this.zoomOut ? (this.setPosition(this.getCssLeft() + this.width * (1 - b) * l / 100, this.getCssTop() + this.height * (1 - b) * f / 100 + d), f = d = 0, this.status_zoom = !1, this.flipBook.parameters.zoomFlag = !1) : this.setPosition(this.getCssLeft() + this.width * (1 - b) * l / 100, this.getCssTop());
                this.resetSize(parseInt(this.width * b / 2), parseInt(this.height * b));
                this.setThicknessPosition(b);
                this.zoomObj(this.flipBook, "0% 0%", "scale3d(1,1,1)", c, d);
                this.flipBook.parameters && (this.flipBook.parameters.tran = {
                    x: c,
                    y: d
                },
                this.flipBook.parameters.scale = 1, this.flipBook.parameters.width = $(this.flipBook).width(), this.flipBook.parameters.height = $(this.flipBook).height(), this.flipBook.parameters.left = parseInt($(this.flipBook).css("left")), this.flipBook.parameters.top = parseInt($(this.flipBook).css("top")));
                this.showPage();
                this.zoomOut && this.setThicknessVisible(this.currentPageIndex)
            }.bind(this); (function() {
                isSupportTransition() ? (this.zoomObj(this.flipBook, l + "% " + f + "%", "scale3d(" + b + "," + b + ",1)", c, d), animateOnce(this.flipBook, {},
                0.3, m, "%stransform")) : $(k).animate({
                    toScale: b,
                    x: this.width * (1 - b) * l / 100 + c,
                    y: d
                },
                {
                    duration: 300,
                    easing: "easeOutSine",
                    step: function() {
                        this.zoomObj(this.flipBook, "0% 0%", " scale(" + k.toScale + ")", k.x, k.y)
                    }.bind(this),
                    complete: function() {
                        m()
                    }.bind(this)
                })
            }).delay(this, 50)
        }
    },
    setThicknessPosition: function(b) {
        b || (b = 1);
        this.leftFlipShotBar && this.leftFlipShotBar.setScale(b);
        this.rightFlipShotBar && this.rightFlipShotBar.setScale(b);
        if (this.leftThickness) this.leftThickness.onResize();
        if (this.rightThickness) this.rightThickness.onResize();
        this.leftFlipShotBar && this.leftFlipShotBar.setThicknessPosition(this.width, this.height);
        this.rightFlipShotBar && this.rightFlipShotBar.setThicknessPosition(this.width, this.height)
    },
    beforeZoom: function() {
        this.hidePage();
        this.hideAttachment()
    },
    afterZoom: function() {
        this.showPage();
        this.resizeBookByScale(this.toScale);
        this.showAttachment()
    },
    getFitWH: function() {
        var b = thumbnail && thumbnail.getShowStatu() ? thumbnail.getHeight() : 0,
        c = Math.max(windowWidth - bookConfig.leftMargin - bookConfig.rightMargin, 1),
        d = 0,
        d = toolBar.visible ? Math.max(windowHeight - bookConfig.topMargin - bookConfig.bottomMargin - b - toolBar.getHeight(), 1) : Math.max(windowHeight - bookConfig.topMargin - this.guidBarHeight - bookConfig.bottomMargin - b - toolBar.getHeight(), 1);
        return pageWidthHeight = getPageWidthHeight(c, d, 2 * bookConfig.largePageWidth, bookConfig.largePageHeight)
    },
    getTranX: function(b) {
        if (!bookConfig.retainBookCenter) return 0;
        var c = 0;
        1 == this.currentPageIndex && (c = rightToLeft ? this.width * b / 4 : -this.width * b / 4);
        this.currentPageIndex == totalPageCount && (c = rightToLeft ? -this.width * b / 4 : this.width * b / 4);
        return c
    },
    getTranY: function() {
        if (!this.pageWidthHeight) return 0;
        var b = 0,
        b = thumbnail && thumbnail.getShowStatu() ? thumbnail.getHeight() : 0,
        c = 0;
        toolBar.visible ? (c = Math.max(windowHeight - bookConfig.topMargin - bookConfig.bottomMargin - b - toolBar.getHeight(), 1), b = bookConfig.topMargin + toolBar.getTopHeight() + (c - this.pageWidthHeight.y) / 2 - this.getCssTop()) : (c = Math.max(windowHeight - bookConfig.topMargin - this.guidBarHeight - bookConfig.bottomMargin - b - toolBar.getHeight(), 1), b = bookConfig.topMargin + this.guidBarHeight + (c - this.pageWidthHeight.y) / 2 - this.getCssTop());
        return b
    },
    gotoSimpleMode: function() {
        if (! (this.status_zoom || (this.resetPageCorner(), this.moveing || this.moveFromLeft || this.moveFromRight || !0 == this.isFlipping || !0 == this.isZomming || (this.guidBar.show(), toolBar.hide(), thumbnail && thumbnail.getShowStatu() && thumbnail.showshow(), this.controlBar.setPosition((windowWidth - this.controlBar.width) / 2, toolBar.getBottomHeight() + 5, ["left", "bottom"]), this.mode = "simple", !0 !== this.zoomOut)))) {
            this.pageWidthHeight = this.getFitWH();
            var b = this.getTranY(),
            c = this.pageWidthHeight.x / this.width,
            d = this.getTranX(c);
            this.pageWidthHeight.x == this.width && 0 == b && 0 == d || this.zoomToScale(c, d, b)
        }
    },
    gotoComplexMode: function() {
        if (! (this.status_zoom || (this.resetPageCorner(), this.moveing || this.moveFromLeft || this.moveFromRight || !0 == this.isFlipping || !0 == this.isZomming || (!0 == toolBar.visible ? toolBar.hide() : toolBar.show(), thumbnail && thumbnail.getShowStatu() && thumbnail.showshow(), this.controlBar.setPosition((windowWidth - this.controlBar.width) / 2, toolBar.getBottomHeight() + 5, ["left", "bottom"]), this.mode = "complex", this.guidBar.hide(), !0 !== this.zoomOut)))) {
            this.pageWidthHeight = this.getFitWH();
            var b = this.getTranY(),
            c = this.pageWidthHeight.x / this.width,
            d = this.getTranX(c);
            this.pageWidthHeight.x == this.width && 0 == b && 0 == d || this.zoomToScale(c, d, b)
        }
    },
    beforeShowThumbnail: function() {
        this.hidePage()
    },
    afterShowThumbnail: function() {
        this.showPage();
        this.resizeAttachment()
    },
    hidePage: function() {
        if (this.pageArray) for (var b = this.pageArray.length,
        c = 0; c < b; c++) ! this.pageArray[c] || 0 <= this.getCurrentPages().indexOf(c) || this.pageArray[c].setVisible(!1)
    },
    showPage: function() {
        if (this.pageArray) for (var b = this.pageArray.length,
        c = 0; c < b; c++) this.pageArray[c] && this.pageArray[c].setVisible(!0)
    },
    resizeBookByScale: function(b) {
        this.onResize(this.width * b, this.height * b)
    },
    hideAttachment: function() {
        this.leftFlipShotBar && this.leftFlipShotBar.setVisible(!1);
        this.rightFlipShotBar && this.rightFlipShotBar.setVisible(!1);
        this.leftThickness && this.leftThickness.setVisible(!1);
        this.rightThickness && this.rightThickness.setVisible(!1);
        this.bmt && this.bmt.rightBox && this.bmt.rightBox.hide();
        this.bmt && this.bmt.leftBox && this.bmt.leftBox.hide();
        thumbnail && thumbnail.getShowStatu() && thumbnail.noTransparent()
    },
    showAttachment: function() {
        this.setThicknessVisible(this.currentPageIndex);
        this.setBookmarkVisible(this.currentPageIndex);
        thumbnail && thumbnail.getShowStatu() && thumbnail.transparent();
        this.resizeAttachment()
    },
    resizeAttachment: function() {
        this.setShotBarPosition(this.toScale)
    },
    zoomObj: function(b, c, d, f, g) {
        f || (f = 0);
        g || (g = 0);
        f = translate(f, g);
        b.css({
            "-webkit-transform-origin": c,
            "-moz-transform-origin": c,
            "-ms-transform-origin": c,
            "-o-transform-origin": c,
            "transform-origin": c,
            "-webkit-transform": f + d,
            "-moz-transform": f + d,
            "-ms-transform": f + d,
            "-o-transform": f + d,
            transform: f + d
        })
    },
    translateNull: function(b) {
        b.css({
            "-webkit-transform": "",
            "-moz-transform": "",
            "-ms-transform": "",
            "-o-transform": ""
        })
    },
    resetPageCorner: function() {},
    clearAutoMoveCorner: function() {},
    autoMoveCorner: function() {},
    initLogo: function() {
        bookConfig.appLogoIcon && "" != bookConfig.appLogoIcon && (this.logo = $("<img src='" + bookConfig.appLogoIcon + "'/>"), this.logo.css({
            position: "absolute",
            left: bookConfig.logoPadding + "px",
            top: bookConfig.logoTop + "px",
            height: bookConfig.logoHeight + "px",
            cursor: "pointer",
            "z-index": "95"
        }), this.logo.click(function() {
            var b = getLogoLink();
            window.open(b[0], b[1]);
            return ! 1
        }), tmpContainer.append(this.logo))
    },
    isSinglePage: function() {
        return 1 == this.currentPageIndex || this.currentPageIndex == totalPageCount ? !0 : !1
    }
}).extend(NormalPhoneBook);
var SlideThumbnailCell = Class({
    create: function(b) {
        this.background = $("<div style='position:absolute;'></div>");
        this.pageNum = $("<div style='position:absolute;'></div>");
        this.img = $("<img />");
        this.imgBac = $("<div></div>");
        this.pageIndex = -1;
        this.height = 115;
        this.width = 95 * bookConfig.largePageWidth / bookConfig.largePageHeight;
        this.imgHeight = this.imgWidth = -1;
        $(b).append(this.background);
        $(this.background).append(this.pageNum);
        $(this.background).css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            top: "0px"
        });
        $(this.pageNum).css({
            width: this.width + "px",
            height: 20,
            bottom: "-8px",
            "line-height": "20px",
            "text-align": "center",
            "vertical-align": "middle",
            color: "#ffffff",
            "font-size": "12px"
        });
        $(this.imgBac).append(this.img);
        $(this.imgBac).css({
            position: "absolute"
        });
        $(this.img).css({
            position: "absolute"
        });
        $(this.img).addBorderShadow("#555555", 0, 2)
    },
    getPageIndex: function() {
        return this.pageIndex
    },
    getWidth: function() {
        return this.width
    },
    getHeight: function() {
        return this.height
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px")
    },
    onResize: function(b, c) {
        $(this.background).css({
            width: b + "px",
            height: c + "px"
        });
        this.onResizeImage(b, c)
    },
    onResizeImage: function() {
        $(this.img).css({
            width: this.width + "px",
            height: "95px"
        });
        $(this.imgBac).css({
            width: this.width + "px",
            height: "95px"
        })
    },
    setImgPosition: function(b) {
        switch (b) {
        case "l":
            $(this.imgBac).css({
                left:
                "0px",
                right: "auto"
            });
            break;
        case "r":
            $(this.imgBac).css({
                right:
                "0px",
                left: "auto"
            });
            break;
        case "c":
            $(this.imgBac).css({
                left:
                (this.width - this.imgWidth) / 2 + "px",
                right: "auto"
            })
        }
    },
    setCaption: function(b) {
        this.pageNum.html(b)
    },
    fillImage: function(b) {
        this.pageIndex = b;
        this.img = $("<img/>");
        $(this.img).attr("src", getPageDir(b, "thumb", originTotalPageCount));
        $(this.background).append(this.imgBac);
        this.imgBac.empty();
        $(this.imgBac).append(this.img);
        this.onResizeImage(this.width, this.height);
        this.pageNum.html("<b>" + b + "</b>")
    },
    clearImage: function(b) {
        $(this.imgBac).empty()
    },
    showBorder: function() {
        $(this.background).css({
            border: ""
        })
    },
    hideBorder: function() {
        $(this.background)[0].style.border = ""
    },
    getTextField: function() {
        return this.pageNum
    },
    hideTextField: function() {
        this.pageNum.hide()
    },
    showTextField: function() {
        this.pageNum.show()
    },
    showCell: function(b) {
        $(this.background).css({
            display: b ? "block": "none"
        })
    },
    onMouseUp: function(b, c) {
        var d = this;
        $(this.background).bind(_event._end,
        function(f) {
            c.call(b, d)
        });
        $(this.background).bind(_event._enter,
        function(b) {
            d.background.css({
                cursor: "pointer"
            })
        })
    },
    highLight: function(b) {
        $(this.imgBac).css({
            border: "2px solid #ff8040"
        })
    },
    onMouseOver: function() {
        var b = this;
        $(this.imgBac).css({
            border: ""
        });
        $(this.imgBac).bind(_event._enter,
        function(c) {
            b.imgBac.css({
                border: "2px solid #0080ff"
            })
        });
        $(this.imgBac).bind(_event._leave,
        function(c) {
            b.imgBac.css({
                border: ""
            })
        })
    },
    clearMouseOver: function() {
        var b = this;
        $(this.imgBac).bind(_event._enter,
        function(c) {
            b.imgBac.css({
                border: ""
            })
        });
        $(this.imgBac).bind(_event._leave,
        function(c) {
            b.imgBac.css({
                border: ""
            })
        })
    },
    onMouseOverUp: function() {
        var b = this;
        $(this.imgBac).bind(_event._enter,
        function(c) {
            b.imgBac.css({
                border: "2px solid #0080ff"
            })
        });
        $(this.imgBac).bind(_event._leave,
        function(c) {
            b.imgBac.css({
                border: "2px solid #ff8040"
            })
        })
    },
    clearHighLight: function() {
        $(this.imgBac).css({
            border: ""
        })
    }
});
var isThumbDrag = !1,
SlideThumbnailBar = Class({
    create: function(b) {
        this.width = windowWidth;
        this.height = 135;
        this.contentHeight = 120;
        this.mainColor = "#888888";
        this.thumbArray = [];
        this.mouseDown = this.showing = !1;
        this.scrollBoxX = this.mouseDownX = -1;
        this.lastMoveX = -1 + (windowWidth - this.width + 20) / 2;
        this.lastMoveTime = -1;
        this.mergeing = this.moveLeft = !1;
        this.pageIndex = this.currentCellIndex = 1;
        this.createThumbItemFalg = !1;
        this.oldMode = this.currentMedo = 0;
        this.initPanel(b)
    },
    initPanel: function(b) {
        this.background = $("<div id='slide_thumbnail'></div>");
        this.contentBox = $("<div></div>");
        this.contentBac = $("<div></div>");
        this.scrollBox = $("<div></div>");
        this.openButton = $("<div id='slide_open_button'></div>");
        $(this.background).css({
            width: "100%",
            bottom: -this.height,
            position: "absolute",
            height: this.height,
            "z-index": 100
        });
        $(this.contentBac).css({
            width: "100%",
            bottom: -this.height,
            position: "absolute",
            height: this.height,
            "z-index": 100
        });
        this.scrollBox.css({
            position: "absolute",
            height: this.contentHeight
        });
        this.contentBox.css({
            width: "100%",
            position: "absolute",
            bottom: "1px",
            height: "100%",
            left: 10,
            top: (this.height - this.contentHeight) / 2,
            overflow: "hidden",
            opacity: "0.9"
        });
        this.openButton.css({
            width: "47px",
            height: "20px",
            background: bookConfig.thumbnailColor,
            "border-radius": "5px 5px 0px 0px",
            margin: "-20px auto",
            position: "relative",
            "padding-top": "-16px",
            cursor: "pointer",
            "text-align": "center"
        });
        this.openButton.append("<img style='margin-top:5px;' src='" + uiBaseURL + "arrow-up.png'/>");
        $(this.contentBac).css({
            background: bookConfig.thumbnailColor
        });
        isNaN(bookConfig.thumbnailAlpha) || "" == bookConfig.thumbnailAlpha || null == bookConfig.thumbnailAlpha || void 0 == bookConfig.thumbnailAlpha ? isBelowIE9() || $(this.contentBac).css({
            opacity: 0.3
        }) : isBelowIE9() || $(this.contentBac).css({
            opacity: bookConfig.thumbnailAlpha / 100
        });
        $(b).append(this.contentBac);
        $(b).append(this.background);
        $(this.background).append(this.contentBox);
        $(this.contentBox).append(this.scrollBox);
        $(this.contentBac).append(this.openButton);
        this.openButton.bind(_event._end, this.showOrHide.bind(this))
    },
    getPageIndex: function() {
        return this.pageIndex
    },
    setPageIndex: function(b) {
        this.pageIndex = b
    },
    getHeight: function() {
        return this.height
    },
    onResize: function() {
        this.width = windowWidth;
        var b = $(this.contentBox).width(),
        c = $(this.scrollBox).width();
        if (b > c) $(this.scrollBox).css({
            left: (b - c) / 2 + "px"
        });
        else {
            var d = $(this.scrollBox).offset().left;
            0 < d && (d = 0);
            d < b - c && (d = b - c);
            $(this.scrollBox).css({
                left: d + "px"
            })
        }
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px");
        $(this.contentBac).css(d[0], b + "px");
        $(this.contentBac).css(d[1], c + "px")
    },
    addItem: function() {
        for (var b = 0; b <= originTotalPageCount;) {
            var c = 0 == b ? new SlideThumbnailItem(this.scrollBox, 1) : new SlideThumbnailItem(this.scrollBox, b);
            c.getWidth();
            c.setPosition(this.thumbArray.length * (c.getWidth() + 15) + 5, 2.5);
            this.thumbArray.push(c);
            b += 2
        }
        $(this.scrollBox).css({
            width: this.thumbArray.length * (c.getWidth() + 15) + 10 + "px"
        })
    },
    resetItemPosition: function() {
        for (var b = 0,
        c = this.thumbArray.length,
        d, f = 0; f < c; f++) {
            var g = this.thumbArray[f];
            d = g.getWidth() / 2 + 20 + (c - 1) * (g.getWidth() + 15);
            rightToLeft ? 0 == f ? (b = d - 5 - g.getWidth() / 2, g.setPosition(b, 2.5), b = b - 15 - g.getWidth()) : (g.setPosition(b, 2.5), b = b - g.getWidth() - 15) : 0 == f ? (g.setPosition(5, 2.5), b = g.getWidth() / 2 + 20) : (g.setPosition(b, 2.5), b = b + g.getWidth() + 15)
        }
        $(this.scrollBox).css({
            width: d
        })
    },
    mergeAll: function() {
        this.currentMedo = 2;
        this.showing && this.createThumbItemFalg && this.currentMedo != this.oldMode && (this.repositionDouble(), this.oldMode = 2);
        this.mergeing = !0
    },
    fissionAll: function() {
        this.currentMedo = 1;
        this.showing && this.createThumbItemFalg && this.currentMedo != this.oldMode && (this.repositionSingle(), this.oldMode = 1);
        this.mergeing = !1
    },
    repositionDouble: function() {
        for (var b = 0; b < this.thumbArray.length; b++) this.thumbArray[b].merge();
        this.resetItemPosition();
        this.clearHighLight(this.getPageIndex());
        this.setHighLight(this.getPageIndex())
    },
    repositionSingle: function() {
        for (var b = 0; b < this.thumbArray.length; b++) this.thumbArray[b].fission();
        this.resetItemPosition();
        this.clearHighLight(this.getPageIndex());
        this.setHighLight(this.getPageIndex())
    },
    getShowStatu: function() {
        return this.showing
    },
    setShowStatu: function(b) {
        this.showing = b
    },
    showOrHide: function() {
        this.showing ? this.hideBox() : this.showshow()
    },
    showshow: function() {
        this.showing = !0;
        this.createThumbItemFalg && this.currentMedo != this.oldMode && 1 === this.currentMedo && this.repositionSingle();
        this.createThumbItemFalg && this.currentMedo != this.oldMode && 2 === this.currentMedo && this.repositionDouble();
        this.createThumbItemFalg || (this.createThumbItemFalg = !0, this.addItem(), 1 === this.currentMedo ? this.repositionSingle() : this.repositionDouble(), this.initEvent(), this.onResize(), this.setHighLight(this.getPageIndex()), this.fillNearByImages(0));
        this.oldMode = this.currentMedo;
        $(this.background).animate({
            bottom: 0
        },
        300);
        $(this.contentBac).animate({
            bottom: 0
        },
        300);
        this.openButton.empty().append("<img style='margin-top:5px;' src='" + uiBaseURL + "arrow-down.png'/>")
    },
    hideBox: function() {
        $(this.background).animate({
            bottom: -135
        },
        300);
        $(this.contentBac).animate({
            bottom: -135
        },
        300);
        this.openButton.empty().append("<img style='margin-top:5px;' src='" + uiBaseURL + "arrow-up.png'/>");
        this.showing = !1
    },
    getOccuHeight: function() {
        return 120
    },
    initEvent: function() {
        var b = this;
        this.background.bind(_event._down,
        function(b) {
            return ! 1
        });
        $(this.contentBox).bind(_event._down,
        function(c) {
            b.mouseDown = !0;
            isThumbDrag = !1;
            c = isTouch ? c.originalEvent.touches: [c];
            b.mouseDownX = c[0].pageX;
            b.scrollBoxX = $(b.scrollBox).offset().left;
            return ! 1
        });
        $(this.contentBox).bind(_event._move,
        function(c) {
            if (b.mouseDown) {
                c = isTouch ? c.originalEvent.touches: [c];
                var d = b.mouseDownX - c[0].pageX;
                20 < Math.abs(d) && (isThumbDrag = !0);
                $(b.contentBox).width() > $(b.scrollBox).width() || (d = b.scrollBoxX - d - (windowWidth - b.width + 20) / 2, 0 < d && (d = 0), d < $(b.contentBox).width() - $(b.scrollBox).width() && (d = $(b.contentBox).width() - $(b.scrollBox).width()), $(b.scrollBox).css({
                    left: d + "px"
                }), b.moveLeft = b.lastMoveX > c[0].pageX ? !0 : !1, b.lastMoveX = c[0].pageX, b.lastMoveTime = (new Date).getTime())
            }
        });
        $(this.contentBox).bind(_event._end,
        function(c) {
            b.mouseDown = !1;
            100 > (new Date).getTime() - b.lastMoveTime && -1 != b.lastMoveTime && (c = b.moveLeft ? -30 : 30, b.tweener($(b.scrollBox).offset().left - (windowWidth - b.width + 20) / 2, c, 10))
        });
        $(this.contentBox).bind("mouseleave",
        function(c) {
            b.mouseDown = !1
        })
    },
    setHighLight: function(b) {
        this.currentCellIndex = b;
        this.setPageIndex(b);
        if (this.createThumbItemFalg) {
            var c = Math.floor(b / 2);
            if (! (b > originTotalPageCount)) if (this.thumbArray[c].highLight(b), this.clearHighLight(c), $(this.contentBox).width() > $(this.scrollBox).width()) $(this.scrollBox).css({
                left: ($(this.contentBox).width() - $(this.scrollBox).width()) / 2 + "px"
            });
            else {
                b = $(this.scrollBox).offset().left - (windowWidth - self.width + 20) / 2;
                var d = $(this.contentBox).width(),
                f = rightToLeft ? (this.thumbArray.length - (c - 1)) * (this.thumbArray[c].getWidth() + 5) + 5 : (c - 1) * (this.thumbArray[c].getWidth() + 5) + 5,
                c = this.thumbArray[c].getWidth();
                this.tweener(b, -(f + b - (d - c) / 2) / 6, 6)
            }
        }
    },
    clearHighLight: function(b) {
        if (this.createThumbItemFalg) for (var c = 0; c < this.thumbArray.length; c++) c != b && this.thumbArray[c].clearHighLight()
    },
    tweener: function(b, c, d) {
        var f = function(b, c) {
            for (var d = c / 2,
            f = (b - b / 4) / d, g = Array(c), h = 0; h < c; h++) g[h] = h < d ? b - (d - h) * f: b + (h - d + 1) * f;
            return g.reverse()
        } (c, d),
        g = b,
        h = 0,
        k = this,
        l = window.setInterval(function() {
            g += f[h];
            h++;
            h == d && (g = b + c * d);
            0 < g && (g = 0);
            g < $(k.contentBox).width() - $(k.scrollBox).width() && (g = $(k.contentBox).width() - $(k.scrollBox).width());
            $(k.scrollBox).css({
                left: g + "px"
            });
            h >= d && (window.clearInterval(l), k.fillNearByImages(g))
        },
        30)
    },
    fillNearByImages: function(b) {
        if (this.createThumbItemFalg) {
            var c = Math.ceil((this.background.width() - b) / 65) + 2;
            this.background.width() > this.scrollBox.width() ? (b = 0, c = originTotalPageCount + 1) : b = 0 == b ? 0 : Math.ceil( - b / 100);
            b = Math.max(Math.ceil(b / 2), 0);
            c = Math.min(c, originTotalPageCount + 1);
            if (0 < b) for (var d = 0; d < b; d++) this.thumbArray[d] && this.thumbArray[d].clearImage();
            for (d = b; d < Math.ceil(c / 2); d++) b = rightToLeft ? this.thumbArray.length - d - 1 : d,
            this.thumbArray[b] && this.thumbArray[b].addImage()
        }
    }
});
var SlideThumbnailItem = Class({
    create: function(b, c) {
        this.background = $("<div style='position:absolute;font-family:Arial,Tahoma;'></div>");
        this.imageBac = $("<div style='position:absolute;'></div>");
        this.pageNum = $("<div style='position:absolute;'></div>");
        this.itemB = new SlideThumbnailCell(this.imageBac);
        this.itemA = new SlideThumbnailCell(this.imageBac);
        this.height = 115;
        this.width = 190 * bookConfig.largePageWidth / bookConfig.largePageHeight;
        this.isMerge = this.isDoublePage = !0;
        this.pageIndex = c;
        this.fillImage = !1;
        this.mainColor = "#000000";
        $(b).append(this.background);
        $(this.background).append(this.imageBac);
        $(this.background).append(this.pageNum);
        $(this.background).css({
            position: "absolute",
            width: this.width + "px",
            height: this.height + "px",
            top: "2px"
        });
        $(this.imageBac).css({
            position: "absolute",
            width: this.width + "px",
            height: 95
        });
        $(this.pageNum).css({
            width: this.width + "px",
            height: 20,
            bottom: "-8px",
            "line-height": "20px",
            "text-align": "center",
            "vertical-align": "middle",
            color: "#ffffff",
            "font-size": "12px"
        });
        1 != c && c != totalPageCount ? (this.itemA.setPosition(0, 0, rightToLeft ? ["right", "top"] : ["left", "top"]), this.itemB.setPosition(0, 0, rightToLeft ? ["left", "top"] : ["right", "top"]), this.itemB.onMouseUp(this, this.onItemMouseUp), this.itemA.pageIndex = c, this.itemB.pageIndex = c + 1, this.onMouseOver()) : (1 == c ? this.itemA.setPosition(0, 0) : rightToLeft ? this.itemA.setPosition(0, 0, ["right", "top"]) : this.itemA.setPosition(0, 0), this.itemB.showCell(!1), this.setBorder(!1), this.itemA.pageIndex = c, this.itemA.onMouseOver());
        this.itemA.onMouseUp(this, this.onItemMouseUp);
        $(this.pageNum).hide()
    },
    getWidth: function() {
        return this.width
    },
    addImage: function() {
        this.fillImage || (this.itemA.fillImage(this.pageIndex), 1 != this.pageIndex && this.pageIndex != totalPageCount && this.itemB.fillImage(this.pageIndex + 1), this.fillImage = !0, rightToLeft ? $(this.pageNum).html(this.pageIndex + 1 + "-" + this.pageIndex) : $(this.pageNum).html("<b>" + this.pageIndex + "-" + (this.pageIndex + 1) + "</b>"))
    },
    clearImage: function() {
        this.itemA.clearImage(this.pageIndex);
        1 != this.pageIndex && this.pageIndex != totalPageCount && this.itemB.clearImage(this.pageIndex + 1);
        this.fillImage = !1
    },
    setPosition: function(b, c, d) {
        void 0 == d && (d = ["left", "top"]);
        $(this.background).css(d[0], b + "px");
        $(this.background).css(d[1], c + "px")
    },
    onResize: function(b, c) {
        this.width = b;
        this.height = c;
        $(this.background).css({
            width: b + "px",
            height: c + "px"
        })
    },
    resetItem: function() {},
    fission: function() {
        1 != this.pageIndex && this.pageIndex != totalPageCount && (this.setBorder(!1), this.onResize(this.width, this.height), this.itemA.setImgPosition("r"), this.itemB.setImgPosition("l"), this.showTextField(!1), this.isMerge = !1)
    },
    merge: function() {
        1 != this.pageIndex && this.pageIndex != totalPageCount && (this.setBorder(!1), this.onResize(this.width, this.height), this.itemA.setImgPosition("r"), this.itemB.setImgPosition("l"), this.showTextField(!0), this.isMerge = !0)
    },
    showBorder: function() {
        $(this.imageBac).css({
            border: "1px solid #444444"
        })
    },
    hideBorder: function() {
        $(this.imageBac)[0].style.border = ""
    },
    showTextField: function(b) {
        var c = b ? "none": "block";
        this.pageNum.css({
            display: b ? "block": "none"
        });
        this.itemA.getTextField().css({
            display: c
        });
        this.itemB.getTextField().css({
            display: c
        })
    },
    setBorder: function(b) {
        b ? $(this.imageBac).css({
            border: "1px solid #444444"
        }) : $(this.imageBac)[0].style.border = "";
        this.itemA.hideBorder();
        this.itemB.hideBorder()
    },
    onItemMouseUp: function(b) {
        isThumbDrag || (b = b.getPageIndex(), gotoPageFun(b), thumbnail && thumbnail.setHighLight(b))
    },
    highLight: function(b) {
        this.isMerge ? 1 == b || b == totalPageCount ? (this.itemA.highLight("#ffffff"), this.itemA.onMouseOverUp()) : ($(this.imageBac).css({
            border: "2px solid #ff8040"
        }), this.onMouseOverUp()) : b == this.pageIndex ? (this.itemA.highLight("#ffffff"), this.itemA.onMouseOverUp()) : (this.itemB.highLight("#ffffff"), this.itemB.onMouseOverUp())
    },
    onMouseOver: function() {
        var b = this;
        $(this.imageBac).css({
            border: ""
        });
        $(this.imageBac).bind(_event._enter,
        function(c) {
            b.imageBac.css({
                border: "2px solid #0080ff"
            })
        });
        $(this.imageBac).bind(_event._leave,
        function(c) {
            b.imageBac.css({
                border: ""
            })
        })
    },
    onMouseOverUp: function() {
        var b = this;
        $(this.imageBac).bind(_event._enter,
        function(c) {
            b.imageBac.css({
                border: "2px solid #0080ff"
            })
        });
        $(this.imageBac).bind(_event._leave,
        function(c) {
            b.imageBac.css({
                border: "2px solid #ff8040"
            })
        })
    },
    clearMouseOver: function() {
        var b = this;
        $(this.imageBac).bind(_event._enter,
        function(c) {
            b.imageBac.css({
                border: ""
            })
        });
        $(this.imageBac).bind(_event._leave,
        function(c) {
            b.imageBac.css({
                border: ""
            })
        })
    },
    clearHighLight: function() {
        this.isMerge ? 1 == this.pageIndex || this.pageIndex == totalPageCount ? (this.itemA.onMouseOver(), this.itemB.onMouseOver()) : (this.onMouseOver(), this.itemA.clearMouseOver(), this.itemB.clearMouseOver()) : (this.itemA.onMouseOver(), this.itemB.onMouseOver(), this.clearMouseOver());
        this.itemA.clearHighLight();
        this.itemB.clearHighLight()
    }
});
Class("PCSlideToolbar", {
    create: function(b) {
        this.parent = b;
        this.initToolBar();
        this.initGuidBar();
        this.initLogo();
        this.initThumbnail()
    },
    initThumbnail: function() {
        if (bookConfig.ThumbnailsButtonVisible) {
            var b = thumbnailBar;
            isCatalogBook() && "lite" == bookConfig.ToolbarViewMode.toLowerCase() && (b = CatalogThumbnailBar);
            isSlideBook() && "lite" == bookConfig.ToolbarViewMode.toLowerCase() && (b = SlideThumbnailBar);
            thumbnail = new b(tmpContainer)
        }
    },
    initGuidBar: function() {
        this.leftBar = $("<div style='z-index:5;position:absolute;cursor:pointer;width:50px;height:50px;top:50%;opacity:0.7;margin-top:-25px;'></div>");
        this.rightBar = $("<div class='slideBar'></div>");
        this.leftBar.css({
            left: bookConfig.leftMargin,
            "background-image": "url(" + uiBaseURL + "prev_page.png)",
            "background-repeat": "no-repeat",
            "background-position": "center",
            "background-size": "18px 18px",
            "background-color": bookConfig.toolbarColor,
            "border-radius": "5px"
        });
        this.rightBar.css({
            right: bookConfig.rightMargin,
            "background-image": "url(" + uiBaseURL + "next_page.png)",
            "background-repeat": "no-repeat",
            "background-position": "center",
            "background-size": "18px 18px",
            "background-color": bookConfig.toolbarColor,
            "border-radius": "5px"
        });
        this.parent.append(this.leftBar);
        this.parent.append(this.rightBar);
        rightToLeft ? (this.leftBar.bind(_event._end, nextPageFun), this.rightBar.bind(_event._end, previousPageFun), this.leftBar.attr({
            title: getLanguage("btnNextPage", "Next")
        }), this.rightBar.attr({
            title: getLanguage("btnPrePage", "Previous")
        })) : (this.leftBar.bind(_event._end, previousPageFun), this.rightBar.bind(_event._end, nextPageFun), this.leftBar.attr({
            title: getLanguage("btnPrePage", "Previous")
        }), this.rightBar.attr({
            title: getLanguage("btnNextPage", "Next")
        }));
        this.rightBar.bind(_event._down,
        function() {
            this.rightBar.css({
                opacity: "0.5"
            })
        }.bind(this));
        this.rightBar.bind(_event._end + " " + _event._leave,
        function() {
            this.rightBar.css({
                opacity: "0.7"
            })
        }.bind(this));
        this.leftBar.bind(_event._down,
        function() {
            this.leftBar.css({
                opacity: "0.5"
            })
        }.bind(this));
        this.leftBar.bind(_event._end + " " + _event._leave,
        function() {
            this.leftBar.css({
                opacity: "0.7"
            })
        }.bind(this))
    },
    initToolBar: function() {
        this.toolbarBac = $("<div class='slideToolbar'></div>");
        this.fullscreenBtn = $("<img src='" + uiBaseURL + "slide-fullscreen.png'/>");
        this.homeBtn = $("<img src='" + uiBaseURL + "slide-home.png'/>");
        bookConfig.ShareButtonVisible && (this.shareBtn = $("<img src='" + uiBaseURL + "slide-share.png'/>"));
        this.parent.append(this.toolbarBac);
        this.toolbarBac.append(this.fullscreenBtn);
        this.toolbarBac.append(this.homeBtn);
        this.toolbarBac.append(this.shareBtn);
        this.toolbarBac.css("background-color", bookConfig.toolbarColor);
        this.shareBtn && this.shareBtn.bind(_event._end,
        function() {
            sharePanel.showOrHide();
            return ! 1
        });
        this.homeBtn.bind(_event._end,
        function() {
            homeButtonEvent();
            return ! 1
        });
        this.fullscreenBtn.bind(_event._end,
        function() {
            fullscreenFun();
            return ! 1
        });
        $(document).bind(fullScreenApi.fullScreenEventName,
        function() {
            this.changeFullscreenIcon(fullScreenApi.isFullScreen())
        }.bind(this));
        this.fullscreenBtn.attr("title", getLanguage("btnFullscreen", "Enter fullscreen"));
        this.homeBtn.attr("title", getLanguage("btnGoToHome", "Home"));
        this.shareBtn && this.shareBtn.attr("title", getLanguage("btnSocialShare", "Share"));
        var b = this.toolbarBac.width();
        this.toolbarBac.css({
            "margin-left": -b / 2 + "px"
        })
    },
    changeFullscreenIcon: function() {
        fullScreenApi.isFullScreen() ? (this.fullscreenBtn.attr("src", uiBaseURL + "slide-exitFullscreen.png"), this.fullscreenBtn.attr("title", getLanguage("btnExitFullscreen", "Exit fullscreen"))) : (this.fullscreenBtn.attr("src", uiBaseURL + "slide-fullscreen.png"), this.fullscreenBtn.attr("title", getLanguage("btnFullscreen", "Enter fullscreen")))
    },
    hide: function() {},
    show: function() {},
    getLogoHeight: function() {
        return 0
    },
    getHeight: function() {
        return 0
    },
    getTopHeight: function() {
        return 0
    },
    getBottomHeight: function() {
        return 0
    },
    setButtonPosition: function() {},
    initLogo: function() {
        bookConfig.appLogoIcon && "" != bookConfig.appLogoIcon && (this.logo = $("<img src='" + bookConfig.appLogoIcon + "'/>"), this.logo.css({
            position: "absolute",
            left: bookConfig.logoPadding + "px",
            top: bookConfig.logoTop + "px",
            height: bookConfig.logoHeight + "px",
            cursor: "pointer",
            "z-index": "3"
        }), this.logo.click(function() {
            var b = getLogoLink();
            window.open(b[0], b[1]);
            return ! 1
        }), this.parent.append(this.logo))
    }
});
Class("PhoneToolbar", {
    create: function(b, c) {
        this.visible = !1;
        this.icons = c;
        this.topBG = $("<div class='pbTopBar' id='pbTopBar' style='font-family:Arial,sans-serif;'></div>");
        this.bottomBG = $("<div class='pbToolBar' id='pbToolBar' style='font-family:Arial,sans-serif;'></div>");
        this.btnThumb = $("<div title='Thumbnails'  id='btnThumb' class='phoneMoreButton'></div>");
        this.btnMore = $("<div title='More'  id='btnMore' class='phoneMoreButton' ></div>");
        this.mainColor = bookConfig.toolbarColor;
        this.logo = $("<img src='" + bookConfig.appLogoIcon + "' style='cursor:pointer;position:absolute;'/>");
        b.append(this.topBG);
        b.append(this.bottomBG);
        bookConfig.appLogoIcon && this.topBG.append(this.logo);
        this.topBG.append(this.btnThumb);
        this.topBG.append(this.btnMore);
        this.initToolBar();
        bookConfig.AutoPlayButtonVisible || this.btnAutoPlay.hide();
        global.phoneGotoPagePanel = new phoneGotoPage(tmpContainer);
        this.initEvent();
        this.visible = !1;
        this.initFoldingMenu();
        this.initThumbnail();
        this.enterToShow()
    },
    initToolBar: function() {
        this.btnMore.addCssSprite(phoneIconsURL[0], "more", 25, 25, phoneIconInfo);
        this.btnThumb.addCssSprite(phoneIconsURL[0], "thumb", 25, 25, phoneIconInfo);
        this.btnMore.attr("title", getLanguage("btnMoreOptionsLeft", "More"));
        this.btnThumb.attr("title", getLanguage("btnThumb", "Thumb"));
        this.btnFirst = $("<div title='First Page' id='btnFirst' class='phonebutton' ></div>");
        this.btnLast = $("<div title='Last Page' id='btnLast' class='phonebutton' ></div>");
        this.btnGotoPage = $("<div title='Go To Page' id='btnGotoPage' class='phonebutton' ></div>");
        this.btnZoom = $("<div title='Zoom'  id='btnZoom'  class='phonebutton'></div>");
        this.btnAutoPlay = $("<div title='Auto play' id='btnAutoPlay' class='phonebutton'></div>");
        this.btnSearch = $("<div title='search' id='btnSearch' class='phonebutton'></div>");
        this.btnTableOfContent = $("<div title='Table Of Content' id='btnTableOfContent' class='phonebutton'></div>");
        this.btnShoppingCart = $("<div title='shopping cart' id='btnShoppingCart' class='phonebutton'></div>");
        this.btnBookMark = $("<div title='bookMark' id='btnBookMark' class='phonebutton'></div>");
        this.btnFirst.addCssSprite(phoneIconsURL[0], "firstBtn", 25, 25, phoneIconInfo);
        this.btnLast.addCssSprite(phoneIconsURL[0], "lastBtn", 25, 25, phoneIconInfo);
        this.btnGotoPage.addCssSprite(phoneIconsURL[0], "gotoPage", 25, 25, phoneIconInfo);
        this.btnZoom.addCssSprite(phoneIconsURL[0], "zoomIn", 25, 25, phoneIconInfo);
        getAliasValue("autoPlayAutoStart", !1) ? (this.btnAutoPlay.addCssSprite(phoneIconsURL[0], "stopAutoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip"))) : (this.btnAutoPlay.addCssSprite(phoneIconsURL[0], "autoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip")));
        this.btnSearch.addCssSprite(phoneIconsURL[0], "search", 25, 25, phoneIconInfo);
        this.btnTableOfContent.addCssSprite(phoneIconsURL[0], "tableofcontent", 25, 25, phoneIconInfo);
        this.btnShoppingCart.addCssSprite(phoneIconsURL[0], "shoppingCart", 25, 25, phoneIconInfo);
        this.btnBookMark.addCssSprite(phoneIconsURL[0], "addBookmark", 25, 25, phoneIconInfo);
        this.btnFirst.attr("title", getLanguage("btnFirstPage", "first"));
        this.btnLast.attr("title", getLanguage("btnLastPage", "last"));
        this.btnGotoPage.attr("title", getLanguage("btnGotoPage", "Go To Page"));
        this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"));
        this.btnSearch.attr("title", getLanguage("btnSearch", "search"));
        this.btnTableOfContent.attr("title", getLanguage("btnTableOfContent", "Table Of Content"));
        this.btnBookMark.attr("title", getLanguage("btnBookMark", "bookmark"));
        this.btnShoppingCart.attr("title", getLanguage("btnShoppingCart", "shopping cart"));
        this.btnShoppingCart.append(shoppingCountHTML);
        $(this.bottomBG).css({
            "-webkit-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-moz-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-o-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)"
        });
        $(this.topBG).css({
            "-webkit-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-moz-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "-o-box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)",
            "box-shadow": "0 0 5px rgba(40, 0, 0, 0.5)"
        });
        this.barWidth = windowWidth;
        this.barHeight = 40;
        this.bottomBG.css({
            width: this.barWidth + "px",
            height: this.barHeight + "px",
            bottom: "-60px"
        });
        this.topBG.css({
            width: this.barWidth + "px",
            height: this.barHeight + "px",
            color: "#ffffff",
            "line-height": this.barHeight + "px",
            top: "-60px"
        });
        var b = colorDiv(this.mainColor, 30),
        c = colorAdd(this.mainColor, 30);
        this.topBG.css("background", this.mainColor);
        this.bottomBG.css("background", this.mainColor);
        this.topBG.css("border-bottom", "1px solid " + b);
        this.bottomBG.css("border-top", "1px solid " + c);
        var d = getLogoLink();
        $(this.logo).click(function() {
            $.browser.msie ? window.location = d[0] : window.open(d[0], d[1])
        });
        this.initBottomBarArray()
    },
    initBottomBarArray: function() {
        this.bottomBarArray = [];
        global.pageEditor && global.pageEditor.setting && parseBool(global.pageEditor.setting.shoppingCartHTML) && this.bottomBarArray.push(this.btnShoppingCart);
        bookConfig.BookMarkButtonVisible && this.bottomBarArray.push(this.btnBookMark);
        this.bottomBarArray.push(this.btnGotoPage);
        bookConfig.AutoPlayButtonVisible && this.bottomBarArray.push(this.btnAutoPlay);
        bookConfig.SearchButtonVisible && 4 > this.bottomBarArray.length && this.bottomBarArray.unshift(this.btnSearch);
        bookConfig.TableOfContentButtonVisible && 4 > this.bottomBarArray.length && this.bottomBarArray.unshift(this.btnTableOfContent);
        3 > this.bottomBarArray.length && (this.bottomBarArray.unshift(this.btnFirst), this.bottomBarArray.push(this.btnLast));
        for (var b = 0; b < this.bottomBarArray.length; b++) this.bottomBG.append(this.bottomBarArray[b])
    },
    initFoldingMenu: function() {
        bookConfig.BookMarkButtonVisible || bookConfig.SearchButtonVisible || bookConfig.TableOfContentButtonVisible || bookConfig.ShareButtonVisible || bookConfig.DownloadButtonVisible || bookConfig.PrintButtonVisible || bookConfig.HomeButtonVisible || bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound || language && !(1 >= language.length) || this.btnMore.hide();
        var b = function() {
            "" != bookConfig.DownloadURL && window.open(bookConfig.DownloadURL, "_blank")
        },
        c = function() {
            homeButtonEvent()
        };
        global.foldingMenu = new FoldingMenu($("#tmpContainer"));
        bookConfig.HomeButtonVisible && foldingMenu.addMenuItem("miHome", getLanguage("btnHome", "Home"), "miHome", !0, c);
        bookConfig.SearchButtonVisible && foldingMenu.addMenuItem("miSearch", getLanguage("btnSearch", "Search"), "miSearch");
        bookConfig.TableOfContentButtonVisible && foldingMenu.addMenuItem("miTableOfContent", getLanguage("btnTableOfContent", "Table of Content"), "tableofcontent");
        bookConfig.BookMarkButtonVisible && foldingMenu.addMenuItem("miBookmark", getLanguage("btnBookMark", "Bookmark"), "miBookmark");
        bookConfig.ShareButtonVisible && foldingMenu.addMenuItem("miShare", getLanguage("btnSocialShare", "Share"), "miShare");
        bookConfig.DownloadButtonVisible && foldingMenu.addMenuItem("miDownload", getLanguage("btnDownload", "Download"), "download", !0, b);
        bookConfig.PrintButtonVisible && foldingMenu.addMenuItem("miPrint", getLanguage("btnPrint", "Print"), "print");
        language && 1 < language.length && foldingMenu.addMenuItem("miLanguage", getLanguage("btnLanguage", "Language change"), "languageChange"); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && foldingMenu.addMenuItem("miSetting", getLanguage("btnSettings", "Settings"), "setting");
        bookConfig.SearchButtonVisible && (global.phoneSearch = new phoneSearchForm({
            caption: getLanguage("frmSearch", "Search"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.searchBackground,
            fontColor: bookConfig.searchFontColor
        },
        foldingMenu.getItemBody("miSearch")));
        bookConfig.TableOfContentButtonVisible && (global.phoneTableOfContent = new phoneTableContent({
            caption: getLanguage("frmTableOfContent", "Table of Content"),
            closeIconURL: uiBaseURL + "close.png",
            mainColor: bookConfig.bookmarkBackground,
            fontColor: bookConfig.bookmarkFontColor
        },
        foldingMenu.getItemBody("miTableOfContent")));
        bookConfig.ShareButtonVisible && (global.phoneShare = new phoneSharePanel(foldingMenu.getItemBody("miShare")));
        bookConfig.BookMarkButtonVisible && (global.phoneBookmark = new PhoneBookMark(foldingMenu.getItemBody("miBookmark")));
        bookConfig.PrintButtonVisible && (global.phonePrintBody = new phonePrintBar(foldingMenu.getItemBody("miPrint")));
        language && 1 < language.length && (global.phoneLanguageBody = new phoneLanguageChange(foldingMenu.getItemBody("miLanguage")));
        if (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) global.phoneSettingBody = new phoneSetting(foldingMenu.getItemBody("miSetting"))
    },
    setButtonPosition: function() {
        this.bottomBG.css({
            width: windowWidth + "px"
        });
        this.topBG.css({
            width: windowWidth + "px"
        });
        this.barWidth = Math.min(windowWidth, 340);
        this.buttonWidth = 40;
        this.buttonTop = (this.barHeight - this.buttonWidth) / 2;
        this.barLeft = (windowWidth - this.barWidth) / 2 + 7;
        autoCenter(this.bottomBarArray, this.barWidth - 15, this.buttonWidth, this.barLeft);
        this.btnMore.css({
            left: "0px",
            top: this.buttonTop + "px"
        });
        this.btnThumb.css({
            right: "0px",
            top: this.buttonTop + "px"
        });
        this.logo.css({
            "margin-left": "65px"
        });
        this.logo.css({
            top: (toolBar.getLogoHeight() - bookConfig.logoHeight) / 2 + "px"
        });
        this.logo.css({
            "max-width": windowWidth - 130 + "px",
            "max-height": "40px"
        });
        this.logo.css({
            height: bookConfig.logoHeight + "px"
        });
        $(".phonebutton").css({
            top: this.buttonTop + "px"
        })
    },
    initEvent: function() {
        var b = this;
        this.btnShoppingCart.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            window.shoppingCart && window.shoppingCart.showCart()
        }.bind(this));
        this.btnSearch.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miSearch"));
            return ! 1
        }.bind(this));
        this.btnTableOfContent.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miTableOfContent"));
            return ! 1
        }.bind(this));
        this.btnMore.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && foldingMenu.showOrHide(foldingMenu.width);
            return ! 1
        }.bind(this));
        this.btnThumb.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            thumbnail.showOrHide();
            return ! 1
        }.bind(this));
        this.btnLast.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            rightToLeft ? firstPageFun() : lastPageFun();
            return ! 1
        }.bind(this));
        this.btnFirst.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            rightToLeft ? lastPageFun() : firstPageFun();
            return ! 1
        }.bind(this));
        this.btnZoom.bind(_event._end,
        function() {
            isZoomStatus() ? this.changeZoomIcon(!0) : this.changeZoomIcon(!1);
            onDoubleTap.bind(BookInfo.getBook().bookMap.book.showPage)({
                pointers: [{
                    pageX: windowWidth / 2,
                    pageY: windowHeight / 2
                }]
            });
            this.enterOption && window.clearTimeout(this.enterOption);
            auto_player.isPlaying() && (auto_player.stop(), this.changeAutoPlayIcon());
            return ! 1
        }.bind(this));
        this.btnAutoPlay.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            auto_player.isPlaying() ? auto_player.stop() : auto_player.start();
            b.changeAutoPlayIcon();
            return ! 1
        }.bind(this));
        this.btnGotoPage.bind(_event._end,
        function() {
            this.enterOption && window.clearTimeout(this.enterOption);
            global.phoneGotoPagePanel.showOrHide()
        }.bind(this));
        this.btnBookMark.bind(_event._end,
        function() {
            var b = {
                page: BookInfo.getCurrentPages()[0],
                color: "#bababa",
                text: "",
                isCookie: 1,
                key: (new Date).getTime()
            };
            global.phoneBookmark && global.phoneBookmark.addBookmark(b);
            this.enterOption && window.clearTimeout(this.enterOption);
            global.foldingMenu && (foldingMenu.show(foldingMenu.width), foldingMenu.expandId("miBookmark"));
            return ! 1
        }.bind(this))
    },
    enterToShow: function() {
        this.show();
        this.enterOption = window.setTimeout(this.hide.bind(this), 3E3)
    },
    changeButtonColor: function(b) {},
    changeZoomIcon: function(b) {},
    changeFullscreenIcon: function(b) {},
    changeAutoPlayIcon: function(b) {
        void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? (this.btnAutoPlay.children().cssSprite(phoneIconsURL[0], "stopAutoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip"))) : (this.btnAutoPlay.children().cssSprite(phoneIconsURL[0], "autoPlay", 25, 25, phoneIconInfo), this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip"))))
    },
    changeBookmarkIcon: function(b) {
        b ? this.btnBookMark.children().cssSprite(phoneIconsURL[0], "addBookmark", 25, 25, phoneIconInfo) : this.btnBookMark.children().cssSprite(phoneIconsURL[0], "bookmark", 25, 25, phoneIconInfo);
        this.btnBookMark.attr("title", getLanguage("btnBookMark", "Bookmark"))
    },
    changeSoundIcon: function(b) {},
    show: function() {
        this.visible || (this.visible = !0, this.bottomBG.animate({
            bottom: 0
        },
        300), this.topBG.animate({
            top: 0
        },
        300), bookType == BookType.singlePhone_book && singlePhoneBook && singlePhoneBook.setShow(!1), bookType == BookType.phone_book && phoneBook && phoneBook.setShow(!1))
    },
    getHeight: function() {
        return this.getTopHeight() + this.getBottomHeight()
    },
    getTopHeight: function() {
        return 0
    },
    getBottomHeight: function() {
        return 0
    },
    getLogoHeight: function() {
        return this.topBG.height()
    },
    hide: function() {
        this.visible && (this.enterOption && window.clearTimeout(this.enterOption), this.visible = !1, this.bottomBG.animate({
            bottom: -60
        },
        300), this.topBG.animate({
            top: -60
        },
        300), global.phoneGotoPagePanel.hide(), bookType == BookType.singlePhone_book && singlePhoneBook && singlePhoneBook.setShow(!0), bookType == BookType.phone_book && phoneBook && phoneBook.setShow(!0))
    },
    showOrHide: function() { ! 0 === this.visible ? this.hide() : this.show()
    },
    changeZoomIcon: function(b) {
        b ? (this.btnZoom.children().cssSprite(phoneIconsURL[0], "zoomIn", 25, 25, phoneIconInfo), this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"))) : (this.btnZoom.children().cssSprite(phoneIconsURL[0], "zoomOut", 25, 25, phoneIconInfo), this.btnZoom.attr("title", getLanguage("btnZoomOut", "zoom out")))
    },
    changeSoundIcon: function(b) {},
    initThumbnail: function() {
        bookConfig.ThumbnailsButtonVisible ? thumbnail = new thumbnailBar(tmpContainer) : this.btnThumb.hide()
    },
    lastPage: function() {
        rightToLeft ? firstPageFun() : lastPageFun()
    },
    nextPage: function() {
        rightToLeft ? previousPageFun() : nextPageFun()
    },
    prePage: function() {
        rightToLeft ? nextPageFun() : previousPageFun()
    },
    firstPage: function() {
        rightToLeft ? lastPageFun() : firstPageFun()
    },
    changeLanguage: function() {
        this.btnBookMark && this.btnBookMark.attr("title", getLanguage("btnBookMark", "bookmark"));
        this.btnShoppingCart && this.btnShoppingCart.attr("title", getLanguage("btnShoppingCart", "Shopping Cart"));
        this.btnGotoPage && this.btnGotoPage.attr("title", getLanguage("btnGotoPage", "Go To Page"));
        this.btnSearch && this.btnSearch.attr("title", getLanguage("btnSearch", "search"));
        this.btnTableOfContent && this.btnTableOfContent.attr("title", getLanguage("btnTableOfContent", "Table of content"));
        rightToLeft ? (this.btnFirst && this.btnFirst.attr("title", getLanguage("btnLastPage", "Last")), this.btnLast && this.btnLast.attr("title", getLanguage("btnFirstPage", "First"))) : (this.btnFirst && this.btnFirst.attr("title", getLanguage("btnFirstPage", "First")), this.btnLast && this.btnLast.attr("title", getLanguage("btnLastPage", "Last")));
        isZoomStatus() ? this.btnZoom && this.btnZoom.attr("title", getLanguage("btnZoomOut", "zoom out")) : this.btnZoom && this.btnZoom.attr("title", getLanguage("btnZoomIn", "zoom in"));
        void 0 != auto_player && null != auto_player && (auto_player.isPlaying() ? this.btnAutoPlay.attr("title", getLanguage("btnStopAutoFlip", "Stop auto flip")) : this.btnAutoPlay.attr("title", getLanguage("btnAutoFlip", "Auto flip")));
        bookConfig.HomeButtonVisible && foldingMenu.getItemById("miHome").setCaption(getLanguage("btnHome", "Home"));
        bookConfig.SearchButtonVisible && foldingMenu.getItemById("miSearch").setCaption(getLanguage("btnSearch", "Search"));
        bookConfig.TableOfContentButtonVisible && foldingMenu.getItemById("miTableOfContent").setCaption(getLanguage("btnTableOfContent", "Table of Content"));
        bookConfig.BookMarkButtonVisible && foldingMenu.getItemById("miBookmark").setCaption(getLanguage("btnBookMark", "Bookmark"));
        bookConfig.ShareButtonVisible && foldingMenu.getItemById("miShare").setCaption(getLanguage("btnSocialShare", "Share"));
        bookConfig.DownloadButtonVisible && foldingMenu.getItemById("miDownload").setCaption(getLanguage("btnDownload", "Download"));
        bookConfig.PrintButtonVisible && foldingMenu.getItemById("miPrint").setCaption(getLanguage("btnPrint", "Print"));
        language && 1 < language.length && foldingMenu.getItemById("miLanguage").setCaption(getLanguage("btnLanguage", "Language change")); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && foldingMenu.getItemById("miSetting").setCaption(getLanguage("btnSettings", "Settings"));
        bookConfig.PrintButtonVisible && global.phonePrintBody.changeLanguage(); (bookConfig.BackgroundSoundButtonVisible || bookConfig.FlipSound) && global.phoneSettingBody.changeLanguage()
    }
});
if (isPhone() || isPad()) thumbnailBar = Class({
    create: function(b) {
        this.show = !1;
        this.totalPageCount = bookConfig.totalPageCount;
        this.itemWidth = 90;
        this.marginLeft = 20;
        this.marginTop = 10;
        this.itemBorderWidth = 3;
        this.toolBarHeight = 80;
        this.itemBorderColor = "#f76c6c";
        this.itemArray = [];
        this.taskList = new TaskList;
        this.itemHeightArray = this.getHeightArray();
        this.background = $("<div id='phoneThum' style='opacity:0;display:none;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;text-align:center;position:absolute;z-index:98;background:rgba(51,51,51,0.8);width:100%;top:40px;left:0px;'></div>");
        this.itemBox = $("<div style='text-align:left;display:inline-block;padding:0px 0px " + this.marginLeft + "px 0px;'></div>");
        b.append(this.background);
        this.background.append(this.itemBox);
        this.initEvent();
        this.addItem();
        this.setHighLight(1)
    },
    onResize: function() {
        this.countHorizatal = parseInt((windowWidth - this.marginLeft) / (this.itemWidth + this.marginLeft));
        this.countVertical = parseInt((windowHeight - this.toolBarHeight - this.marginTop) / (this.itemHeightArray.itemHeight + this.marginTop)) + 1;
        this.itemBox.css({
            width: this.countHorizatal * (this.itemWidth + this.marginLeft) + this.marginLeft
        });
        this.background.css({
            height: windowHeight - this.toolBarHeight
        });
        this.taskList.setLargeLength(this.countHorizatal * this.countVertical)
    },
    fillContent: function() {
        this.interval && !this.interval.isRunning() ? this.interval.start() : this.interval = function() {
            this.LoadCount = 0;
            for (var b = -this.itemBox.offset().top + 40, b = parseInt(b / (this.itemHeightArray.itemHeight + this.marginTop)), c = this.countHorizatal * b, b = c + this.countHorizatal * this.countVertical, b = Math.min(b, this.totalPageCount), c = Math.max(0, c); c < b && !(1 <= this.LoadCount); c++) this.taskList.unShiftList({
                index: c
            },
            function(b) {
                this.fillImage(b.index)
            }.bind(this))
        }.interval(this, 60)
    },
    hideBox: function() {
        this.show && this.background.animate({
            opacity: "0"
        },
        300, "linear",
        function() {
            this.background.hide();
            this.show = !1;
            this.interval && this.interval.stop()
        }.bind(this))
    },
    getShowStatu: function() {
        return this.show
    },
    showshow: function() {
        this.show || (this.background.show(), this.fillContent(), this.background.animate({
            opacity: "1"
        },
        300, "linear",
        function() {
            this.show = !0
        }.bind(this)))
    },
    setHighLight: function(b) {
        this.itemArray && this.itemArray[b - 1] && this.itemArray[b - 1].imgContainer && this.itemArray[b - 1].imgContainer.css({
            "border-color": this.itemBorderColor
        })
    },
    clearHighLight: function() {
        if (this.itemArray) for (var b = this.itemArray.length,
        c = 0; c < b; c++) this.itemArray[c].imgContainer && this.itemArray[c].imgContainer.css({
            "border-color": "transparent"
        })
    },
    fissionAll: function() {},
    mergeAll: function() {},
    showOrHide: function() {
        this.show ? this.hideBox() : this.showshow()
    },
    addItem: function() {
        for (var b = 0; b < this.totalPageCount; b++) {
            var c = this.initItem(b);
            this.itemBox.append(c.item);
            this.itemArray.push(c)
        }
    },
    getHeightArray: function() {
        var b = (this.itemWidth - 2 * this.itemBorderWidth) * bookConfig.largePageHeight / bookConfig.largePageWidth;
        return {
            imageHeight: b,
            titleHeight: 15,
            itemHeight: b + 15 + 4 * this.itemBorderWidth
        }
    },
    initItem: function(b) {
        var c = $("<div style='display:inline-block;'></div>"),
        d = $("<p><span>" + (b + 1) + "</span></p>"),
        f = $("<div></div>"),
        g = $("<img/>");
        c.css({
            cursor: "pointer",
            width: this.itemWidth,
            height: this.itemHeightArray.itemHeight,
            padding: this.marginTop + "px 0px 0px " + this.marginLeft + "px",
            "text-align": "center"
        });
        f.css({
            width: this.itemWidth - 2 * this.itemBorderWidth,
            height: this.itemHeightArray.imageHeight,
            "border-style": "solid",
            "border-width": this.itemBorderWidth + "px",
            "border-radius": this.itemBorderWidth + "px",
            "border-color": "transparent"
        });
        g.css({
            width: "100%",
            height: "100%",
            "background-color": "#ffffff",
            "background-image": "url(" + uiBaseURL + "loading.gif)",
            "background-repeat": "no-repeat",
            "background-position": "center"
        });
        d.css({
            width: this.itemWidth - 2 * this.itemBorderWidth,
            height: this.itemHeightArray.titleHeight + "px",
            "line-height": this.itemHeightArray.titleHeight + "px",
            "vertical-align": "middle",
            color: "#eeeeee",
            "font-family": "Arial",
            "font-size": this.itemHeightArray.titleHeight + "px",
            padding: "0px",
            margin: "0px",
            "border-style": "solid",
            "border-width": this.itemBorderWidth + "px",
            "border-color": "transparent"
        });
        c.append(f);
        c.append(d);
        f.append(g);
        c.attr("id", b);
        c.bind(_event._end,
        function(b) {
            b.stopPropagation()
        }.bind(this));
        c.bind("click",
        function(c) {
            gotoPageFun(b + 1);
            this.hideBox();
            c.stopPropagation()
        }.bind(this));
        return {
            item: c,
            imgContainer: f,
            img: g,
            title: d,
            fill: !1
        }
    },
    fillImageOrNot: function(b, c) {
        return ! b || "string" != typeof b || passwardType() && bookConfig.excludeFrontPages && c > parseInt(bookConfig.excludeFrontPages) && !verifyPassward() ? !1 : !0
    },
    fillImage: function(b) {
        if (this.itemArray && this.itemArray[b] && !this.itemArray[b].fill && this.itemArray[b].img) {
            var c = getPageDir(b + 1, "thumb", originTotalPageCount);
            c && "string" == typeof c && this.fillImageOrNot(c, b + 1) && ( - 1 < c.indexOf(".js") ? (this.LoadCount++, global[decodeDatabasePrefix("thum") + (b + 1)] && "string" == typeof global[decodeDatabasePrefix("thum") + (b + 1)] ? (this.itemArray[b].img.attr("src", dataBase64Str(b + 1, "thum")), this.itemArray[b].fill = !0) : loadJavascript(c,
            function(c) {
                this.itemArray[b].img.attr("src", dataBase64Str(b + 1, "thum", c));
                this.itemArray[b].fill = !0
            }.bind(this),
            function() {})) : (this.LoadCount++, this.itemArray[b].img.attr("src", c), this.itemArray[b].fill = !0))
        }
    },
    initEvent: function() {
        this.background.bind(_event._end,
        function() {
            this.hideBox()
        }.bind(this))
    }
});
var hexcase = 0,
b64pad = "",
chrsz = 8;
function compareov() {
    var b = Date.parse(new Date);
    return orgt(b) === vldt(b)
}
function orgt(b) {
    return binl2hex(core_hx(str2binl(b), b.length * chrsz))
}
function vldt(b) {
    return binl2hex(core_hx(str2binl(b), b.length * chrsz))
}
function core_hx(b, c) {
    b[c >> 5] |= 128 << c % 32;
    b[(c + 64 >>> 9 << 4) + 14] = c;
    for (var d = 1732584193,
    f = -271733879,
    g = -1732584194,
    h = 271733878,
    k = 0; k < b.length; k += 16) var l = d,
    m = f,
    n = g,
    p = h,
    d = hx_ff(d, f, g, h, b[k + 0], 7, -680876936),
    h = hx_ff(h, d, f, g, b[k + 1], 12, -389564586),
    g = hx_ff(g, h, d, f, b[k + 2], 17, 606105819),
    f = hx_ff(f, g, h, d, b[k + 3], 22, -1044525330),
    d = hx_ff(d, f, g, h, b[k + 4], 7, -176418897),
    h = hx_ff(h, d, f, g, b[k + 5], 12, 1200080426),
    g = hx_ff(g, h, d, f, b[k + 6], 17, -1473231341),
    f = hx_ff(f, g, h, d, b[k + 7], 22, -45705983),
    d = hx_ff(d, f, g, h, b[k + 8], 7, 1770035416),
    h = hx_ff(h, d, f, g, b[k + 9], 12, -1958414417),
    g = hx_ff(g, h, d, f, b[k + 10], 17, -42063),
    f = hx_ff(f, g, h, d, b[k + 11], 22, -1990404162),
    d = hx_ff(d, f, g, h, b[k + 12], 7, 1804603682),
    h = hx_ff(h, d, f, g, b[k + 13], 12, -40341101),
    g = hx_ff(g, h, d, f, b[k + 14], 17, -1502002290),
    f = hx_ff(f, g, h, d, b[k + 15], 22, 1236535329),
    d = hx_gg(d, f, g, h, b[k + 1], 5, -165796510),
    h = hx_gg(h, d, f, g, b[k + 6], 9, -1069501632),
    g = hx_gg(g, h, d, f, b[k + 11], 14, 643717713),
    f = hx_gg(f, g, h, d, b[k + 0], 20, -373897302),
    d = hx_gg(d, f, g, h, b[k + 5], 5, -701558691),
    h = hx_gg(h, d, f, g, b[k + 10], 9, 38016083),
    g = hx_gg(g, h, d, f, b[k + 15], 14, -660478335),
    f = hx_gg(f, g, h, d, b[k + 4], 20, -405537848),
    d = hx_gg(d, f, g, h, b[k + 9], 5, 568446438),
    h = hx_gg(h, d, f, g, b[k + 14], 9, -1019803690),
    g = hx_gg(g, h, d, f, b[k + 3], 14, -187363961),
    f = hx_gg(f, g, h, d, b[k + 8], 20, 1163531501),
    d = hx_gg(d, f, g, h, b[k + 13], 5, -1444681467),
    h = hx_gg(h, d, f, g, b[k + 2], 9, -51403784),
    g = hx_gg(g, h, d, f, b[k + 7], 14, 1735328473),
    f = hx_gg(f, g, h, d, b[k + 12], 20, -1926607734),
    d = hx_hh(d, f, g, h, b[k + 5], 4, -378558),
    h = hx_hh(h, d, f, g, b[k + 8], 11, -2022574463),
    g = hx_hh(g, h, d, f, b[k + 11], 16, 1839030562),
    f = hx_hh(f, g, h, d, b[k + 14], 23, -35309556),
    d = hx_hh(d, f, g, h, b[k + 1], 4, -1530992060),
    h = hx_hh(h, d, f, g, b[k + 4], 11, 1272893353),
    g = hx_hh(g, h, d, f, b[k + 7], 16, -155497632),
    f = hx_hh(f, g, h, d, b[k + 10], 23, -1094730640),
    d = hx_hh(d, f, g, h, b[k + 13], 4, 681279174),
    h = hx_hh(h, d, f, g, b[k + 0], 11, -358537222),
    g = hx_hh(g, h, d, f, b[k + 3], 16, -722521979),
    f = hx_hh(f, g, h, d, b[k + 6], 23, 76029189),
    d = hx_hh(d, f, g, h, b[k + 9], 4, -640364487),
    h = hx_hh(h, d, f, g, b[k + 12], 11, -421815835),
    g = hx_hh(g, h, d, f, b[k + 15], 16, 530742520),
    f = hx_hh(f, g, h, d, b[k + 2], 23, -995338651),
    d = hx_ii(d, f, g, h, b[k + 0], 6, -198630844),
    h = hx_ii(h, d, f, g, b[k + 7], 10, 1126891415),
    g = hx_ii(g, h, d, f, b[k + 14], 15, -1416354905),
    f = hx_ii(f, g, h, d, b[k + 5], 21, -57434055),
    d = hx_ii(d, f, g, h, b[k + 12], 6, 1700485571),
    h = hx_ii(h, d, f, g, b[k + 3], 10, -1894986606),
    g = hx_ii(g, h, d, f, b[k + 10], 15, -1051523),
    f = hx_ii(f, g, h, d, b[k + 1], 21, -2054922799),
    d = hx_ii(d, f, g, h, b[k + 8], 6, 1873313359),
    h = hx_ii(h, d, f, g, b[k + 15], 10, -30611744),
    g = hx_ii(g, h, d, f, b[k + 6], 15, -1560198380),
    f = hx_ii(f, g, h, d, b[k + 13], 21, 1309151649),
    d = hx_ii(d, f, g, h, b[k + 4], 6, -145523070),
    h = hx_ii(h, d, f, g, b[k + 11], 10, -1120210379),
    g = hx_ii(g, h, d, f, b[k + 2], 15, 718787259),
    f = hx_ii(f, g, h, d, b[k + 9], 21, -343485551),
    d = safe_add(d, l),
    f = safe_add(f, m),
    g = safe_add(g, n),
    h = safe_add(h, p);
    return [d, f, g, h]
}
function hx_cmn(b, c, d, f, g, h) {
    return safe_add(bit_rol(safe_add(safe_add(c, b), safe_add(f, h)), g), d)
}
function hx_ff(b, c, d, f, g, h, k) {
    return hx_cmn(c & d | ~c & f, b, c, g, h, k)
}
function hx_gg(b, c, d, f, g, h, k) {
    return hx_cmn(c & f | d & ~f, b, c, g, h, k)
}
function hx_hh(b, c, d, f, g, h, k) {
    return hx_cmn(c ^ d ^ f, b, c, g, h, k)
}
function hx_ii(b, c, d, f, g, h, k) {
    return hx_cmn(d ^ (c | ~f), b, c, g, h, k)
}
function safe_add(b, c) {
    var d = (b & 65535) + (c & 65535);
    return (b >> 16) + (c >> 16) + (d >> 16) << 16 | d & 65535
}
function bit_rol(b, c) {
    return b << c | b >>> 32 - c
}
function str2binl(b) {
    for (var c = [], d = (1 << chrsz) - 1, f = 0; f < b.length * chrsz; f += chrsz) c[f >> 5] |= (b.charCodeAt(f / chrsz) & d) << f % 32;
    return c
}
function binl2hex(b) {
    for (var c = hexcase ? "0123456789ABCDEF": "0123456789abcdef", d = "", f = 0; f < 4 * b.length; f++) d += c.charAt(b[f >> 2] >> f % 4 * 8 + 4 & 15) + c.charAt(b[f >> 2] >> f % 4 * 8 & 15);
    return d
};
var ButtonType = {
    last: 1,
    next: 2,
    prev: 3,
    first: 4,
    home: 5,
    zoom: 6,
    autoPlay: 7,
    help: 8,
    thumbnails: 9,
    sharethis: 10,
    search: 11,
    download: 12,
    fullscreen: 13,
    bookmark: 14,
    sound: 15,
    language: 16,
    print: 17,
    about: 18,
    more: 19,
    note: 20,
    tableOfContent: 21,
    video: 22,
    slideShow: 23
};
loadToolBar.extend({
    addButton: function(b, c) {
        for (var d = this,
        f = 0; f < c.length; f++) switch (c[f]) {
        case ButtonType.last:
            this.btnLast = $("<div title='Last page' id='btnLast' class='button'></div>");
            this.btnLast.append(getImage(toolBarIconsURL[1])).asButton().attr("title", getLanguage("btnLastPage", "Last"));
            b.append(this.btnLast);
            this.btnLast.bind(_event._end,
            function() {
                d.lastPage();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.next:
            this.btnNext = $("<div title='Next page' id='btnRight' class='button'></div>");
            this.btnNext.append(getImage(toolBarIconsURL[2])).asButton().attr("title", getLanguage("btnNextPage", "Next"));
            b.append(this.btnNext);
            this.btnNext.bind(_event._end,
            function() {
                d.nextPage();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.prev:
            this.btnPrevious = $("<div title='Previous page'  id='btnLeft' class='button'></div>");
            this.btnPrevious.append(getImage(toolBarIconsURL[3])).asButton().attr("title", getLanguage("btnPrePage", "Previous"));
            b.append(this.btnPrevious);
            this.btnPrevious.bind(_event._end,
            function() {
                d.prePage();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.first:
            this.btnFirst = $("<div title='First page' id='btnFirst' class='button' ></div>");
            this.btnFirst.append(getImage(toolBarIconsURL[4])).asButton().attr("title", getLanguage("btnFirstPage", "First"));
            b.append(this.btnFirst);
            this.btnFirst.bind(_event._end,
            function() {
                d.firstPage();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.home:
            this.btnHome = $("<div title='Home' id='btnHome' class='button'></div>");
            this.btnHome.append(getImage(toolBarIconsURL[13])).asButton().attr("title", getLanguage("btnGoToHome", "Home"));
            bookConfig.HomeButtonVisible || this.btnHome.css({
                display: "none"
            });
            b.append(this.btnHome);
            this.btnHome.bind(_event._end,
            function() {
                homeButtonEvent();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.zoom:
            this.btnZoom = $("<div title='Zoom in' id='btnZoom' class='button'></div>");
            this.btnZoom.append(getImage(toolBarIconsURL[5])).asButton().attr("title", getLanguage("btnZoomIn", "Zoom in"));
            bookConfig.ZoomButtonVisible && isFlipModel || this.btnZoom.css("display", "none");
            b.append(this.btnZoom);
            this.btnZoom.bind(_event._end,
            function() {
                isZoomStatus() ? this.changeZoomIcon(!0) : this.changeZoomIcon(!1);
                onDoubleTap.bind(BookInfo.getBook().bookMap.book.showPage)({
                    pointers: [{
                        pageX: windowWidth / 2,
                        pageY: windowHeight / 2
                    }]
                });
                this.enterOption && window.clearTimeout(this.enterOption);
                auto_player.isPlaying() && (auto_player.stop(), this.changeAutoPlayIcon());
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            }.bind(this));
            break;
        case ButtonType.autoPlay:
            this.btnAutoPlay = $("<div title='Auto play' id='btnAutoPlay' class='button' ></div>");
            this.btnAutoPlay.append(getImage(toolBarIconsURL[7])).asButton().attr("title", getLanguage("btnAutoFlip", "Auto flip"));
            bookConfig.AutoPlayButtonVisible || this.btnAutoPlay.css("display", "none");
            b.append(this.btnAutoPlay);
            this.btnAutoPlay.bind(_event._end,
            function() {
                auto_player.isPlaying() ? auto_player.stop() : auto_player.start();
                d.changeAutoPlayIcon();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.help:
            this.btnHelp = $("<div title='Help' id='btnHelp' class='button'></div>");
            this.btnHelp.append(getImage(toolBarIconsURL[22])).asButton().attr("title", getLanguage("btnHelp", "Help"));
            bookConfig.HelpButtonVisible || this.btnHelp.css({
                display: "none"
            });
            b.append(this.btnHelp);
            this.btnHelp.bind(_event._end,
            function() {
                helpBody.getShowStatu() ? helpBody.hideBox() : helpBody.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.thumbnails:
            this.btnThumb = $("<div title='Thumbnails'  id='btnThumb' class='button'></div>");
            this.btnThumb.append(getImage(toolBarIconsURL[9])).asButton().attr("title", getLanguage("btnThumb", "Thumbnails"));
            bookConfig.ThumbnailsButtonVisible || this.btnThumb.css("display", "none");
            b.append(this.btnThumb);
            this.btnThumb.bind(_event._end,
            function() {
                thumbnail.getShowStatu() ? thumbnail.hideBox() : thumbnail.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.sharethis:
            this.btnShare = $("<div title='Share'  id='btnShare' class='button'></div>");
            this.btnShare.append(getImage(toolBarIconsURL[10])).asButton().attr("title", getLanguage("btnSocialShare", "Share"));
            bookConfig.ShareButtonVisible || this.btnShare.css("display", "none");
            b.append(this.btnShare);
            this.btnShare.bind(_event._end,
            function() {
                sharePanel.getShowStatu() ? sharePanel.hideBox() : sharePanel.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            this.btnShare.bind(_event._down,
            function() {
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1);
                return ! 1
            });
            break;
        case ButtonType.search:
            this.btnSearch = $("<div title='Search' id='btnSearch' class='button'></div>");
            this.btnSearch.append(getImage(toolBarIconsURL[11])).asButton().attr("title", getLanguage("btnSearch", "Search"));
            bookConfig.SearchButtonVisible || this.btnSearch.css("display", "none");
            b.append(this.btnSearch);
            this.btnSearch.bind(_event._end,
            function() {
                frmSearch.isSearchShow ? frmSearch.closeForm() : frmSearch.showForm();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.download:
            this.btnDownload = $("<div title='Download' id='btnDownload' class='button'></div>");
            this.btnDownload.append(getImage(toolBarIconsURL[12])).asButton().attr("title", getLanguage("btnDownload", "Download"));
            bookConfig.DownloadButtonVisible || this.btnDownload.css({
                display: "none"
            });
            b.append(this.btnDownload);
            this.btnDownload.bind(_event._end,
            function() {
                "" != bookConfig.DownloadURL && (window.location = bookConfig.DownloadURL);
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.fullscreen:
            this.btnFullscreen = $("<div title='Fullscreen' id='btnfullscreen' class='button'></div>");
            this.btnFullscreen.append(getImage(toolBarIconsURL[27])).asButton().attr("title", getLanguage("btnFullscreen", "Fullscreen"));
            bookConfig.FullscreenButtonVisible || this.btnFullscreen.css({
                display: "none"
            });
            b.append(this.btnFullscreen);
            this.btnFullscreen.bind(_event._end,
            function() {
                fullscreenFun();
                return ! 1
            });
            $(document).bind(fullScreenApi.fullScreenEventName,
            function() {
                d.changeFullscreenIcon(fullScreenApi.isFullScreen())
            });
            break;
        case ButtonType.bookmark:
            this.btnBookMark = $("<div title='Bookmark' id='btnBookmark' class='button'></div>");
            this.btnBookMark.append(getImage(toolBarIconsURL[14])).asButton().attr("title", getLanguage("btnBookMark", "Bookmark"));
            bookConfig.BookMarkButtonVisible || this.btnBookMark.css("display", "none");
            b.append(this.btnBookMark);
            this.btnBookMark.bind(_event._end,
            function() {
                bookmark.showHide();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.tableOfContent:
            this.btnTableOfContent = $("<div title='TableOfContent' id='btnTableOfContent' class='button'></div>");
            this.btnTableOfContent.append(getImage(toolBarIconsURL[32])).asButton().attr("title", getLanguage("btnTableOfContent", "TableOfContent"));
            bookConfig.TableOfContentButtonVisible || this.btnTableOfContent.css("display", "none");
            b.append(this.btnTableOfContent);
            this.btnTableOfContent.bind(_event._end,
            function() {
                frmBookmark.getShowStatu() ? frmBookmark.closeForm() : frmBookmark.showForm();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.sound:
            this.btnSound = $("<div title='Sound on' id='btnSound' class='button'></div>");
            this.btnSound.append(getImage(toolBarIconsURL[15])).asButton().attr("title", getLanguage("btnSoundOn", "Sound on"));
            bookConfig.BackgroundSoundButtonVisible || this.btnSound.css({
                display: "none"
            });
            b.append(this.btnSound);
            this.btnSound.bind(_event._end,
            function() {
                d.changeSoundIcon();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.language:
            this.btnLanguage = $("<div title='Language' id='btnLanguage' class='button'></div>");
            this.btnLanguage.append(getImage(toolBarIconsURL[25])).asButton().attr("title", getLanguage("btnLanguage", "Language change"));
            1 >= language.length && this.btnLanguage.css({
                display: "none"
            });
            b.append(this.btnLanguage);
            this.btnLanguage.bind(_event._end,
            function() {
                languagePanel.getShowStatu() ? languagePanel.hideBox() : languagePanel.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.print:
            this.btnPrint = $("<div title='Print' id='btnPrint' class='button'></div>");
            this.btnPrint.append(getImage(toolBarIconsURL[21])).asButton().attr("title", getLanguage("btnPrint", "Print"));
            bookConfig.PrintButtonVisible || this.btnPrint.css({
                display: "none"
            });
            b.append(this.btnPrint);
            this.btnPrint.bind(_event._end,
            function() {
                printBody.getShowStatu() ? printBody.hideBox() : printBody.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.about:
            this.btnAbout = $("<div title='About' id='btnAbout' class='button'></div>");
            this.btnAbout.append(getImage(toolBarIconsURL[23])).asButton().attr("title", getLanguage("btnAbout", "About"));
            bookConfig.aboutButtonVisible || this.btnAbout.css({
                display: "none"
            });
            b.append(this.btnAbout);
            this.btnAbout.bind(_event._end,
            function() {
                aboutBody.getShowStatu() ? aboutBody.hideBox() : aboutBody.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.more:
            this.btnMore = $("<div title='More' id='btnMore' class='button'></div>");
            this.btnMore.append(getImage(toolBarIconsURL[24])).asButton().attr("title", getLanguage("btnMore", "More"));
            b.append(this.btnMore);
            this.btnMore.bind(_event._end,
            function() {
                isMoreShow ? moreBar.hideMoreBar() : moreBar.showMoreBar();
                isMoreShow = !isMoreShow;
                return ! 1
            });
            break;
        case ButtonType.note:
            this.btnNote = $("<div title='Note' id='btnNote' class='button'></div>");
            this.btnNote.append(getImage(toolBarIconsURL[31])).asButton().attr("title", getLanguage("btnNote", "Annotation"));
            bookConfig.AnnotationButtonVisible || this.btnNote.css({
                display: "none"
            });
            b.append(this.btnNote);
            this.btnNote.bind(_event._end,
            function() {
                annotationPannel.getShowStatu() ? annotationPannel.hideBox() : annotationPannel.showshow();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.video:
            this.btnVideo = $("<div title='VideoGallery' id='btnVideo' class='button'></div>");
            this.btnVideo.append(getImage(toolBarIconsURL[33])).asButton().attr("title", getLanguage("btnVideo", "VideoGallery"));
            bookConfig.VideoButtonVisible || this.btnVideo.css({
                display: "none"
            });
            b.append(this.btnVideo);
            this.btnVideo.bind(_event._end,
            function() {
                videoGallery.showHide();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            });
            break;
        case ButtonType.slideShow:
            this.btnSlideShow = $("<div title='SlideShow' id='btnSlideShow' class='button'></div>"),
            this.btnSlideShow.append(getImage(toolBarIconsURL[34])).asButton().attr("title", getLanguage("btnSlideShow", "SlideShow")),
            bookConfig.SlideshowButtonVisible || this.btnSlideShow.css({
                display: "none"
            }),
            b.append(this.btnSlideShow),
            this.btnSlideShow.bind(_event._end,
            function() {
                photoGallery.showHide();
                isMoreShow && (moreBar.hideMoreBar(), isMoreShow = !1)
            })
        }
    },
    lastPage: function() {
        rightToLeft ? firstPageFun() : lastPageFun()
    },
    nextPage: function() {
        rightToLeft ? previousPageFun() : nextPageFun()
    },
    prePage: function() {
        rightToLeft ? nextPageFun() : previousPageFun()
    },
    firstPage: function() {
        rightToLeft ? lastPageFun() : firstPageFun()
    },
    OnMouseOver: function() {
        bookConfig.HomeButtonVisible && this.btnHome.mouseOverCursor();
        bookConfig.PrintButtonVisible && this.btnPrint.mouseOverCursor();
        bookConfig.DownloadButtonVisible && this.btnDownload.mouseOverCursor();
        bookConfig.ZoomButtonVisible && isFlipModel && this.btnZoom.mouseOverCursor();
        bookConfig.BookMarkButtonVisible && this.btnBookMark.mouseOverCursor();
        bookConfig.TableOfContentButtonVisible && this.btnTableOfContent.mouseOverCursor();
        bookConfig.ShareButtonVisible && this.btnShare.mouseOverCursor();
        bookConfig.AutoPlayButtonVisible && this.btnAutoPlay.mouseOverCursor();
        bookConfig.BackgroundSoundButtonVisible && this.btnSound.mouseOverCursor();
        bookConfig.HelpButtonVisible && this.btnHelp.mouseOverCursor();
        bookConfig.aboutButtonVisible && this.btnAbout.mouseOverCursor();
        bookConfig.ThumbnailsButtonVisible && this.btnThumb && this.btnThumb.mouseOverCursor();
        bookConfig.FullscreenButtonVisible && this.btnFullscreen.mouseOverCursor();
        1 < language.length && this.btnLanguage.mouseOverCursor();
        bookConfig.AnnotationButtonVisible && this.btnNote.mouseOverCursor();
        bookConfig.VideoButtonVisible && this.btnVideo.mouseOverCursor();
        bookConfig.SlideshowButtonVisible && this.btnSlideShow.mouseOverCursor();
        this.btnLast.mouseOverCursor();
        this.btnNext.mouseOverCursor();
        this.btnPrevious.mouseOverCursor();
        this.btnFirst.mouseOverCursor();
        bookConfig.SearchButtonVisible && this.btnSearch.mouseOverCursor();
        this.btnMore.mouseOverCursor()
    },
    changeLanguage: function() {
        this.btnLast.attr("title", getLanguage("btnLastPage", "Last"));
        this.btnNext.attr("title", getLanguage("btnNextPage", "Next"));
        this.btnPrevious.attr("title", getLanguage("btnPrePage", "Previous"));
        this.btnFirst.attr("title", getLanguage("btnFirstPage", "First"));
        this.btnZoom.attr("title", isZoomStatus() ? getLanguage("btnZoomOut", "Zoom out") : getLanguage("btnZoomIn", "Zoom in"));
        this.btnAutoPlay.attr("title", auto_player.isPlaying() ? getLanguage("btnStopAutoFlip", "Stop auto flip") : getLanguage("btnAutoFlip", "Auto flip"));
        this.btnThumb.attr("title", getLanguage("btnThumb", "Thumbnails"));
        this.btnShare.attr("title", getLanguage("btnSocialShare", "Share"));
        this.btnSearch.attr("title", getLanguage("btnSearch", "Search"));
        this.btnBookMark.attr("title", getLanguage("btnBookMark", "Bookmark"));
        this.btnTableOfContent.attr("title", getLanguage("btnTableOfContent", "table of content"));
        this.btnDownload.attr("title", getLanguage("btnDownload", "Download"));
        this.btnHome.attr("title", getLanguage("btnGoToHome", "Home"));
        this.btnPrint.attr("title", getLanguage("btnPrint", "Print"));
        this.btnNote.attr("title", getLanguage("btnNote", "Annotation"));
        this.btnVideo.attr("title", getLanguage("btnVideo", "videoGallery"));
        this.btnSlideShow.attr("title", getLanguage("btnSlideShow", "photoGallery"));
        this.btnFullscreen.attr("title", getLanguage("btnFullscreen", "Fullscreen"));
        this.btnHelp.attr("title", getLanguage("btnHelp", "Help"));
        this.btnAbout.attr("title", getLanguage("btnAbout", "About"));
        this.btnLanguage.attr("title", getLanguage("btnLanguage", "Language"));
        this.btnMore.attr("title", getLanguage("btnMore", "More"));
        this.btnSound.attr("title", isPlaying ? getLanguage("btnSoundOn", "Sound on") : getLanguage("btnSoundOff", "Sound off"));
        rightToLeft && (this.btnFirst.attr({
            title: getLanguage("btnLastPage", "Last")
        }), this.btnLast.attr({
            title: getLanguage("btnFirstPage", "First")
        }), this.btnNext.attr({
            title: getLanguage("btnPrePage", "Previous")
        }), this.btnPrevious.attr({
            title: getLanguage("btnNextPage", "Next")
        }))
    }
});
var gradientColorA, gradientColorB, gradientColorAngle, backGroundImgURL, zoomButtonEnable, thumbButtonEnable, shareButtonEnable, searchButtonEnable, bookmarkButtonEnable, tableofcontentButtonEnable, windowWidth = 0,
windowHeight = 0,
toolBarColor, buttonColor, originTotalPageCount, totalPageCount, leftShadowWidth = 50,
rightShadowWidth = 50,
zoomPageWidth, zoomPageHeight, flipTime = 600,
isRegister = !1,
bookDescription, bookTitle, showFlipButton, normalEventRadius = 1E4,
singleEventRadius = 1E4,
stopFlip = !1,
flipping = !1,
isTouch = isTouchDevice(),
bookContainer,
tmpContainer,
onBookLoad,
slideBook,
singleSlideBook,
catalogBook,
singleCatalogBook,
phoneSlideBook,
singlePhoneSlideBook,
flipBook,
singlePageBook,
leftRightButton,
toolBar,
printBody,
helpBody,
aboutBody,
noteCookie,
textRemark,
signature,
annotationShapes;
cursor = !0;
var highLight, sharePanel, annotationPannel, videoGallery, photoGallery, languagePanel, QRcode, QRbutton, moreBar, pageIndexTextField, _singleBook, resizeBookAfterFlip = !1,
frmSearch, frmShare, backgroundAudio, auto_player, productName, homePage, _tipsBox, frmBookmark, bookmark, thumbnail, oriPageIndex = 1,
googleID, hardPageEnable, uiBaseURL, phoneBaseURL, soundBaseURL, browserType, rightToLeft = !1,
isFlipPdf = !1,
flaudio = 0,
flagspeak = 0,
isFlipModel = !0,
hadBMT, bgSound, backgroundObj, bmtBox, textForPages = [],
positionForPages = [],
loadSearchFlag = !1,
iconArray,
toolBarIconsURL,
bookType = 0,
thumbnailHeight = 0;
global.crBefore = DeString("d2b0aa5705413c96");
global.crAfter = DeString("d35426b1c0d303cfa3012949ee");
function scrapOriginPageIndex() {
    var b = bookConfig.OriginPageIndex,
    c = window.location.hash;
    "" != c && 3 < c.length && "#p=" == c.substr(0, 3) && (b = parseInt(getRealPageNumber(c.substr(3, c.length - 3))));
    b = Math.max(1, b);
    return b = Math.min(originTotalPageCount, b)
}
function initComponents() {
    isPhone() || isPad() || (bookConfig.PrintButtonVisible && (global.printBody = new printBar(tmpContainer)), bookConfig.HelpButtonVisible && (global.helpBody = new helpBar(tmpContainer)), bookConfig.aboutButtonVisible && (global.aboutBody = new aboutBar(tmpContainer)), bookConfig.ShareButtonVisible && (global.sharePanel = new SharePanel(tmpContainer)), 1 < language.length && (global.languagePanel = new languageChange(tmpContainer)), bookConfig.AnnotationButtonVisible && (global.annotationPannel = new AnnotationPannel(tmpContainer)), bookConfig.VideoButtonVisible && (global.videoGallery = new VideoGallery(tmpContainer, global.videoList)), bookConfig.SlideshowButtonVisible && (global.photoGallery = new PhotoGallery(tmpContainer, global.slideshow)), isPhoneBook() || (global.moreBar = new initMoreBar), bookConfig.TableOfContentButtonVisible && (global.frmBookmark = new tableContent(tmpContainer)), bookConfig.SearchButtonVisible && (global.frmSearch = new searchForm(tmpContainer)), !isBelowIE9() && bookConfig.BookMarkButtonVisible && (global.bookmark = new BookMark(tmpContainer)), initLogoBar());
    bookConfig.QRCode && (global.QRcode = new CodeBar(tmpContainer), global.QRbutton = new QRButton(tmpContainer));
    global.backgroundObj = new initBackground(tmpContainer);
    bookConfig.flipshortcutbutton && (global.leftRightButton = new LeftRightButton(tmpContainer));
    global._tipsBox = new tipsBox("This is the last page", bookContainer);
    global.auto_player = new autoFlip;
    global.bgSound = new BackgroundMusic;
    global.volumeControlBar = new VolumeControlBar(tmpContainer);
    eval(DeString("f341819f83944fb222ea09f0eaa26b06d7198f1c00b6cd49"))
}
bdor[42] = function() {
    return bdor[33](bdor[32](37, 33) + 10, 36)
} ();
function initFlipBook(b) {
    if (bookType == BookType.normal_book || bookType == BookType.single_book) isPhone() || isPad() || toolBar.show(),
    bookConfig.HardPageEnable ? (global.flipBook = new HardPhoneBook(bookContainer, b), global.singlePageBook = new SingleHardPhoneBook(bookContainer, b)) : (global.flipBook = new NormalPhoneBook(bookContainer, b), global.singlePageBook = new SinglePhoneBook(bookContainer, b))
}
function initCatalogBook(b) {
    bookType == BookType.catalog_book && (global.catalogBook = new CatalogBook(bookContainer, b), "lite" == bookConfig.ToolbarViewMode.toLowerCase() ? toolBar.hide() : (toolBar.show(), catalogBook.guidBar.hide()));
    bookType == BookType.singleCatalog_book && (global.singleCatalogBook = new SingleCatalogBook(bookContainer, b), toolBar.hide())
}
function initSlideBook(b) {
    bookType == BookType.slide_book && (global.slideBook = new PcSlideBook(bookContainer, b));
    bookType == BookType.singleSlide_book && (global.singleSlideBook = new PcSingleSlideBook(bookContainer, b));
    if (bookType == BookType.phone_slide_book || bookType == BookType.singlePhone_slide_book) global.phoneSlideBook = new PhoneSlideBook(bookContainer, b),
    global.singlePhoneSlideBook = new PhoneSingleSlideBook(bookContainer, b),
    toolBar.hide()
}
function initToolbar() {
    global.shoppingCountHTML = $("<span class='shoppingCount'>0</span>"); ! isSlideBook() || isPhone() || isPad() || "lite" != bookConfig.ToolbarViewMode || (global.toolBar = new PCSlideToolbar(tmpContainer, iconArray));
    if (isPhone() || isPad()) global.toolBar = new PhoneToolbar(tmpContainer, iconArray);
    global.toolBar || (global.toolBar = new loadToolBar(tmpContainer, iconArray));
    global.toolBar && toolBar.show()
}
function winodwDynamicResize() {
    if (isTouch) $(window).on("orientationchange",
    function() {
        onStageResize.delay(200)
    });
    $(window).resize(onStageResize);
    $.system.name == $.system.IOS && 8 <= $.system.version &&
    function() {
        if (windowHeight != window.innerHeight || windowWidth != window.innerWidth) windowHeight = window.innerHeight,
        windowWidth = window.innerWidth,
        onStageResize()
    }.interval(1E3)
}
function scrapURL() {
    var b = window.location.hash;
    "" != b && 3 < b.length && "#p=" == b.substr(0, 3) ? window.setTimeout(function() {
        var c = parseInt(getRealPageNumber(b.substr(3, b.length - 3)));
        gotoPageFun(c);
        TurnonAutoFlip()
    },
    1E3) : TurnonAutoFlip();
    0 <= window.location.search.indexOf("fullscreen=true") &&
    function() {
        toolBar && toolBar.btnFullscreen && toolBar.btnFullscreen.trigger(_event._end);
        $(document).trigger(fullScreenApi.fullScreenEventName)
    }.delay(this, 50)
}
function customButtonIcons() {
    bookConfig.HomeButtonIcon && (toolBarIconsURL[ICON_HOME] = bookConfig.HomeButtonIcon);
    bookConfig.AnnotationButtonIcon && (toolBarIconsURL[ICON_ANNOTATION] = bookConfig.AnnotationButtonIcon);
    bookConfig.VideoButtonIcon && (toolBarIconsURL[ICON_VIDEOGALLERY] = bookConfig.VideoButtonIcon);
    bookConfig.SlideshowButtonIcon && (toolBarIconsURL[ICON_PHOTOGALLERY] = bookConfig.SlideshowButtonIcon);
    bookConfig.ShareButtonIcon && (toolBarIconsURL[ICON_SHARE] = bookConfig.ShareButtonIcon);
    bookConfig.ThumbnailButtonIcon && (toolBarIconsURL[ICON_THUMB] = bookConfig.ThumbnailButtonIcon);
    bookConfig.ZoomInButtonIcon && (toolBarIconsURL[ICON_ZOOMIN] = bookConfig.ZoomInButtonIcon);
    bookConfig.ZoomOutButtonIcon && (toolBarIconsURL[ICON_ZOOMOUT] = bookConfig.ZoomOutButtonIcon);
    bookConfig.FullscreenButtonIcon && (toolBarIconsURL[ICON_FULLSCREEN] = bookConfig.FullscreenButtonIcon);
    bookConfig.ExitFullscreenButtonIcon && (toolBarIconsURL[ICON_EXIT_FULLSCREEN] = bookConfig.ExitFullscreenButtonIcon);
    bookConfig.BookmarkButtonIcon && (toolBarIconsURL[ICON_BOOKMARK] = bookConfig.BookmarkButtonIcon);
    bookConfig.TableOfContentButtonIcon && (toolBarIconsURL[ICON_TOC] = bookConfig.TableOfContentButtonIcon);
    bookConfig.SearchButtonIcon && (toolBarIconsURL[ICON_SEARCH] = bookConfig.SearchButtonIcon);
    bookConfig.PrintButtonIcon && (toolBarIconsURL[ICON_PRINT] = bookConfig.PrintButtonIcon);
    bookConfig.BackgroundSoundButtonOnIcon && (toolBarIconsURL[ICON_SOUNDON] = bookConfig.BackgroundSoundButtonOnIcon);
    bookConfig.BackgroundSoundButtonOffIcon && (toolBarIconsURL[ICON_SOUNDOFF] = bookConfig.BackgroundSoundButtonOffIcon);
    bookConfig.HelpButtonIcon && (toolBarIconsURL[ICON_HELP] = bookConfig.HelpButtonIcon);
    bookConfig.AboutButtonIcon && (toolBarIconsURL[ICON_ABOUT] = bookConfig.AboutButtonIcon);
    bookConfig.AutoPlayStartButtonIcon && (toolBarIconsURL[ICON_AUTOPLAY] = bookConfig.AutoPlayStartButtonIcon);
    bookConfig.AutoPlayStopButtonIcon && (toolBarIconsURL[ICON_STOPAUTOPLAY] = bookConfig.AutoPlayStopButtonIcon);
    bookConfig.DownloadButtonIcon && (toolBarIconsURL[ICON_DOWNLOAD] = bookConfig.DownloadButtonIcon)
}
var resizeBySearchInput = function() { (isPhone() || isPad()) && global.foldingMenu && global.foldingMenu.visible && $("body").width()
},
totalThicknessWidth = function() {
    if (windowWidth < windowHeight) return 0;
    var b = Math.min(bookConfig.totalPageCount, 100),
    b = $.easing.easeOutQuad(null, b, 0, 30, 100),
    b = Math.floor(b),
    c = Math.max(windowHeight - bookConfig.topMargin - bookConfig.bottomMargin - toolBar.getHeight() - thumbnailHeight, 1),
    c = Math.min(1, c / 800),
    c = $.easing.swing(null, Math.max(b - 8, 0), 1, c - 1, 22);
    return b * c
};
function resizeAttachments() {
    global.foldingMenu && foldingMenu.resize(windowWidth, windowHeight);
    if (global.phoneSearch) global.phoneSearch.onResize();
    if (global.phoneShare) global.phoneShare.onResize();
    if (global.phoneTableOfContent) global.phoneTableOfContent.onResize();
    if (global.phonePrintBody) global.phonePrintBody.onResize();
    if (global.printBody) printBody.onResize();
    if (global.helpBody) helpBody.onResize();
    if (global.aboutBody) aboutBody.onResize();
    if (global.sharePanel) sharePanel.onResize();
    if (global.languagePanel) languagePanel.onResize();
    if (global.annotationPannel) annotationPannel.onResize();
    if (global.thumbnail) thumbnail.onResize();
    if (global.QRcode) QRcode.onResize();
    eval(DeString("f2586c0f732206360e3b6070d188b77db160631590cf40209726e199df9c04fe02f8f05d"));
    var b = Math.max(windowHeight - bookConfig.topMargin - bookConfig.bottomMargin - toolBar.getHeight() - thumbnailHeight, 1),
    c = Math.max(windowWidth - bookConfig.leftMargin - bookConfig.rightMargin, 1);
    global.frmSearch && (frmSearch.resize(240, b), frmSearch.setTop(toolBar.getTopHeight() + 10));
    global.frmBookmark && (c = Math.max(300, c / 4), frmBookmark.resize(c, b), frmBookmark.setTop(toolBar.getTopHeight() + 10));
    global.leftRightButton && leftRightButton.setPosition()
}
function resizeToolBar() {
    global.toolBar && toolBar.setButtonPosition();
    bookType != BookType.phone_slide_book && bookType != BookType.singlePhone_slide_book && (miniStyle.isMini() && !fullScreenApi.isFullScreen() ? (miniStyle.onResize(), global.toolBar && global.toolBar.hide(), global.QRbutton && global.QRbutton.hide(), bookType == BookType.catalog_book && global.catalogBook.guidBar.hide(), global.leftRightButton && leftRightButton.setShow(!1), miniStyle && miniStyle.show()) : (global.QRbutton && global.QRbutton.show(), bookType == BookType.slide_book && "lite" == bookConfig.ToolbarViewMode || bookType == BookType.singleSlide_book && "lite" == bookConfig.ToolbarViewMode || bookType == BookType.catalog_book && "lite" == bookConfig.ToolbarViewMode || bookType == BookType.singleCatalog_book || isPhone() || isPad() || toolBar.show(), bookType == BookType.catalog_book && "lite" == bookConfig.ToolbarViewMode.toLowerCase() && catalogBook.guidBar.show(), global.leftRightButton && leftRightButton.setShow(!0), miniStyle && miniStyle.hide()))
}
function resizeCatalogBook() {
    if (global.catalogBook) {
        var b = bookConfig.topMargin,
        c = bookConfig.leftMargin,
        d = bookConfig.rightMargin,
        f = bookConfig.bottomMargin;
        "lite" != bookConfig.ToolbarViewMode.toLowerCase() || miniStyle.isMini() && !fullScreenApi.isFullScreen() || (b = bookConfig.topMargin + 50);
        var g = 0;
        global.thumbnail && !0 == thumbnail.showing && (g = thumbnail.getHeight());
        var g = Math.max(windowHeight - b - f - toolBar.getHeight() - g, 1),
        h = Math.max(windowWidth - c - d, 1),
        k = bookConfig.largePageWidth * ( - parseFloat(bookConfig.visibleAreaLeft) + parseFloat(bookConfig.visibleAreaRight)) / 100,
        l = bookConfig.largePageHeight * (parseFloat(bookConfig.visibleAreaBottom) - parseFloat(bookConfig.visibleAreaTop)) / 100,
        k = getPageWidthHeight(h - 2 * bookConfig.hardCoverBorderWidth - 2 * totalThicknessWidth(), g - 2 * bookConfig.hardCoverBorderWidth, 2 * k, l),
        h = Math.min(50, 0.7 * k.y / 8);
        Math.min(0.7 * k.y, 310);
        c = parseInt(c) + h;
        d = parseInt(d) + h;
        h = Math.max(windowWidth - c - d, 1);
        "lite" == bookConfig.ToolbarViewMode.toLowerCase() && (g = Math.max(windowHeight - b - f, 1));
        k = getPageWidthHeight(h, g, 2 * bookConfig.largePageWidth, bookConfig.largePageHeight);
        c = (windowWidth - c - d - k.x) / 2 + c;
        f = -k.x / 4;
        d = k.x / 4;
        rightToLeft && (f = k.x / 4, d = -k.x / 4);
        var l = "lite" == bookConfig.ToolbarViewMode.toLowerCase() ? 0 : toolBar.getTopHeight(),
        b = (g - k.y) / 2 + b + l,
        m = {},
        l = 0; ! 0 == parseBool(bookConfig.retainBookCenter) && (1 == catalogBook.currentPageIndex && (l = f), f = bookConfig.totalPageCount, 1 == f % 2 && f++, catalogBook.currentPageIndex == f && (l = d), m = transformCSS({
            tran: {
                x: l,
                y: 0
            }
        }));
        m.top = b + "px";
        m.left = c + "px";
        catalogBook.setCSS(m);
        catalogBook.onResize(k.x / 2, k.y)
    }
    if (global.singleCatalogBook) singleCatalogBook.onResize(h, g)
}
var pageWidthHeight, containerHeight, containerWidth, largePageWidth, largePageHeight;
function resizeFlipBook() {
    var b = bookConfig.topMargin,
    c = bookConfig.leftMargin,
    d = bookConfig.rightMargin,
    f = bookConfig.bottomMargin,
    g = Math.max(windowWidth - c - d, 1),
    h = Math.max(windowHeight - b - f - toolBar.getHeight() - thumbnailHeight, 1),
    k = bookConfig.largePageWidth * ( - parseFloat(bookConfig.visibleAreaLeft) + parseFloat(bookConfig.visibleAreaRight)) / 100,
    l = bookConfig.largePageHeight * (parseFloat(bookConfig.visibleAreaBottom) - parseFloat(bookConfig.visibleAreaTop)) / 100,
    m = getPageWidthHeight(g - 2 * bookConfig.hardCoverBorderWidth - 2 * totalThicknessWidth(), h - 2 * bookConfig.hardCoverBorderWidth, 2 * k, l);
    if (global.flipBook) {
        var n = (g - m.x) / 2 + c,
        p = (h - m.y) / 2 + b + toolBar.getTopHeight(),
        q = -m.x / 4,
        t = m.x / 4;
        rightToLeft && (q = m.x / 4, t = -m.x / 4);
        var r = {},
        s = 0; ! 0 == parseBool(bookConfig.retainBookCenter) && (1 == flipBook.getCurrentPageIndex() && (s = q), flipBook.getCurrentPageIndex() == totalPageCount && (s = t), r = transformCSS({
            tran: {
                x: s,
                y: 0
            }
        }));
        r.top = p + "px";
        r.left = n + "px";
        flipBook.setCSS(r);
        flipBook.onResize(m.x / 2, m.y);
        transformCSS({
            tran: {
                x: s,
                y: 0
            },
            scale: 1,
            origin: {
                x: 0,
                y: 0
            },
            obj: flipBook.flipBook
        });
        flipBook.zoomOut()
    }
    global.singlePageBook && (m = getPageWidthHeight(windowWidth - bookConfig.hardCoverBorderWidth - totalThicknessWidth() - c - d, windowHeight - toolBar.getHeight() - bookConfig.hardCoverBorderWidth - b - f, k, l), singlePageBook.onResize(m.x, m.y), b = (h - m.y) / 2 + b + toolBar.getTopHeight(), singlePageBook.setCSS({
        top: b + "px",
        left: c + (g - m.x - bookConfig.hardCoverBorderWidth - totalThicknessWidth()) / 2 + (rightToLeft ? bookConfig.hardCoverBorderWidth: 0) + (rightToLeft ? totalThicknessWidth() : 0) + "px"
    }), transformCSS({
        tran: {
            x: 0,
            y: 0
        },
        scale: 1,
        origin: {
            x: 0,
            y: 0
        },
        obj: singlePageBook.flipBook
    }), singlePageBook.zoomOut())
}
function resizeSlideBook() {
    if (global.slideBook) slideBook.onResize();
    if (global.singleSlideBook) singleSlideBook.onResize();
    if (global.phoneSlideBook) phoneSlideBook.onResize(windowWidth, windowHeight);
    if (global.singlePhoneSlideBook) singlePhoneSlideBook.onResize(windowWidth, windowHeight)
}
function changeShowBookByWindow() {
    var b, c, d = !1;
    bookType == BookType.single_book && windowWidth >= windowHeight && (bookType = BookType.normal_book, changeShowBook(0), c = singlePageBook.currentPageIndex, d = b = !0);
    bookType == BookType.singlePhone_slide_book && windowWidth >= windowHeight && bookConfig.showDoublePage && (bookType = BookType.phone_slide_book, changeShowBook(4), c = singlePhoneSlideBook.getRealPageIndex(), d = b = !0);
    bookType == BookType.phone_slide_book && windowWidth < windowHeight && (bookType = BookType.singlePhone_slide_book, changeShowBook(5), c = phoneSlideBook.getRealPageIndex(), b = !1, d = !0);
    bookType == BookType.normal_book && windowWidth < windowHeight && (bookType = BookType.single_book, changeShowBook(1), c = flipBook.currentPageIndex, b = !1, d = !0);
    d && (gotoPageFun(c), setCurrentIndexTextField(c, b), global.thumbnail && thumbnail.clearHighLight(), global.thumbnail && thumbnail.setHighLight(c))
}
function onWindowClick(b) {
    if (b) {
        if (b.target == b.currentTarget) {
            var c = BookInfo.getBook();
            if (c.status_zoom || c.isZomming || c.status_resize) return;
            if (bookType == BookType.normal_book || bookType == BookType.catalog_book || bookType == BookType.singleSlide_book || bookType == BookType.slide_book) {
                if (b.pageX > $("#flipBook").offset().left + $("#flipBook").outerWidth()) {
                    rightToLeft ? previousPageFun() : nextPageFun();
                    return
                }
                if (b.pageX < $("#flipBook").offset().left) {
                    rightToLeft ? nextPageFun() : previousPageFun();
                    return
                }
            }
        }
        bookType != BookType.phone_slide_book && bookType != BookType.singlePhone_slide_book || !isMoreShow || (moreBar.hideMoreBar(), isMoreShow = !1)
    }
}
function onWindowKeyDown(b) {
    if (b) {
        b = b.keyCode;
        Log.info("key down[%d]", b);
        b == KEY_CODE_LEFT && (rightToLeft ? nextPageFun() : previousPageFun());
        b == KEY_CODE_RIGHT && (rightToLeft ? previousPageFun() : nextPageFun());
        if (b == KEY_CODE_HOME || b == KEY_CODE_PAGEUP) rightToLeft ? lastPageFun() : firstPageFun();
        if (b == KEY_CODE_END || b == KEY_CODE_PAGEDOWN) rightToLeft ? firstPageFun() : lastPageFun();
        eval(DeString("b29ec71982dc6d9062a0b77ce9ccc59581fd3c4a4fa9bd325e6f5ae7fbf39a0907064bb455b1bade956bc0f3e7c55d348fbaa363c39f7bef7a0648674fd1f688786b79bd6ad03215d634a4736f3f971501f664a09b820932d9bc83a9c2159964e5c571b3ebe4ceb214fd31bb1287fe5449f303a6d5531165e1386ba5aa8d0a3788d4a351d120a43a59c002d761ef"))
    }
};
Log.debug("browser : %s, system : %s", Instance.JSON($.browser), Instance.JSON($.system));
var init = function() {
    initToolbar();
    var b = scrapOriginPageIndex();
    initFlipBook(b);
    initCatalogBook(b);
    initSlideBook(b);
    initComponents();
    changeShowBook(bookType);
    onStageResize();
    scrapURL();
    initEvent();
    setPageIndexTextField();
    initFlipSound();
    controlAudioVolume();
    addGoogleAdSense();
    googleAnalytics();
    winodwDynamicResize()
};
function createAll() {
    selectLanguage(bookConfig.language);
    $.browser.device == $.browser.DEVICE_PAD && $("html").css({
        height: window.innerHeight + "px"
    });
    global.pageIndexTextField = $("#currentPageIndexTextField");
    global.tmpContainer = $("<div id= 'tmpContainer' class='tmpContainer'></div>");
    global.bookContainer = $("<div id= 'bookContainer' class='bookContainer'></div>");
    $("body").append(tmpContainer);
    tmpContainer.append(bookContainer);
    global.windowWidth = $("body").width();
    global.windowHeight = $("body").height();
    global.onBookLoad = new loadingBook(tmpContainer, bookConfig.loadingBackground);
    toolBarIconsURL = [uiBaseURL + "Last.png", uiBaseURL + "Last.png", uiBaseURL + "next.png", uiBaseURL + "prev.png", uiBaseURL + "First.png", uiBaseURL + "ZoomIn.png", uiBaseURL + "ZoomOut.png", uiBaseURL + "autoPlay.png", uiBaseURL + "stopAutoPlay.png", uiBaseURL + "thumbnails.png", uiBaseURL + "sharethis.png", uiBaseURL + "search.png", uiBaseURL + "download.png", uiBaseURL + "home.png", uiBaseURL + "bookmark.png", uiBaseURL + "soundOn.png", uiBaseURL + "soundOff.png", uiBaseURL + "previous_normal.png", uiBaseURL + "previous_normal_down.png", uiBaseURL + "next_normal.png", uiBaseURL + "next_normal_down.png", uiBaseURL + "print.png", uiBaseURL + "Help.png", uiBaseURL + "about.png", uiBaseURL + "moreBar.png", uiBaseURL + "languageChange.png", uiBaseURL + "languageChange.png", uiBaseURL + "fullscreen.png", uiBaseURL + "exitFullscreen.png", uiBaseURL + "moveByPos.png", uiBaseURL + "moveByDrag.png", uiBaseURL + "annotation.png", uiBaseURL + "tableOfContent.png", uiBaseURL + "videoGallery.png", uiBaseURL + "photoGallery.png", uiBaseURL + "collapsed.png", uiBaseURL + "expanded.png", uiBaseURL + "setting.png", uiBaseURL + "choosed.png", uiBaseURL + "unchoosed.png", uiBaseURL + "gotoPage.png", phoneBaseURL + "phone_icon.png", uiBaseURL + "catalog_icon.png"];
    phoneIconsURL = [phoneBaseURL + "phone_icon.png"];
    customButtonIcons();
    var b = function(b) {
        jsLoadingBar.destroy();
        iconArray = b;
        onBookLoad.chooseFlipSlide()
    },
    c = function(b) {
        jsLoadingBar.destroy();
        iconArray = b;
        onBookLoad.chooseFlipSlide();
        setTimeout(function() {
            window.scrollTo(0, 1)
        },
        0)
    };
    isPhone() || isPad() ? $(window).loader(phoneIconsURL, c) : (Log.print("$(window).loader(toolBarIconsURL, complete);"), $(window).loader(toolBarIconsURL, b))
}
var onStageResize = function(b) {
    resizeBySearchInput() || (global.resizeBookAfterFlip = !1, bookType == BookType.normal_book && flipBook && flipBook.flipping || bookType == BookType.single_book && singlePageBook.flipping || bookType == BookType.catalog_book && nBookStatu == normalBookStatu.book_statu_auto_flip ? resizeBookAfterFlip = !0 : ($("html").css({
        height: window.innerHeight + "px"
    }), global.windowWidth = $("body").width(), global.windowHeight = $("body").height(), resizeToolBar(), thumbnailHeight = global.thumbnail && thumbnail.getShowStatu() ? thumbnail.getHeight() : 0, resizeFlipBook(), resizeCatalogBook(), resizeSlideBook(), changeShowBookByWindow(), resizePlugin(), resizeAttachments()))
};
function initEvent() {
    $(bookContainer).click(function(b) {
        onWindowClick(b)
    });
    $(bookContainer).bind("touchstart",
    function(b) {
        b.preventDefault()()
    });
    $(window).bind("keydown",
    function(b) {
        onWindowKeyDown(b)
    })
}
jQuery(document).ready(function() {
    Log.print("jquery ready");
    "use strict";
    if (window.bookConfig) {
        checkBookConfig();
        global.uiBaseURL = bookConfig.UIBaseURL;
        uiBaseURL && "string" == typeof uiBaseURL && "/" != uiBaseURL.substr(uiBaseURL.length - 1, 1) && (uiBaseURL += "/");
        global.phoneBaseURL = uiBaseURL;
        global.uiBaseURL = uiBaseURL + "style/icon/";
        global.phoneBaseURL = phoneBaseURL + "style/phoneIcon/";
        global.soundBaseURL = uiBaseURL.replace("/icon/", "/raw/");
        global.originTotalPageCount = parseInt(bookConfig.totalPageCount);
        global.totalPageCount = originTotalPageCount + (1 == originTotalPageCount % 2 ? 1 : 0);
        global.zoomPageWidth = parseInt(bookConfig.largePageWidth);
        global.zoomPageHeight = parseInt(bookConfig.largePageHeight);
        var b = zoomPageWidth / zoomPageHeight,
        c = zoomPageHeight;
        zoomPageHeight = Math.max(zoomPageHeight, 1440);
        c !== zoomPageHeight && (zoomPageWidth = zoomPageHeight * b);
        global.rightToLeft = parseBool(bookConfig.RightToLeft, !1);
        if (!global.ols || 0 >= global.ols.length) global.ols = [],
        bookConfig.TableOfContentButtonVisible = !1;
        global.bmtConfig || (global.bmtConfig = []);
        global.language || (global.language = []);
        $.browser.webkit && (browserType = BrowserType.WEBKIT);
        $.browser.mozilla && (browserType = BrowserType.MOZ);
        $.browser.opera && (browserType = BrowserType.OPERA);
        $.browser.msie && (browserType = BrowserType.MS);
        createAll();
        if (isTouch) $(window).on("orientationchange",
        function() {
            window.setTimeout(function() {
                onBookLoad.onResize()
            },
            200)
        });
        $(window).resize(onBookLoad.onResize)
    } else Log.print("Config of the book is lost."),
    function() {
        window.location = window.location.href
    }.delay(400)
});