Вход Регистрация
Файл: InstantSocial/uploud/templates/mail/js/jquery.jcarousel.js
Строк: 983
<?php
/*!
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */

/*global window, jQuery */
(function($) {
    
// Default configuration properties.
    
var defaults = {
        
verticalfalse,
        
rtlfalse,
        
start1,
        
offset1,
        
sizenull,
        
scroll3,
        
visiblenull,
        
animation'normal',
        
easing'swing',
        
auto0,
        
wrapnull,
        
initCallbacknull,
        
setupCallbacknull,
        
reloadCallbacknull,
        
itemLoadCallbacknull,
        
itemFirstInCallbacknull,
        
itemFirstOutCallbacknull,
        
itemLastInCallbacknull,
        
itemLastOutCallbacknull,
        
itemVisibleInCallbacknull,
        
itemVisibleOutCallbacknull,
        
animationStepCallbacknull,
        
buttonNextHTML'<div></div>',
        
buttonPrevHTML'<div></div>',
        
buttonNextEvent'click',
        
buttonPrevEvent'click',
        
buttonNextCallbacknull,
        
buttonPrevCallbacknull,
        
itemFallbackDimensionnull
    
}, windowLoaded false;

    $(
window).bind('load.jcarousel', function() { windowLoaded true; });

    
/**
     * The jCarousel object.
     *
     * @constructor
     * @class jcarousel
     * @param e {HTMLElement} The element to create the carousel for.
     * @param o {Object} A set of key/value pairs to set as configuration properties.
     * @cat Plugins/jCarousel
     */
    
$.jcarousel = function(eo) {
        
this.options    = $.extend({}, defaults|| {});

        
this.locked          false;
        
this.autoStopped     false;

        
this.container       null;
        
this.clip            null;
        
this.list            = null;
        
this.buttonNext      null;
        
this.buttonPrev      null;
        
this.buttonNextState null;
        
this.buttonPrevState null;

        
// Only set if not explicitly passed as option
        
if (!|| o.rtl === undefined) {
            
this.options.rtl = ($(e).attr('dir') || $('html').attr('dir') || '').toLowerCase() == 'rtl';
        }

        
this.wh = !this.options.vertical 'width' 'height';
        
this.lt = !this.options.vertical ? (this.options.rtl 'right' 'left') : 'top';

        
// Extract skin class
        
var skin ''split e.className.split(' ');

        for (var 
0split.lengthi++) {
            if (
split[i].indexOf('jcarousel-skin') != -1) {
                $(
e).removeClass(split[i]);
                
skin split[i];
                break;
            }
        }

        if (
e.nodeName.toUpperCase() == 'UL' || e.nodeName.toUpperCase() == 'OL') {
            
this.list      = $(e);
            
this.clip      this.list.parents('.jcarousel-clip');
            
this.container this.list.parents('.jcarousel-container');
        } else {
            
this.container = $(e);
            
this.list      = this.container.find('ul,ol').eq(0);
            
this.clip      this.container.find('.jcarousel-clip');
        }

        if (
this.clip.size() === 0) {
            
this.clip this.list.wrap('<div></div>').parent();
        }

        if (
this.container.size() === 0) {
            
this.container this.clip.wrap('<div></div>').parent();
        }

        if (
skin !== '' && this.container.parent()[0].className.indexOf('jcarousel-skin') == -1) {
            
this.container.wrap('<div class=" 'skin '"></div>');
        }

        
this.buttonPrev = $('.jcarousel-prev'this.container);

        if (
this.buttonPrev.size() === && this.options.buttonPrevHTML !== null) {
            
this.buttonPrev = $(this.options.buttonPrevHTML).appendTo(this.container);
        }

        
this.buttonPrev.addClass(this.className('jcarousel-prev'));

        
this.buttonNext = $('.jcarousel-next'this.container);

        if (
this.buttonNext.size() === && this.options.buttonNextHTML !== null) {
            
this.buttonNext = $(this.options.buttonNextHTML).appendTo(this.container);
        }

        
this.buttonNext.addClass(this.className('jcarousel-next'));

        
this.clip.addClass(this.className('jcarousel-clip')).css({
            
position'relative'
        
});

        
this.list.addClass(this.className('jcarousel-list')).css({
            
overflow'hidden',
            
position'relative',
            
top0,
            
margin0,
            
padding0
        
}).css((this.options.rtl 'right' 'left'), 0);

        
this.container.addClass(this.className('jcarousel-container')).css({
            
position'relative'
        
});

        if (!
this.options.vertical && this.options.rtl) {
            
this.container.addClass('jcarousel-direction-rtl').attr('dir''rtl');
        }

        var 
di this.options.visible !== null Math.ceil(this.clipping() / this.options.visible) : null;
        var 
li this.list.children('li');

        var 
self this;

        if (
li.size() > 0) {
            var 
wh 0this.options.offset;
            
li.each(function() {
                
self.format(thisj++);
                
wh += self.dimension(thisdi);
            });

            
this.list.css(this.wh, (wh 100) + 'px');

            
// Only set if not explicitly passed as option
            
if (!|| o.size === undefined) {
                
this.options.size li.size();
            }
        }

        
// For whatever reason, .show() does not work in Safari...
        
this.container.css('display''block');
        
this.buttonNext.css('display''block');
        
this.buttonPrev.css('display''block');

        
this.funcNext   = function() { self.next(); };
        
this.funcPrev   = function() { self.prev(); };
        
this.funcResize = function() { 
            if (
self.resizeTimer) {
                
clearTimeout(self.resizeTimer);
            }

            
self.resizeTimer setTimeout(function() {
                
self.reload();
            }, 
100);
        };

        if (
this.options.initCallback !== null) {
            
this.options.initCallback(this'init');
        }

        if (!
windowLoaded && $.browser.safari) {
            
this.buttons(falsefalse);
            $(
window).bind('load.jcarousel', function() { self.setup(); });
        } else {
            
this.setup();
        }
    };

    
// Create shortcut for internal use
    
var $jc = $.jcarousel;

    
$jc.fn = $jc.prototype = {
        
jcarousel'0.2.8'
    
};

    
$jc.fn.extend $jc.extend = $.extend;

    
$jc.fn.extend({
        
/**
         * Setups the carousel.
         *
         * @method setup
         * @return undefined
         */
        
setup: function() {
            
this.first       null;
            
this.last        null;
            
this.prevFirst   null;
            
this.prevLast    null;
            
this.animating   false;
            
this.timer       null;
            
this.resizeTimer null;
            
this.tail        null;
            
this.inTail      false;

            if (
this.locked) {
                return;
            }

            
this.list.css(this.ltthis.pos(this.options.offset) + 'px');
            var 
this.pos(this.options.starttrue);
            
this.prevFirst this.prevLast null;
            
this.animate(pfalse);

            $(
window).unbind('resize.jcarousel'this.funcResize).bind('resize.jcarousel'this.funcResize);

            if (
this.options.setupCallback !== null) {
                
this.options.setupCallback(this);
            }
        },

        
/**
         * Clears the list and resets the carousel.
         *
         * @method reset
         * @return undefined
         */
        
reset: function() {
            
this.list.empty();

            
this.list.css(this.lt'0px');
            
this.list.css(this.wh'10px');

            if (
this.options.initCallback !== null) {
                
this.options.initCallback(this'reset');
            }

            
this.setup();
        },

        
/**
         * Reloads the carousel and adjusts positions.
         *
         * @method reload
         * @return undefined
         */
        
reload: function() {
            if (
this.tail !== null && this.inTail) {
                
this.list.css(this.lt$jc.intval(this.list.css(this.lt)) + this.tail);
            }

            
this.tail   null;
            
this.inTail false;

            if (
this.options.reloadCallback !== null) {
                
this.options.reloadCallback(this);
            }

            if (
this.options.visible !== null) {
                var 
self this;
                var 
di Math.ceil(this.clipping() / this.options.visible), wh 0lt 0;
                
this.list.children('li').each(function(i) {
                    
wh += self.dimension(thisdi);
                    if (
self.first) {
                        
lt wh;
                    }
                });

                
this.list.css(this.whwh 'px');
                
this.list.css(this.lt, -lt 'px');
            }

            
this.scroll(this.firstfalse);
        },

        
/**
         * Locks the carousel.
         *
         * @method lock
         * @return undefined
         */
        
lock: function() {
            
this.locked true;
            
this.buttons();
        },

        
/**
         * Unlocks the carousel.
         *
         * @method unlock
         * @return undefined
         */
        
unlock: function() {
            
this.locked false;
            
this.buttons();
        },

        
/**
         * Sets the size of the carousel.
         *
         * @method size
         * @return undefined
         * @param s {Number} The size of the carousel.
         */
        
size: function(s) {
            if (
!== undefined) {
                
this.options.size s;
                if (!
this.locked) {
                    
this.buttons();
                }
            }

            return 
this.options.size;
        },

        
/**
         * Checks whether a list element exists for the given index (or index range).
         *
         * @method get
         * @return bool
         * @param i {Number} The index of the (first) element.
         * @param i2 {Number} The index of the last element.
         */
        
has: function(ii2) {
            if (
i2 === undefined || !i2) {
                
i2 i;
            }

            if (
this.options.size !== null && i2 this.options.size) {
                
i2 this.options.size;
            }

            for (var 
i<= i2j++) {
                var 
this.get(j);
                if (!
e.length || e.hasClass('jcarousel-item-placeholder')) {
                    return 
false;
                }
            }

            return 
true;
        },

        
/**
         * Returns a jQuery object with list element for the given index.
         *
         * @method get
         * @return jQuery
         * @param i {Number} The index of the element.
         */
        
get: function(i) {
            return $(
'>.jcarousel-item-' ithis.list);
        },

        
/**
         * Adds an element for the given index to the list.
         * If the element already exists, it updates the inner html.
         * Returns the created element as jQuery object.
         *
         * @method add
         * @return jQuery
         * @param i {Number} The index of the element.
         * @param s {String} The innerHTML of the element.
         */
        
add: function(is) {
            var 
this.get(i), old 0= $(s);

            if (
e.length === 0) {
                var 
c$jc.intval(i);
                
this.create(i);
                while (
true) {
                    
this.get(--j);
                    if (
<= || c.length) {
                        if (
<= 0) {
                            
this.list.prepend(e);
                        } else {
                            
c.after(e);
                        }
                        break;
                    }
                }
            } else {
                
old this.dimension(e);
            }

            if (
n.get(0).nodeName.toUpperCase() == 'LI') {
                
e.replaceWith(n);
                
n;
            } else {
                
e.empty().append(s);
            }

            
this.format(e.removeClass(this.className('jcarousel-item-placeholder')), i);

            var 
di this.options.visible !== null Math.ceil(this.clipping() / this.options.visible) : null;
            var 
wh this.dimension(edi) - old;

            if (
&& this.first) {
                
this.list.css(this.lt$jc.intval(this.list.css(this.lt)) - wh 'px');
            }

            
this.list.css(this.wh$jc.intval(this.list.css(this.wh)) + wh 'px');

            return 
e;
        },

        
/**
         * Removes an element for the given index from the list.
         *
         * @method remove
         * @return undefined
         * @param i {Number} The index of the element.
         */
        
remove: function(i) {
            var 
this.get(i);

            
// Check if item exists and is not currently visible
            
if (!e.length || (>= this.first && <= this.last)) {
                return;
            }

            var 
this.dimension(e);

            if (
this.first) {
                
this.list.css(this.lt$jc.intval(this.list.css(this.lt)) + 'px');
            }

            
e.remove();

            
this.list.css(this.wh$jc.intval(this.list.css(this.wh)) - 'px');
        },

        
/**
         * Moves the carousel forwards.
         *
         * @method next
         * @return undefined
         */
        
next: function() {
            if (
this.tail !== null && !this.inTail) {
                
this.scrollTail(false);
            } else {
                
this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'last') && this.options.size !== null && this.last == this.options.size) ? this.first this.options.scroll);
            }
        },

        
/**
         * Moves the carousel backwards.
         *
         * @method prev
         * @return undefined
         */
        
prev: function() {
            if (
this.tail !== null && this.inTail) {
                
this.scrollTail(true);
            } else {
                
this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'first') && this.options.size !== null && this.first == 1) ? this.options.size this.first this.options.scroll);
            }
        },

        
