/*! responsiveCarousel.JS - v1.2.0 * http://basilio.github.com/responsiveCarousel * * Copyright (c) 2013 Basilio Cáceres ; * Licensed under the MIT license */ ;(function($){ "use strict"; $.fn.Gallerycarousel = function(args){ var defaults, obj; defaults = { infinite : true, visible : 1, speed : 'fast', overflow : false, autoRotate : false, navigation : $(this).data('navigation'), itemMinWidth : 0, itemEqualHeight : false, itemMargin : 0, itemClassActive : 'crsl-active', imageWideClass : 'wide-image', // Use to build grid system - carousel : false carousel : true }; return $(this).each( function(){ // Set Object obj = $(this); // Extend if( $.isEmptyObject(args) === false ) $.extend( defaults, args ); if( $.isEmptyObject( $(obj).data('crsl') ) === false ) $.extend( defaults, $(obj).data('crsl') ); // Touch detection defaults.isTouch = 'ontouchstart' in document.documentElement || navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i) ? true : false ; obj.init = function(){ // Set some default vars defaults.total = $(obj).find('.crsl-item').length; defaults.itemWidth = $(obj).outerWidth(); defaults.visibleDefault = defaults.visible; // Touch Defaults defaults.swipeDistance = null; defaults.swipeMinDistance = 100; defaults.startCoords = {}; defaults.endCoords = {}; // .crsl-items $(obj).css({ width: '100%' }); // .crls-item $(obj).find('.crsl-item').css({ position: 'relative', float: 'left', overflow: 'hidden', height: 'auto' }); // .crsl-item > images with full width $(obj).find('.'+defaults.imageWideClass).each( function(){ $(this).css({ display: 'block', width: '100%', height: 'auto' }); }); // .crsl-item > iframes (videos) $(obj).find('.crsl-item iframe').attr({ width: '100%' }); // Declare the item ative if( defaults.carousel ) $(obj).find('.crsl-item:first-child').addClass(defaults.itemClassActive); // Move last element to begin for infinite carousel if( defaults.carousel && defaults.infinite && ( defaults.visible < defaults.total ) ) $(obj).find('.crsl-item:first-child').before( $('.crsl-item:last-child', obj) ); // if defaults.overflow if( defaults.overflow === false ){ $(obj).css({ overflow: 'hidden' }); } else { $('html, body').css({ 'overflow-x': 'hidden' }); } $(obj).trigger('initCarousel', [defaults, obj]); // Preload if it`s neccesary obj.testPreload(); // This configure and margins and variables when document is ready, // loaded and window is resized obj.config(); // Init AutoRotate obj.initRotate(); // Trigger Clicks obj.triggerNavs(); }; obj.testPreload= function(){ if( $(obj).find('img').length > 0 ){ var totalImages = $(obj).find('img').length, i = 1; $(obj).find('img').each( function(){ obj.preloadImage(this, i , totalImages); i++; }); } else { $(obj).trigger('loadedCarousel', [defaults, obj]); } }; obj.preloadImage = function(image, i, totalImages){ var new_image = new Image(), attributes = {}; attributes.src = ( $(image).attr('src') !== undefined ? image.src : '' ); attributes.alt = ( $(image).attr('alt') !== undefined ? image.alt : '' ); $(new_image).attr( attributes ); $(new_image).on('load', function(){ // Trigger first image loaded as init Loading action if( i === 1 ) $(obj).trigger('loadingImagesCarousel', [defaults, obj]); // Trigger last image loaded as loaded complete action if( i === totalImages ) $(obj).trigger('loadedImagesCarousel', [defaults, obj]); }); }; // Base Configuration: obj.config = function(){ // Width Item defaults.itemWidth = Math.floor( ( $(obj).outerWidth() - ( defaults.itemMargin * ( defaults.visibleDefault - 1 ) ) ) / defaults.visibleDefault ); if( defaults.itemWidth <= defaults.itemMinWidth ){ defaults.visible = Math.floor( ( $(obj).outerWidth() - ( defaults.itemMargin * ( defaults.visible - 1 ) ) ) / defaults.itemMinWidth ) === 1 ? Math.floor( $(obj).outerWidth() / defaults.itemMinWidth ) : Math.floor( ( $(obj).outerWidth() - defaults.itemMargin ) / defaults.itemMinWidth ); defaults.visible = defaults.visible < 1 ? 1 : defaults.visible; defaults.itemWidth = defaults.visible === 1 ? Math.floor( $(obj).outerWidth() ) : Math.floor( ( $(obj).outerWidth() - ( defaults.itemMargin * ( defaults.visible - 1 ) ) ) / defaults.visible ); } else { defaults.visible = defaults.visibleDefault; } if( defaults.carousel ){ // Normal use - Global carousel variables // Set Variables obj.wrapWidth = Math.floor( ( defaults.itemWidth + defaults.itemMargin ) * defaults.total ); obj.wrapMargin = obj.wrapMarginDefault = defaults.infinite && defaults.visible < defaults.total ? parseInt( ( defaults.itemWidth + defaults.itemMargin ) * -1, 10 ) : 0 ; // Move last element to begin for infinite carousel if( defaults.infinite && ( defaults.visible < defaults.total ) && ( $(obj).find('.crsl-item.'+defaults.itemClassActive).index() === 0 ) ){ $(obj).find('.crsl-item:first-child').before( $('.crsl-item:last-child', obj) ); obj.wrapMargin = obj.wrapMarginDefault = parseInt( ( defaults.itemWidth + defaults.itemMargin ) * -1, 10 ); } // Modify width & margin to .crsl-wrap $(obj).find('.crsl-wrap').css({ width: obj.wrapWidth+'px', marginLeft: obj.wrapMargin }); } else { // Excepcional use // responsiveCarousel might be use to create grids! obj.wrapWidth = $(obj).outerWidth(); $(obj).find('.crsl-wrap').css({ width: obj.wrapWidth+defaults.itemMargin+'px' }); $('#'+defaults.navigation).hide(); } $(obj).find('.crsl-item').css({ width: defaults.itemWidth+'px', marginRight : defaults.itemMargin+'px' }); // Equal Height Configuration obj.equalHeights(); // Condition if total <= visible if( defaults.carousel ){ if( defaults.visible >= defaults.total ){ defaults.autoRotate = false; $('#'+defaults.navigation).hide(); } else { $('#'+defaults.navigation).show(); } } }; // Equal Heights obj.equalHeights = function(){ if( defaults.itemEqualHeight !== false ){ var tallest = 0; $(obj).find('.crsl-item').each( function(){ $(this).css({ 'height': 'auto' }); if ( $(this).outerHeight() > tallest ){ tallest = $(this).outerHeight(); } }); $(obj).find('.crsl-item').css({ height: tallest+'px' }); } return true; }; obj.initRotate = function(){ // Set AutoRotate Interval if( defaults.autoRotate !== false ){ obj.rotateTime = window.setInterval( function(){ obj.rotate(); }, defaults.autoRotate); } }; obj.triggerNavs = function(){ // Previous / Next Navigation $('#'+defaults.navigation).delegate('.previous, .next', 'click', function(event){ // Prevent default event.preventDefault(); // Prepare execute obj.prepareExecute(); // Previous & next action if( $(this).hasClass('previous') && obj.testPrevious(obj.itemActive) ){ obj.previous(); } else if( $(this).hasClass('next') && obj.testNext() ){ obj.next(); } else { return; } }); }; // Prepare Execute obj.prepareExecute = function(){ // Stop rotate if( defaults.autoRotate ){ clearInterval(obj.rotateTime); } // Prevent Animate Event obj.preventAnimateEvent(); // Active obj.itemActive = $(obj).find('.crsl-item.'+defaults.itemClassActive); return true; }; obj.preventAnimateEvent = function(){ if( $(obj).find('.crsl-wrap:animated').length > 0 ){ return false; } }; // Rotate Action obj.rotate = function(){ // Prevent Animate Event obj.preventAnimateEvent(); // Active obj.itemActive = $(obj).find('.crsl-item.'+defaults.itemClassActive); obj.next(); return true; }; obj.testPrevious = function(active){ return $('.crsl-wrap', obj).find('.crsl-item').index(active) > 0; }; obj.testNext = function(){ return ( !defaults.infinite && obj.wrapWidth >= ( ( ( defaults.itemWidth + defaults.itemMargin ) * ( defaults.visible + 1 ) ) - obj.wrapMargin ) ) || defaults.infinite; }; // Previous Animate obj.previous = function(){ obj.wrapMargin = defaults.infinite ? obj.wrapMarginDefault + $(obj.itemActive).outerWidth(true) : obj.wrapMargin + $(obj.itemActive).outerWidth(true); var prevItemIndex = $(obj.itemActive).index(); var newItemActive = $(obj.itemActive).prev('.crsl-item'); var action = 'previous'; // Trigger Begin Carousel Move $(obj).trigger('beginCarousel', [defaults, obj, action]); // Animate $(obj). find('.crsl-wrap'). animate({ marginLeft: obj.wrapMargin+'px' }, defaults.speed, function(){ // Active $(obj.itemActive).removeClass(defaults.itemClassActive); $(newItemActive).addClass(defaults.itemClassActive); if( defaults.infinite ){ $(this).css({ marginLeft: obj.wrapMarginDefault }).find('.crsl-item:first-child').before( $('.crsl-item:last-child', obj) ); } else { if( obj.testPrevious(newItemActive) === false ) $( '#'+defaults.navigation ).find('.previous').addClass('previous-inactive'); if( obj.testNext() ) $( '#'+defaults.navigation ).find('.next').removeClass('next-inactive'); } // Trigger Carousel Exec $(this).trigger('endCarousel', [defaults, obj, action]); }); }; // Next Animate obj.next = function(){ obj.wrapMargin = defaults.infinite ? obj.wrapMarginDefault - $(obj.itemActive).outerWidth(true) : obj.wrapMargin - $(obj.itemActive).outerWidth(true); var nextItemIndex = $(obj.itemActive).index(); var newItemActive = $(obj.itemActive).next('.crsl-item'); var action = 'next'; // Trigger Begin Carousel Move $(obj).trigger('beginCarousel', [defaults, obj, action]); // Animate $(obj). find('.crsl-wrap'). animate({ marginLeft: obj.wrapMargin+'px' }, defaults.speed, function(){ // Active $(obj.itemActive).removeClass(defaults.itemClassActive); $(newItemActive).addClass(defaults.itemClassActive); if( defaults.infinite ){ $(this).css({ marginLeft: obj.wrapMarginDefault }).find('.crsl-item:last-child').after( $('.crsl-item:first-child', obj) ); } else { if( obj.testPrevious(newItemActive) ) $( '#'+defaults.navigation ).find('.previous').removeClass('previous-inactive'); if( obj.testNext() === false ) $( '#'+defaults.navigation ).find('.next').addClass('next-inactive'); } // Trigger Carousel Exec $(this).trigger('endCarousel', [defaults, obj, action]); }); }; var mouseHover = false, current; $(window).on('mouseleave', function(event){ // Detect current if (event.target) current = event.target; else if (event.srcElement) current = event.srcElement; // Detect mouseover if( ( $(obj).attr('id') && $(current).parents('.crsl-items').attr('id') === $(obj).attr('id') ) || ( $(current).parents('.crsl-items').data('navigation') === $(obj).data('navigation') ) ){ mouseHover = true; } else { mouseHover = false; } // False return false; }); $(window).on('keydown', function(event){ if( mouseHover === true ){ // Previous & next action if( event.keyCode === 37 ){ // Prepare execute obj.prepareExecute(); // Previous obj.previous(); } else if( event.keyCode === 39 ){ // Prepare execute obj.prepareExecute(); // Next obj.next(); } } return; }); if( defaults.isTouch ){ $(obj).on('touchstart', function(e){ $(obj).addClass('touching'); defaults.startCoords.pageX = defaults.endCoords.pageX = e.originalEvent.targetTouches[0].pageX; defaults.startCoords.pageY = defaults.endCoords.pageY = e.originalEvent.targetTouches[0].pageY; $('.touching').on('touchmove',function(e){ defaults.endCoords.pageX = e.originalEvent.targetTouches[0].pageX; defaults.endCoords.pageY = e.originalEvent.targetTouches[0].pageY; if( Math.abs( parseInt( defaults.endCoords.pageX-defaults.startCoords.pageX, 10 ) ) > Math.abs( parseInt( defaults.endCoords.pageY-defaults.startCoords.pageY, 10 ) ) ){ // e.preventDefault(); e.stopPropagation(); } }); }).on('touchend', function(e){ // e.preventDefault(); e.stopPropagation(); defaults.swipeDistance = defaults.endCoords.pageX - defaults.startCoords.pageX; if( defaults.swipeDistance >= defaults.swipeMinDistance ){ // swipeLeft obj.previous(); } else if( defaults.swipeDistance <= - defaults.swipeMinDistance ){ // swipeRight obj.next(); } $('.touching').off('touchmove').removeClass('touching'); }); } $(obj).on('loadedCarousel loadedImagesCarousel', function(){ // Trigger window onload EqualHeights obj.equalHeights(); }); // Create method to resize element $(window).on('carouselResizeEnd', function(){ // This configure and margins and variables when document is ready, // loaded and window is resized if( defaults.itemWidth !== $(obj).outerWidth() ) obj.config(); }); // Carousel General Detection $(window).ready( function(){ // Trigger Prepare Event Carousel $(obj).trigger('prepareCarousel', [defaults, obj]); // Init some defaults styles obj.init(); // ResizeEnd event $(window).on('resize', function(){ if( this.carouselResizeTo ) clearTimeout(this.carouselResizeTo); this.carouselResizeTo = setTimeout(function(){ $(this).trigger('carouselResizeEnd'); }, 10); }); }); $(window).load( function(){ // Preload if it`s neccesary obj.testPreload(); // This configure and margins and variables when document is ready, // loaded and window is resized obj.config(); }); }); }; })(jQuery); /* * simplyScroll 2 - a scroll-tastic jQuery plugin * * http://logicbox.net/jquery/simplyscroll/ * * Copyright (c) 2009-2012 Will Kelly - http://logicbox.net * * Dual licensed under the MIT and GPL licenses. * * Version: 2.0.5 Last revised: 10/05/2012 * */ (function(c,j,i){c.fn.simplyScroll=function(a){return this.each(function(){new c.simplyScroll(this,a)})};var h={customClass:"simply-scroll",frameRate:24,speed:1,orientation:"horizontal",auto:!0,autoMode:"loop",manualMode:"end",direction:"forwards",pauseOnHover:!0,pauseOnTouch:!0,pauseButton:!1,startOnLoad:!1};c.simplyScroll=function(a,b){var g=this;this.o=c.extend({},h,b||{});this.isAuto=!1!==this.o.auto&&null!==this.o.autoMode.match(/^loop|bounce$/);this.isRTL=(this.isHorizontal=null!==this.o.orientation.match(/^horizontal|vertical$/)&& this.o.orientation==h.orientation)&&"rtl"==c("html").attr("dir");this.isForwards=!this.isAuto||this.isAuto&&(null!==this.o.direction.match(/^forwards|backwards$/)&&this.o.direction==h.direction)&&!this.isRTL;this.isLoop=this.isAuto&&"loop"==this.o.autoMode||!this.isAuto&&"loop"==this.o.manualMode;this.events=(this.supportsTouch="createTouch"in document)?{start:"touchstart MozTouchDown",move:"touchmove MozTouchMove",end:"touchend touchcancel MozTouchRelease"}:{start:"mouseenter",end:"mouseleave"}; this.$list=c(a);var d=this.$list.children();this.$list.addClass("simply-scroll-list").wrap('
').parent().wrap('
');this.isAuto?this.o.pauseButton&&(this.$list.parent().parent().prepend('
'),this.o.pauseOnHover=!1):this.$list.parent().parent().prepend('
').prepend('
'); if(1").parent().addClass("simply-scroll-list"),this.isHorizontal?this.$list.children().css({"float":"left",width:e+"px"}):this.$list.children().css({height:e+"px"}))}this.o.startOnLoad?c(j).load(function(){g.init()}):this.init()};c.simplyScroll.fn= c.simplyScroll.prototype={};c.simplyScroll.fn.extend=c.simplyScroll.extend=c.extend;c.simplyScroll.fn.extend({init:function(){this.$items=this.$list.children();this.$clip=this.$list.parent();this.$container=this.$clip.parent();this.$btnBack=c(".simply-scroll-back",this.$container);this.$btnForward=c(".simply-scroll-forward",this.$container);this.isHorizontal?(this.itemMax=this.$items.eq(0).outerWidth(!0),this.clipMax=this.$clip.width(),this.dimension="width",this.moveBackClass="simply-scroll-btn-left", this.moveForwardClass="simply-scroll-btn-right",this.scrollPos="Left"):(this.itemMax=this.$items.eq(0).outerHeight(!0),this.clipMax=this.$clip.height(),this.dimension="height",this.moveBackClass="simply-scroll-btn-up",this.moveForwardClass="simply-scroll-btn-down",this.scrollPos="Top");this.posMin=0;this.posMax=this.$items.length*this.itemMax;var a=Math.ceil(this.clipMax/this.itemMax);if(this.isAuto&&"loop"==this.o.autoMode)this.$list.css(this.dimension,this.posMax+this.itemMax*a+"px"),this.posMax+= this.clipMax-this.o.speed,this.isForwards?(this.$items.slice(0,a).clone(!0).appendTo(this.$list),this.resetPosition=0):(this.$items.slice(-a).clone(!0).prependTo(this.$list),this.resetPosition=this.$items.length*this.itemMax,this.isRTL&&(this.$clip[0].dir="ltr",this.$items.css("float","right")));else if(!this.isAuto&&"loop"==this.o.manualMode){this.posMax+=this.itemMax*a;this.$list.css(this.dimension,this.posMax+this.itemMax*a+"px");this.posMax+=this.clipMax-this.o.speed;this.$items.slice(0,a).clone(!0).appendTo(this.$list); this.$items.slice(-a).clone(!0).prependTo(this.$list);this.resetPositionForwards=this.resetPosition=a*this.itemMax;this.resetPositionBackwards=this.$items.length*this.itemMax;var b=this;this.$btnBack.bind(this.events.start,function(){b.isForwards=false;b.resetPosition=b.resetPositionBackwards});this.$btnForward.bind(this.events.start,function(){b.isForwards=true;b.resetPosition=b.resetPositionForwards})}else this.$list.css(this.dimension,this.posMax+"px"),this.isForwards?this.resetPosition=0:(this.resetPosition= this.$items.length*this.itemMax,this.isRTL&&(this.$clip[0].dir="ltr",this.$items.css("float","right")));this.resetPos();this.interval=null;this.intervalDelay=Math.floor(1E3/this.o.frameRate);if(this.isAuto||"end"!=this.o.manualMode)for(;0!==this.itemMax%this.o.speed;)if(this.o.speed--,0===this.o.speed){this.o.speed=1;break}b=this;this.trigger=null;this.funcMoveBack=function(a){a!==i&&a.preventDefault();b.trigger=!b.isAuto&&b.o.manualMode=="end"?this:null;b.isAuto?b.isForwards?b.moveBack():b.moveForward(): b.moveBack()};this.funcMoveForward=function(a){a!==i&&a.preventDefault();b.trigger=!b.isAuto&&b.o.manualMode=="end"?this:null;b.isAuto?b.isForwards?b.moveForward():b.moveBack():b.moveForward()};this.funcMovePause=function(){b.movePause()};this.funcMoveStop=function(){b.moveStop()};this.funcMoveResume=function(){b.moveResume()};if(this.isAuto){this.paused=!1;var g=function(){if(b.paused===false){b.paused=true;b.funcMovePause()}else{b.paused=false;b.funcMoveResume()}return b.paused};this.supportsTouch&& this.$items.find("a").length&&(this.supportsTouch=!1);if(this.isAuto&&this.o.pauseOnHover&&!this.supportsTouch)this.$clip.bind(this.events.start,this.funcMovePause).bind(this.events.end,this.funcMoveResume);else if(this.isAuto&&this.o.pauseOnTouch&&!this.o.pauseButton&&this.supportsTouch){var d,f;this.$clip.bind(this.events.start,function(a){g();var c=a.originalEvent.touches[0];d=b.isHorizontal?c.pageX:c.pageY;f=b.$clip[0]["scroll"+b.scrollPos];a.stopPropagation();a.preventDefault()}).bind(this.events.move, function(a){a.stopPropagation();a.preventDefault();a=a.originalEvent.touches[0];a=d-(b.isHorizontal?a.pageX:a.pageY)+f;if(a<0)a=0;else if(a>b.posMax)a=b.posMax;b.$clip[0]["scroll"+b.scrollPos]=a;b.funcMovePause();b.paused=true})}else this.o.pauseButton&&(this.$btnPause=c(".simply-scroll-btn-pause",this.$container).bind("click",function(a){a.preventDefault();g()?c(this).addClass("active"):c(this).removeClass("active")}));this.funcMoveForward()}else this.$btnBack.addClass("simply-scroll-btn "+this.moveBackClass).bind(this.events.start, this.funcMoveBack).bind(this.events.end,this.funcMoveStop),this.$btnForward.addClass("simply-scroll-btn "+this.moveForwardClass).bind(this.events.start,this.funcMoveForward).bind(this.events.end,this.funcMoveStop),"end"==this.o.manualMode&&(!this.isRTL?this.$btnBack.addClass("disabled"):this.$btnForward.addClass("disabled"))},moveForward:function(){var a=this;this.movement="forward";null!==this.trigger&&this.$btnBack.removeClass("disabled");a.interval=setInterval(function(){a.$clip[0]["scroll"+a.scrollPos]< a.posMax-a.clipMax?a.$clip[0]["scroll"+a.scrollPos]+=a.o.speed:a.isLoop?a.resetPos():a.moveStop(a.movement)},a.intervalDelay)},moveBack:function(){var a=this;this.movement="back";null!==this.trigger&&this.$btnForward.removeClass("disabled");a.interval=setInterval(function(){a.$clip[0]["scroll"+a.scrollPos]>a.posMin?a.$clip[0]["scroll"+a.scrollPos]-=a.o.speed:a.isLoop?a.resetPos():a.moveStop(a.movement)},a.intervalDelay)},movePause:function(){clearInterval(this.interval)},moveStop:function(a){this.movePause(); null!==this.trigger&&("undefined"!==typeof a&&c(this.trigger).addClass("disabled"),this.trigger=null);this.isAuto&&"bounce"==this.o.autoMode&&("forward"==a?this.moveBack():this.moveForward())},moveResume:function(){"forward"==this.movement?this.moveForward():this.moveBack()},resetPos:function(){this.$clip[0]["scroll"+this.scrollPos]=this.resetPosition}})})(jQuery,window);