(function($) { var plugin = {}; var defaults = { mode: 'horizontal', slideselector: '', infiniteloop: true, hidecontrolonend: false, speed: 500, easing: null, slidemargin: 0, startslide: 0, randomstart: false, captions: false, ticker: false, tickerhover: false, adaptiveheight: false, adaptiveheightspeed: 500, video: false, usecss: true, preloadimages: 'visible', responsive: true, slidezindex: 50, wrapperclass: 'bx-wrapper', touchenabled: true, swipethreshold: 50, onetoonetouch: true, preventdefaultswipex: true, preventdefaultswipey: false, pager: true, pagertype: 'full', pagershortseparator: ' / ', pagerselector: null, buildpager: null, pagercustom: null, controls: true, nexttext: 'next', prevtext: 'prev', nextselector: null, prevselector: null, autocontrols: false, starttext: 'start', stoptext: 'stop', autocontrolscombine: false, autocontrolsselector: null, auto: false, pause: 4000, autostart: true, autodirection: 'next', autohover: false, autodelay: 0, autoslideforonepage: false, minslides: 1, maxslides: 1, moveslides: 0, slidewidth: 0, onsliderload: function() {}, onslidebefore: function() {}, onslideafter: function() {}, onslidenext: function() {}, onslideprev: function() {}, onsliderresize: function() {} } $.fn.bxslider = function(options) { if (this.length == 0) return this; if (this.length > 1) { this.each(function() { $(this).bxslider(options) }); return this; } var slider = {}; var el = this; plugin.el = this; var windowwidth = $(window).width(); var windowheight = $(window).height(); var init = function() { slider.settings = $.extend({}, defaults, options); slider.settings.slidewidth = parseint(slider.settings.slidewidth); slider.children = el.children(slider.settings.slideselector); if (slider.children.length < slider.settings.minslides) slider.settings.minslides = slider.children.length; if (slider.children.length < slider.settings.maxslides) slider.settings.maxslides = slider.children.length; if (slider.settings.randomstart) slider.settings.startslide = math.floor(math.random() * slider.children.length); slider.active = { index: slider.settings.startslide } slider.carousel = slider.settings.minslides > 1 || slider.settings.maxslides > 1; if (slider.carousel) slider.settings.preloadimages = 'all'; slider.minthreshold = (slider.settings.minslides * slider.settings.slidewidth) + ((slider.settings.minslides - 1) * slider.settings.slidemargin); slider.maxthreshold = (slider.settings.maxslides * slider.settings.slidewidth) + ((slider.settings.maxslides - 1) * slider.settings.slidemargin); slider.working = false; slider.controls = {}; slider.interval = null; slider.animprop = slider.settings.mode == 'vertical' ? 'top' : 'left'; slider.usingcss = slider.settings.usecss && slider.settings.mode != 'fade' && (function() { var div = document.createelement('div'); var props = ['webkitperspective', 'mozperspective', 'operspective', 'msperspective']; for (var i in props) { if (div.style[props[i]] !== undefined) { slider.cssprefix = props[i].replace('perspective', '').tolowercase(); slider.animprop = '-' + slider.cssprefix + '-transform'; return true; } } return false; }()); if (slider.settings.mode == 'vertical') slider.settings.maxslides = slider.settings.minslides; el.data("origstyle", el.attr("style")); el.children(slider.settings.slideselector).each(function() { $(this).data("origstyle", $(this).attr("style")); }); setup(); } var setup = function() { el.wrap('
'); slider.viewport = el.parent(); slider.loader = $(''); slider.viewport.prepend(slider.loader); el.css({ width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto', position: 'relative' }); if (slider.usingcss && slider.settings.easing) { el.css('-' + slider.cssprefix + '-transition-timing-function', slider.settings.easing); } else if (!slider.settings.easing) { slider.settings.easing = 'swing'; } var slidesshowing = getnumberslidesshowing(); slider.viewport.css({ width: '100%', overflow: 'hidden', position: 'relative' }); slider.viewport.parent().css({ maxwidth: getviewportmaxwidth() }); if (!slider.settings.pager) { slider.viewport.parent().css({ margin: '0 auto 0px' }); } slider.children.css({ 'float': slider.settings.mode == 'horizontal' ? 'left' : 'none', liststyle: 'none', position: 'relative' }); slider.children.css('width', getslidewidth()); if (slider.settings.mode == 'horizontal' && slider.settings.slidemargin > 0) slider.children.css('marginright', slider.settings.slidemargin); if (slider.settings.mode == 'vertical' && slider.settings.slidemargin > 0) slider.children.css('marginbottom', slider.settings.slidemargin); if (slider.settings.mode == 'fade') { slider.children.css({ position: 'absolute', zindex: 0, display: 'none' }); slider.children.eq(slider.settings.startslide).css({ zindex: slider.settings.slidezindex, display: 'block' }); } slider.controls.el = $(''); if (slider.settings.captions) appendcaptions(); slider.active.last = slider.settings.startslide == getpagerqty() - 1; if (slider.settings.video) el.fitvids(); var preloadselector = slider.children.eq(slider.settings.startslide); if (slider.settings.preloadimages == "all") preloadselector = slider.children; if (!slider.settings.ticker) { if (slider.settings.pager) appendpager(); if (slider.settings.controls) appendcontrols(); if (slider.settings.auto && slider.settings.autocontrols) appendcontrolsauto(); if (slider.settings.controls || slider.settings.autocontrols || slider.settings.pager) slider.viewport.after(slider.controls.el); } else { slider.settings.pager = false; } loadelements(preloadselector, start); } var loadelements = function(selector, callback) { var total = selector.find('img, iframe').length; if (total == 0) { callback(); return; } var count = 0; selector.find('img, iframe').each(function() { $(this).one('load', function() { if (++count == total) callback(); }).each(function() { if (this.complete) $(this).load(); }); }); } var start = function() { if (slider.settings.infiniteloop && slider.settings.mode != 'fade' && !slider.settings.ticker) { var slice = slider.settings.mode == 'vertical' ? slider.settings.minslides : slider.settings.maxslides; var sliceappend = slider.children.slice(0, slice).clone().addclass('bx-clone'); var sliceprepend = slider.children.slice(-slice).clone().addclass('bx-clone'); el.append(sliceappend).prepend(sliceprepend); } slider.loader.remove(); setslideposition(); if (slider.settings.mode == 'vertical') slider.settings.adaptiveheight = true; slider.viewport.height(getviewportheight()); el.redrawslider(); slider.settings.onsliderload(slider.active.index); slider.initialized = true; if (slider.settings.responsive) $(window).bind('resize', resizewindow); if (slider.settings.auto && slider.settings.autostart && (getpagerqty() > 1 || slider.settings.autoslideforonepage)) initauto(); if (slider.settings.ticker) initticker(); if (slider.settings.pager) updatepageractive(slider.settings.startslide); if (slider.settings.controls) updatedirectioncontrols(); if (slider.settings.touchenabled && !slider.settings.ticker) inittouch(); } var getviewportheight = function() { var height = 0; var children = $(); if (slider.settings.mode != 'vertical' && !slider.settings.adaptiveheight) { children = slider.children; } else { if (!slider.carousel) { children = slider.children.eq(slider.active.index); } else { var currentindex = slider.settings.moveslides == 1 ? slider.active.index : slider.active.index * getmoveby(); children = slider.children.eq(currentindex); for (i = 1; i <= slider.settings.maxslides - 1; i++) { if (currentindex + i >= slider.children.length) { children = children.add(slider.children.eq(i - 1)); } else { children = children.add(slider.children.eq(currentindex + i)); } } } } if (slider.settings.mode == 'vertical') { children.each(function(index) { height += $(this).outerheight(); }); if (slider.settings.slidemargin > 0) { height += slider.settings.slidemargin * (slider.settings.minslides - 1); } } else { height = math.max.apply(math, children.map(function() { return $(this).outerheight(false); }).get()); } if (slider.viewport.css('box-sizing') == 'border-box') { height += parsefloat(slider.viewport.css('padding-top')) + parsefloat(slider.viewport.css('padding-bottom')) + parsefloat(slider.viewport.css('border-top-width')) + parsefloat(slider.viewport.css('border-bottom-width')); } else if (slider.viewport.css('box-sizing') == 'padding-box') { height += parsefloat(slider.viewport.css('padding-top')) + parsefloat(slider.viewport.css('padding-bottom')); } return height; } var getviewportmaxwidth = function() { var width = '100%'; if (slider.settings.slidewidth > 0) { if (slider.settings.mode == 'horizontal') { width = (slider.settings.maxslides * slider.settings.slidewidth) + ((slider.settings.maxslides - 1) * slider.settings.slidemargin); } else { width = slider.settings.slidewidth; } } return width; } var getslidewidth = function() { var newelwidth = slider.settings.slidewidth; var wrapwidth = slider.viewport.width(); if (slider.settings.slidewidth == 0 || (slider.settings.slidewidth > wrapwidth && !slider.carousel) || slider.settings.mode == 'vertical') { newelwidth = wrapwidth; } else if (slider.settings.maxslides > 1 && slider.settings.mode == 'horizontal') { if (wrapwidth > slider.maxthreshold) {} else if (wrapwidth < slider.minthreshold) { newelwidth = (wrapwidth - (slider.settings.slidemargin * (slider.settings.minslides - 1))) / slider.settings.minslides; } } return newelwidth; } var getnumberslidesshowing = function() { var slidesshowing = 1; if (slider.settings.mode == 'horizontal' && slider.settings.slidewidth > 0) { if (slider.viewport.width() < slider.minthreshold) { slidesshowing = slider.settings.minslides; } else if (slider.viewport.width() > slider.maxthreshold) { slidesshowing = slider.settings.maxslides; } else { var childwidth = slider.children.first().width() + slider.settings.slidemargin; slidesshowing = math.floor((slider.viewport.width() + slider.settings.slidemargin) / childwidth); } } else if (slider.settings.mode == 'vertical') { slidesshowing = slider.settings.minslides; } return slidesshowing; } var getpagerqty = function() { var pagerqty = 0; if (slider.settings.moveslides > 0) { if (slider.settings.infiniteloop) { pagerqty = math.ceil(slider.children.length / getmoveby()); } else { var breakpoint = 0; var counter = 0 while (breakpoint < slider.children.length) { ++pagerqty; breakpoint = counter + getnumberslidesshowing(); counter += slider.settings.moveslides <= getnumberslidesshowing() ? slider.settings.moveslides : getnumberslidesshowing(); } } } else { pagerqty = math.ceil(slider.children.length / getnumberslidesshowing()); } return pagerqty; } var getmoveby = function() { if (slider.settings.moveslides > 0 && slider.settings.moveslides <= getnumberslidesshowing()) { return slider.settings.moveslides; } return getnumberslidesshowing(); } var setslideposition = function() { if (slider.children.length > slider.settings.maxslides && slider.active.last && !slider.settings.infiniteloop) { if (slider.settings.mode == 'horizontal') { var lastchild = slider.children.last(); var position = lastchild.position(); setpositionproperty(-(position.left - (slider.viewport.width() - lastchild.outerwidth())), 'reset', 0); } else if (slider.settings.mode == 'vertical') { var lastshowingindex = slider.children.length - slider.settings.minslides; var position = slider.children.eq(lastshowingindex).position(); setpositionproperty(-position.top, 'reset', 0); } } else { var position = slider.children.eq(slider.active.index * getmoveby()).position(); if (slider.active.index == getpagerqty() - 1) slider.active.last = true; if (position != undefined) { if (slider.settings.mode == 'horizontal') setpositionproperty(-position.left, 'reset', 0); else if (slider.settings.mode == 'vertical') setpositionproperty(-position.top, 'reset', 0); } } } var setpositionproperty = function(value, type, duration, params) { if (slider.usingcss) { var propvalue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)'; el.css('-' + slider.cssprefix + '-transition-duration', duration / 1000 + 's'); if (type == 'slide') { el.css(slider.animprop, propvalue); el.bind('transitionend webkittransitionend otransitionend mstransitionend', function() { el.unbind('transitionend webkittransitionend otransitionend mstransitionend'); updateafterslidetransition(); }); } else if (type == 'reset') { el.css(slider.animprop, propvalue); } else if (type == 'ticker') { el.css('-' + slider.cssprefix + '-transition-timing-function', 'linear'); el.css(slider.animprop, propvalue); el.bind('transitionend webkittransitionend otransitionend mstransitionend', function() { el.unbind('transitionend webkittransitionend otransitionend mstransitionend'); setpositionproperty(params['resetvalue'], 'reset', 0); tickerloop(); }); } } else { var animateobj = {}; animateobj[slider.animprop] = value; if (type == 'slide') { el.animate(animateobj, duration, slider.settings.easing, function() { updateafterslidetransition(); }); } else if (type == 'reset') { el.css(slider.animprop, value) } else if (type == 'ticker') { el.animate(animateobj, speed, 'linear', function() { setpositionproperty(params['resetvalue'], 'reset', 0); tickerloop(); }); } } } var populatepager = function() { var pagerhtml = ''; var pagerqty = getpagerqty(); for (var i = 0; i < pagerqty; i++) { var linkcontent = ''; if (slider.settings.buildpager && $.isfunction(slider.settings.buildpager)) { linkcontent = slider.settings.buildpager(i); slider.pagerel.addclass('bx-custom-pager'); } else { linkcontent = i + 1; slider.pagerel.addclass('bx-default-pager'); } pagerhtml += ''; } ;slider.pagerel.html(pagerhtml); } var appendpager = function() { if (!slider.settings.pagercustom) { slider.pagerel = $(''); if (slider.settings.pagerselector) { $(slider.settings.pagerselector).html(slider.pagerel); } else { slider.controls.el.addclass('bx-has-pager').append(slider.pagerel); } populatepager(); } else { slider.pagerel = $(slider.settings.pagercustom); } slider.pagerel.on('click', 'a', clickpagerbind); } var appendcontrols = function() { slider.controls.next = $('' + slider.settings.nexttext + ''); slider.controls.prev = $('' + slider.settings.prevtext + ''); slider.controls.next.bind('click', clicknextbind); slider.controls.prev.bind('click', clickprevbind); if (slider.settings.nextselector) { $(slider.settings.nextselector).append(slider.controls.next); } if (slider.settings.prevselector) { $(slider.settings.prevselector).append(slider.controls.prev); } if (!slider.settings.nextselector && !slider.settings.prevselector) { slider.controls.directionel = $(''); slider.controls.directionel.append(slider.controls.prev).append(slider.controls.next); slider.controls.el.addclass('bx-has-controls-direction').append(slider.controls.directionel); } } var appendcontrolsauto = function() { slider.controls.start = $(''); slider.controls.stop = $(''); slider.controls.autoel = $(''); slider.controls.autoel.on('click', '.bx-start', clickstartbind); slider.controls.autoel.on('click', '.bx-stop', clickstopbind); if (slider.settings.autocontrolscombine) { slider.controls.autoel.append(slider.controls.start); } else { slider.controls.autoel.append(slider.controls.start).append(slider.controls.stop); } if (slider.settings.autocontrolsselector) { $(slider.settings.autocontrolsselector).html(slider.controls.autoel); } else { slider.controls.el.addclass('bx-has-controls-auto').append(slider.controls.autoel); } updateautocontrols(slider.settings.autostart ? 'stop' : 'start'); } var appendcaptions = function() { slider.children.each(function(index) { var title = $(this).find('img:first').attr('title'); if (title != undefined && ('' + title).length) { $(this).append('