/**
         * Scrolls the tail of the carousel.
         *
         * @method scrollTail
         * @return undefined
         * @param b {Boolean} Whether scroll the tail back or forward.
         */
        
scrollTail: function(b) {
            if (
this.locked || this.animating || !this.tail) {
                return;
            }

            
this.pauseAuto();

            var 
pos  $jc.intval(this.list.css(this.lt));

            
pos = !pos this.tail pos this.tail;
            
this.inTail = !b;

            
// Save for callbacks
            
this.prevFirst this.first;
            
this.prevLast  this.last;

            
this.animate(pos);
        },

        
/**
         * Scrolls the carousel to a certain position.
         *
         * @method scroll
         * @return undefined
         * @param i {Number} The index of the element to scoll to.
         * @param a {Boolean} Flag indicating whether to perform animation.
         */
        
scroll: function(ia) {
            if (
this.locked || this.animating) {
                return;
            }

            
this.pauseAuto();
            
this.animate(this.pos(i), a);
        },

        
/**
         * Prepares the carousel and return the position for a certian index.
         *
         * @method pos
         * @return {Number}
         * @param i {Number} The index of the element to scoll to.
         * @param fv {Boolean} Whether to force last item to be visible.
         */
        
pos: function(ifv) {
            var 
pos  $jc.intval(this.list.css(this.lt));

            if (
this.locked || this.animating) {
                return 
pos;
            }

            if (
this.options.wrap != 'circular') {
                
: (this.options.size && this.options.size this.options.size i);
            }

            var 
back this.first i;

            
// Create placeholders, new list width/height
            // and new list position
            
var this.options.wrap != 'circular' && this.first <= this.first;
            var 
back this.get(f) : this.get(this.last);
            var 
back 1;
            var 
null0false0g;

            while (
back ? -->= : ++i) {
                
this.get(j);
                
= !e.length;
                if (
e.length === 0) {
                    
this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    
c[back 'before' 'after' ](e);

                    if (
this.first !== null && this.options.wrap == 'circular' && this.options.size !== null && (<= || this.options.size)) {
                        
this.get(this.index(j));
                        if (
g.length) {
                            
this.add(jg.clone(true));
                        }
                    }
                }

                
e;
                
this.dimension(e);

                if (
p) {
                    
+= d;
                }

                if (
this.first !== null && (this.options.wrap == 'circular' || (>= && (this.options.size === null || <= this.options.size)))) {
                    
pos back pos pos d;
                }
            }

            
// Calculate visible items
            
var clipping this.clipping(), cache = [], visible 00;
            
this.get(1);
            
i;

            while (++
visible) {
                
this.get(j);
                
= !e.length;
                if (
e.length === 0) {
                    
this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    
// This should only happen on a next scroll
                    
if (c.length === 0) {
                        
this.list.prepend(e);
                    } else {
                        
c[back 'before' 'after' ](e);
                    }

                    if (
this.first !== null && this.options.wrap == 'circular' && this.options.size !== null && (<= || this.options.size)) {
                        
this.get(this.index(j));
                        if (
g.length) {
                            
this.add(jg.clone(true));
                        }
                    }
                }

                
e;
                
this.dimension(e);
                if (
=== 0) {
                    throw new 
Error('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...');
                }

                if (
this.options.wrap != 'circular' && this.options.size !== null && this.options.size) {
                    
cache.push(e);
                } else if (
p) {
                    
+= d;
                }

                
+= d;

                if (
>= clipping) {
                    break;
                }

                
j++;
            }

             
// Remove out-of-range placeholders
            
for (var 0cache.lengthx++) {
                
cache[x].remove();
            }

            
// Resize list
            
if (0) {
                
this.list.css(this.whthis.dimension(this.list) + 'px');

                if (
back) {
                    
pos -= l;
                    
this.list.css(this.lt$jc.intval(this.list.css(this.lt)) - 'px');
                }
            }

            
// Calculate first and last item
            
var last visible 1;
            if (
this.options.wrap != 'circular' && this.options.size && last this.options.size) {
                
last this.options.size;
            }

            if (
last) {
                
visible 0;
                
last;
                
0;
                while (++
visible) {
                    
this.get(j--);
                    if (!
e.length) {
                        break;
                    }
                    
+= this.dimension(e);
                    if (
>= clipping) {
                        break;
                    }
                }
            }

            var 
first last visible 1;
            if (
this.options.wrap != 'circular' && first 1) {
                
first 1;
            }

            if (
this.inTail && back) {
                
pos += this.tail;
                
this.inTail false;
            }

            
this.tail null;
            if (
this.options.wrap != 'circular' && last == this.options.size && (last visible 1) >= 1) {
                var 
$jc.intval(this.get(last).css(!this.options.vertical 'marginRight' 'marginBottom'));
                if ((
m) > clipping) {
                    
this.tail clipping m;
                }
            }

            if (
fv && === this.options.size && this.tail) {
                
pos -= this.tail;
                
this.inTail true;
            }

            
// Adjust position
            
while (i-- > first) {
                
pos += this.dimension(this.get(i));
            }

            
// Save visible item range
            
this.prevFirst this.first;
            
this.prevLast  this.last;
            
this.first     first;
            
this.last      last;

            return 
pos;
        },

        
