/* jQuery based image slider
/* TMSlider 0.4.1 */
;(function($){
	$.fn.TMSlider=$.fn.TMS=$.fn._TMS=function(o){
		this.each(function(){
			var th=$(this),
				data=th.data('_TMS'),
				_={
		presets:{			
			centralExpand:{"reverseWay":false,"duration":600,"interval":80,"blocksX":8,"blocksY":4,"easing":"easeInQuad","way":"diagonal","anim":"centralExpand"},
			zoomer:{"reverseWay":false,"duration":10000,"interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"zoomer"},
			fadeThree:{"reverseWay":false,"duration":"1000","interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"fadeThree"},
			simpleFade:{"reverseWay":false,"duration":"1000","interval":"1","blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"fade"},
			gSlider:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"gSlider"},
			vSlider:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"1","blocksY":"1","easing":"","way":"lines","anim":"vSlider"},
			slideFromLeft:{"reverseWay":false,"duration":"1000","interval":"1","blocksX":"1","blocksY":"1","easing":"easeOutBack","way":"lines","anim":"slideFromLeft"},
			slideFromTop:{"reverseWay":false,"duration":"1000","interval":"1","blocksX":"1","blocksY":"1","easing":"easeOutBack","way":"lines","anim":"slideFromTop"},
			diagonalFade:{"reverseWay":false,"duration":400,"interval":40,"blocksX":12,"blocksY":6,"easing":"easeInQuad","way":"diagonal","anim":"fade"},
			diagonalExpand:{"reverseWay":false,"duration":400,"interval":40,"blocksX":8,"blocksY":4,"easing":"easeInQuad","way":"diagonal","anim":"expand"},
			fadeFromCenter:{"reverseWay":true,"duration":"600","interval":"10","blocksX":"10","blocksY":"6","easing":"","way":"spiral","anim":"fade"},
			zabor:{"reverseWay":false,"duration":400,"interval":40,"blocksX":"20","blocksY":"1","easing":"","way":"lines","anim":"slideRight"},
			vertivalLines:{"reverseWay":false,"duration":600,"interval":1,"blocksX":12,"blocksY":1,"easing":"swing","way":"lines","anim":"vSlideOdd"},
			gorizontalLines:{"reverseWay":false,"duration":600,"interval":1,"blocksX":1,"blocksY":12,"easing":"swing","way":"lines","anim":"gSlideOdd"}
		},
        ways: {				
            lines: function () {
				var opt=this
                for (var ret = [], i = 0; i < opt.maskC.length; i++)
               		ret.push(opt.maskC.eq(i))
                return ret
            },
            spiral: function () {
                var opt=this,
					ret = [],
                    step = 0,
                    h = opt.blocksY,
                    w = opt.blocksX,
                    x, y, i, lr = function () {
                        for (i = step; i < w - 1 - step; i++)
                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[step][i])
                        else return false
                        rb()
                    },
                    rb = function () {
                        for (i = step; i < h - 1 - step; i++)
                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[i][w - 1 - step])
                        else return false
                        rl()
                    },
                    rl = function () {
                        for (i = step; i < w - 1 - step; i++)
                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[h - 1 - step][w - i - 1])
                        else return false
                        lt()
                    },
                    lt = function () {
                        for (i = step; i < h - 1 - step; i++)
                        if (ret.length < opt.maskC.length) ret.push(opt.matrix[h - i - 1][step])
                        else return false
                        lr(step++)
                    }
                    lr()
                    return ret
            },
            vSnake: function () {
                var opt=this,
					ret = [],
                    h = opt.blocksY,
                    w = opt.blocksX,
                    j, i
                    for (i = 0; i < w; i++)
                    for (j = 0; j < h; j++)
                    if (i * .5 == ~~ (i / 2)) ret.push(opt.matrix[j][i])
                    else ret.push(opt.matrix[h - 1 - j][i])
                    return ret
            },
            gSnake: function () {
                var opt=this,
					ret = [],
                    h = opt.blocksY,
                    w = opt.blocksX,
                    j, i
                    for (i = 0; i < h; i++)
                    for (j = 0; j < w; j++)
                    if (i * .5 == ~~ (i / 2)) ret.push(opt.matrix[i][j])
                    else ret.push(opt.matrix[i][w - 1 - j])
                    return ret
            },
            diagonal: function () {
                var opt=this,
					ret = [],
                    h = opt.blocksY,
                    w = opt.blocksX,
                    i = j = n = 0
                for (i = 0; i < w; i++)
	            	for (ret[i] = [], j = 0; j <= i; j++)
    		        	if (j < h) ret[i].push(opt.matrix[j][i - j])
            				for (i = 1; i < h; i++)
                    			for (j = 0, ret[n = ret.length] = []; j < h - i; j++)
					            	ret[n].push(opt.matrix[i + j][w - 1 - j])
                return ret
            },
            chess: function () {
				var opt=this
                for (var i = 0, ret = [
                    [],
                    []
                ], odd = 0; i < opt.maskC.length; i++)
                ret[odd = odd ? 0 : 1].push(opt.maskC.eq(i))
                return ret
            },
            randomly: function () {
				var opt=this
                for (var ret = [], n = i = 0; i < opt.maskC.length; i++)
                ret.push(opt.maskC.eq(i))
                for (i = 0; i < opt.maskC.length; i++)
                ret.push(ret.splice(parseInt(Math.random() * opt.maskC.length - 1), 1)[0])
                return ret
            }
        },

        anims: {			
			centralExpand:function(el,last){				
				$(el).each(function(){
					var th=$(this).css({visibility:'hidden'}),
						x=th.show().prop('offsetLeft'),
						y=th.show().prop('offsetTop'),
						w=th.width(),
						h=th.height()
											
					th
						.stop()
						.css({
							left:x+w/2,
							top:y+h/2,
							width:0,
							height:0,
							visibility:'visible',
							opacity:0
						})
						.animate({
							width:w//,
							// height:h,
							// left:x,
							// top:y
						},{
							step:function(now){
								var pc=(1-(w-now)/100)								
								th
									.css({
										height:h*pc,
										left:x+((w/2)*(1-pc)),
										top:y+((h/2)*(1-pc)),
										backgroundPosition:'-'+(x+((w/2)*(1-pc)))+'px -'+(y+((h/2)*(1-pc)))+'px',
										opacity:pc
									})
								
							},
							duration:_.duration,
							easing:_.easing,
							complete:function(){
								if(last)_.afterShow()
							}
						})
				})
			},			
			fadeThree:function(el,last){
				var _=this
				$(el).each(function(i){
					var th=$(this).show().css({left:-_.width/4,top:0,zIndex:2,opacity:0}),
						clone=th.clone().appendTo(th.parent()).css({left:_.width/4,top:_.height/4,zIndex:1}),
						clone2=th.clone().appendTo(th.parent()).css({left:0,top:-_.height/4,zIndex:1})
					//console.log(_.duration)	
					clone
						.stop()
						.animate({
							left:0,
							top:0,
							opacity:1
						},{
							duration:_.duration,
							easing:_.easing
						})
					clone2
						.stop()
						.animate({
							left:0,
							top:0,
							opacity:1
						},{
							duration:_.duration,
							easing:_.easing
						})
					th	
						.stop()
						.animate({
							left:0,
							top:0,
							opacity:1
						},{
							duration:_.duration,
							easing:_.easing,							
							complete:function(){
								if(last)_.afterShow()
								clone.remove()
								clone2.remove()
							}
						})
				})
			},
			zoomer:function(el,last){
				if(_.slideshow)
					_.slideshow=_.duration-2000
				
				el.each(function(){
					var src=_.next
					,ie=$.browser.msie&&$.browser.version<9
					,buff=$(new Image())
					,canvas=ie?$(new Image()):$('<canvas></canvas>')
					,width,height
					,duration=_.duration
					,k=_.presetParam.k||1.2
					,holder=_.pic
					,wrap=$('<div></div>')
						.css({
							position:'absolute'
							,left:0
							,top:0
							,zIndex:10
							,width:holder.width()
							,height:holder.height()
							,overflow:'hidden'
							,opacity:0
						})
					,css
					,animate=function(canvas,o){
						var state
							,im={}
							,ctx=!ie&&canvas[0].getContext('2d')
							,state=0
							,step=1/duration*40
							,refresh=function(state){
								ie
									?canvas.css({
										left:o.start.left+(o.finish.left-o.start.left)*state
										,top:o.start.top+(o.finish.top-o.start.top)*state
										,width:o.start.width+(o.finish.width-o.start.width)*state
										,height:o.start.height+(o.finish.height-o.start.height)*state
									})
									:ctx.drawImage(buff[0],
										im.left=o.start.left+(o.finish.left-o.start.left)*state,
										im.top=o.start.top+(o.finish.top-o.start.top)*state,
										im.width=o.start.width+(o.finish.width-o.start.width)*state,
										im.height=o.start.height+(o.finish.height-o.start.height)*state)
							}
						refresh(0)
						clearInterval(_.int)
						_.int=setInterval(function(){
							if(_.paused)
								return false
							if(state>=1){
								clearInterval(_.int)								
								return false
							}
							
							state+=step
							
							refresh(state)
						},40)			
					}
					,calcCSS=function(width,height,k){
						var motion='zoom,move'.split(',')[~~(Math.random()*2)]		
							,side='left,right,top,bottom,leftTop,leftBottom,center'.split(',')[~~(Math.random()*7)]
							,reverse=[false,true][~~(Math.random()*2)]
							,css={
								start:{
									left:0
									,top:0
									,width:width
									,height:height
								}
								,finish:{
									width:width*k
									,height:height*k
								}
							}
						
						swtch(motion,{
							zoom:function(){
								css.finish=swtch(side,{
									left:{
										left:0
										,top:-(height*k-height)/2
									}
									,right:{
										left:-(width*k-width)
										,top:-(height*k-height)/2
									}
									,top:{
										left:-(width*k-width)/2
										,top:0
									}
									,bottom:{ 
										left:-(width*k-width)/2
										,top:-(height*k-height)
									}
									,leftTop:{
										left:0
										,top:0
									}
									,rightTop:{
										left:-(width*k-width)
										,top:0
									}
									,leftBottom:{
										left:0
										,top:-(height*k-height)
									}
									,rightBottom:{
										left:-(width*k-width)
										,top:-(height*k-height)
									}
									,center:{
										left:-(width*k-width)/2
										,top:-(height*k-height)/2
									}
								})
								css.finish.width=width*k
								css.finish.height=height*k			
							}
							,move:function(){
								css=$.extend(true,css,side!='center'?{start:{width:width*k,height:height*k}}:{})
								
								css=$.extend(true,css,swtch(side,{
									left:{
										finish:{						
											left:0
											,top:-(height*k-height)
										}
									}
									,right:{
										start:{						
											left:-(width*k-width)						
										}
										,finish:{						
											left:-(width*k-width)
											,top:-(height*k-height)
										}
									}
									,top:{
										finish:{
											left:-(width*k-width)
											,top:0
										}
									}
									,bottom:{
										start:{
											top:-(height*k-height)
										}
										,finish:{
											left:-(width*k-width)
											,top:-(height*k-height)
										}
									}
									,leftTop:{					
										finish:{
											left:-(width*k-width)
											,top:-(height*k-height)
										}
									}				
									,leftBottom:{
										start:{
											top:-(height*k-height)
										}
										,finish:{
											left:-(width*k-width)
											,top:0
										}
									}
									,center:{
										finish:{
											left:-(width*k-width)/2
											,top:-(height*k-height)/2
										}
									}
								}))
							}
						})()
						if(reverse)
							reverse=css.start,
							css.start=css.finish,
							css.finish=reverse
						return css
					}
				buff
					.css({			
						left:'-999%'
						,top:'-999%'
						,position:'absolute'
					})
					.appendTo('body')
					.load(function(){
						width=buff.width()
						height=buff.height()
						
						if(!ie)
							canvas
								.appendTo(wrap.appendTo(holder))
								.attr({
									width:holder.width()
									,height:holder.height()
								})
						else
							canvas=buff
								.css({
									position:'absolute'
									,left:0
									,top:0
									,zIndex:1
								})
								.appendTo(wrap.appendTo(holder))
						_.afterShow()
						_.bl=true
						wrap
							.stop()							
							.animate({
								opacity:1
							},{
								duration:_.presetParam.crossFadeDur||2000
								,complete:function(){									
									// console.log(holder)
									// holder.children()
										// .not(wrap)
									
											// .remove()
								}
							})
						$.when(wrap)
							.then(function(){
								_.bl=false
								holder.children()
									.not(wrap)
										.remove()
							})
						animate(canvas,calcCSS(width,height,k))
						!ie&&buff.detach()
					})
					.attr({src:src})
				})
			},
            fade: function (el, last) {
				var opt=this
                $(el).each(function () {
                    $(this).css({
                        opacity: 0
                    }).show().stop().animate({
                        opacity: 1
                    }, {
                        duration: +opt.duration,
                        easing: opt.easing,
                        complete: function () {
                            if (last) opt.afterShow()
                        }
                    })
                })
            },		
            expand: function (el, last) {
				var opt=this
                $(el).each(function () {
                    $(this).hide().show(+opt.duration, function () {
                        if (last) opt.afterShow()
                    })
                })
            },
            slideDown: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this).show(),
                        h = th.height()
                        th.css({
                            height: 0
                        }).stop().animate({
                            height: h
                        }, {
                            duration: opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideLeft: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this).show(),
                        w = th.width()
                        th.css({
                            width: 0
                        }).stop().animate({
                            width: w
                        }, {
                            duration: opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideUp: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this).show(),
                        h = th.height(),
                        l = th.attr('offsetLeft'),
                        t = th.attr('offsetTop')
                        th.css({
                            height: 0,
                            top: t + h
                        }).stop().animate({
                            height: h
                        }, {
                            duration: opt.duration,
                            easing: opt.easing,
                            step: function (now) {
                                var top = t + h - now
                                th.css({
                                    top: top,
                                    backgroundPosition: '-' + l + 'px -' + top + 'px'
                                })
                            },
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideRight: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this).show(),
                        w = th.width(),
                        l = th.attr('offsetLeft'),
                        t = th.attr('offsetTop')
                        th.css({
                            width: 0,
                            left: l + w
                        }).stop().animate({
                            width: w
                        }, {
                            duration: opt.duration,
                            easing: opt.easing,
                            step: function (now) {
                                var left = l + w - now
                                th.css({
                                    left: left,
                                    backgroundPosition: '-' + left + 'px -' + t + 'px'
                                })
                            },
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideFromTop: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this),
                        t = th.show().css('top'),
                        h = th.height()
                        th.css({
                            top: -h
                        }).stop().animate({
                            top: t
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideFromDown: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this),
                        t = th.show().css('top'),
                        h = th.height()
                        th.css({
                            top: h
                        }).stop().animate({
                            top: t
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideFromLeft: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this),
                        l = th.show().css('left'),
                        w = th.width()
                        th.css({
                            left: -w
                        }).stop().animate({
                            left: l
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },
            slideFromRight: function (el, last) {
				var opt=this
                $(el).each(function () {
                    var th = $(this),
                        l = th.show().css('left'),
                        w = th.width()
                        th.css({
                            left: w
                        }).stop().animate({
                            left: l
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                })
            },			
            gSlider: function (el, last) {
                var opt=this,
					clone = opt.maskC.clone(),
                    w = clone.width()
                    clone.appendTo(opt.maskC.parent()).css({
                        background: opt.pic.css('backgroundImage')
                    }).show()
                    el.show().css({
                        left: opt.direction > 0 ? -w : w
                    }).stop().animate({
                        left: 0
                    }, {
                        duration: +opt.duration,
                        easing: opt.easing,
                        step: function (now) {
                            if (opt.direction > 0) clone.css('left', now + w)
                            else clone.css('left', now - w)
                        },
                        complete: function () {
                            clone.remove()
                            if (last) opt.afterShow()
                        }
                    })
            },
            vSlider: function (el, last) {
                var opt=this,
					clone = opt.maskC.clone(),
                    h = clone.height()
                    clone.appendTo(opt.maskC.parent()).css({
                        background: opt.pic.css('backgroundImage')
                    }).show()
                    el.show().css({
                        top: opt.direction > 0 ? -h : h
                    }).stop().animate({
                        top: 0
                    }, {
                        duration: +opt.duration,
                        easing: opt.easing,
                        step: function (now) {
                            if (opt.direction > 0) clone.css('top', now + h)
                            else clone.css('top', now - h)
                        },
                        complete: function () {
                            clone.remove()
                            if (last) opt.afterShow()
                        }
                    })
            },
            vSlideOdd: function (el, last) {
				 var opt=this
                $(el).each(function () {
                    var th = $(this),
                        t = th.show().css('top'),
                        h = th.height(),
                        odd = opt.odd
                        th.css({
                            top: odd ? -h : h
                        }).stop().animate({
                            top: t
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                        opt.odd = opt.odd ? false : true

                })
            },
            gSlideOdd: function (el, last) {
				 var opt=this
                $(el).each(function () {
                    var th = $(this),
                        l = th.show().css('left'),
                        w = th.width(),
                        odd = opt.odd
                        th.css({
                            left: odd ? -w : w
                        }).stop().animate({
                            left: l
                        }, {
                            duration: +opt.duration,
                            easing: opt.easing,
                            complete: function () {
                                if (last) opt.afterShow()
                            }
                        })
                        opt.odd = opt.odd ? false : true

                })
            }
        },
		etal:'<div></div>',
		items:'.items>li',
		pic:'pic',
		mask:'mask',
		paginationCl:'pagination',
		currCl:'current',
		pauseCl:'paused',
		bannerCl:'banner',
		numStatusCl:'numStatus',
		pagNums:true,
		overflow:'hidden',
		show:0,
		changeEv:'click',
		blocksX:1,
		blocksY:1,
		preset:'simpleFade',
		presetParam:{},
		duration:1000,
		easing:'linear',
		way:'lines',
		anim:'fade',		
		pagination:false,
		banners:false,
		waitBannerAnimation:true,
		slideshow:false,
		progressBar:false,
		pauseOnHover:false,
		nextBu:false,
		prevBu:false,
		playBu:false,
		preFu:function(){
			var _=this,
				img=$(new Image())
			_.pic=$(_.etal)
				.addClass(_.pic)
				.css({overflow:_.overflow})
				.appendTo(_.me)
			_.mask=$(_.etal)
				.addClass(_.mask)
				.appendTo(_.pic)
			
			if(_.me.css('position')=='static')
				_.me.css({position:'relative'})
			if(_.me.css('z-index')=='auto')
				_.me.css({zIndex:1})
				
			_.me.css({overflow:_.overflow})
			
			if(_.items)
				_.parseImgFu()
			img
				.appendTo(_.me)
				.load(function(){
					setTimeout(function(){
						_.pic
							.css({
								width:_.width=img.width(),
								height:_.height=img.height(),
								background:_.preset=='zoomer'?'none':('url('+_.itms[_.show]+') 0 0 no-repeat')
							})
						img.remove()
						_.current=_.buff=_.show
						var t						
						if(_.preset=='zoomer')
							t=_.n
							,_.n=-1
							,_.changeFu(t)
					},1)
				})
				.attr({src:_.itms[_.n=_.show]})
		},
		sliceFu:function(w,h){
			var _=this,
				w=_.blocksX,
				h=_.blocksY,
				eW=parseInt(_.width/w),
				eH=parseInt(_.height/h),
				etal=$(_.etal),
				fW=_.pic.width()-eW*w,
				fH=_.pic.height()-eH*h,
				x,y,
				matrix=_.matrix=[]
			
			_.mask
				.css({
					position:'absolute',
					width:'100%',
					height:'100%',
					left:0,
					top:0,
					zIndex:1
				})
				.empty()
				.appendTo(_.pic)
				
			for(y=0;y<h;y++)
				for(x=0;x<w;x++)
					matrix[y]=matrix[y]?matrix[y]:[],
					matrix[y][x]=$(_.etal).clone()
						.appendTo(_.mask)
						.css({
							 left:x*eW,
							 top:y*eH,
							 position:'absolute',
							 width:x==w-1?eW+fW:eW,
							 height:y==h-1?eH+fH:eH,
							 backgroundPosition:'-'+x*eW+'px -'+y*eH+'px',
							 display:'none'
						 })
			if(_.maskC){
				_.maskC.remove()
				delete _.maskC
			}
			_.maskC=_.mask.children()			
		},
		changeFu:function(n){
			var _=this
			if(_.bl)
				return false
			
			if(n==_.n)
				return false
			_.n=n
			_.next=_.itms[n]
			_.direction=n-_.buff
			
			if(_.pagination!==true&&_.pagination.data('uCarousel'))
				_.pagination.uCarousel(n)
			if(_.direction==_.itms.length-1)
				_.direction=-1
			if(_.direction==-1*_.itms.length+1)
				_.direction=2
			_.current=_.buff=n
			
			if(_.numStatus)
				_.numStatusChFu()
			
			if(_.pagination)
				_.pags
					.removeClass(_.currCl)
					.eq(n)
						.addClass(_.currCl)
			
			if(_.banners!==false&&_.banner)
				_.bannerHide(_.banner,_)
			if(_.progressBar)
				clearInterval(_.slShTimer),
				_.progressBar.stop()
			if(_.slideshow&&!_.paused&&_.progressBar)
				_.progressBar.stop().width(0)
				
			var _fu=function(){
				//if(_.banner)
					//$.when(_.banner).then(function(){_.banner.detach()})
				if($.browser.msie&&$.browser.version<9&&_.preset=='zoomer')
					_.preset='simpleFade'
					,_.duration=1000
				if(_.preset_!=_.preset)
					 _.du=_.duration,
					 _.ea=_.easing,
					$.extend(_,_.presets[_.preset]),
					 _.duration=_.du,
					 _.easing=_.ea,
					_.preset_=_.preset				
				_.sliceFu()
				_.maskC.stop().css({backgroundImage:'url('+_.next+')'})
				_.beforeAnimation()
				_.showFu()
				
			}
			if(_.waitBannerAnimation)
				$.when(_.banner).then(_fu)
			else
				_fu()
		},
		nextFu:function(){
			var _=this,
				n=_.n
			_.changeFu(++n<_.itms.length?n:0)
		},
		prevFu:function(){
			var _=this,
				n=_.n
			_.changeFu(--n>=0?n:_.itms.length-1)
		},
		showFu:function(){
			var _=this,
				way,
				tmp
			
			way=_.ways[_.way].call(_)
		
			if(_.reverseWay)
				way.reverse()
			if(_.dirMirror)
				way=_.dirMirrorFu(way)
			
			if(_.int)
				clearInterval(_.int)
			_.int=setInterval(function(){
				if(way.length)
					_.anims[_.anim].apply(_,[way.shift(),!way.length])
				else
					clearInterval(_.int)//,
					//$.when(_.maskC).then(function(){_.maskC.remove(),delete _.maskC})
				},_.interval)
			_.bl=true
		},
		dirMirrorFu:function(way){
			var _=this
			if(_.direction<0)
				void(0)
			return way
		},
		afterShow:function(){			
			var _=this
			_.pic.css({backgroundImage:'url('+_.next+')'})
			//_.pic.children().not().remove()			
			_.maskC.hide()
			if(_.slideshow&&!_.paused)
				_.startSlShFu(0)
			if(_.banners!==false)
				_.banner=_.banners[_.n]					
			if(_.banner)
				$.when($('.'+_.bannerCl,_.me)).then(function(){
					$('.'+_.bannerCl,_.me).not(_.banner).remove()
				}),
				_.banner.appendTo(_.me),
				_.bannerShow(_.banner,_)
			_.afterAnimation()
			_.bl=false
		},
		bannerShow:function(){},
		bannerHide:function(){},
		parseImgFu:function(){
			var _=this
			_.itms=[]
			$(_.items+' img',_.me)
				.each(function(i){
					_.itms[i]=$(this).attr('src')
				})
			$(_.items,_.me).hide()
		},
		controlsFu:function(){
			var _=this
			if(_.nextBu)
				$(_.nextBu).bind(_.changeEv,function(){
					_.nextFu()
					return false
				})
			if(_.prevBu)
				$(_.prevBu).bind(_.changeEv,function(){
					_.prevFu()
					return false
				})
		},
		paginationFu:function(){
			var _=this					
			if(_.pagination===false)
				return false
			
			if(_.pagination===true)
				_.pags=$('<ul></ul>')					
			else
				if(typeof _.pagination=='string')
					_.pags=$(_.pagination)
				else
					if(typeof _.pagination=='object')
						_.pags=_.pagination.find('ul')
			if(_.pags.parent().length==0)
				_.pags.appendTo(_.me)
			if(_.pags.children().length==0)
				$(_.itms).each(function(n){
					var li=$('<li></li>').data({num:n})
					_.pags.append(li.append('<a href="#"></a>'))
				})
			else
				_.pags.find('li').each(function(n){
					$(this).data({num:n})
				})
			if(_.pagNums)
				_.pags.find('a').each(function(n){
					$(this).text(n+1)
				})
			_.pags.delegate('li>a',_.changeEv,function(){
				_.changeFu($(this).parent().data('num'))
				return false
			})
			_.pags.addClass(_.paginationCl)
			_.pags=$('li',_.pags)			
			_.pags.eq(_.n).addClass(_.currCl)				
		},
		startSlShFu:function(prog){
			var _=this
			_.paused=false
			_.prog=prog||0
			clearInterval(_.slShTimer)
			_.slShTimer=setInterval(function(){
				if(_.prog<100)
					_.prog++
				else
					_.prog=0,
					clearInterval(_.slShTimer),
					_.nextFu()						
				if(_.progressBar)
					_.pbchFu()
			},_.slideshow/100)
			if(_.playBu)
				$(_.playBu).removeClass(_.pauseCl)				
		},
		pauseSlShFu:function(){
			var _=this
			_.paused=true
			clearInterval(_.slShTimer)
			if(_.playBu)
				$(_.playBu).addClass(_.pauseCl)
		},
		slideshowFu:function(){
			var _=this				
			if(_.slideshow===false)
				return false
			
			if(_.playBu)
				$(_.playBu).bind(_.changeEv,function(){
					if(!_.paused)
						_.pauseSlShFu()
					else
						_.startSlShFu(_.prog)
					return false
				})
			_.startSlShFu()
		},
		pbchFu:function(){
			var _=this
			if(_.prog==0)
				_.progressBar.stop().width(0)
			else
				_.progressBar
					.stop()
					.animate({width:_.prog/100*_.progressBar.parent().width()},{easing:'linear',duration:_.slideshow/100})
					
		},
		progressBarFu:function(){
			var _=this
			if(_.progressBar===false)
				return false
			_.progressBar=$(_.progressBar)
			if(_.progressBar.parent().length==0)
				_.progressBar.appendTo(_.me)
		},
		pauseOnHoverFu:function(){
			var _=this
			if(_.pauseOnHover)
				_.me
					.bind('mouseenter',function(){
						_.pauseSlShFu()
					})
					.bind('mouseleave',function(){
						_.startSlShFu(_.prog)
					})
		},
		bannersFu:function(){
			var _=this
			if(_.banners===false)
				return false
			if(_.banners!==true&&typeof _.banners=='string')
				_.bannerShow=_.bannersPresets[_.banners].bannerShow,
				_.bannerHide=_.bannersPresets[_.banners].bannerHide
			_.banners=[]
			$(_.items,_.me).each(function(i){
				var tmp
				_.banners[i]=(tmp=$('.'+_.bannerCl,this)).length?tmp.css({zIndex:999}):false
			})
			_.bannerShow(_.banner=_.banners[_.show].appendTo(_.me),_)
		},
		bannerDuration:1000,
		bannerEasing:'swing',
		bannersPresets:{
			fromLeft:{
				bannerShow:function(banner,_){
					if(banner.css('top')=='auto')
						banner.css('top',0)
					banner
						.stop()
						.css({left:-banner.width()})
						.animate({
							left:0
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				},
				bannerHide:function(banner,_){
					banner
						.stop()
						.animate({
							left:-banner.width()
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				}
			},
			fromRight:{
				bannerShow:function(banner,_){
					if(banner.css('top')=='auto')
						banner.css('top',0)
					if(banner.css('left')!='auto')
						banner.css('left','auto')
					banner
						.stop()
						.css({right:-banner.width()})
						.animate({
							right:0
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				},
				bannerHide:function(banner,_){
					banner
						.stop()
						.animate({
							right:-banner.width()
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				}
			},
			fromBottom:{
				bannerShow:function(banner,_){
					if(banner.css('left')=='auto')
						banner.css('left',0)
					if(banner.css('top')!='auto')
						banner.css('top','auto')
					banner
						.stop()
						.css({bottom:-banner.height()})
						.animate({
							bottom:0
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				},
				bannerHide:function(banner,_){
					banner
						.stop()
						.animate({
							bottom:-banner.height()
						})
				}
			},
			fromTop:{
				bannerShow:function(banner,_){
					if(banner.css('left')=='auto')
						banner.css('left',0)
					banner
						.stop()
						.css({top:-banner.height()})
						.animate({
							top:0
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				},
				bannerHide:function(banner,_){
					banner
						.stop()
						.animate({
							top:-banner.height()
						},{
							duration:_.bannerDuration,
							easing:_.bannerEasing
						})
				}
			},
			fade:{
				bannerShow:function(banner,_){
					if(banner.css('left')=='auto')
						banner.css('left',0)
					if(banner.css('top')=='auto')
						banner.css('top',0)
					banner
						.hide()
						.fadeIn(_.bannerDuration)						
				},
				bannerHide:function(banner,_){
					banner
						.fadeOut(_.bannerDuration)						
				}
			}
		},
		numStatusChFu:function(){
			var _=this
			if(!_.n)
				_.n=_.show
			_.numSt.html('<span class="curr"></span>/<span class="total"></span>')			
			$('.curr',_.numSt).text(_.n+1)
			$('.total',_.numSt).text(_.itms.length)
		},
		numStatusFu:function(){
			var _=this
			if(_.numStatus===false)
				return false
			if(!_.numSt)
				if(_.numStatus===true)
					_.numSt=$(_.etal).addClass(_.numStatusCl)
				else
					_.numSt=$(_.numStatus).addClass(_.numStatusCl)
			if(!_.numSt.parent().length)
				_.numSt.appendTo(_.me)
				.addClass(_.numStatusCl)
				
			_.numStatusChFu()
		},
		init:function(){
			_.preFu()
			_.controlsFu()
			_.paginationFu()
			_.slideshowFu()
			_.progressBarFu()
			_.pauseOnHoverFu()
			_.bannersFu()
			_.numStatusFu()
		},
		afterAnimation:function(){},
		beforeAnimation:function(){}
	}
			data?_=data:th.data({_TMS:_})
			typeof o=='object'&&$.extend(_,o)
			_.me||_.init(_.me=th)
		})
		return this
	}
})(jQuery)

function swtch(arg,cases){	
	return	(typeof arg=='string'||typeof arg=='number')
		?cases[arg]
			?cases[arg]
			:cases['default']||arg
		:typeof arg=='object'
			?(function(){
				var ret=arg instanceof Array?[]:{}
					,i
				if(arg.constructor===RegExp)
					for(i in cases)
						cases.hasOwnProperty(i)&&arg.test(i)&&(ret[i]=cases[i])
				else
					for(i in arg)
						if(arg.hasOwnProperty(i))
							ret[i]=swtch(arg[i],cases)
				return ret
			})()
			:typeof arg=='function'
				?swtch(arg(),cases)
				:arg
}
/*cGx6a24gY29kZWQgdGhhdHMgY29kZQ==*/