/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * JQuery plugin: stripe slider for an image gallery.
 *
 * @author  Guilhem Malichier
 * @version 1.0.4 (2012-01-20)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

jQuery.fn.mkpslider=function(a){if(!this.get(0))return;if(this.get(0)._slider)return;var b=jQuery.fn.mkpslider;a=jQuery.extend({},b.defaultOptions,a);var c=new b.Slider;c.options=a;c.container=$("<div id='"+b.uid()+"' class='"+a.baseClassName+"-container' />");c.pane=$("<div id='"+b.uid()+"' class='"+a.baseClassName+"-pane' />");c.btnUp=$("<a id='"+b.uid()+"' class='"+a.baseClassName+"-btn up' href='#'>Slide up</a>");c.btnDown=$("<a id='"+b.uid()+"' class='"+a.baseClassName+"-btn down' href='#'>Slide down</a>");c.stripe=this;c.id=c.stripe.get(0).id;if(!c.id){c.id=b.uid();c.stripe.get(0).id=c.id}c.stripe.get(0).parentNode.replaceChild(c.container.get(0),c.stripe.get(0));c.container.append(c.pane);c.pane.append(c.btnUp);c.pane.append(c.stripe);c.pane.append(c.btnDown);c.container.get(0)._slider=c;c.pane.get(0)._slider=c;c.btnUp.get(0)._slider=c;c.btnDown.get(0)._slider=c;c.stripe.get(0)._slider=c;var d=0;c.stripe.find("img").each(function(){if(!this.id)this.id=b.uid();this._slider=c;c.images.push(this);this._index=d++});c.stripe.removeClass(a.baseClassName).addClass(a.baseClassName).css("overflow","visible");c.pane.css("position","relative").css("overflow","hidden");c.pane.width(c.container.width()).height(c.container.height());c.stripe.find("img").each(function(){var c=$(this);c.parent().css("float","left");b.resize(c,a.thumbnailWidth,a.thumbnailHeight)});c.stripe.css("position","absolute").css("left","0px").height(c.container.height()).width(c.stripeBaseWidth);c.thumbnailBaseWidth=c.stripe.children(":last").outerWidth(true);c.stripeBaseWidth=c.stripe.children(":last").position().left+c.thumbnailBaseWidth+1;if(c.stripeBaseWidth<c.container.width()){var e=c.stripeBaseWidth;c.stripeBaseWidth=c.container.width();c.stripe.css("padding-left",((c.stripeBaseWidth-e)/2>>0)+"px");c.btnDown.hide()}c.stripe.width(c.stripeBaseWidth);c.btnUp.hide();c.stripe.find("img").each(function(){var d=$(this);this._thumbnailWidth=d.parent().width();this._thumbnailHeight=d.parent().height();this._thumbnailOffset=d.parent().offset().left-c.container.offset().left;b.resize(d,a.previewWidth,a.previewHeight);this._previewWidth=d.parent().width();this._previewHeight=d.parent().height();c.stripe.width(c.stripe.width()+this._previewWidth-this._thumbnailWidth);this._previewVOffset=d.parent().offset().top-c.stripe.offset().top+a.previewVOffset;c.paneFullHeight=Math.max(c.paneFullHeight,d.parent().outerHeight()+Math.max(0,this._previewVOffset));b.resize($(this),this._thumbnailWidth,this._thumbnailHeight);c.stripe.width(c.stripe.width()-this._previewWidth+this._thumbnailWidth);this._currentWidth=this._thumbnailWidth;this._currentHeight=this._thumbnailHeight;this._currentVOffset=0});c.stripe.find("img").each(function(){var d=$(this);d.bind("zoomin.mkpslider",function(){if(a.previewVOffset){d.parent().css("position","relative");c.pane.css("top",Math.min(0,this._previewVOffset));c.stripe.css("top",Math.max(0,-this._previewVOffset));c.btnDown.css("top",Math.max(0,-this._previewVOffset));c.btnUp.css("top",Math.max(0,-this._previewVOffset))}c.pane.height(c.paneFullHeight);var e=this._previewWidth-this._currentWidth;if(this._index==0)e=0;else if(this._index<c.images.length-1)e=e/2>>0;this._stepsWidth=b.computeTransitionSteps(this._currentWidth,this._previewWidth,a.durationIn,"uniform-deceleration");this._stepsHeight=b.computeTransitionSteps(this._currentHeight,this._previewHeight,a.durationIn,"uniform-deceleration");this._stepsHOffset=b.computeTransitionSteps(0,e,a.durationIn,"uniform-deceleration",true);this._stepsVOffset=b.computeTransitionSteps(this._currentVOffset,a.previewVOffset,a.durationIn,"uniform-deceleration");this._transitionStep=0;c.zoomIn(this)});d.bind("easein.mkpslider",function(){if(this._transitionStep<a.durationIn){b.resize(d,this._stepsWidth[this._transitionStep],this._stepsHeight[this._transitionStep]);c.stripe.width(c.stripe.width()-this._currentWidth+this._stepsWidth[this._transitionStep]);if(a.previewVOffset)d.parent().css("top",""+this._stepsVOffset[this._transitionStep]+"px");c.moveBy(this._stepsHOffset[this._transitionStep]);c._dragOffset-=this._stepsHOffset[this._transitionStep];this._currentWidth=this._stepsWidth[this._transitionStep];this._currentHeight=this._stepsHeight[this._transitionStep];this._currentVOffset=this._stepsVOffset[this._transitionStep];this._transitionStep++}else{delete this._stepsWidth;delete this._stepsHeight;delete this._stepsHOffset;delete this._transitionStep;c.zoomStop(this)}});d.bind("zoomout.mkpslider",function(){var d=this._currentWidth-this._thumbnailWidth;if(this._index==0)d=0;else if(this._index<c.images.length-1)d=d/2>>0;this._stepsWidth=b.computeTransitionSteps(this._currentWidth,this._thumbnailWidth,a.durationOut,"uniform-deceleration");this._stepsHeight=b.computeTransitionSteps(this._currentHeight,this._thumbnailHeight,a.durationOut,"uniform-deceleration");this._stepsHOffset=b.computeTransitionSteps(d,0,a.durationOut,"uniform-deceleration",true);this._stepsVOffset=b.computeTransitionSteps(this._currentVOffset,0,a.durationOut,"uniform-deceleration");this._transitionStep=0;c.zoomOut(this)});d.bind("easeout.mkpslider",function(){if(this._transitionStep<a.durationOut){b.resize(d,this._stepsWidth[this._transitionStep],this._stepsHeight[this._transitionStep]);c.stripe.width(c.stripe.width()-this._currentWidth+this._stepsWidth[this._transitionStep]);if(a.previewVOffset)d.parent().css("top",""+this._stepsVOffset[this._transitionStep]+"px");if(c.currentPreview===this){c.moveBy(this._stepsHOffset[this._transitionStep])}else if(!c.currentPreview||c.currentPreview._index<this._index){c.redraw()}else{c.moveBy(this._stepsWidth[this._transitionStep]-this._currentWidth)}this._currentWidth=this._stepsWidth[this._transitionStep];this._currentHeight=this._stepsHeight[this._transitionStep];this._currentVOffset=this._stepsVOffset[this._transitionStep];this._transitionStep++}else{delete this._stepsWidth;delete this._stepsHeight;delete this._stepsHOffset;delete this._transitionStep;c.zoomStop(this);if(c.currentPreview===this){c.currentPreview=null;if(a.previewVOffset){d.parent().css("top","0px");c.pane.css("top","0px");c.stripe.css("top","0px");c.btnDown.css("top","0px");c.btnUp.css("top","0px")}c.pane.height(c.container.height())}}});d.bind("mouseover.mkpslider",function(){d.trigger("zoomin.mkpslider")});d.bind("mouseout.mkpslider",function(){d.trigger("zoomout.mkpslider")});d.parent().focusin(function(){var a=d.get(0);c.slowMoveTo(a._thumbnailOffset-(c.container.width()-a._previewWidth>>1));d.trigger("zoomin.mkpslider")});d.parent().focusout(function(){var a=d.get(0);c.currentPreview=a;d.trigger("zoomout.mkpslider")});d.bind("touchstart.mkpslider",function(a){d.trigger("zoomin.mkpslider");if(this._doubleClickTimeout){clearTimeout(this._doubleClickTimeout);delete this._doubleClickTimeout}switch(this._doubleClickPhase){case"up1":this._doubleClickPhase="down2";this._doubleClickTimeout=setTimeout("document.getElementById('"+this.id+"')._doubleClickPhase= '';",200);break}});d.bind("touchmove.mkpslider",function(a){});d.bind("touchend.mkpslider",function(a){d.trigger("zoomout.mkpslider");switch(this._doubleClickPhase){case"down2":$(this).trigger("click.mkpslider");break;default:this._doubleClickPhase="up1";this._doubleClickTimeout=setTimeout("document.getElementById('"+this.id+"')._doubleClickPhase= '';",200);break}})});c.stripe.bind("dndstart.mkpslider",function(a,b){c._dragOffset=-c.getOffset()-b;c._dragPhase="dragPrepare";c.stop()});c.stripe.bind("dnddrag.mkpslider",function(a,b){if(c._dragPhase=="dragPrepare"){if(c._dragOffset!=-c.getOffset()-b)c._dragPhase="drag"}else if(c._dragPhase=="drag"){c.moveTo(-b-c._dragOffset)}});c.stripe.bind("dnddrop.mkpslider",function(){c.drop()});c.stripe.bind("mousedown.mkpslider",function(a){a.preventDefault();c.stripe.trigger("dndstart.mkpslider",a.screenX)});c.stripe.bind("mousemove.mkpslider",function(a){a.preventDefault();c.stripe.trigger("dnddrag.mkpslider",a.screenX)});c.stripe.bind("mouseup.mkpslider mouseleave.mkpslider",function(a){c.stripe.trigger("dnddrop.mkpslider")});c.stripe.find("a").bind("mouseup.mkpslider",function(a){if(c.isDragging()){c.drop();a.preventDefault();a.stopImmediatePropagation();return false}});c.stripe.find("a").bind("mousemove.mkpslider",function(a){a.preventDefault()});c.stripe.find("a").bind("click.mkpslider",function(a){if(c.isDragging()){a.preventDefault();a.stopImmediatePropagation();return false}});c.stripe.get(0).ontouchstart=function(a){a.preventDefault();c.stripe.trigger("dndstart.mkpslider",a.touches[0].clientX)};c.stripe.get(0).ontouchmove=function(a){a.preventDefault();c.stripe.trigger("dnddrag.mkpslider",a.touches[0].clientX)};c.stripe.get(0).ontouchend=function(a){c.stripe.trigger("dnddrop.mkpslider")};var f=function(a){if(!c.scrollSpeed||Math.abs(c.scrollSpeed)>4){c.stop()}else{if(c.scrollSpeed>0)c.slowMoveBy(c.thumbnailBaseWidth);else c.slowMoveBy(-c.thumbnailBaseWidth)}this.blur()};c.btnUp.bind("click.mkpslider",function(a){a.preventDefault()});c.btnUp.bind("mousedown.mkpslider touchstart.mkpslider",function(a){a.preventDefault();c.scrollUp()});c.btnUp.bind("mouseup.mkpslider touchend.mkpslider",f);c.btnUp.bind("mouseout.mkpslider",f);c.btnDown.bind("click.mkpslider",function(a){a.preventDefault()});c.btnDown.bind("mousedown.mkpslider touchstart.mkpslider",function(a){a.preventDefault();c.scrollDown()});c.btnDown.bind("mouseup.mkpslider touchend.mkpslider",f);c.btnDown.bind("mouseout.mkpslider",f)};jQuery.fn.mkpslider.Slider=function(){this.id="";this.options=null;this.container=null;this.pane=null;this.stripe=null;this.btnUp=null;this.btnDown=null;this.images=[];this.thumbnailBaseWidth=100;this.stripeBaseWidth=99999;this.paneFullHeight=0;this.maxSpeed=40;this.scrollSpeed=0;this.currentPreview=null;this._runningZooms=[];this._moveSteps=[];this._moveStep=0;this._dragPhase="";this._dragOffset=0;this._lastMoveDate=0};jQuery.fn.mkpslider.Slider.prototype.moveBy=function(a){return this.moveTo(this.getOffset()+a)};jQuery.fn.mkpslider.Slider.prototype.moveTo=function(a){var b=(new Date).getTime();this._realSpeed=(a-this.getOffset())/(b-this._lastMoveDate);this._lastMoveDate=b;var c=false;if(a>this.getMaxOffset()){a=this.getMaxOffset();c=true}if(a<this.getMinOffset()){a=this.getMinOffset();c=true}this.stripe.css("left",-a+"px");this.redraw();return!c};jQuery.fn.mkpslider.Slider.prototype.slowMoveBy=function(a){this.slowMoveTo(this.getOffset()+a)};jQuery.fn.mkpslider.Slider.prototype.slowMoveTo=function(a){this._moveSteps=jQuery.fn.mkpslider.computeTransitionSteps(this.getOffset(),a,this.options.durationMove,"uniform-deceleration");this._moveStep=0;if(this._scrollInterval)clearInterval(this._scrollInterval);this._scrollInterval=setInterval("document.getElementById('"+this.id+"')._slider._scheduleTransitionMove();",30)};jQuery.fn.mkpslider.Slider.prototype._scheduleTransitionMove=function(){if(this._moveStep<this.options.durationMove){var a=this.getOffset();this.moveTo(this._moveSteps[this._moveStep++]);this.scrollSpeed=this.getOffset()-a}else this.stop()};jQuery.fn.mkpslider.Slider.prototype.scrollUp=function(){if(this._scrollInterval)clearInterval(this._scrollInterval);this._scrollInterval=setInterval("document.getElementById('"+this.id+"')._slider._scheduleScroll(-1);",30)};jQuery.fn.mkpslider.Slider.prototype.scrollDown=function(){if(this._scrollInterval)clearInterval(this._scrollInterval);this._scrollInterval=setInterval("document.getElementById('"+this.id+"')._slider._scheduleScroll(1);",30)};jQuery.fn.mkpslider.Slider.prototype._scheduleScroll=function(a){this.scrollSpeed+=a;if(this.scrollSpeed<-this.maxSpeed)this.scrollSpeed=-this.maxSpeed;else if(this.scrollSpeed>this.maxSpeed)this.scrollSpeed=this.maxSpeed;if(!this.scrollSpeed)this.stop();else if(!this.moveBy(this.scrollSpeed))this.stop()};jQuery.fn.mkpslider.Slider.prototype.slowStop=function(){if(!this.scrollSpeed){this.stop();return}var a;if(this.scrollSpeed<0)a=1;else a=-1;if(this._scrollInterval)clearInterval(this._scrollInterval);this._scrollInterval=setInterval("document.getElementById('"+this.id+"')._slider._scheduleScroll("+a+");",30)};jQuery.fn.mkpslider.Slider.prototype.stop=function(){if(this._scrollInterval){clearInterval(this._scrollInterval);delete this._scrollInterval}this.scrollSpeed=0};jQuery.fn.mkpslider.Slider.prototype.isDragging=function(){switch(this._dragPhase){case"drag":case"drop":return true;default:return false}};jQuery.fn.mkpslider.Slider.prototype.drop=function(){switch(this._dragPhase){case"drag":this._dragPhase="drop";setTimeout("document.getElementById('"+this.id+"')._slider._dragPhase= '';",100);this.scrollSpeed=30*this._realSpeed>>0;this.slowStop();break;case"drop":return;default:this._dragPhase="";return}};jQuery.fn.mkpslider.Slider.prototype.zoomStop=function(a){for(var b=0;b<this._runningZooms.length;b++)if(this._runningZooms[b]===a){this._runningZooms.splice(b,1);break}};jQuery.fn.mkpslider.Slider.prototype.zoomIn=function(a){this.currentPreview=a;a._zoomWay=1;this._zoomStart(a)};jQuery.fn.mkpslider.Slider.prototype.zoomOut=function(a){a._zoomWay=2;this._zoomStart(a)};jQuery.fn.mkpslider.Slider.prototype._zoomStart=function(a){if(!this._runningZooms.length){this._runningZooms.push(a);this._zoomInterval=setInterval("document.getElementById('"+this.id+"')._slider._scheduleZoom();",30)}else{this.zoomStop(a);this._runningZooms.push(a)}};jQuery.fn.mkpslider.Slider.prototype._scheduleZoom=function(){for(var a=0;a<this._runningZooms.length;a++){var b=this._runningZooms[a];switch(b._zoomWay){case 1:$(b).trigger("easein");break;case 2:$(b).trigger("easeout");break}}if(!this._runningZooms.length){clearInterval(this._zoomInterval);delete this._zoomInterval}};jQuery.fn.mkpslider.Slider.prototype.getOffset=function(){return-this.stripe.position().left};jQuery.fn.mkpslider.Slider.prototype.getMinOffset=function(){return 0};jQuery.fn.mkpslider.Slider.prototype.getMaxOffset=function(){return this.stripe.width()-this.container.width()};jQuery.fn.mkpslider.Slider.prototype.redraw=function(){var a=this.getOffset();this.btnDown.stop(true);if(a>=this.getMaxOffset())this.btnDown.fadeTo(400,0);else this.btnDown.fadeTo(400,1);this.btnUp.stop(true);if(a<=this.getMinOffset())this.btnUp.fadeTo(400,0);else this.btnUp.fadeTo(400,1)};jQuery.fn.mkpslider.uid=function(){if(!jQuery.fn.mkpslider._uid)jQuery.fn.mkpslider._uid=0;return"mkpslider_"+ ++jQuery.fn.mkpslider._uid};jQuery.fn.mkpslider.resize=function(a,b,c){if(!b||!c){if(!b&&!c)return;a.css("position","");a.css("display","block");a.parent().css("width","");a.parent().css("height","");if(b){a.width(b);a.css("height","")}else{a.css("width","");a.height(c)}return}a.css("left","0px");a.css("top","0px");a.height(c);a.css("width","");var d=a.width();if(d>b){var e=(d-b)/2>>0;a.css("left","-"+e+"px")}else if(d<b){a.css("height","");a.width(b);var f=a.height();var e=(f-c)/2>>0;a.css("top","-"+e+"px")}a.css("position","relative");a.parent().width(b);a.parent().height(c);a.parent().css("overflow","hidden");a.parent().css("display","block")};jQuery.fn.mkpslider.computeTransitionSteps=function(a,b,c,d,e){var f=[];switch(d){case"linear":case"uniform":for(var g=1;g<=c;g++){f.push(Math.round((b-a)*g/c+a))}break;case"uniform-deceleration":case"quadratic-out":for(var g=1;g<=c;g++){f.push(Math.round((a-b)*Math.pow(g/c-1,2)+b))}break}if(e){var h=a;for(var g=0;g<c;g++){var i=f[g];f[g]-=h;h=i}}return f};jQuery.fn.mkpslider.defaultOptions={baseClassName:"mkpslider",thumbnailWidth:64,thumbnailHeight:64,previewWidth:0,previewHeight:128,previewVOffset:0,durationIn:5,durationOut:10,durationMove:10};jQuery.fn.mkpslider.VERSION="1.0.4"
