/*
* imBookFlip - a JQuery Plugin
* @author Les Green
* Copyright (C) 2009 Intriguing Minds, Inc.
* Version 0.6
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* original Javascript BookFlip concept - http://www.coastworx.com/bookflip.php
* soundManager - Scott Schiller http://www.schillmania.com/projects/soundmanager2/
*
* Demo and Documentation can be found at:
* http://www.grasshopperpebbles.com
*
*/
;(function($) {
$.fn.extend({
imBookFlip: function(options) {
opts = $.extend({}, $.bookFlip.defaults, options);
return this.each(function() {
new $.bookFlip(this, opts);
});
}
});
$.bookFlip = function(obj, opts) {
var $this = $(obj);
var numPages = 0;
var leftStart=0,rightStart=1;
var autoPage = 0;
var page, book, bW, pageW, pageH, bookOpenW = '';
if (opts.sound_manager) {
loadAudio();
}
if (opts.iframe.src) {
loadIFrame();
} else {
page = $('.'+opts.page_class)[0];
init();
}
function loadIFrame() {
var iframe = $this.append($('').css({"width":$this.width(), "height": $this.height(), "border": "0px", "overflow":"hidden"}));
$('#bookFlipIframe').load(function() {
book = $('#bookFlipIframe').contents().find('#'+opts.iframe.book);
page = $('#bookFlipIframe').contents().find('.'+opts.page_class)[0];
init();
});
};
function init() {
bW = parseInt($(page).css('borderLeftWidth')) + parseInt($(page).css('borderRightWidth'));
pageW = parseInt($(page).css('width')) + bW;
pageH = parseInt($(page).css('height')) + bW;
bookOpenW = pageW*2;
//var showBinder=false; //change to false for no binder
//var binderImage = "parchmentring2.gif"; //location of center binder
//var binderWidth = 20; //width of center binder image
if(opts.numPixels>100){opts.numPixels=100;};
createPages();
};
function loadAudio() {
var ld = (opts.autoFlip != 'click');
var dbg = false;
if (opts.sound_manager.debug) {
dbg = opts.sound_manager.debug;
}
soundManager.url = opts.sound_manager.swf_loc;
soundManager.debugMode = dbg;
soundManager.onload = function() {
// soundManager is initialised, ready to use. Create a sound for this demo page.
soundManager.createSound({
id: 'bookAudio',
url: opts.sound_manager.audio_loc,
autoLoad: true,
autoPlay: ld
});
}
};
function createPages() {
var pages;
if (opts.iframe.src) {
$this = $(book);
pages = $this.find(' > div');
} else {
var bk = $this.attr('id');
pages = $('#'+bk + ' > div');
}
$this.css({'width': (bookOpenW + 'px'), 'height': pageH+'px', 'zIndex':0});
$(pages).each(function(i) {
numPages++;
var orig = $(this).clone();
var div = $('
').attr({'id': 'pageNum'+i, 'class': opts.page_class}).css({'zIndex':20-i, 'border': 'none', 'left': pageW+'px', 'width': pageW+'px', 'height': pageH+'px'});
$(this).replaceWith(div);
$(orig).attr('id', 'pageFlip'+i);
/*if(!number_check(i)){
if(document.all){
$(orig).css('filter', 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100, FinishOpacity=30, Style=1, StartX=80, FinishX=100, StartY=0, FinishY=0)');
}else{
var pngDiv = $('').css({'position': 'absolute', 'left':pWidth-80+'px', 'top':'0px', 'width':80+'px', 'height': pHeight+'px', 'background': 'transparent url(bookflip/black_gradient.png) top right repeat-y'}).appendTo($(orig));
}
}*/
$(div).append($(orig));
if(opts.allowPageClick){
$(orig).click(function() {
if(number_check(i)){
soundCheck();
nextPage();
} else {
prevPage();
}
});
}
});
$this.css('display', 'block');
if (opts.autoFlip == 'auto') {
doAutoFlip();
}
};
function doAutoFlip() {
if (rightStart < numPages) {
autoPage = setTimeout(nextPage, opts.autoFlipSpeed);
} else {
clearTimeout(autoPage);
}
};
function soundCheck() {
if ((opts.sound_manager) && (rightStart == 1)) {
if (opts.autoFlip == 'click') {
soundManager.play('bookAudio');
}
}
};
function number_check(value) {
// returns true if value is even, false if value is odd
return ( 1 - (value%2) );
};
function nextPage(){
var page = (opts.iframe.src) ? $this.find("#pageNum"+rightStart) : $("#pageNum"+rightStart);
var lpage = (opts.iframe.src) ? $this.find("#pageNum"+leftStart) : $("#pageNum"+leftStart);
$(page).css({'width': '0px', 'left': bookOpenW +'px', 'zIndex': 99});
$(page).animate({'left': 2+'px', 'width': pageW+'px'}, 'slow', function() {
$(lpage).css({'width': '0px'});
var z = $(this).css('zIndex');
$(this).css({'left': '0px', 'width': pageW+'px', 'zIndex': z-99});
$(lpage).css({'left': '', 'right': '0px'});
$(this).css({'left': '', 'right': '0px'});
leftStart=leftStart+2;
rightStart=rightStart+2;
if (opts.autoFlip != 'off') {
doAutoFlip();
}
});
};
function prevPage(){
leftStart=leftStart-2;
rightStart=rightStart-2;
var page = (opts.iframe.src) ? $this.find("#pageNum"+leftStart) : $("#pageNum"+leftStart);
var rpage = (opts.iframe.src) ? $this.find("#pageNum"+rightStart) : $("#pageNum"+rightStart);
var pFlipL = (opts.iframe.src) ? $this.find("#pageFlip"+leftStart) : $("#pageFlip"+leftStart);
var pFlipR = (opts.iframe.src) ? $this.find("#pageFlip"+rightStart) : $("#pageFlip"+rightStart);
$(page).css({'width': '0px', 'left': '0px'});
$(pFlipR).css({'left': '', 'right': '0px'});
$(page).animate({'left': pageW+'px', 'width': pageW+'px'}, 'slow', function() {
$(rpage).css({'width': '0px'});
$(pFlipR).css({'left': '0px'});
$(pFlipL).css({'left': '0px'});
});
};
};
$.bookFlip.defaults = {
allowPageClick: true,
autoFlip: 'off', //auto, click
autoFlipSpeed: 7000,
numPixels: 20, //number of pixels to move per frame, more is faster but less smooth
pSpeed: '20', //page speed, 20 is best for Opera browser. Less is faster
page_class: '',
sound_manager: '', // {swf_loc: 'soundmanager/soundmanager2.swf', audio_loc: '', debug: false}
iframe: '' //{src: 'test_bookflip3_iframe.html', book: 'myBook'}
};
})(jQuery);