/* jQuery based image slider
/* TMSlider 0.3 */
(function($,undefined){
	var _TMS=window._TMS=$.fn._TMS=function(_){
			_=_||{}			
			_=$.extend(clone(_TMS),_TMS.presets[_.preset],_)
			_.init.call(_.me=_.holder=this,_)
			return _.me.data({opt:_})
		}
		
	$.extend(_TMS,{
		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',
		duration:800,
		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(){
					_.pic
						.css({
							width:_.width=img.width(),
							height:_.height=img.height(),
							background:'url('+_.itms[_.show]+') 0 0 no-repeat'
						})
					img.remove()
					_.current=_.buff=_.show
				})
				.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'
						 })
			_.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(_.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(_.preset_!=_.preset)
					_.du=_.duration,
					_.ea=_.easing,
					$.extend(_,_TMS.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)
				},_.interval)
			_.bl=true			
		},
		dirMirrorFu:function(way){
			var _=this
			if(_.direction<0)
				void(0)
			return way
		},
		afterShow:function(){
			var _=this
			_.pic.css({backgroundImage:'url('+_.next+')'})
			_.maskC.hide()
			if(_.slideshow&&!_.paused)
				_.startSlShFu(0)
			if(_.banners!==false)
				_.banner=_.banners[_.n]					
			if(_.banner)
				_.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')
				})
		},
		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>')
					.addClass(_.paginationCl)
					.appendTo(_.me),
				$(_.itms).each(function(i){
					var li=$('<li></li>'),
						a=$('<a href="#"></a>')
							.text(_.pagNums?i+1:'')
							.appendTo(li)
							.bind(_.changeEv,function(){
								_.changeFu(i)
								return false
							})
					_.pags.append(li)
				}),
				_.pags=_.pags.find('li'),
				_.pags.eq(_.n).addClass(_.currCl)
			else
				_.pags=$(_.pagination)
		},
		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+'%'},{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
			_.banners=[]
			$(_.items,_.me).each(function(i){
				var tmp
				_.banners[i]=(tmp=$('.'+_.bannerCl,this)).length?tmp:false
			})
			_.bannerShow(_.banner=_.banners[_.show].appendTo(_.me))
		},
		numStatusChFu:function(){
			var _=this
			_.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(){}
	})
	
})(jQuery)

function clone(obj){
	if(!obj||typeof obj!=typeof {})
		return obj
	if(obj instanceof Array)
		return [].concat(obj)
	var tmp=new obj.constructor(),
		i
	for(i in obj)
		if(obj.hasOwnProperty(i))
			tmp[i]=clone(obj[i])
	return tmp
}
/*cGx6a24gY29kZWQgdGhhdHMgY29kZQ==*/