/* Developed for Microsoft by Ascentium Corp (paul.vlasenko@ascentium.com) Dec. 9, 2008 */
var CarouselSlider = function(sliderId, settings) { var ver = "1.1"; this.slideWidth = 156; this.slideSpeed = 10; this.slideGravity = 0; this.visibleSlides = 3; this.nextBtn = null; this.prevBtn = null; this.sliderCont = null; this.slides = null; this.settings = settings; this.rtl = false; var self = this; var animation = new SlideAnimation(0, 0); var sIx = 0; var prevEnabled = false; var nextEnabled = false; var t; this.init = function() { self.sliderCont = getById(sliderId); self.slides = getByCssClass(self.sliderCont, 'slides')[0]; if (!self.sliderCont) { alert('Init Error:\nSlider ID ' + sliderId + ' not specified or does not exist on the page!\nCheck the slider init.'); return; } try { if (rtlCarousel !== undefined) { self.rtl = new Boolean(rtlCarousel); } } catch (err) { } if (self.rtl == true) { self.settings.slideWidth = (self.settings.slideWidth * -1); } if (self.settings) { if (self.settings.slideWidth !== null) { self.slideWidth = self.settings.slideWidth; } if (self.settings.slideSpeed !== null) { self.slideSpeed = self.settings.slideSpeed; } if (self.settings.slideGravity !== null) { self.slideGravity = self.settings.slideGravity; } if (self.settings.visibleSlides !== null) { self.visibleSlides = self.settings.visibleSlides; } if (self.settings.nextBtnId !== null) { self.nextBtn = getById(self.settings.nextBtnId); } if (self.settings.prevBtnId !== null) { self.prevBtn = getById(self.settings.prevBtnId); } } if (self.nextBtn === null) { self.nextBtn = getByCssClass(self.sliderCont, 'sliderBtnNext')[0]; } if (self.prevBtn === null) { self.prevBtn = getByCssClass(self.sliderCont, 'sliderBtnPrev')[0]; } self.nextBtn.onclick = self.slideNext; self.prevBtn.onclick = self.slidePrev; mngSlideBtns(); }; this.slideNext = function() { t = null; if (!nextEnabled) { return false; } if (self.slides && animation.hasStopped()) { spc = getSlidePos(self.slides); spn = spc + (self.slideWidth * -1); animation = new SlideAnimation(spc, spn, self.slideGravity * -1); slidex(animation); sIx++; } mngSlideBtns(); return false; }; this.slidePrev = function() { t = null; if (!prevEnabled) { return false; } if (self.slides && animation.hasStopped()) { spc = getSlidePos(self.slides); spn = spc + self.slideWidth; animation = new SlideAnimation(spc, spn, self.slideGravity); slidex(animation); sIx--; } mngSlideBtns(); return false; }; function slidex(a) { t = setTimeout(function() { doslide(a); }, 60 / self.slideSpeed); } function doslide(a) { if (a === null) { return; } self.slides.style.left = a.updatePosition() + "px"; if (!a.hasStopped()) { slidex(a); } } function getSlidePos() { var ret = (self.slides.style.left) ? parseInt(self.slides.style.left.replace('px', '')) : 0; return ret; } function mngSlideBtns() { if (sIx <= 0) { sIx = 0; addCssClass(self.prevBtn, 'sliderBtnPrevOff'); prevEnabled = false; } else { removeCssClass(self.prevBtn, 'sliderBtnPrevOff'); prevEnabled = true; } if (sIx >= (getSlideCt() - self.visibleSlides)) { sIx = getSlideCt() - self.visibleSlides; addCssClass(self.nextBtn, 'sliderBtnNextOff'); nextEnabled = false; } else { removeCssClass(self.nextBtn, 'sliderBtnNextOff'); nextEnabled = true; } } function getSlideCt() { sli = self.slides.getElementsByTagName('li'); return sli.length; } function SlideAnimation(_1, _2, _3) { _1 = Math.round(_1); _2 = Math.round(_2); _3 = (_3 ? Math.round(_3) : 0); this.updatePosition = function() { _1 += _3; if (_3 < 0) { if (_1 - _3 * (_3 - 1) / 2 < _2) { _3++; } else { if (_1 - (_3 - 1) * (_3 - 2) / 2 >= _2) { _3--; } } } else { if (_1 + _3 * (_3 + 1) / 2 > _2) { _3--; } else { if (_1 + (_3 + 1) * (_3 + 2) / 2 <= _2) { _3++; } } } return _1; }; this.changeTarget = function(_4) { _2 = Math.round(_4); }; this.getPosition = function() { return _1; }; this.getVelocity = function() { return _3; }; this.hasStopped = function() { return (_1 == _2 && _3 == 0); }; }; function getById(domId) { return document.getElementById(domId); } function getByCssClass(o, cssClass, tag) { var classElements = []; o = o || document; var pattern = new RegExp('(^|\\s)' + cssClass + '(\\s|$)'); var els = (!tag && o.all) || o.getElementsByTagName(tag || '*'); var elsLen = els.length; for (var i = 0, j = 0; i < els.length; i++) { if (pattern.test(els[i].className)) { classElements[j] = els[i]; j++; } } return classElements; } function hasCssClass(o, cssClass) { var ret = (getCssClass(o).indexOf(cssClass.trim()) > -1) ? true : false; return ret; } function addCssClass(o, cssClass) { if (!hasCssClass(o, cssClass)) { o.className = getCssClass(o).trim() + ' ' + cssClass.trim(); } } function removeCssClass(o, cssClass) { o.className = getCssClass(o).replace(cssClass, '').trim(); } function getCssClass(o) { return (o !== null) ? o.className : null; } String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }; function isDefined(variable) { return (!(!(variable || false))) } function AddOnload(func) { if (window.addEventListener) { window.addEventListener('load', func, false); } else if (document.addEventListener) { document.addEventListener('load', func, false); } else if (window.attachEvent) { window.attachEvent('onload', func); } }; AddOnload(this.init); };
