var RokStories = new Class({ version: 1.0, options: { startElement: 0, startWidth: 320, startHeight: 188, thumbsOpacity: 0.3, autorun: true, delay: 3000, mousetype: 'click', layout: 'layout1', linkedImgs: false, showThumbs: false, fixedThumb: true, thumbLeftOffsets: { x: 0, y: 0 }, thumbRightOffsets: { x: 0, y: 0 } }, initialize: function (element, options) { this.setOptions(options); this.element = $(element) || null; this.layout = this.options.layout; if (!this.element) return; this.timer = null; this.current = this.options.startElement; this.fullParent = this.element.getElements('.image-full')[0]; this.full = RokStoriesImage['rokstories-' + this.options.id]; this.small = this.element.getElements('.image-small img'); this.descs = this.element.getElements('.desc-container .description'); if (this.layout == 'layout2') this.labels = this.element.getElements('.labels-title .feature-block-title'); if (!this.full.length || !this.small.length || !this.descs.length) return; this.images = RokStoriesImage['rokstories-' + this.options.id]; this.fullFx = []; if (this.layout == 'layout2') { this.labelsFx = []; this.arrowLeft = this.element.getElement('.feature-arrow-l'); this.arrowRight = this.element.getElement('.feature-arrow-r'); if (this.arrowLeft && this.arrowRight) this.arrowsEvents(); (this.labels.length).times(function (i) { this.labelsFx.push(new Fx.Styles(this.labels[i], { wait: false, duration: 400 }).set({ 'opacity': 0 })) }.bind(this)) } else if (this.layout == 'layout3') { this.small.setStyle('display', 'none'); this.element.getElement('.desc-container').inject(this.fullParent).setStyles({ 'position': 'absolute', 'z-index': 5 }); this.circles = this.element.getElements('.feature-circles-sub'); if (this.circles.length == this.small.length) this.circlesEvents(); else throw new Error('Circles don\'t match the number of images') } (this.images.length).times(function (i) { this.fullFx.push(null) }.bind(this)); this.smallFx = []; this.descsFx = []; if (this.full.length != this.small.length && this.full.length != this.descs.length) return; this.length = this.full.length; this.smallParent = this.small[0].getParent(); this.descsParent = this.descs[0].getParent(); this.fullParent.addClass('rokstories-spinner'); this.descsParent.addClass('rokstories-spinner'); this.small.setStyle('opacity', this.options.thumbsOpacity); this.descsParentFx = new Fx.Styles(this.descsParent, { wait: false, duration: 400 }).set({ height: 0 }); this.fullParentFx = new Fx.Styles(this.fullParent, { wait: false, duration: 400 }).set({ height: 0 }); if (!window.webkit && !window.gecko) this.fullParentFx.set({ 'width': (window.ie) ? '100%' : this.options.startWidth }); this.fullParentFx.start({ height: this.options.startHeight }); this.setSizes() }, addThumbsEvents: function () { var self = this; this.small.each(function (small, i) { self.smallFx.push(new Fx.Styles(small, { wait: false, duration: 400 }).set({ 'opacity': self.options.thumbsOpacity })); small.addEvents({ 'click': function () { $clear(self.timer); self.fullParent.addClass('rokstories-spinner'); self.fullFx.each(function (fx) { if (fx) fx.start({ 'opacity': 0 }) }); if (self.options.layout == 'layout3') self.circleSwitch(i); self.load(i) }, 'mouseenter': function () { if (self.options.mousetype == 'mouseenter') small.fireEvent('click'); if (i != self.current) self.smallFx[i].start({ 'opacity': 1 }) }, 'mouseleave': function () { if (i != self.current) self.smallFx[i].start({ 'opacity': self.options.thumbsOpacity }) } }) }) }, circlesEvents: function () { this.circles.each(function (circle, i) { circle.addEvent('click', function () { this.small[i].fireEvent('click'); this.circleSwitch(i) }.bind(this)) }, this) }, circleSwitch: function (i) { this.circles.removeClass('active'); this.circles[i].addClass('active') }, arrowsEvents: function () { var left = this.arrowLeft, right = this.arrowRight, self = this; left.addEvents({ 'mouseenter': function () { left.addClass('arrowleft-hover') }, 'mouseleave': function () { left.removeClass('arrowleft-hover').removeClass('arrowleft-down') }, 'mousedown': function () { left.addClass('arrowleft-down') }, 'mouseup': function () { left.removeClass('arrowleft-down') }, 'click': function () { self.previous(); if (self.tipsLeft) { self.tipsLeft.hide(); self.tipsLeft.fireEvent('onShow') } } }); right.addEvents({ 'mouseenter': function () { right.addClass('arrowright-hover') }, 'mouseleave': function () { right.removeClass('arrowright-hover').removeClass('arrowright-down') }, 'mousedown': function () { right.addClass('arrowright-down') }, 'mouseup': function () { right.removeClass('arrowright-down') }, 'click': function () { self.next(); if (self.tipsRight) { self.tipsRight.hide(); self.tipsRight.fireEvent('onShow') } } }); if (this.options.showThumbs) { this.tipsLeft = new Tips(left, { className: 'rokstories', fixed: self.options.fixedThumb, offsets: self.options.thumbLeftOffsets, initialize: function () { this.rokTip = new Element('div', { 'class': 'tip-wrapper' }).inject(this.toolTip); this.fx = new Fx.Style(this.toolTip, 'opacity', { duration: 300, wait: false }).set(0) }, onShow: function (tip) { var current = self.current - 1; if (current < 0) current = self.small.length - 1; self.small[current].clone().inject(this.rokTip.empty()); this.fx.start(1) }, onHide: function (tip) { this.fx.start(0) } }); this.tipsRight = new Tips(right, { className: 'rokstories', fixed: self.options.fixedThumb, offsets: self.options.thumbRightOffsets, initialize: function () { this.rokTip = new Element('div', { 'class': 'tip-wrapper' }).inject(this.toolTip); this.fx = new Fx.Style(this.toolTip, 'opacity', { duration: 300, wait: false }).set(0) }, onShow: function (tip) { var current = self.current + 1; if (current > self.small.length - 1) current = 0; self.small[current].clone().inject(this.rokTip.empty()); this.fx.start(1) }, onHide: function (tip) { this.fx.start(0) } }) } }, load: function (index) { var self = this; if ($type(this.full[index]) != 'string') { self.transition(index, this.full[index]) } else { new Asset.image(this.full[index], { onload: function () { $clear(self.timer); self.full[index] = this.inject(self.fullParent); if (self.options.linkedImgs) { this.setStyle('cursor', 'pointer').addEvent('click', function () { window.location = RokStoriesLinks['rokstories-' + self.options.id][index] }) }; self.fullFx[index] = new Fx.Styles(self.full[index], { wait: false, duration: 400 }).set({ 'opacity': 0 }); self.setDescSizes.delay(70, self); self.load(index) } }) } }, transition: function (index, image) { var self = this; // alert(image.width); this.fullParentFx.stop().set({ 'width': 300// image.width }).start({ height: image.height }); self.fullParent.removeClass('rokstories-spinner'); self.descsFx.each(function (fx) { fx.start({ 'opacity': 0 }) }); self.smallFx.each(function (fx) { fx.start({ 'opacity': self.options.thumbsOpacity }) }); if (self.layout == 'layout2') self.labelsFx.each(function (fx) { fx.start({ 'opacity': 0 }) }); self.fullFx[index].stop().start({ 'opacity': 1 }); if (self.layout == 'layout2' && self.labelsFx.length) self.labelsFx[index].stop().start({ 'opacity': 1 }); self.descsFx[index].stop().start({ 'opacity': 1 }); self.smallFx[index].stop().start({ 'opacity': 1 }); self.current = index; if (self.options.autorun && !self.pause) self.timer = self.next.periodical(self.options.delay, self) }, setSizes: function () { var self = this; this.setDescSizes(); this.addThumbsEvents(); if (this.options.autorun) { this.element.addEvents({ 'mouseenter': function () { $clear(self.timer); self.pause = true }, 'mouseleave': function () { $clear(self.timer); self.pause = false; self.timer = self.next.periodical(self.options.delay, self) } }) }; this.next(this.current) }, setDescSizes: function () { var size = { width: 280, height: 0 }; this.smallParent.setStyle('width', (this.options.startWidth == 'auto') ? this.fullParent.getStyle('width') : this.options.startWidth); this.descs.each(function (desc) { if (this.descsFx.length < this.length) this.descsFx.push(new Fx.Styles(desc, { wait: false, duration: 400 }).set({ 'opacity': 0 })); var descSize = desc.getSize().size; if (descSize.x > size.width) size.width = descSize.x; if (descSize.y > size.height) size.height = descSize.y }, this); this.descsParentFx.stop().set('width', 280).start({ height: 36 }); this.descsParent.removeClass('rokstories-spinner') }, next: function (force) { var current = (force != null) ? force : this.current + 1; if (current > this.length - 1) current = 0; this.current = current; this.small[current].fireEvent('click') }, previous: function (force) { var current = (force != null) ? force : this.current - 1; if (current < 0) current = this.length - 1; this.current = current; this.small[current].fireEvent('click') } }); RokStories.implement(new Options);