// JavaScript Document/*!
/*
 * 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/
 */

(function(i){
    i.fn.jcarousel=function(a){
        if(typeof a=="string"){
            var c=i(this).data("jcarousel"),b=Array.prototype.slice.call(arguments,1);
            return c[a].apply(c,b)
            }else return this.each(function(){
            i(this).data("jcarousel",new h(this,a))
            })
        };

    var p={
        vertical:false,
        rtl:false,
        start:1,
        offset:1,
        size:null,
        scroll:2,
        visible:null,
        animation:"normal",
        easing:"swing",
        auto:0,
        wrap:null,
        initCallback:null,
        reloadCallback:null,
        itemLoadCallback:null,
        itemFirstInCallback:null,
        itemFirstOutCallback:null,
        itemLastInCallback:null,
        itemLastOutCallback:null,
        itemVisibleInCallback:null,
        itemVisibleOutCallback:null,
        buttonNextHTML:"<div></div>",
        buttonPrevHTML:"<div></div>",
        buttonNextEvent:"click",
        buttonPrevEvent:"click",
        buttonNextCallback:null,
        buttonPrevCallback:null,
        itemFallbackDimension:null
    },q=false;
    i(window).bind("load.jcarousel",function(){
        q=true
        });
    i.jcarousel=function(a,c){
        this.options=i.extend({},p,c||{});
        this.locked=false;
        this.buttonPrev=this.buttonNext=this.list=this.clip=this.container=null;
        if(!c||c.rtl===undefined)this.options.rtl= (i(a).attr("dir")||i("html").attr("dir")||"").toLowerCase()=="rtl";
        this.wh=!this.options.vertical?"width":"height";
        this.lt=!this.options.vertical?this.options.rtl?"right":"left":"top";
        for(var b="",d=a.className.split(" "),e=0;e<d.length;e++)if(d[e].indexOf("jcarousel-skin")!=-1){
            i(a).removeClass(d[e]);
            b=d[e];
            break
        }
        if(a.nodeName.toUpperCase()=="UL"||a.nodeName.toUpperCase()=="OL"){
            this.list=i(a);
            this.container=this.list.parent();
            if(this.container.hasClass("jcarousel-clip")){
                if(!this.container.parent().hasClass("jcarousel-container"))this.container= this.container.wrap("<div></div>");
                this.container=this.container.parent()
                }else if(!this.container.hasClass("jcarousel-container"))this.container=this.list.wrap("<div></div>").parent()
                }else{
            this.container=i(a);
            this.list=this.container.find("ul,ol").eq(0)
            }
            b!=""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1&&this.container.wrap('<div class=" '+b+'"></div>');
        this.clip=this.list.parent();
        if(!this.clip.length||!this.clip.hasClass("jcarousel-clip"))this.clip=this.list.wrap("<div></div>").parent();
        this.buttonNext=i(".jcarousel-next",this.container);
        if(this.buttonNext.size()==0&&this.options.buttonNextHTML!=null)this.buttonNext=this.clip.after(this.options.buttonNextHTML).next();
        this.buttonNext.addClass(this.className("jcarousel-next"));
        this.buttonPrev=i(".jcarousel-prev",this.container);
        if(this.buttonPrev.size()==0&&this.options.buttonPrevHTML!=null)this.buttonPrev=this.clip.after(this.options.buttonPrevHTML).next();
        this.buttonPrev.addClass(this.className("jcarousel-prev"));
        this.clip.addClass(this.className("jcarousel-clip")).css({
            overflow:"hidden",
            position:"relative"
        });
        this.list.addClass(this.className("jcarousel-list")).css({
            overflow:"hidden",
            position:"relative",
            top:0,
            margin:0,
            padding:0
        }).css(this.options.rtl?"right":"left",0);
        this.container.addClass(this.className("jcarousel-container")).css({
            position:"relative"
        });
        !this.options.vertical&&this.options.rtl&&this.container.addClass("jcarousel-direction-rtl").attr("dir","rtl");
        var f=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;
        b=this.list.children("li");
        var g= this;
        if(b.size()>0){
            var j=0;
            e=this.options.offset;
            b.each(function(){
                g.format(this,e++);
                j+=g.dimension(this,f)
                });
            this.list.css(this.wh,j+100+"px");
            if(!c||c.size===undefined)this.options.size=b.size()
                }
                this.container.css("display","block");
        this.buttonNext.css("display","block");
        this.buttonPrev.css("display","block");
        this.funcNext=function(){
            g.next()
            };

        this.funcPrev=function(){
            g.prev()
            };

        this.funcResize=function(){
            g.reload()
            };

        this.options.initCallback!=null&&this.options.initCallback(this,"init");
        if(!q&& i.browser.safari){
            this.buttons(false,false);
            i(window).bind("load.jcarousel",function(){
                g.setup()
                })
            }else this.setup()
            };

    var h=i.jcarousel;
    h.fn=h.prototype={
        jcarousel:"0.2.5"
    };

    h.fn.extend=h.extend=i.extend;
    h.fn.extend({
        setup:function(){
            this.prevLast=this.prevFirst=this.last=this.first=null;
            this.animating=false;
            this.tail=this.timer=null;
            this.inTail=false;
            if(!this.locked){
                this.list.css(this.lt,this.pos(this.options.offset)+"px");
                var a=this.pos(this.options.start);
                this.prevFirst=this.prevLast=null;
                this.animate(a, false);
                i(window).unbind("resize.jcarousel",this.funcResize).bind("resize.jcarousel",this.funcResize)
                }
            },
    reset:function(){
        this.list.empty();
        this.list.css(this.lt,"0px");
        this.list.css(this.wh,"10px");
        this.options.initCallback!=null&&this.options.initCallback(this,"reset");
        this.setup()
        },
    reload:function(){
        this.tail!=null&&this.inTail&&this.list.css(this.lt,h.intval(this.list.css(this.lt))+this.tail);
        this.tail=null;
        this.inTail=false;
        this.options.reloadCallback!=null&&this.options.reloadCallback(this);
        if(this.options.visible!= null){
            var a=this,c=Math.ceil(this.clipping()/this.options.visible),b=0,d=0;
            this.list.children("li").each(function(e){
                b+=a.dimension(this,c);
                if(e+1<a.first)d=b
                    });
            this.list.css(this.wh,b+"px");
            this.list.css(this.lt,-d+"px")
            }
            this.scroll(this.first,false)
        },
    lock:function(){
        this.locked=true;
        this.buttons()
        },
    unlock:function(){
        this.locked=false;
        this.buttons()
        },
    size:function(a){
        if(a!=undefined){
            this.options.size=a;
            this.locked||this.buttons()
            }
            return this.options.size
        },
    has:function(a,c){
        if(c==undefined||!c)c= a;
        if(this.options.size!==null&&c>this.options.size)c=this.options.size;
        for(var b=a;b<=c;b++){
            var d=this.get(b);
            if(!d.length||d.hasClass("jcarousel-item-placeholder"))return false
                }
                return true
        },
    get:function(a){
        return i(".jcarousel-item-"+a,this.list)
        },
    add:function(a,c){
        var b=this.get(a),d=0,e=i(c);
        if(b.length==0){
            var f;
            b=this.create(a);
            for(var g=h.intval(a);f=this.get(--g);)if(g<=0||f.length){
                g<=0?this.list.prepend(b):f.after(b);
                break
            }
            }else d=this.dimension(b);
        if(e.get(0).nodeName.toUpperCase()=="LI"){
        b.replaceWith(e);
        b=e
        }else b.empty().append(c);
        this.format(b.removeClass(this.className("jcarousel-item-placeholder")),a);
        e=this.options.visible!=null?Math.ceil(this.clipping()/this.options.visible):null;
        d=this.dimension(b,e)-d;
        a>0&&a<this.first&&this.list.css(this.lt,h.intval(this.list.css(this.lt))-d+"px");
        this.list.css(this.wh,h.intval(this.list.css(this.wh))+d+"px");
        return b
        },
    remove:function(a){
        var c=this.get(a);
        if(!(!c.length||a>=this.first&&a<=this.last)){
            var b=this.dimension(c);
            a<this.first&&this.list.css(this.lt, h.intval(this.list.css(this.lt))+b+"px");
            c.remove();
            this.list.css(this.wh,h.intval(this.list.css(this.wh))-b+"px")
            }
        },
next:function(){
    this.stopAuto();
    this.tail!=null&&!this.inTail?this.scrollTail(false):this.scroll((this.options.wrap=="both"||this.options.wrap=="last")&&this.options.size!=null&&this.last==this.options.size?1:this.first+this.options.scroll)
    },
prev:function(){
    this.stopAuto();
    this.tail!=null&&this.inTail?this.scrollTail(true):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)
    },
scrollTail:function(a){
    if(!(this.locked||this.animating||!this.tail)){
        var c=h.intval(this.list.css(this.lt));
        !a?c-=this.tail:c+=this.tail;
        this.inTail=!a;
        this.prevFirst=this.first;
        this.prevLast=this.last;
        this.animate(c)
        }
    },
scroll:function(a,c){
    this.locked||this.animating||this.animate(this.pos(a),c)
    },
pos:function(a){
    var c=h.intval(this.list.css(this.lt));
    if(this.locked||this.animating)return c;
    if(this.options.wrap!= "circular")a=a<1?1:this.options.size&&a>this.options.size?this.options.size:a;
    for(var b=this.first>a,d=this.options.wrap!="circular"&&this.first<=1?1:this.first,e=b?this.get(d):this.get(this.last),f=b?d:d-1,g=null,j=0,l=false,k=0;b?--f>=a:++f<a;){
        g=this.get(f);
        l=!g.length;
        if(g.length==0){
            g=this.create(f).addClass(this.className("jcarousel-item-placeholder"));
            e[b?"before":"after"](g);
            if(this.first!=null&&this.options.wrap=="circular"&&this.options.size!==null&&(f<=0||f>this.options.size)){
                e=this.get(this.index(f));
                if(e.length)g=this.add(f,e.clone(true))
                    }
                }
        e=g;
    k=this.dimension(g);
        if(l)j+=k;
        if(this.first!=null&&(this.options.wrap=="circular"||f>=1&&(this.options.size==null||f<=this.options.size)))c=b?c+k:c-k
        }
        d=this.clipping();
    var o=[],n=0;
    f=a;
    var m=0;
    for(e=this.get(a-1);++n;){
    g=this.get(f);
    l=!g.length;
    if(g.length==0){
        g=this.create(f).addClass(this.className("jcarousel-item-placeholder"));
        e.length==0?this.list.prepend(g):e[b?"before":"after"](g);
        if(this.first!=null&&this.options.wrap=="circular"&&this.options.size!== null&&(f<=0||f>this.options.size)){
            e=this.get(this.index(f));
            if(e.length)g=this.add(f,e.clone(true))
                }
            }
    e=g;
k=this.dimension(g);
    if(k==0)throw Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...");
    if(this.options.wrap!="circular"&&this.options.size!==null&&f>this.options.size)o.push(g);
    else if(l)j+=k;
    m+=k;
    if(m>=d)break;
    f++
    }
    for(g=0;g<o.length;g++)o[g].remove();
if(j>0){
    this.list.css(this.wh,this.dimension(this.list)+j+"px");
    if(b){
        c-=j;
        this.list.css(this.lt,h.intval(this.list.css(this.lt))- j+"px")
        }
    }
j=a+n-1;
if(this.options.wrap!="circular"&&this.options.size&&j>this.options.size)j=this.options.size;
if(f>j){
    n=0;
    f=j;
    for(m=0;++n;){
        g=this.get(f--);
        if(!g.length)break;
        m+=this.dimension(g);
        if(m>=d)break
    }
    }
    f=j-n+1;
if(this.options.wrap!="circular"&&f<1)f=1;
if(this.inTail&&b){
    c+=this.tail;
    this.inTail=false
    }
    this.tail=null;
if(this.options.wrap!="circular"&&j==this.options.size&&j-n+1>=1){
    b=h.margin(this.get(j),!this.options.vertical?"marginRight":"marginBottom");
    if(m-b>d)this.tail=m-d-b
        }
        for(;a-- > f;)c+=this.dimension(this.get(a));
this.prevFirst=this.first;
this.prevLast=this.last;
this.first=f;
this.last=j;
return c
},
animate:function(a,c){
    if(!(this.locked||this.animating)){
        this.animating=true;
        var b=this,d=function(){
            b.animating=false;
            a==0&&b.list.css(b.lt,0);
            if(b.options.wrap=="circular"||b.options.wrap=="both"||b.options.wrap=="last"||b.options.size==null||b.last<b.options.size)b.startAuto();
            b.buttons();
            b.notify("onAfterAnimation");
            if(b.options.wrap=="circular"&&b.options.size!==null)for(var e= b.prevFirst;e<=b.prevLast;e++)if(e!==null&&!(e>=b.first&&e<=b.last)&&(e<1||e>b.options.size))b.remove(e)
                };

        this.notify("onBeforeAnimation");
        if(!this.options.animation||c==false){
            this.list.css(this.lt,a+"px");
            d()
            }else this.list.animate(!this.options.vertical?this.options.rtl?{
            right:a
        }:{
            left:a
        }:{
            top:a
        },this.options.animation,this.options.easing,d)
        }
        },
startAuto:function(a){
    if(a!=undefined)this.options.auto=a;
    if(this.options.auto==0)return this.stopAuto();
    if(this.timer==null){
        var c=this;
        this.timer=setTimeout(function(){
            c.next()
            }, this.options.auto*1E3)
        }
    },
stopAuto:function(){
    if(this.timer!=null){
        clearTimeout(this.timer);
        this.timer=null
        }
    },
buttons:function(a,c){
    if(a==undefined||a==null){
        a=!this.locked&&this.options.size!==0&&(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)a=this.tail!=null&&!this.inTail
            }
            if(c==undefined||c==null){
        c=!this.locked&&this.options.size!== 0&&(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)c=this.tail!=null&&this.inTail
            }
            var b=this;
    this.buttonNext[a?"bind":"unbind"](this.options.buttonNextEvent+".jcarousel",this.funcNext)[a?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",a?false:true);
    this.buttonPrev[c?"bind":"unbind"](this.options.buttonPrevEvent+".jcarousel",this.funcPrev)[c?"removeClass": "addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",c?false:true);
    this.options.buttonNextCallback!=null&&this.buttonNext.data("jcarouselstate")!=a&&this.buttonNext.each(function(){
        b.options.buttonNextCallback(b,this,a)
        }).data("jcarouselstate",a);
    this.options.buttonPrevCallback!=null&&this.buttonPrev.data("jcarouselstate")!=c&&this.buttonPrev.each(function(){
        b.options.buttonPrevCallback(b,this,c)
        }).data("jcarouselstate",c)
    },
notify:function(a){
    var c=this.prevFirst==null?"init":this.prevFirst< this.first?"next":"prev";
    this.callback("itemLoadCallback",a,c);
    if(this.prevFirst!==this.first){
        this.callback("itemFirstInCallback",a,c,this.first);
        this.callback("itemFirstOutCallback",a,c,this.prevFirst)
        }
        if(this.prevLast!==this.last){
        this.callback("itemLastInCallback",a,c,this.last);
        this.callback("itemLastOutCallback",a,c,this.prevLast)
        }
        this.callback("itemVisibleInCallback",a,c,this.first,this.last,this.prevFirst,this.prevLast);
    this.callback("itemVisibleOutCallback",a,c,this.prevFirst,this.prevLast, this.first,this.last)
    },
callback:function(a,c,b,d,e,f,g){
    if(!(this.options[a]==undefined||typeof this.options[a]!="object"&&c!="onAfterAnimation")){
        var j=typeof this.options[a]=="object"?this.options[a][c]:this.options[a];
        if(i.isFunction(j)){
            var l=this;
            if(d===undefined)j(l,b,c);
            else if(e===undefined)this.get(d).each(function(){
                j(l,this,d,b,c)
                });else for(var k=d;k<=e;k++)k!==null&&!(k>=f&&k<=g)&&this.get(k).each(function(){
                j(l,this,k,b,c)
                })
            }
            }
},
create:function(a){
    return this.format("<li></li>",a)
    },
format:function(a, c){
    a=i(a);
    for(var b=a.get(0).className.split(" "),d=0;d<b.length;d++)b[d].indexOf("jcarousel-")!=-1&&a.removeClass(b[d]);
    a.addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+c)).css({
        "float":this.options.rtl?"right":"left",
        "list-style":"none"
    }).attr("jcarouselindex",c);
    return a
    },
className:function(a){
    return a+" "+a+(!this.options.vertical?"-horizontal":"-vertical")
    },
dimension:function(a,c){
    var b=a.jquery!=undefined?a[0]:a,d=!this.options.vertical?(b.offsetWidth|| h.intval(this.options.itemFallbackDimension))+h.margin(b,"marginLeft")+h.margin(b,"marginRight"):(b.offsetHeight||h.intval(this.options.itemFallbackDimension))+h.margin(b,"marginTop")+h.margin(b,"marginBottom");
    if(c==undefined||d==c)return d;
    d=!this.options.vertical?c-h.margin(b,"marginLeft")-h.margin(b,"marginRight"):c-h.margin(b,"marginTop")-h.margin(b,"marginBottom");
    i(b).css(this.wh,d+"px");
    return this.dimension(b)
    },
clipping:function(){
    return!this.options.vertical?this.clip[0].offsetWidth-h.intval(this.clip.css("borderLeftWidth"))- h.intval(this.clip.css("borderRightWidth")):this.clip[0].offsetHeight-h.intval(this.clip.css("borderTopWidth"))-h.intval(this.clip.css("borderBottomWidth"))
    },
index:function(a,c){
    if(c==undefined)c=this.options.size;
    return Math.round(((a-1)/c-Math.floor((a-1)/c))*c)+1
    }
});
h.extend({
    defaults:function(a){
        return i.extend(p,a||{})
        },
    margin:function(a,c){
        if(!a)return 0;
        var b=a.jquery!=undefined?a[0]:a;
        if(c=="marginRight"&&i.browser.safari){
            var d={
                display:"block",
                "float":"none",
                width:"auto"
            },e,f;
            i.swap(b,d, function(){
                e=b.offsetWidth
                });
            d.marginRight=0;
            i.swap(b,d,function(){
                f=b.offsetWidth
                });
            return f-e
            }
            return h.intval(i.css(b,c))
        },
    intval:function(a){
        a=parseInt(a);
        return isNaN(a)?0:a
        }
    })
})(jQuery);