/**
         * Animates the carousel to a certain position.
         *
         * @method animate
         * @return undefined
         * @param p {Number} Position to scroll to.
         * @param a {Boolean} Flag indicating whether to perform animation.
         */
        
animate: function(pa) {
            if (
this.locked || this.animating) {
                return;
            }

            
this.animating true;

            var 
self this;
            var 
scrolled = function() {
                
self.animating false;

                if (
=== 0) {
                    
self.list.css(self.lt,  0);
                }

                if (!
self.autoStopped && (self.options.wrap == 'circular' || self.options.wrap == 'both' || self.options.wrap == 'last' || self.options.size === null || self.last self.options.size || (self.last == self.options.size && self.tail !== null && !self.inTail))) {
                    
self.startAuto();
                }

                
self.buttons();
                
self.notify('onAfterAnimation');

                
// This function removes items which are appended automatically for circulation.
                // This prevents the list from growing infinitely.
                
if (self.options.wrap == 'circular' && self.options.size !== null) {
                    for (var 
self.prevFirst<= self.prevLasti++) {
                        if (
!== null && !(>= self.first && <= self.last) && (|| self.options.size)) {
                            
self.remove(i);
                        }
                    }
                }
            };

            
this.notify('onBeforeAnimation');

            
// Animate
            
if (!this.options.animation || === false) {
                
this.list.css(this.lt'px');
                
scrolled();
            } else {
                var 
= !this.options.vertical ? (this.options.rtl ? {'right'p} : {'left'p}) : {'top'p};
                
// Define animation settings.
                
var settings = {
                    
durationthis.options.animation,
                    
easing:   this.options.easing,
                    
completescrolled
                
};
                
// If we have a step callback, specify it as well.
                
if ($.isFunction(this.options.animationStepCallback)) {
                    
settings.step this.options.animationStepCallback;
                }
                
// Start the animation.
                
this.list.animate(osettings);
            }
        },

        
