$.extend(_fw.meth,{
	uSlider:{
		items:false,
		pagination:false,
		pagArea:'>a',
		pagEv:'click',
		pagActiveCl:'active',
		navLinks:'a[rel=nav]',
		changeEv:'_change',
		pagCallback:false,
		duration:600,
		minSleep:300,
		easing:'',
		wrapper:'<div class="wrapper"></div>',
		show:false,
		nextBu:false,
		prevBu:false,
		beforeChange:function(){},
		afterChange:function(){},
		animationCallback:function(){},
		navFu:function(){
			var _=this
			$(_.navLinks).live('click',function(){
				if(_.method=='ajax')
					_.changeFu($(this))
				return false 
			})
		},
		preFu:function(){
			var _=this,
				itms=_.itms=[]
			if(_.items)
				$(_.items).each(function(){
					itms.push($(this))
				}),
				_.method='html'
			else
				_.method='ajax'
		},
		pagPreFu:function(){
			var _=this,
				tagName,
				pags=_.pags=$(_.pagination)
			pags
				.parent()
					.each(function(){
						$(this).find(tagName='>'+pags.attr('tagName'))
							.each(function(i){
								var th=
								$(this)
									.data({num:i})
									.find(_.pagArea)
										.bind(_.pagEv,function(){
											_.changeFu(i)
											return false
										})
								if(_.method=='ajax')
									_.itms[i]=th.attr('href')
							})
					})
		},
		pagFu:function(num){
			var _=this
			_.pags.each(function(){
				var th=$(this)
				if(th.data('num')==num)
					th.addClass(_.pagActiveCl)
				else
					th.removeClass(_.pagActiveCl)
			})
			if(_.pagCallback)
				_.pagCallback()
		},
		showFu:function(){
			var _=this
			if(_.method=='html')
				$(_.itms).each(function(){
					$(this).hide()
				}),
				_.next.show().css({opacity:0})

			_.next
				.stop()
				.animate({
					opacity:1
				},{
					duration:_.duration,
					easing:_.easing,
					complete:function(){
						if(_.animationCallback)
							_.animationCallback()
					}
				})
		},
		changeFu:function(num){
			var _=this,
				tmp
			if(num==_.currN)
				return false
			if(num.attr)
				_.next=num.attr('href'),
				_.pags.removeClass(_.pagActiveCl)
			else				
				_.next=_.itms[num],
				_.currN=num,
				_.pagFu(num)
			if(_.method=='html')
				_.showFu()
			_.beforeChange
			if(_.method=='ajax')
				_.spinner.appendTo(_.holder),
				$.ajax({
					url:_.next,
					cache:false,
					success:function(res){
								setTimeout(function(){
									res=$(res)
									_.next=res
										.appendTo(_.holder.empty())
									_.showFu()									
									_.afterChange()
								},_.minSleep)
							}
					})
			_.holder.trigger(_.changeEv)
		},
		nextFu:function(){
			var _=this,
				n=_.currN
			_.changeFu(++n<_.itms.length?n:0)
		},
		prevFu:function(){
			var _=this,
				n=_.currN
			_.changeFu(--n>=0?n:_.itms.length-1)
		},
		init:function(_){
			var holder=_.holder=this
			if(_.spinner)
				_.spinner=$(_.spinner,holder)
			else
				_.spinner=$()
				
			_.preFu()
			
			if(_.pagination)
				_.pagPreFu()
			
			if(_.nextBu)
				$(_.nextBu).click(function(){
					_.nextFu()
					return false
				})
			if(_.prevBu)
				$(_.prevBu).click(function(){
					_.prevFu()
					return false
				})
			if(_.navLinks)
				_.navFu()
			if(_.show!==false)
				_.changeFu(_.show)
		}
	},
	cScroll:{
			sWidth:false,
			sHeight:false,
			step:'52px',
			duration:300,
			val:0,
			sleep:300,
			scrollTrackCl:'_track',
			scrollShuttleCl:'_shuttle',
			refreshEv:false,
			trackCSS:{
				width:'20px',
				position:'absolute',
				right:0,
				top:0,
				zIndex:2
			},
				shuttleCSS:{
				width:'100%',
				height:'20px',
				position:'absolute'
			},
				wrapCSS:{
				overflow:'hidden',
				position:'relative',
				zIndex:1
			},
			preFu:function(){
				var _=this
				if(_.sHeight)
					_.shuttleCSS.height=_.sHeight
				if(_.sWidth)
					_.trackCSS.width=_.sWidth
				if(_.holder.css('position')=='static')
						_.holder.css({position:'relative'})
				_.step=parseInt(_.step)
				_.wrap=$('<div>')
					.css(_.wrapCSS)
					.height(_.holder.height())
					.html(_.holder.html())
					.appendTo(_.holder.empty())
				_.track=$('<div>')
					.css(_.trackCSS)
					.css({
						top:_.shuttleCSS.height,
						height:_.wrap.height()-parseInt(_.shuttleCSS.height),
						background:'none'
					})
				_.trackWrap=$('<div>')
					.addClass(_.scrollTrackCl)
					.css(_.trackCSS)
					.height('100%')
					.append(_.track)
					.appendTo(_.holder)
				_.delta=_.wrap.attr('scrollHeight')-_.wrap.height()
				if(_.track.slider)
					_.track.slider({
						min:1,max:100,value:100,
						orientation: "vertical",
						slide:function(e,ui){
							_.delta=_.wrap.attr('scrollHeight')-_.wrap.height()
							_.wrap.attr({scrollTop:(100-ui.value)*_.delta/100})
						},
						change:function(e,ui){
							_.val=(101-ui.value)*_.delta/100
						}
					})
				_.shuttle=$('a',_.track).css(_.shuttleCSS).addClass(_.scrollShuttleCl)
				_.holder.one('mousemove',function(){
					_.strechFu()
				})
			},
			scrollFu:function(n){
				var _=this
				if(_.b)
					_.b=false,
					_.val+=n,
					_.val=_.val<0?0:_.val,
					_.val=_.val<=_.delta?_.val:_.delta,
					_.wrap
						.stop()
						.animate({
							scrollTop:_.val
							},{
							duration:_.duration,
							step:function(now){
								_.track.slider({value:100-now/_.delta*100})
							},
							complete:function(){
								_.val=$(this).attr('scrollTop')
							}
						}),
					setTimeout(function(){_.b=true},_.sleep)
			},
			downFu:function(){
				var _=this
				_.scrollFu(_.step)
			},
			upFu:function(){
				var _=this
				_.scrollFu(-_.step)
			},
			strechFu:function(){
				var _=this
				_.delta=_.wrap.attr('scrollHeight')-_.wrap.height()
				_.wrap.attr({scrollTop:(100-_.track.slider('value'))*_.delta/100})
				_.val=(101-_.track.slider('value'))*_.delta/100
			},
			refreshFu:function(){
				var _=this
				_.holder.bind(_.refreshEv,function(){
					var value=(100-_.track.slider('value'))*_.delta/100
					_.wrap.attr('scrollTop',value)
				})
			},
			wheelFu:function(){
				var _=this
				_.b=true
				_.holder.bind('mousewheel',function(e,d){
					if(d<0)
						_.downFu()							
					else
						_.upFu()
					return false
				})
			},
			init:function(_){
				var holder=_.holder=this
				_.preFu()
				if($.fn.mousewheel)
					_.wheelFu()
				if(_.refreshEv)
					_.refreshFu()
			}
		},
		forms:{
			target:'input[type=text],input[type=password],input[type=tel],input[type=email],textarea',
			buttons:'a[rel=reset],a[rel=submit]',
			event:'click',
			backBu:false,
			afterFu:function(){},
			submitFu:function(){
				var opt=this,
					method=opt.form.attr('method')
				method=!!method?method:'get'
				$.ajax({
					url:opt.form.attr('action'),
					method:method,
					cache:false,
					data:opt.form.serializeArray(),
					success:function(r){
						opt.response=r
						opt.showFu()
					}
				})
			},
			showFu:function(){
				var opt=this
				opt.form.parent().height(opt.form.parent().height())
				opt.form.fadeOut(function(){
					opt.response=$('<div>'+opt.response+'</div>')
						.width(opt.form.width())
						.css({minHeight:opt.form.outerHeight(),width:opt.form.outerWidth()})
					if(opt.backBu)
						opt.backBu=$(opt.backBu),
						opt.response.append(opt.backBu)
					opt.form.before(opt.response)
					opt.form.parent().height('auto')
					opt.backBu.click(function(){
						opt.hideResFu()
						return false
					})
					opt.afterFu()
				})
			},
			hideResFu:function(){
				var opt=this
				opt.form.parent().height(opt.form.parent().height())
				opt.response.remove()
				opt.form.fadeIn(function(){
					opt.form.parent().height('auto')
				})
			},
			init:function(opt){
				var form=opt.form=this,
					inputs=opt.inputs=$(opt.target,form)
				inputs.each(function(){
					var th=$(this)
					th.data({defValue:th.attr('value')})
					th
						.bind('focus',function(){
							if(th.attr('value')==th.data('defValue'))
								th.attr({value:''})
						})
						.bind('blur',function(){
							if(th.attr('value')=='')
								th.attr({value:th.data('defValue')})
						})					
				})
				$(opt.buttons,form).each(function(){
					var th=$(this)
					th.bind(opt.event,function(){
						if(this.rel=='submit')
							opt.submitFu()
						else
						form[0][this.rel]()
						return false
					})
				})
				form.data({opt:opt})
			}
		}
})
