/*
* .mbBookShowcase - Showcase for sliding books or other images
* Copyright (c) 2010 Mika Babcock, mika@foreseeing.com
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
* Version: 2.3.4
* Requires jQuery 1.4.x or higher
*
* Optional nice-to-haves:
- jquery.touchSwipe.js
*/
(function($){$.fn.mbBookShowcase=function(options,callBackFn,loadCallBack){return this.each(function(){var defaults={bookId:'',bookIdStrPre:'b',showDetails:true,detailsImg:"book-img",detailsDesc:"book-desc",detailsHiddenDescClass:'description',position:"horizontal",targetTray:"featuredTrays",scrollTrayClass:"scrollTray",trayClass:"tray",trayOffset:0,nextId:"a#trayNext",prevId:"a#trayPrev",currTray:1,tooltip:false,toolTipDiv:"showcase-tooltip",toolTipFileDiv:"tooltip",toolTipLoading:'<div class="loading"><img src="/images/showcase/loading.gif" alt="" width="16" height="16" /></div>',itemClass:'item',imgClass:'img',mOvrClass:'item-mOvr',selClass:'item-sel',easeInOut:false,easeInOutAmt:8,hideNavClass:'trayNavHide',slideDuration:1300,slideEasing:'easeOutSine',backTrackDuration:2300,backTrackEasing:'easeInSine',loadTrayFromExternalFile:false,phpFetchFile:'trays.php',phpFetchUrlValue:'',phpTooltipFile:'itemDetail.php',klass:'_mbBookShowcase',loop:true,followLink:true,touchThreshold:100,nextBook:'',prevBook:'',nextPreviousCallback:'',phpDescFile:'ShowcaseItems.php',descriptionDest:'',descriptionTarget:'',descriptionOnHover:false,tabs:{},largeImgResizeClass:'resizeHomeImage',largeImgMaxWidth:'',showcaseSubmitId:'#showcaseHiddenRecord'};var touchy=(/iphone|ipod|ipad|android/i).test(navigator.userAgent);var isIE=jQuery.browser.msie;var isIE8=(isIE&&jQuery.browser.version.substr(0,1)<="8");var trayArr={};var settings=$.extend(defaults,options,callBackFn,loadCallBack),wrapper=$(this),wrapperId=wrapper.attr("id"),currSel='',currTray=settings.currTray,currTrayId='',bookId=settings.bookId,numTrays=0,shiftPos=0,fingerCount=0,slideTray=false,toolTipTimeout,toolTipTimeoutInit=false,loadingImg=settings.toolTipLoading,booksPerTray=0,doc=$(document),on={init:function(){if(wrapper.hasClass(settings.klass))return;wrapper.addClass(settings.klass).bind(on);wrapper.trigger('start')},start:function(){$(settings.nextId).click(function(){wrapper.trigger('nextTray')});$(settings.prevId).click(function(){wrapper.trigger('prevTray')});on.loadTray()},linkTray:function(e,pos,animate){if(settings.position=="vertical"){if(animate){$("div."+settings.scrollTrayClass).animate({top:trayArr[pos]+'px'},settings.backTrackDuration,settings.backTrackEasing)}else{$("div."+settings.scrollTrayClass).css({top:trayArr[pos]+'px'})}}else{if(animate){$("div."+settings.scrollTrayClass).animate({left:trayArr[pos]+'px'},settings.backTrackDuration,settings.backTrackEasing)}else{$("div."+settings.scrollTrayClass).css({left:trayArr[pos]+'px'})}}currTray=pos},nextTray:function(){if(settings.tooltip)on.destroyToolTip();if(!slideTray){slideTray=true;if(settings.position=="vertical"){var scrollHeight=$("div."+settings.trayClass).height()+settings.trayOffset;var trayHeight=numTrays*scrollHeight;if(currTray!=numTrays){$("div."+settings.scrollTrayClass).animate({top:'-='+scrollHeight},settings.slideDuration,settings.slideEasing,function(){slideTray=false});currTray++}else{if(settings.loop){shiftPos++;var newPos=shiftPos*trayHeight;$("#"+wrapperId+" div."+settings.trayClass).each(function(idx,val){if((idx+1)<numTrays){$(this).css("top",newPos+"px")}});$("div."+settings.scrollTrayClass).animate({top:'-='+scrollHeight},settings.slideDuration,settings.slideEasing,function(){$("#"+wrapperId+" div."+settings.trayClass+':last').css("top",newPos+"px");slideTray=false});currTray=1}else{var scrollPos=$("div."+settings.scrollTrayClass).position();var scrollPosT=scrollPos.top;if(scrollPosT<0)scrollPosT*=-1;currTray=1;$("div."+settings.scrollTrayClass).animate({top:'+='+scrollPosT},settings.backTrackDuration,settings.backTrackEasing,function(){slideTray=false})}}}else{var scrollWidth=$("div."+settings.trayClass).width()+settings.trayOffset;var trayWidth=numTrays*scrollWidth;if(currTray!=numTrays){$("div."+settings.scrollTrayClass).animate({left:'-='+scrollWidth},settings.slideDuration,settings.slideEasing,function(){slideTray=false});currTray++}else{if(settings.loop){shiftPos++;var newPos=shiftPos*trayWidth;$("#"+wrapperId+" div."+settings.trayClass).each(function(idx,val){if((idx+1)<numTrays){$(this).css("left",newPos+"px")}});$("div."+settings.scrollTrayClass).animate({left:'-='+scrollWidth},settings.slideDuration,settings.slideEasing,function(){$("#"+wrapperId+" div."+settings.trayClass+':last').css("left",newPos+"px");slideTray=false});currTray=1}else{var scrollPos=$("div."+settings.scrollTrayClass).position();var scrollPosL=scrollPos.left;if(scrollPosL<0)scrollPosL*=-1;currTray=1;$("div."+settings.scrollTrayClass).animate({left:'+='+scrollPosL},settings.backTrackDuration,settings.backTrackEasing,function(){slideTray=false})}}}}},prevTray:function(){if(settings.tooltip)on.destroyToolTip();if(!slideTray){slideTray=true;if(settings.position=="vertical"){var scrollHeight=$("div."+settings.trayClass).height()+settings.trayOffset;var trayHeight=numTrays*scrollHeight;if(currTray!=1){$("div."+settings.scrollTrayClass).animate({top:'+='+scrollHeight},settings.slideDuration,settings.slideEasing,function(){slideTray=false});currTray--}else{if(settings.loop){shiftPos--;var newPos=shiftPos*trayHeight;$("#"+wrapperId+" div."+settings.trayClass).each(function(idx,val){if(idx>0){$(this).css("top",newPos+"px")}});$("div."+settings.scrollTrayClass).animate({top:'+='+scrollHeight},settings.slideDuration,settings.slideEasing,function(){$("#"+wrapperId+" div."+settings.trayClass+':first').css("top",newPos+"px");slideTray=false});currTray=numTrays}else{var scrollPos=scrollHeight*(numTrays-1);$("div."+settings.scrollTrayClass).animate({top:'+='+scrollPos},settings.backTrackDuration,settings.backTrackEasing,function(){slideTray=false});currTray=numTrays}}}else{var scrollWidth=$("div."+settings.trayClass).width()+settings.trayOffset;var trayWidth=numTrays*scrollWidth;if(currTray!=1){$("div."+settings.scrollTrayClass).animate({left:'+='+scrollWidth},settings.slideDuration,settings.slideEasing,function(){slideTray=false});currTray--}else{if(settings.loop){shiftPos--;var newPos=shiftPos*trayWidth;$("#"+wrapperId+" div."+settings.trayClass).each(function(idx,val){if(idx>0){$(this).css("left",newPos+"px")}});$("div."+settings.scrollTrayClass).animate({left:'+='+scrollWidth},settings.slideDuration,settings.slideEasing,function(){$("#"+wrapperId+" div."+settings.trayClass+':first').css("left",newPos+"px");slideTray=false});currTray=numTrays}else{var scrollPos=scrollWidth*(numTrays-1);$("div."+settings.scrollTrayClass).animate({left:'-='+scrollPos},settings.backTrackDuration,settings.backTrackEasing,function(){slideTray=false});currTray=numTrays}}}}},nextBook:function(){var nextId=currSel.substring(currSel.length-1,currSel.length);nextId=parseInt(nextId)+1;nextTray=currTray;if(nextId>booksPerTray){nextId=1;if(nextTray<numTrays)nextTray++;else nextTray=1;on.nextTray()}var theBookStr="book_"+nextTray+"_"+nextId;var theBook=$("#"+theBookStr);var htmlId=$("#"+theBookStr).find('a').attr("id");var theId=htmlId.substring(1);on.selectBook("",theBookStr);switch(settings.nextPreviousCallback){case'description':on.loadDescription(theId);break;case'tooltip':on.loadToolTip("nextPrevious",theId,theBook);break;case'details':if(settings.showDetails){var img=$("#"+htmlId).attr("rel");var desc=theBook.children("div."+settings.detailsHiddenDescClass).html();on.loadDetails("",img,desc,theId)}break;default:break}},prevBook:function(){var prevId=currSel.substring(currSel.length-1,currSel.length);prevId=parseInt(prevId)-1;prevTray=currTray;if(prevId<1){prevId=booksPerTray;if(prevTray>1)prevTray--;else prevTray=numTrays;on.prevTray()}var theBookStr="book_"+prevTray+"_"+prevId;var theBook=$("#"+theBookStr);var htmlId=$("#"+theBookStr).find('a').attr("id");var theId=htmlId.substring(1);on.selectBook("",theBookStr);switch(settings.nextPreviousCallback){case'description':on.loadDescription(theId);break;case'tooltip':on.loadToolTip("nextPrevious",theId,theBook);break;case'details':if(settings.showDetails){var img=$("#"+htmlId).attr("rel");var desc=theBook.children("div."+settings.detailsHiddenDescClass).html();on.loadDetails("",img,desc,theId)}break;default:break}},loadTray:function(){currTray=settings.currTray;if(settings.loadTrayFromExternalFile){$(wrapper).children("div").remove();on.ajaxLoad(wrapperId,settings.phpFetchFile+"?tray="+settings.phpFetchUrlValue,settings.targetTray,function(){on.setupEvents();on.setupTray()})}else{on.setupEvents();on.setupTray()}},loadDetails:function(e,img,desc,id){if(typeof id=="undefined"||id==null){detailsImgPre='<a href="javascript:;">'}else{detailsImgPre='<a href="/details.php?record='+id+'">'}if(settings.largeImgMaxWidth!=''){$.getJSON("manager/include/json_getImageSize.php?image=../../"+img+"&attribute=width&callback=?",function(data){if(isNaN(data)){$("#"+settings.detailsImg).removeClass(settings.largeImgResizeClass)}else{if(data>250){$("#"+settings.detailsImg).addClass(settings.largeImgResizeClass)}else{$("#"+settings.detailsImg).removeClass(settings.largeImgResizeClass)}}})}$("#"+settings.detailsImg).fadeOut("fast",function(){$("#"+settings.detailsImg).html(detailsImgPre+'<img src="'+img+'" alt="" /></a>');$("#"+settings.detailsImg).fadeIn("normal")});$("#"+settings.detailsDesc).fadeOut("fast",function(){$("#"+settings.detailsDesc).html(desc);$("#"+settings.detailsDesc).fadeIn("normal")})},selectBook:function(e,elid,img,desc){if(currSel!=""){if(settings.easeInOut){$("#"+currSel).children("a").children("img").animate({height:'-='+settings.easeInOutAmt,marginTop:'+='+(Math.round(settings.easeInOutAmt/2))},'1')}if(settings.descriptionOnHover){$("."+settings.mOvrClass).removeClass(settings.mOvrClass);$("."+settings.selClass).removeClass(settings.selClass)}$("#"+currSel).removeClass(settings.selClass)}$("#"+elid).addClass(settings.selClass);if(settings.easeInOut&&currSel==""){$("#"+elid).children("a").children("img").animate({height:'+='+settings.easeInOutAmt,marginTop:'-='+(Math.round(settings.easeInOutAmt/2))},'1')}currSel=elid},loadDescription:function(book){var phpFile=settings.phpDescFile+"?recordNum="+book;on.ajaxLoad(settings.descriptionDest,phpFile,settings.descriptionTarget)},loadToolTip:function(event,cItem,theItem){$("#"+settings.toolTipDiv).html(loadingImg);var ttWidth=$("#"+settings.toolTipDiv).width();var currItemPos=$(theItem).position();var ttMove=currItemPos.left-(ttWidth*0.28);$("#"+settings.toolTipDiv).css("left",ttMove+"px");var phpFile=settings.phpTooltipFile+"?recordNum="+cItem;on.ajaxLoad(settings.toolTipDiv,phpFile,settings.tooltipFileDiv,function(){$("#"+settings.toolTipDiv).css("display","block")})},destroyToolTip:function(){toolTipTimeoutInit=true;tooltipTimeout=setTimeout(function(){$("#"+settings.toolTipDiv).css("display","none");$("#"+settings.toolTipDiv).html(loadingImg)},500)},ajaxLoad:function(divID,fileName,fileDivID,callback){if($.isFunction(callback))$("#"+divID).load(fileName+" #"+fileDivID,callback);else $("#"+divID).load(fileName+" #"+fileDivID)},setupEvents:function(){$.each(settings.tabs,function(key,value){$("."+key).click(function(){if(!$(this).hasClass("selected")){$(".selected").removeClass("selected");currTray=settings.currTray;if(settings.loadTrayFromExternalFile){$(wrapper).children("div").remove();on.ajaxLoad(wrapperId,settings.phpFetchFile+"?tray="+value,value,function(){shiftPos=0;on.setupTray()})}$(this).addClass("selected")}})});if(settings.nextBook!=''&&settings.prevBook!=''){$(settings.nextBook).click(on.nextBook);$(settings.prevBook).click(on.prevBook)}wrapper.delegate('.'+settings.imgClass,'click',function(){var bid=$(this).attr("id");bid=bid.substring(1);on.selectBook("",$(this).parent().attr("id"));if(settings.showDetails){var img=$(this).attr("rel");var desc=$(this).parent().children("div."+settings.detailsHiddenDescClass).html();on.loadDetails("",img,desc,bid)}if(!settings.descriptionOnHover&&settings.showDetails){var currId=$(this).attr("id");var currBookId=currId.substring(1,currId.length);currSel=$(this).attr("id");on.loadDescription(currBookId)}if($.isFunction(callBackFn)){var elid=$(this).attr("id");callBackFn.call({event:'click',clickid:elid})}if(!settings.followLink)return false});if(settings.tooltip){$("#"+settings.toolTipDiv).hover(function(event){clearTimeout(tooltipTimeout)},function(){on.destroyToolTip()})}wrapper.delegate("."+settings.itemClass,'mouseenter mouseleave',function(event){if(event.type=='mouseenter'||event.type=='mouseover'){if(settings.tooltip){if(toolTipTimeoutInit)clearTimeout(tooltipTimeout);var currId=$(this).children("a").attr("id");var currBookId=currId.substring(1,currId.length);var bookDiv=$(this);on.loadToolTip(event.type,currBookId,bookDiv)}if(settings.descriptionOnHover&&!$(this).hasClass(settings.selClass)&&settings.showDetails){var currId=$(this).children("a").attr("id");var currBookId=currId.substring(1,currId.length);currSel=$(this).attr("id");on.loadDescription(currBookId)}if(settings.descriptionOnHover){$("."+settings.mOvrClass).removeClass(settings.mOvrClass);$("."+settings.selClass).removeClass(settings.selClass);$(this).addClass(settings.selClass)}if(!$(this).hasClass(settings.selClass))$(this).addClass(settings.mOvrClass);if(settings.easeInOut&&!$(this).hasClass(settings.selClass)){$(this).children("a").children("img").animate({height:'+='+settings.easeInOutAmt,marginTop:'-='+(Math.round(settings.easeInOutAmt/2))},(isIE8?50:100),'easeInBounce')}}else{if(!$(this).hasClass(settings.selClass)&&!settings.descriptionOnHover)$(this).removeClass(settings.mOvrClass);if(settings.tooltip)on.destroyToolTip();if(settings.easeInOut&&!$(this).hasClass(settings.selClass)){$(this).children("a").children("img").animate({height:'-='+settings.easeInOutAmt,marginTop:'+='+(Math.round(settings.easeInOutAmt/2))},(isIE8?50:100),'easeOutBounce')}}});if(touchy&&jQuery.fn.swipe){var swipeOptions={swipeStatus:on.swipeStatus,triggerOnTouchEnd:false,threshold:settings.touchThreshold};wrapper.swipe(swipeOptions)}},setupTray:function(){booksPerTray=$("#tray"+currTray+" .book").length;numTrays=$("#"+wrapperId+" div."+settings.trayClass).length;for(i=1;i<=numTrays;i++){if(settings.position=="vertical"){var scrollHeight=$("div."+settings.trayClass).height()+settings.trayOffset;trayArr[i]=0-((i-1)*scrollHeight)}else{var scrollWidth=$("div."+settings.trayClass).width()+settings.trayOffset;trayArr[i]=0-((i-1)*scrollWidth)}}if(bookId!=""&&$("#"+settings.bookIdStrPre+bookId).length>0){bookId=$("#"+settings.bookIdStrPre+bookId).parent().attr("id");currTrayId=$("#"+bookId).parent().attr("id");currTray=$("#"+bookId).parent().index();currTray=currTray+1;on.linkTray("",currTray,false);on.selectBook("",bookId)}else{currTray=1;currTrayId=$('#'+wrapperId+' div.'+settings.trayClass).eq(0).attr("id");bookId=$('#'+currTrayId+' div.'+settings.itemClass).eq(0).attr("id");on.selectBook("",bookId)}if(typeof bookId!="undefined"&&bookId!=""){if(settings.showDetails){var img=$("#"+bookId).children("a").attr("rel");var desc=$("#"+bookId).children("div."+settings.detailsHiddenDescClass).html();var theId=$("#"+bookId).find('a').attr("id");$(settings.showcaseSubmitId).val(theId.substring(1));on.loadDetails("load",img,desc,theId.substring(1))}}if(numTrays<=1&&settings.hideNavClass!=""){$(settings.prevId).addClass(settings.hideNavClass);$(settings.nextId).addClass(settings.hideNavClass)}else{$(settings.prevId).removeClass(settings.hideNavClass);$(settings.nextId).removeClass(settings.hideNavClass)}if($.isFunction(loadCallBack)){var bid=$("#book_"+settings.currTray+"_1").children("a").attr("id");bid=bid.substring(1);var elid=(settings.bookId==''?bid:settings.bookId);loadCallBack.call({event:'load',clickid:elid})}},teardown:function(){wrapper.removeClass(settings.klass).unbind(on)},swipeStatus:function(event,phase,direction,distance){if(phase=="end"){switch(direction){case"left":if(settings.position=="horizontal")wrapper.trigger('nextTray');break;case"right":if(settings.position=="horizontal")wrapper.trigger('prevTray');break;case"up":if(settings.position=="vertical")wrapper.trigger('nextTray');break;case"down":if(settings.position=="vertical")wrapper.trigger('prevTray');break}}}};wrapper.ready(on.init)})}})(jQuery);