/**
         * Starts autoscrolling.
         *
         * @method auto
         * @return undefined
         * @param s {Number} Seconds to periodically autoscroll the content.
         */
        
startAuto: function(s) {
            if (
!== undefined) {
                
this.options.auto s;
            }

            if (
this.options.auto === 0) {
                return 
this.stopAuto();
            }

            if (
this.timer !== null) {
                return;
            }

            
this.autoStopped false;

            var 
self this;
            
this.timer window.setTimeout(function() { self.next(); }, this.options.auto 1000);
        },

        
/**
         * Stops autoscrolling.
         *
         * @method stopAuto
         * @return undefined
         */
        
stopAuto: function() {
            
this.pauseAuto();
            
this.autoStopped true;
        },

        
/**
         * Pauses autoscrolling.
         *
         * @method pauseAuto
         * @return undefined
         */
        
pauseAuto: function() {
            if (
this.timer === null) {
                return;
            }

            
window.clearTimeout(this.timer);
            
this.timer null;
        },

        
/**
         * Sets the states of the prev/next buttons.
         *
         * @method buttons
         * @return undefined
         */
        
buttons: function(np) {
            if (
== null) {
                
= !this.locked && this.options.size !== && ((this.options.wrap && this.options.wrap != 'first') || this.options.size === null || this.last this.options.size);
                if (!
this.locked && (!this.options.wrap || this.options.wrap == 'first') && this.options.size !== null && this.last >= this.options.size) {
                    
this.tail !== null && !this.inTail;
                }
            }

            if (
== null) {
                
= !this.locked && this.options.size !== && ((this.options.wrap && this.options.wrap != 'last') || this.first 1);
                if (!
this.locked && (!this.options.wrap || this.options.wrap == 'last') && this.options.size !== null && this.first == 1) {
                    
this.tail !== null && this.inTail;
                }
            }

            var 
self this;

            if (
this.buttonNext.size() > 0) {
                
this.buttonNext.unbind(this.options.buttonNextEvent '.jcarousel'this.funcNext);

                if (
n) {
                    
this.buttonNext.bind(this.options.buttonNextEvent '.jcarousel'this.funcNext);
                }

                
this.buttonNext['removeClass' 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled'false true);

                if (
this.options.buttonNextCallback !== null && this.buttonNext.data('jcarouselstate') != n) {
                    
this.buttonNext.each(function() { self.options.buttonNextCallback(selfthisn); }).data('jcarouselstate'n);
                }
            } else {
                if (
this.options.buttonNextCallback !== null && this.buttonNextState != n) {
                    
this.options.buttonNextCallback(selfnulln);
                }
            }

            if (
this.buttonPrev.size() > 0) {
                
this.buttonPrev.unbind(this.options.buttonPrevEvent '.jcarousel'this.funcPrev);

                if (
p) {
                    
this.buttonPrev.bind(this.options.buttonPrevEvent '.jcarousel'this.funcPrev);
                }

                
this.buttonPrev['removeClass' 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled'false true);

                if (
this.options.buttonPrevCallback !== null && this.buttonPrev.data('jcarouselstate') != p) {
                    
this.buttonPrev.each(function() { self.options.buttonPrevCallback(selfthisp); }).data('jcarouselstate'p);
                }
            } else {
                if (
this.options.buttonPrevCallback !== null && this.buttonPrevState != p) {
                    
this.options.buttonPrevCallback(selfnullp);
                }
            }

            
this.buttonNextState n;
            
this.buttonPrevState p;
        },

        
/**
         * Notify callback of a specified event.
         *
         * @method notify
         * @return undefined
         * @param evt {String} The event name
         */
        
notify: function(evt) {
            var 
state this.prevFirst === null 'init' : (this.prevFirst this.first 'next' 'prev');

            
// Load items
            
this.callback('itemLoadCallback'evtstate);

            if (
this.prevFirst !== this.first) {
                
this.callback('itemFirstInCallback'evtstatethis.first);
                
this.callback('itemFirstOutCallback'evtstatethis.prevFirst);
            }

            if (
this.prevLast !== this.last) {
                
this.callback('itemLastInCallback'evtstatethis.last);
                
this.callback('itemLastOutCallback'evtstatethis.prevLast);
            }

            
this.callback('itemVisibleInCallback'evtstatethis.firstthis.lastthis.prevFirstthis.prevLast);
            
this.callback('itemVisibleOutCallback'evtstatethis.prevFirstthis.prevLastthis.firstthis.last);
        },

        
callback: function(cbevtstatei1i2i3i4) {
            if (
this.options[cb] == null || (typeof this.options[cb] != 'object' && evt != 'onAfterAnimation')) {
                return;
            }

            var 
callback typeof this.options[cb] == 'object' this.options[cb][evt] : this.options[cb];

            if (!$.
isFunction(callback)) {
                return;
            }

            var 
self this;

            if (
i1 === undefined) {
                
callback(selfstateevt);
            } else if (
i2 === undefined) {
                
this.get(i1).each(function() { callback(selfthisi1stateevt); });
            } else {
                var 
call = function(i) {
                    
self.get(i).each(function() { callback(selfthisistateevt); });
                };
                for (var 
i1<= i2i++) {
                    if (
!== null && !(>= i3 && <= i4)) {
                        
call(i);
                    }
                }
            }
        },

        
create: function(i) {
            return 
this.format('<li></li>'i);
        },

        
format: function(ei) {
            
= $(e);
            var 
split e.get(0).className.split(' ');
            for (var 
0split.lengthj++) {
                if (
split[j].indexOf('jcarousel-') != -1) {
                    
e.removeClass(split[j]);
                }
            }
            
e.addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-' i)).css({
                
'float': (this.options.rtl 'right' 'left'),
                
'list-style''none'
            
}).attr('jcarouselindex'i);
            return 
e;
        },

        
