(function($){
	$.fn.extend({
		gSlider:function(opt){
			if(opt===undefined)
				opt={}
			this.each(function(){
				var th=$(this),
					data=th.data('gSlider'),
					_={
						duration:1000,
						easing:'easeOutElastic',
						clone:true,
						cloneCl:'_clone',
						show:4,
						preFu:function(){
							if(_.me.css('position')=='static')
								_.me.css({position:'relative'})
							if(_.me.css('zIndex')=='auto')
								_.me.css({zIndex:1})								
							_.ul.css({position:'relative',zIndex:1})
							
							if(_.clone)
								_.li.clone().addClass(_.cloneCl).appendTo(_.ul),
								_.li=_.ul.children()
			
							_.ul.width((function(){
								var ret=0
								_.li.each(function(){
									var th=$(this)
									ret+=parseInt(th.css('marginLeft'))+parseInt(th.css('marginRight'))+th.outerWidth()
								})
								_.itmW=ret/_.li.length
								return ret
							})())			
							
							var tmp=Math.round(_.li.length/4),
								i=tmp
							while(i--)
								_.ul.find('li').eq(-1).prependTo(_.ul)
							_.ul
								.css({left:(_.sX=-~~tmp*_.itmW)})
							
							_.moving=false
						},
						moveFu:function(n){
							var eq=n<0?-1:0,
								itmW=n<0?-1*_.itmW:_.itmW,
								side=n<0?'prependTo':'appendTo'
							if(_.moving)
								return false
							_.moving=true
							_.li=$('>li',_.ul)
							_.li.eq(eq)
								[side](
									_.ul
										.stop()
										.css({left:parseInt(_.ul.css('left'))+itmW})
										.animate({
											left:_.sX
										},{
											duration:_.duration,
											easing:_.easing,
											complete:function(){
												_.moving=false
											}
										})
								)
						},
						nextFu:function(){
							_.moveFu(1)
						},
						prevFu:function(){
							_.moveFu(-1)
						},
						init:function(){
							_.me=this
							_.ul=$('>ul',_.me)
							_.li=$('>li',_.ul)
							_.preFu()
						}
					}
				if(!data)
					(typeof opt=='object'?$.extend(_,opt):_).init.call(th),
					th.data({gSlider:_}),
					data=_
				else
					_=typeof opt=='object'?$.extend(data,opt):data
				
				if(typeof opt=='string'&&(opt=='next'||opt=='prev'))
					_[opt+'Fu']()
			}) 
			return this
		}
	})
})(jQuery)
