/**
* jQuery iView Slider v2.0
*
* @version: 2.0.1 - August 17, 2012
*
* @author: Hemn Chawroka
* hemn@iprodev.com
* http://iprodev.com/
*
*/ (function ($, window, undefined) {
var iView = function (el, options) {
//Get slider holder
var iv = this;
iv.options = options;
iv.sliderContent = el, iv.sliderInner = iv.sliderContent.html();
iv.sliderContent.html("
" + iv.sliderInner + "
");
//Get slider
iv.slider = $('.iviewSlider', iv.sliderContent);
iv.slider.css('position', 'relative');
//Necessary variables.
iv.defs = {
slide: 0,
total: 0,
image: '',
images: [],
width: iv.sliderContent.width(),
height: iv.sliderContent.height(),
timer: options.timer.toLowerCase(),
lock: false,
paused: (options.autoAdvance) ? false : true,
time: options.pauseTime,
easing: options.easing
};
//Disable slider text selection
iv.disableSelection(iv.slider[0]);
//Find slides
iv.slides = iv.slider.children();
iv.slides.each(function (i) {
var slide = $(this);
//Find images & thumbnails
iv.defs.images.push(slide.data("iview:image"));
if (slide.data("iview:thumbnail")) iv.defs.images.push(slide.data("iview:thumbnail"));
slide.css('display', 'none');
//Find videos
if (slide.data("iview:type") == "video") {
var element = slide.children().eq(0),
video = $('');
slide.append(video);
element.appendTo($('div.iview-video-container', video));
video.css({
width: iv.defs.width,
height: iv.defs.height,
top: '-' + iv.defs.height + 'px'
}).hide();
slide.addClass('iview-video').css({
'cursor': 'pointer'
});
}
iv.defs.total++;
}).css({
width: iv.defs.width,
height: iv.defs.height
});
//Set Preloader Element
iv.sliderContent.append('');
var iviewPreloader = $('#iview-preloader', iv.sliderContent);
var preloaderBar = $('div', iviewPreloader);
iviewPreloader.css({
top: ((iv.defs.height / 2) - (iviewPreloader.height() / 2)) + 'px',
left: ((iv.defs.width / 2) - (iviewPreloader.width() / 2)) + 'px'
});
//Set Timer Element
iv.sliderContent.append('');
iv.iviewTimer = $('#iview-timer', iv.sliderContent);
iv.iviewTimer.hide();
//Find captions
$('.iview-caption', iv.slider).each(function (i) {
var caption = $(this);
caption.html('' + caption.html() + '
');
});
//If randomStart
options.startSlide = (options.randomStart) ? Math.floor(Math.random() * iv.defs.total) : options.startSlide;
//Set startSlide
options.startSlide = (options.startSlide > 0 && options.startSlide >= iv.defs.total) ? iv.defs.total - 1 : options.startSlide;
iv.defs.slide = options.startSlide;
//Set first image
iv.defs.image = iv.slides.eq(iv.defs.slide);
//Set pauseTime
iv.defs.time = (iv.defs.image.data('iview:pausetime')) ? iv.defs.image.data('iview:pausetime') : options.pauseTime;
//Set easing
iv.defs.easing = (iv.defs.image.data('iview:easing')) ? iv.defs.image.data('iview:easing') : options.easing;
iv.pieDegree = 0;
var padding = options.timerPadding,
diameter = options.timerDiameter,
stroke = options.timerStroke;
if (iv.defs.total > 1 && iv.defs.timer != "bar") {
//Start the Raphael
stroke = (iv.defs.timer == "360bar") ? options.timerStroke : 0;
var width = (diameter + (padding * 2) + (stroke * 2)),
height = width,
r = Raphael(iv.iviewTimer[0], width, height);
iv.R = (diameter / 2);
var param = {
stroke: options.timerBg,
"stroke-width": (stroke + (padding * 2))
},
param2 = {
stroke: options.timerColor,
"stroke-width": stroke,
"stroke-linecap": "round"
},
param3 = {
fill: options.timerColor,
stroke: 'none',
"stroke-width": 0
},
bgParam = {
fill: options.timerBg,
stroke: 'none',
"stroke-width": 0
};
// Custom Arc Attribute
r.customAttributes.arc = function (value, R) {
var total = 360,
alpha = 360 / total * value,
a = (90 - alpha) * Math.PI / 180,
cx = ((diameter / 2) + padding + stroke),
cy = ((diameter / 2) + padding + stroke),
x = cx + R * Math.cos(a),
y = cy - R * Math.sin(a),
path;
if (total == value) {
path = [["M", cx, cy - R], ["A", R, R, 0, 1, 1, 299.99, cy - R]];
} else {
path = [["M", cx, cy - R], ["A", R, R, 0, +(alpha > 180), 1, x, y]];
}
return {
path: path
};
};
// Custom Segment Attribute
r.customAttributes.segment = function (angle, R) {
var a1 = -90;
R = R - 1;
angle = (a1 + angle);
var flag = (angle - a1) > 180,
x = ((diameter / 2) + padding),
y = ((diameter / 2) + padding);
a1 = (a1 % 360) * Math.PI / 180;
angle = (angle % 360) * Math.PI / 180;
return {
path: [["M", x, y], ["l", R * Math.cos(a1), R * Math.sin(a1)], ["A", R, R, 0, +flag, 1, x + R * Math.cos(angle), y + R * Math.sin(angle)], ["z"]]
};
};
if (iv.defs.total > 1 && iv.defs.timer == "pie") {
r.circle(iv.R + padding, iv.R + padding, iv.R + padding - 1).attr(bgParam);
}
iv.timerBgPath = r.path().attr(param), iv.timerPath = r.path().attr(param2), iv.pieTimer = r.path().attr(param3);
}
iv.barTimer = $('div', iv.iviewTimer);
if (iv.defs.total > 1 && iv.defs.timer == "360bar") {
iv.timerBgPath.attr({
arc: [359.9, iv.R]
});
}
//Set Timer Styles
if (iv.defs.timer == "bar") {
iv.iviewTimer.css({
opacity: options.timerOpacity,
width: diameter,
height: stroke,
border: options.timerBarStroke + 'px ' + options.timerBarStrokeColor + ' ' + options.timerBarStrokeStyle,
padding: padding,
background: options.timerBg
});
iv.barTimer.css({
width: 0,
height: stroke,
background: options.timerColor,
'float': 'left'
});
} else {
iv.iviewTimer.css({
opacity: options.timerOpacity,
width: width,
height: height
});
}
//Set Timer Position
iv.setTimerPosition();
// Run Preloader
new ImagePreload(iv.defs.images, function (i) {
var percent = (i * 10);
preloaderBar.stop().animate({
width: percent + '%'
});
}, function () {
preloaderBar.stop().animate({
width: '100%'
}, function () {
iviewPreloader.remove();
iv.startSlider();
//Trigger the onAfterLoad callback
options.onAfterLoad.call(this);
});
});
//Touch navigation
iv.sliderContent.bind('swipeleft', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.goTo('next');
}).bind('swiperight', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.defs.slide -= 2;
iv.goTo('prev');
});
//Keyboard Navigation
if (options.keyboardNav) {
$(document).bind('keyup.iView', function (event) {
//Left
if (event.keyCode == '37') {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.defs.slide -= 2;
iv.goTo('prev');
}
//Right
if (event.keyCode == '39') {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.goTo('next');
}
});
}
//Play/Pause action
iv.iviewTimer.live('click', function () {
if (iv.iviewTimer.hasClass('paused')) {
iv.playSlider();
} else {
iv.stopSlider();
}
});
//Bind the stop action
iv.sliderContent.bind('iView:pause', function () {
iv.stopSlider();
});
//Bind the start action
iv.sliderContent.bind('iView:play', function () {
iv.playSlider();
});
//Bind the start action
iv.sliderContent.bind('iView:previous', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.defs.slide -= 2;
iv.goTo('prev');
});
//Bind the start action
iv.sliderContent.bind('iView:next', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.goTo('next');
});
//Bind the goSlide action
iv.sliderContent.bind('iView:goSlide', function (event, slide) {
if (iv.defs.lock || iv.defs.slide == slide) return false;
if ($(this).hasClass('active')) return false;
iv.cleanTimer();
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
iv.defs.slide = slide - 1;
iv.goTo('control');
});
//Bind the resize action
iv.sliderContent.bind('resize', function () {
t = $(this),
tW = t.width(),
tH = t.height(),
width = iv.slider.width(),
height = iv.slider.height();
if(iv.defs.width != tW){
var ratio = (tW / width),
newHeight = Math.round(iv.defs.height * ratio);
iv.slider.css({
'-webkit-transform-origin' : '0 0',
'-moz-transform-origin' : '0 0',
'-o-transform-origin' : '0 0',
'-ms-transform-origin' : '0 0',
'transform-origin' : '0 0',
'-webkit-transform' : 'scale('+ ratio +')',
'-moz-transform' : 'scale('+ ratio +')',
'-o-transform' : 'scale('+ ratio +')',
'-ms-transform' : 'scale('+ ratio +')',
'transform' : 'scale('+ ratio +')'
});
t.css({ height: newHeight });
iv.defs.width = tW;
//Set Timer Position
iv.setTimerPosition();
}
});
//Bind video display
$('.iview-video', iv.slider).click(function(e){
var t = $(this),
video = $('.iview-video-show', t);
if(!$(e.target).hasClass('iview-video-close') && !$(e.target).hasClass('iview-caption') && !$(e.target).parents().hasClass('iview-caption')){
video.show().animate({ top: 0 }, 1000, 'easeOutBounce');
iv.sliderContent.trigger('iView:pause');
}
});
//Bind the video closer
$('.iview-video-close', iv.slider).click(function(){
var video = $(this).parents('.iview-video-show'),
iframe = $('iframe', video),
src = iframe.attr('src');
iframe.removeAttr('src').attr('src',src);
video.animate({ top: '-' + iv.defs.height + 'px' }, 1000, 'easeOutBounce', function(){
video.hide();
iv.sliderContent.trigger('iView:play');
});
});
};
//iView helper functions
iView.prototype = {
timer: null,
//Start Slider
startSlider: function () {
var iv = this;
var img = new Image();
img.src = iv.slides.eq(0).data('iview:image');
imgWidth = img.width;
if(imgWidth != iv.defs.width){
iv.defs.width = imgWidth;
iv.sliderContent.trigger('resize');
}
iv.iviewTimer.show();
//Show slide
iv.slides.eq(iv.defs.slide).css('display', 'block');
//Set first background
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
//Set initial caption
iv.setCaption(iv.options);
iv.iviewTimer.addClass('paused').attr('title', iv.options.playLabel);
if (iv.options.autoAdvance && iv.defs.total > 1) {
iv.iviewTimer.removeClass('paused').attr('title', iv.options.pauseLabel);
iv.setTimer();
}
//Add Direction nav
if (iv.options.directionNav) {
iv.sliderContent.append('');
//Animate Direction nav
$('.iview-directionNav', iv.sliderContent).css({
opacity: iv.options.directionNavHoverOpacity
});
iv.sliderContent.hover(function () {
$('.iview-directionNav', iv.sliderContent).stop().animate({
opacity: 1
}, 300);
}, function () {
$('.iview-directionNav', iv.sliderContent).stop().animate({
opacity: iv.options.directionNavHoverOpacity
}, 300);
});
$('a.iview-prevNav', iv.sliderContent).live('click', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.defs.slide -= 2;
iv.goTo('prev');
});
$('a.iview-nextNav', iv.sliderContent).live('click', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.goTo('next');
});
}
//Add Control nav
if (iv.options.controlNav) {
var iviewControl = '',
iviewTooltip = '';
if (!iv.options.directionNav && iv.options.controlNavNextPrev) iviewControl += '
' + iv.options.previousLabel + '';
iviewControl += '
';
for (var i = 0; i < iv.defs.total; i++) {
var slide = iv.slides.eq(i);
iviewControl += '- ';
if (iv.options.controlNavThumbs) {
var thumb = (slide.data('iview:thumbnail')) ? slide.data('iview:thumbnail') : slide.data('iview:image');
iviewControl += '';
} else {
var thumb = (slide.data('iview:thumbnail')) ? slide.data('iview:thumbnail') : slide.data('iview:image');
iviewControl += '' + (i + 1) + '';
if (iv.options.controlNavTooltip) iviewTooltip += '';
}
iviewControl += '
';
}
iviewControl += '
';
if (!iv.options.directionNav && iv.options.controlNavNextPrev) iviewControl += '
' + iv.options.nextLabel + '';
iviewControl += '
';
if (!iv.options.controlNavThumbs && iv.options.controlNavTooltip) iviewControl += '';
iv.sliderContent.append(iviewControl);
//Set initial active link
$('.iview-controlNav a.iview-control:eq(' + iv.defs.slide + ')', iv.sliderContent).addClass('active');
$('a.iview-controlPrevNav', iv.sliderContent).live('click', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.defs.slide -= 2;
iv.goTo('prev');
});
$('a.iview-controlNextNav', iv.sliderContent).live('click', function () {
if (iv.defs.lock) return false;
iv.cleanTimer();
iv.goTo('next');
});
$('.iview-controlNav a.iview-control', iv.sliderContent).live('click', function () {
if (iv.defs.lock) return false;
if ($(this).hasClass('active')) return false;
iv.cleanTimer();
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
iv.defs.slide = $(this).attr('rel') - 1;
iv.goTo('control');
});
//Animate Control nav
$('.iview-controlNav', iv.sliderContent).css({
opacity: iv.options.controlNavHoverOpacity
});
iv.sliderContent.hover(function () {
$('.iview-controlNav', iv.sliderContent).stop().animate({
opacity: 1
}, 300);
iv.sliderContent.addClass('iview-hover');
}, function () {
$('.iview-controlNav', iv.sliderContent).stop().animate({
opacity: iv.options.controlNavHoverOpacity
}, 300);
iv.sliderContent.removeClass('iview-hover');
});
//Show Tooltip
var tooltipTimer = null;
$('.iview-controlNav a.iview-control', iv.sliderContent).hover(function (e) {
var t = $(this),
i = t.attr('rel'),
tooltip = $('#iview-tooltip', iv.sliderContent),
holder = $('div.holder', tooltip),
x = t.offset().left - iv.sliderContent.offset().left - (tooltip.outerWidth() / 2) + iv.options.tooltipX,
y = t.offset().top - iv.sliderContent.offset().top - tooltip.outerHeight() + iv.options.tooltipY,
imD = $('div[rel=' + i + ']')
scrollLeft = (i * imD.width());
tooltip.stop().animate({
left: x,
top: y,
opacity: 1
}, 300);
//tooltip.css({ opacity: 1 });
if (tooltip.not(':visible')) tooltip.fadeIn(300);
holder.stop().animate({
scrollLeft: scrollLeft
}, 300);
clearTimeout(tooltipTimer);
}, function (e) {
var tooltip = $('#iview-tooltip', iv.sliderContent);
tooltipTimer = setTimeout(function () {
tooltip.animate({
opacity: 0
}, 300, function () {
tooltip.hide();
});
}, 200);
});
}
//Bind hover setting
iv.sliderContent.bind('mouseover.iView mousemove.iView', function () {
//Clear the timer
if (iv.options.pauseOnHover && !iv.defs.paused) iv.cleanTimer();
iv.sliderContent.addClass('iview-hover');
}).bind('mouseout.iView', function () {
//Restart the timer
if (iv.options.pauseOnHover && !iv.defs.paused && iv.timer == null && iv.pieDegree <= 359 && iv.options.autoAdvance) iv.setTimer();
iv.sliderContent.removeClass('iview-hover');
});
},
// setCaption function
setCaption: function () {
var iv = this,
slide = iv.slides.eq(iv.defs.slide),
captions = $('.iview-caption', slide),
timeEx = 0;
captions.each(function (i) {
var caption = $(this),
fx = (caption.data('transition')) ? $.trim(caption.data('transition').toLowerCase()) : "fade",
speed = (caption.data('speed')) ? caption.data('speed') : iv.options.captionSpeed,
easing = (caption.data('easing')) ? caption.data('easing') : iv.options.captionEasing,
x = (caption.data('x')!="undefined") ? caption.data('x') : "center",
y = (caption.data('y')!="undefined") ? caption.data('y') : "center",
w = (caption.data('width')) ? caption.data('width') : caption.width(),
h = (caption.data('height')) ? caption.data('height') : caption.height(),
oW = caption.outerWidth(),
oH = caption.outerHeight();
if(x == "center") x = ((iv.defs.width/2) - (oW/2));
if(y == "center") y = ((iv.defs.height/2) - (oH/2));
var captionContain = $('.caption-contain', caption);
caption.css({
opacity: 0
});
captionContain.css({
opacity: 0,
position: 'relative',
width: w,
height: h
});
switch (fx) {
case "wipedown":
caption.css({
top: (y - h),
left: x
});
captionContain.css({
top: (h + (h * 3)),
left: 0
});
break;
case "wipeup":
caption.css({
top: (y + h),
left: x
});
captionContain.css({
top: (h - (h * 3)),
left: 0
});
break;
case "wiperight":
caption.css({
top: y,
left: (x - w)
});
captionContain.css({
top: 0,
left: (w + (w * 2))
});
break;
case "wipeleft":
caption.css({
top: y,
left: (x + w)
});
captionContain.css({
top: 0,
left: (w - (w * 2))
});
break;
case "fade":
caption.css({
top: y,
left: x
});
captionContain.css({
top: 0,
left: 0
});
break;
case "expanddown":
caption.css({
top: y,
left: x,
height: 0
});
captionContain.css({
top: (h + (h * 3)),
left: 0
});
break;
case "expandup":
caption.css({
top: (y + h),
left: x,
height: 0
});
captionContain.css({
top: (h - (h * 3)),
left: 0
});
break;
case "expandright":
caption.css({
top: y,
left: x,
width: 0
});
captionContain.css({
top: 0,
left: (w + (w * 2))
});
break;
case "expandleft":
caption.css({
top: y,
left: (x + w),
width: 0
});
captionContain.css({
top: 0,
left: (w - (w * 2))
});
break;
}
setTimeout(function () {
caption.animate({
opacity: iv.options.captionOpacity,
top: y,
left: x,
width: w,
height: h
}, speed, easing, function () {});
}, timeEx);
setTimeout(function () {
captionContain.animate({
opacity: iv.options.captionOpacity,
top: 0,
left: 0
}, speed, easing);
}, (timeEx + 100));
timeEx += 250;
});
},
//Process the timer
processTimer: function () {
var iv = this;
if (iv.defs.timer == "360bar") {
var degree = (iv.pieDegree == 0) ? 0 : iv.pieDegree + .9;
iv.timerPath.attr({
arc: [degree, iv.R]
});
} else if (iv.defs.timer == "pie") {
var degree = (iv.pieDegree == 0) ? 0 : iv.pieDegree + .9;
iv.pieTimer.attr({
segment: [degree, iv.R]
});
} else {
iv.barTimer.css({
width: ((iv.pieDegree / 360) * 100) + '%'
});
}
iv.pieDegree += 3;
},
//When Animation finishes
transitionEnd: function (iv) {
//Trigger the onAfterChange callback
iv.options.onAfterChange.call(this);
//Lock the slider
iv.defs.lock = false;
//Hide slider slides
iv.slides.css('display', 'none');
//Diplay the current slide
iv.slides.eq(iv.defs.slide).show();
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
// Remove any strips and blocks from last transition
$('.iview-strip, .iview-block', iv.slider).remove();
//Set slide pauseTime
iv.defs.time = (iv.defs.image.data('iview:pausetime')) ? iv.defs.image.data('iview:pausetime') : iv.options.pauseTime;
//Process timer
iv.iviewTimer.animate({
opacity: iv.options.timerOpacity
});
iv.pieDegree = 0;
iv.processTimer();
//Set caption
iv.setCaption(iv.options);
//Restart the timer
if (iv.timer == null && !iv.defs.paused) iv.timer = setInterval(function () {
iv.timerCall(iv);
}, (iv.defs.time / 120));
},
// Add strips
addStrips: function (vertical, opts) {
var iv = this;
opts = (opts) ? opts : iv.options;
for (var i = 0; i < opts.strips; i++) {
var stripWidth = Math.round(iv.slider.width() / opts.strips),
stripHeight = Math.round(iv.slider.height() / opts.strips),
bgPosition = '-' + ((stripWidth + (i * stripWidth)) - stripWidth) + 'px 0%',
top = ((vertical) ? (stripHeight * i) + 'px' : '0px'),
left = ((vertical) ? '0px' : (stripWidth * i) + 'px');
if (vertical) bgPosition = '0% -' + ((stripHeight + (i * stripHeight)) - stripHeight) + 'px';
if (i == opts.strips - 1) {
var width = ((vertical) ? '0px' : (iv.slider.width() - (stripWidth * i)) + 'px'),
height = ((vertical) ? (iv.slider.height() - (stripHeight * i)) + 'px' : '0px');
} else {
var width = ((vertical) ? '0px' : stripWidth + 'px'),
height = ((vertical) ? stripHeight + 'px' : '0px');
}
var strip = $('').css({
width: width,
height: height,
top: top,
left: left,
background: 'url("' + iv.defs.image.data('iview:image') + '") no-repeat ' + bgPosition,
opacity: 0
});
iv.slider.append(strip);
}
},
// Add blocks
addBlocks: function () {
var iv = this,
blockWidth = Math.round(iv.slider.width() / iv.options.blockCols),
blockHeight = Math.round(iv.slider.height() / iv.options.blockRows);
for (var rows = 0; rows < iv.options.blockRows; rows++) {
for (var columns = 0; columns < iv.options.blockCols; columns++) {
var top = (rows * blockHeight) + 'px',
left = (columns * blockWidth) + 'px',
width = blockWidth + 'px',
height = blockHeight + 'px',
bgPosition = '-' + ((blockWidth + (columns * blockWidth)) - blockWidth) + 'px -' + ((blockHeight + (rows * blockHeight)) - blockHeight) + 'px';
if (columns == iv.options.blockCols - 1) width = (iv.slider.width() - (blockWidth * columns)) + 'px';
var block = $('').css({
width: blockWidth + 'px',
height: blockHeight + 'px',
top: (rows * blockHeight) + 'px',
left: (columns * blockWidth) + 'px',
background: 'url("' + iv.defs.image.data('iview:image') + '") no-repeat ' + bgPosition,
opacity: 0
});
iv.slider.append(block);
}
}
},
runTransition: function (fx) {
var iv = this;
switch (fx) {
case 'strip-up-right':
case 'strip-up-left':
iv.addStrips();
var timeDelay = 0;
i = 0, strips = $('.iview-strip', iv.slider);
if (fx == 'strip-up-left') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
strip.css({
top: '',
bottom: '0px'
});
setTimeout(function () {
strip.animate({
height: '100%',
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'strip-down':
case 'strip-down-right':
case 'strip-down-left':
iv.addStrips();
var timeDelay = 0,
i = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'strip-down-left') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
strip.css({
bottom: '',
top: '0px'
});
setTimeout(function () {
strip.animate({
height: '100%',
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'strip-left-right':
case 'strip-left-right-up':
case 'strip-left-right-down':
iv.addStrips(true);
var timeDelay = 0,
i = 0,
v = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'strip-left-right-down') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
if (i == 0) {
strip.css({
right: '',
left: '0px'
});
i++;
} else {
strip.css({
left: '',
right: '0px'
});
i = 0;
}
setTimeout(function () {
strip.animate({
width: '100%',
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (v == iv.options.strips - 1) iv.transitionEnd(iv);
v++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'strip-up-down':
case 'strip-up-down-right':
case 'strip-up-down-left':
iv.addStrips();
var timeDelay = 0,
i = 0,
v = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'strip-up-down-left') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
if (i == 0) {
strip.css({
bottom: '',
top: '0px'
});
i++;
} else {
strip.css({
top: '',
bottom: '0px'
});
i = 0;
}
setTimeout(function () {
strip.animate({
height: '100%',
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (v == iv.options.strips - 1) iv.transitionEnd(iv);
v++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'left-curtain':
case 'right-curtain':
case 'top-curtain':
case 'bottom-curtain':
if (fx == 'left-curtain' || fx == 'right-curtain') iv.addStrips();
else iv.addStrips(true);
var timeDelay = 0,
i = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'right-curtain' || fx == 'bottom-curtain') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
var width = strip.width();
var height = strip.height();
if (fx == 'left-curtain' || fx == 'right-curtain') strip.css({
top: '0px',
height: '100%',
width: '0px'
});
else strip.css({
left: '0px',
height: '0px',
width: '100%'
});
setTimeout(function () {
if (fx == 'left-curtain' || fx == 'right-curtain') strip.animate({
width: width,
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
else strip.animate({
height: height,
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'strip-up-right':
case 'strip-up-left':
iv.addStrips();
var timeDelay = 0,
i = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'strip-up-left') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
strip.css({
'bottom': '0px'
});
setTimeout(function () {
strip.animate({
height: '100%',
opacity: '1.0'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
timeDelay += 50;
});
break;
case 'strip-left-fade':
case 'strip-right-fade':
case 'strip-top-fade':
case 'strip-bottom-fade':
if (fx == 'strip-left-fade' || fx == 'strip-right-fade') iv.addStrips();
else iv.addStrips(true);
var timeDelay = 0,
i = 0,
strips = $('.iview-strip', iv.slider);
if (fx == 'strip-right-fade' || fx == 'strip-bottom-fade') strips = $('.iview-strip', iv.slider).reverse();
strips.each(function () {
var strip = $(this);
var width = strip.width();
var height = strip.height();
if (fx == 'strip-left-fade' || fx == 'strip-right-fade') strip.css({
top: '0px',
height: '100%',
width: width
});
else strip.css({
left: '0px',
height: height,
width: '100%'
});
setTimeout(function () {
strip.animate({
opacity: '1.0'
}, iv.options.animationSpeed * 1.7, iv.defs.easing, function () {
if (i == iv.options.strips - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
timeDelay += 35;
});
break;
case 'slide-in-up':
case 'slide-in-down':
opts = {
strips: 1
};
iv.addStrips(false, opts);
var strip = $('.iview-strip:first', iv.slider),
top = 0;
if (fx == 'slide-in-up') top = '-' + iv.defs.height + 'px';
else top = iv.defs.height + 'px';
strip.css({
top: top,
'height': '100%',
'width': iv.defs.width
});
strip.animate({
'top': '0px',
opacity: 1
}, (iv.options.animationSpeed * 2), iv.defs.easing, function () {
iv.transitionEnd(iv);
});
break;
case 'zigzag-top':
case 'zigzag-bottom':
case 'zigzag-grow-top':
case 'zigzag-grow-bottom':
case 'zigzag-drop-top':
case 'zigzag-drop-bottom':
iv.addBlocks();
var totalBlocks = (iv.options.blockCols * iv.options.blockRows),
timeDelay = 0,
blockToArr = new Array(),
blocks = $('.iview-block', iv.slider);
for (var rows = 0; rows < iv.options.blockRows; rows++) {
var odd = (rows % 2),
start = (rows * iv.options.blockCols),
end = ((rows + 1) * iv.options.blockCols);
if (odd == 1) {
for (var columns = end - 1; columns >= start; columns--) {
blockToArr.push($(blocks[columns]));
}
} else {
for (var columns = start; columns < end; columns++) {
blockToArr.push($(blocks[columns]));
}
}
}
if (fx == 'zigzag-bottom' || fx == 'zigzag-grow-bottom' || fx == 'zigzag-drop-bottom') blockToArr.reverse();
// Run animation
blocks.each(function (i) {
var block = $(blockToArr[i]),
h = block.height(),
w = block.width(),
top = block.css('top');
if (fx == 'zigzag-grow-top' || fx == 'zigzag-grow-bottom') block.width(0).height(0);
else if (fx == 'zigzag-drop-top' || fx == 'zigzag-drop-bottom') block.css({
top: '-=50'
});
setTimeout(function () {
if (fx == 'zigzag-grow-top' || fx == 'zigzag-grow-bottom') block.animate({
opacity: '1',
height: h,
width: w
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == totalBlocks - 1) iv.transitionEnd(iv);
});
else if (fx == 'zigzag-drop-top' || fx == 'zigzag-drop-bottom') block.animate({
top: top,
opacity: '1'
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == totalBlocks - 1) iv.transitionEnd(iv);
});
else block.animate({
opacity: '1'
}, (iv.options.animationSpeed * 2), 'easeInOutExpo', function () {
if (i == totalBlocks - 1) iv.transitionEnd(iv);
});
}, (100 + timeDelay));
timeDelay += 20;
});
break;
case 'block-fade':
case 'block-fade-reverse':
case 'block-expand':
case 'block-expand-reverse':
iv.addBlocks();
var totalBlocks = (iv.options.blockCols * iv.options.blockRows),
i = 0,
timeDelay = 0;
// Split blocks into array
var rowIndex = 0;
var colIndex = 0;
var blockToArr = new Array();
blockToArr[rowIndex] = new Array();
var blocks = $('.iview-block', iv.slider);
if (fx == 'block-fade-reverse' || fx == 'block-expand-reverse') {
blocks = $('.iview-block', iv.slider).reverse();
}
blocks.each(function () {
blockToArr[rowIndex][colIndex] = $(this);
colIndex++;
if (colIndex == iv.options.blockCols) {
rowIndex++;
colIndex = 0;
blockToArr[rowIndex] = new Array();
}
});
// Run animation
for (var columns = 0; columns < (iv.options.blockCols * 2); columns++) {
var Col = columns;
for (var rows = 0; rows < iv.options.blockRows; rows++) {
if (Col >= 0 && Col < iv.options.blockCols) {
(function () {
var block = $(blockToArr[rows][Col]);
var w = block.width();
var h = block.height();
if (fx == 'block-expand' || fx == 'block-expand-reverse') {
block.width(0).height(0);
}
setTimeout(function () {
block.animate({
opacity: '1',
width: w,
height: h
}, iv.options.animationSpeed / 1.3, iv.defs.easing, function () {
if (i == totalBlocks - 1) iv.transitionEnd(iv);
i++;
});
}, (100 + timeDelay));
})();
}
Col--;
}
timeDelay += 100;
}
break;
case 'block-random':
case 'block-expand-random':
case 'block-drop-random':
iv.addBlocks();
var totalBlocks = (iv.options.blockCols * iv.options.blockRows),
timeDelay = 0;
var blocks = iv.shuffle($('.iview-block', iv.slider));
blocks.each(function (i) {
var block = $(this),
h = block.height(),
w = block.width(),
top = block.css('top');
if (fx == 'block-expand-random') block.width(0).height(0);
if (fx == 'block-drop-random') block.css({
top: '-=50'
});
setTimeout(function () {
block.animate({
top: top,
opacity: '1',
height: h,
width: w
}, iv.options.animationSpeed, iv.defs.easing, function () {
if (i == totalBlocks - 1) iv.transitionEnd(iv);
});
}, (100 + timeDelay));
timeDelay += 20;
});
break;
case 'slide-in-right':
case 'slide-in-left':
case 'fade':
default:
opts = {
strips: 1
};
iv.addStrips(false, opts);
var strip = $('.iview-strip:first', iv.slider);
strip.css({
'height': '100%',
'width': iv.defs.width
});
if (fx == 'slide-in-right') strip.css({
'height': '100%',
'width': iv.defs.width,
'left': iv.defs.width + 'px',
'right': ''
});
else if (fx == 'slide-in-left') strip.css({
'left': '-' + iv.defs.width + 'px'
});
strip.animate({
left: '0px',
opacity: 1
}, (iv.options.animationSpeed * 2), iv.defs.easing, function () {
iv.transitionEnd(iv);
});
break;
}
},
// Shuffle an array
shuffle: function (oldArray) {
var newArray = oldArray.slice();
var len = newArray.length;
var i = len;
while (i--) {
var p = parseInt(Math.random() * len);
var t = newArray[i];
newArray[i] = newArray[p];
newArray[p] = t;
}
return newArray;
},
// Timer interval caller
timerCall: function (iv) {
iv.processTimer();
if (iv.pieDegree >= 360) {
iv.cleanTimer();
iv.goTo(false);
}
},
//Set the timer function
setTimer: function () {
var iv = this;
iv.timer = setInterval(function () {
iv.timerCall(iv);
}, (iv.defs.time / 120));
},
//Clean the timer function
cleanTimer: function () {
var iv = this;
clearInterval(iv.timer);
iv.timer = null;
},
// goTo function
goTo: function (action) {
var iv = this;
//Trigger the onLastSlide callback
if (iv.defs && (iv.defs.slide == iv.defs.total - 1)) {
iv.options.onLastSlide.call(this);
}
iv.cleanTimer();
iv.iviewTimer.animate({
opacity: 0
});
//Trigger the onBeforeChange callback
iv.options.onBeforeChange.call(this);
//Set current background before change
if (!action) {
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
} else {
if (action == 'prev' || action == 'next') {
iv.slider.css('background', 'url("' + iv.defs.image.data('iview:image') + '") no-repeat');
}
}
iv.defs.slide++;
//Trigger the onSlideShowEnd callback
if (iv.defs.slide == iv.defs.total) {
iv.defs.slide = 0;
iv.options.onSlideShowEnd.call(this);
}
if (iv.defs.slide < 0) iv.defs.slide = (iv.defs.total - 1);
//Set iv.defs.image
iv.defs.image = iv.slides.eq(iv.defs.slide);
//Set active links
if (iv.options.controlNav) {
$('.iview-controlNav a.iview-control', iv.sliderContent).removeClass('active');
$('.iview-controlNav a.iview-control:eq(' + iv.defs.slide + ')', iv.sliderContent).addClass('active');
}
var fx = iv.options.fx;
//Generate random transition
if (iv.options.fx.toLowerCase() == 'random') {
var transitions = new Array('left-curtain', 'right-curtain', 'top-curtain', 'bottom-curtain', 'strip-down-right', 'strip-down-left', 'strip-up-right', 'strip-up-left', 'strip-up-down', 'strip-up-down-left', 'strip-left-right', 'strip-left-right-down', 'slide-in-right', 'slide-in-left', 'slide-in-up', 'slide-in-down', 'fade', 'block-random', 'block-fade', 'block-fade-reverse', 'block-expand', 'block-expand-reverse', 'block-expand-random', 'zigzag-top', 'zigzag-bottom', 'zigzag-grow-top', 'zigzag-grow-bottom', 'zigzag-drop-top', 'zigzag-drop-bottom', 'strip-left-fade', 'strip-right-fade', 'strip-top-fade', 'strip-bottom-fade', 'block-drop-random');
fx = transitions[Math.floor(Math.random() * (transitions.length + 1))];
if (fx == undefined) fx = 'fade';
fx = $.trim(fx.toLowerCase());
}
//Run random transition from specified set (eg: effect:'strip-left-fade,right-curtain')
if (iv.options.fx.indexOf(',') != -1) {
var transitions = iv.options.fx.split(',');
fx = transitions[Math.floor(Math.random() * (transitions.length))];
if (fx == undefined) fx = 'fade';
fx = $.trim(fx.toLowerCase());
}
//Custom transition as defined by "data-iview:transition" attribute
if (iv.defs.image.data('iview:transition')) {
var transitions = iv.defs.image.data('iview:transition').split(',');
fx = transitions[Math.floor(Math.random() * (transitions.length))];
fx = $.trim(fx.toLowerCase());
}
//Set slide easing
iv.defs.easing = (iv.defs.image.data('iview:easing')) ? iv.defs.image.data('iview:easing') : iv.options.easing;
//Start Transition
iv.defs.lock = true;
iv.runTransition(fx);
},
playSlider: function () {
var iv = this;
if (iv.timer == null && iv.defs.paused) {
iv.iviewTimer.removeClass('paused').attr('title', iv.options.pauseLabel);
iv.setTimer();
iv.defs.paused = false;
//Trigger the onPlay callback
iv.options.onPlay.call(this);
}
},
stopSlider: function () {
var iv = this;
iv.iviewTimer.addClass('paused').attr('title', iv.options.playLabel);
iv.cleanTimer();
iv.defs.paused = true;
//Trigger the onPause callback
iv.options.onPause.call(this);
},
//Set Timer Position function
setTimerPosition: function(){
var iv = this,
position = iv.options.timerPosition.toLowerCase().split('-');
for (var i = 0; i < position.length; i++) {
if (position[i] == 'top') {
iv.iviewTimer.css({
top: iv.options.timerY + 'px',
bottom: ''
});
} else if (position[i] == 'middle') {
iv.iviewTimer.css({
top: (iv.options.timerY + (iv.defs.height / 2) - (iv.options.timerDiameter / 2)) + 'px',
bottom: ''
});
} else if (position[i] == 'bottom') {
iv.iviewTimer.css({
bottom: iv.options.timerY + 'px',
top: ''
});
} else if (position[i] == 'left') {
iv.iviewTimer.css({
left: iv.options.timerX + 'px',
right: ''
});
} else if (position[i] == 'center') {
iv.iviewTimer.css({
left: (iv.options.timerX + (iv.defs.width / 2) - (iv.options.timerDiameter / 2)) + 'px',
right: ''
});
} else if (position[i] == 'right') {
iv.iviewTimer.css({
right: iv.options.timerX + 'px',
left: ''
});
}
}
},
disableSelection: function (target) {
if (typeof target.onselectstart != "undefined") target.onselectstart = function () {
return false;
};
else if (typeof target.style.MozUserSelect != "undefined") target.style.MozUserSelect = "none";
else if (typeof target.style.webkitUserSelect != "undefined") target.style.webkitUserSelect = "none";
else if (typeof target.style.userSelect != "undefined") target.style.userSelect = "none";
else target.onmousedown = function () {
return false;
};
target.unselectable = "on";
},
//touch
isTouch: function () {
return !!('ontouchstart' in window);
}
};
//Image Preloader Function
var ImagePreload = function (p_aImages, p_pfnPercent, p_pfnFinished) {
this.m_pfnPercent = p_pfnPercent;
this.m_pfnFinished = p_pfnFinished;
this.m_nLoaded = 0;
this.m_nProcessed = 0;
this.m_aImages = new Array;
this.m_nICount = p_aImages.length;
for (var i = 0; i < p_aImages.length; i++) this.Preload(p_aImages[i])
};
ImagePreload.prototype = {
Preload: function (p_oImage) {
var oImage = new Image;
this.m_aImages.push(oImage);
oImage.onload = ImagePreload.prototype.OnLoad;
oImage.onerror = ImagePreload.prototype.OnError;
oImage.onabort = ImagePreload.prototype.OnAbort;
oImage.oImagePreload = this;
oImage.bLoaded = false;
oImage.source = p_oImage;
oImage.src = p_oImage
},
OnComplete: function () {
this.m_nProcessed++;
if (this.m_nProcessed == this.m_nICount) this.m_pfnFinished();
else this.m_pfnPercent(Math.round((this.m_nProcessed / this.m_nICount) * 10))
},
OnLoad: function () {
this.bLoaded = true;
this.oImagePreload.m_nLoaded++;
this.oImagePreload.OnComplete()
},
OnError: function () {
this.bError = true;
this.oImagePreload.OnComplete()
},
OnAbort: function () {
this.bAbort = true;
this.oImagePreload.OnComplete()
}
}
// Begin the iView plugin
$.fn.iView = function (options) {
// Default options. Play carefully.
options = jQuery.extend({
fx: 'random',
easing: 'easeOutQuad',
strips: 20,
blockCols: 10,
blockRows: 5,
animationSpeed: 500,
pauseTime: 5000,
startSlide: 0,
directionNav: true,
directionNavHoverOpacity: 0.6,
controlNav: false,
controlNavNextPrev: true,
controlNavHoverOpacity: 0.6,
controlNavThumbs: false,
controlNavTooltip: true,
captionSpeed: 500,
captionEasing: 'easeInOutSine',
captionOpacity: 1,
autoAdvance: true,
keyboardNav: true,
touchNav: true,
pauseOnHover: false,
nextLabel: "Next",
previousLabel: "Previous",
playLabel: "Play",
pauseLabel: "Pause",
closeLabel: "Close",
randomStart: false,
timer: 'Pie',
timerBg: '#000',
timerColor: '#EEE',
timerOpacity: 0.5,
timerDiameter: 30,
timerPadding: 4,
timerStroke: 3,
timerBarStroke: 1,
timerBarStrokeColor: '#EEE',
timerBarStrokeStyle: 'solid',
timerPosition: 'top-right',
timerX: 10,
timerY: 10,
tooltipX: 5,
tooltipY: -5,
onBeforeChange: function () {},
onAfterChange: function () {},
onAfterLoad: function () {},
onLastSlide: function () {},
onSlideShowEnd: function () {},
onPause: function () {},
onPlay: function () {}
}, options);
$(this).each(function () {
var el = $(this);
new iView(el, options);
});
};
$.fn.reverse = [].reverse;
var elems = $([]),
jq_resize = $.resize = $.extend($.resize, {}),
timeout_id, str_setTimeout = "setTimeout",
str_resize = "resize",
str_data = str_resize + "-special-event",
str_delay = "delay",
str_throttle = "throttleWindow";
jq_resize[str_delay] = 250;
jq_resize[str_throttle] = true;
$.event.special[str_resize] = {
setup: function () {
if (!jq_resize[str_throttle] && this[str_setTimeout]) {
return false
}
var elem = $(this);
elems = elems.add(elem);
$.data(this, str_data, {
w: elem.width(),
h: elem.height()
});
if (elems.length === 1) {
loopy()
}
},
teardown: function () {
if (!jq_resize[str_throttle] && this[str_setTimeout]) {
return false
}
var elem = $(this);
elems = elems.not(elem);
elem.removeData(str_data);
if (!elems.length) {
clearTimeout(timeout_id)
}
},
add: function (handleObj) {
if (!jq_resize[str_throttle] && this[str_setTimeout]) {
return false
}
var old_handler;
function new_handler(e, w, h) {
var elem = $(this),
data = $.data(this, str_data);
data.w = w !== undefined ? w : elem.width();
data.h = h !== undefined ? h : elem.height();
old_handler.apply(this, arguments)
}
if ($.isFunction(handleObj)) {
old_handler = handleObj;
return new_handler
} else {
old_handler = handleObj.handler;
handleObj.handler = new_handler
}
}
};
function loopy() {
timeout_id = window[str_setTimeout](function () {
elems.each(function () {
var elem = $(this),
width = elem.width(),
height = elem.height(),
data = $.data(this, str_data);
if (width !== data.w || height !== data.h) {
elem.trigger(str_resize, [data.w = width, data.h = height])
}
});
loopy()
}, jq_resize[str_delay])
}
var supportTouch = !! ('ontouchstart' in window),
touchStartEvent = supportTouch ? "touchstart" : "mousedown",
touchStopEvent = supportTouch ? "touchend" : "mouseup",
touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
// also handles swipeleft, swiperight
$.event.special.swipe = {
scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling.
durationThreshold: 1000, // More time than this, and it isn't a swipe.
horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this.
verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this.
setup: function () {
var thisObject = this,
$this = $(thisObject);
$this.bind(touchStartEvent, function (event) {
var data = event.originalEvent.touches ? event.originalEvent.touches[0] : event,
start = {
time: (new Date()).getTime(),
coords: [data.pageX, data.pageY],
origin: $(event.target)
},
stop;
function moveHandler(event) {
if (!start) {
return;
}
var data = event.originalEvent.touches ? event.originalEvent.touches[0] : event;
stop = {
time: (new Date()).getTime(),
coords: [data.pageX, data.pageY]
};
// prevent scrolling
if (Math.abs(start.coords[0] - stop.coords[0]) > $.event.special.swipe.scrollSupressionThreshold) {
event.preventDefault();
}
}
$this.bind(touchMoveEvent, moveHandler).one(touchStopEvent, function (event) {
$this.unbind(touchMoveEvent, moveHandler);
if (start && stop) {
if (stop.time - start.time < $.event.special.swipe.durationThreshold && Math.abs(start.coords[0] - stop.coords[0]) > $.event.special.swipe.horizontalDistanceThreshold && Math.abs(start.coords[1] - stop.coords[1]) < $.event.special.swipe.verticalDistanceThreshold) {
start.origin.trigger("swipe").trigger(start.coords[0] > stop.coords[0] ? "swipeleft" : "swiperight");
}
}
start = stop = undefined;
});
});
}
};
$.each({
swipeleft: "swipe",
swiperight: "swipe"
}, function (event, sourceEvent) {
$.event.special[event] = {
setup: function () {
$(this).bind(sourceEvent, $.noop);
}
};
});
})(jQuery, this);