className: function(c) {
            return 
' ' + (!this.options.vertical '-horizontal' '-vertical');
        },

        
dimension: function(ed) {
            var 
el = $(e);

            if (
== null) {
                return !
this.options.vertical ?
                       (
el.outerWidth(true) || $jc.intval(this.options.itemFallbackDimension)) :
                       (
el.outerHeight(true) || $jc.intval(this.options.itemFallbackDimension));
            } else {
                var 
= !this.options.vertical ?
                    
$jc.intval(el.css('marginLeft')) - $jc.intval(el.css('marginRight')) :
                    
$jc.intval(el.css('marginTop')) - $jc.intval(el.css('marginBottom'));

                $(
el).css(this.wh'px');

                return 
this.dimension(el);
            }
        },

        
clipping: function() {
            return !
this.options.vertical ?
                
this.clip[0].offsetWidth $jc.intval(this.clip.css('borderLeftWidth')) - $jc.intval(this.clip.css('borderRightWidth')) :
                
this.clip[0].offsetHeight $jc.intval(this.clip.css('borderTopWidth')) - $jc.intval(this.clip.css('borderBottomWidth'));
        },

        
index: function(is) {
            if (
== null) {
                
this.options.size;
            }

            return 
Math.round((((i-1) / s) - Math.floor((i-1) / s)) * s) + 1;
        }
    });

    
$jc.extend({
        
/**
         * Gets/Sets the global default configuration properties.
         *
         * @method defaults
         * @return {Object}
         * @param d {Object} A set of key/value pairs to set as configuration properties.
         */
        
defaults: function(d) {
            return $.
extend(defaults|| {});
        },

        
intval: function(v) {
            
parseInt(v10);
            return 
isNaN(v) ? v;
        },

        
windowLoaded: function() {
            
windowLoaded true;
        }
    });

    
/**
     * Creates a carousel for all matched elements.
     *
     * @example $("#mycarousel").jcarousel();
     * @before <ul id="mycarousel" class="jcarousel-skin-name"><li>First item</li><li>Second item</li></ul>
     * @result
     *
     * <div class="jcarousel-skin-name">
     *   <div class="jcarousel-container">
     *     <div class="jcarousel-clip">
     *       <ul class="jcarousel-list">
     *         <li class="jcarousel-item-1">First item</li>
     *         <li class="jcarousel-item-2">Second item</li>
     *       </ul>
     *     </div>
     *     <div disabled="disabled" class="jcarousel-prev jcarousel-prev-disabled"></div>
     *     <div class="jcarousel-next"></div>
     *   </div>
     * </div>
     *
     * @method jcarousel
     * @return jQuery
     * @param o {Hash|String} A set of key/value pairs to set as configuration properties or a method name to call on a formerly created instance.
     */
    
$.fn.jcarousel = function(o) {
        if (
typeof o == 'string') {
            var 
instance = $(this).data('jcarousel'), args = Array.prototype.slice.call(arguments1);
            return 
instance[o].apply(instanceargs);
        } else {
            return 
this.each(function() {
                var 
instance = $(this).data('jcarousel');
                if (
instance) {
                    if (
o) {
                        $.
extend(instance.optionso);
                    }
                    
instance.reload();
                } else {
                    $(
this).data('jcarousel', new $jc(thiso));
                }
            });
        }
    };

})(
jQuery);
?>
Онлайн: 1
Реклама