$.extend(_fw.meth,{
	accord:{
		duration:800,
		closeBu:false,
		activeCl:'active',
		block:true,
		navLinks:'a[rel=nav]',
		afterShow:function(){},
		navFu:function(){
			var _=this
			$(_.navLinks)
				.live('click',function(){
					var id,
						tmp=$(id=$(this).attr('href'))
					if(_.currL==id)
						return false
					_.currL=id
					if(tmp.length)
						_.currN=-1,
						_.next=tmp,
						_.showFu(),
						_.dt.removeClass(_.activeCl)
					return false
				})
		},
		preFu:function(){
			var _=this
			_.dt.each(function(i){
				$(this).data({num:i})
			})
			_.dd.each(function(i){
				var th=$(this)
				th.data({num:i})
				th.data({height:th.height()})
			})
			_.dd.hide()
		},
		pagFu:function(n){
			var _=this
			_.dt.each(function(){
				var th=$(this)
				if(th.data('num')==n)
					th.addClass(_.activeCl)
				else
					th.removeClass(_.activeCl)
			})
		},
		changeFu:function(n){
			var _=this
			
			if(_.currN!=n&&_.block)
				_.currN=n
			else
				return false
			
			_.currL=false
			_.pagFu(n)
			
			if(n<_.dd.length)
				_.next=(function(){
					var ret
					_.dd.each(function(){
						if($(this).data('num')==_.currN)
							ret=$(this)
					})
					return ret
				})()
				_.block=false,
				_.showFu()
		},
		closeFu:function(){
			var _=this
			_.dd
				.stop()
				.animate({
					height:0
				},{
					duration:_.duration,
					complete:function(){
						_.dd.hide()
						_.currN=-1
						_.afterShow()
					}
				})
			_.currL=false
			_.dt.removeClass(_.activeCl)
		},
		showFu:function(){
			var _=this,
				ddV=_.dd.not(':hidden'),
				hN=_.next.data('height')||0
			_.dd.stop()
			_.next
				.show()
				.css({height:0})
				.animate({
					height:hN
				},{
					step:function(now){
						ddV.each(function(){
							var th=$(this),
								hV=th.data('height')||0
							th.height(hV-now/hN*hV)
						})
					},
					complete:function(){
						_.block=true
						_.afterShow()
						ddV.each(function(){
							var th=$(this)
							th
								.hide()
								.height(th.data('height'))
							
							})
					}
				})
		},
		init:function(_){
			var holder=_.holder=this,
				dd=_.dd=$('>dd',holder),
				dt=_.dt=$('>dt',holder)
			_.preFu()
			
			_.dt.find('a')
				.click(function(){
					_.changeFu($(this).parent().data('num'))
					return false
				})
			if(_.closeBu)
				$(_.closeBu)
					.live('click',function(){
						_.closeFu()
					})
			if(_.navLinks)
				_.navFu()
		}
	},
	thumbvr:{
		items:'ul>li',
		duration:1000,
		easing:'linear',
		preFu:function(){
			var _=this,
				w=h=mm=0
			_.itms				
				.each(function(){
				 	$(this).show()
						var tmp,
							th=$(this),
							img=$('img',this),
							wdth=th.outerWidth()+parseInt(th.css('marginRight'))+parseInt(th.css('marginLeft'))
						w+=wdth
						h=h<(tmp=th.height())?tmp:h
						mm=mm<wdth?wdth:mm
				})
			_.mm=mm
			_.ul
				.css({
					width:_.ulW=w,
					position:'relative'
				})
			_.holder.css({
				overflow:'hidden'				
			})
			if(_.holder.css('position')=='static')
				_.holder.css({position:'relative'})
			_.resizeFu()
		},
		resizeFu:function(){
			var _=this
			_.holder.width(_.hW=$(document.body).width())
		},
		moveFu:function(x){
			var _=this,
				mouse=x-_.holder.attr('offsetLeft'),
				dX=-((_.ulW-_.hW)-_.hW)*mouse/_.hW
			mouse=mouse<_.mm?0:mouse
			mouse=mouse>_.hW-_.mm?_.hW:mouse
			if(mouse==dX)
					_.ul.stop()
				else
					if(mouse>dX)
						_.ul
							.stop()
							.animate({
								left:dX-mouse
							},{
								duration:_.duration,
								easing:_.easing
							})
					else
						_.ul
							.stop()
							.animate({
								left:mouse-dX
							},{
								duration:_.duration,
								easing:_.easing
							})
		},
		init:function(_){
			var holder=_.holder=this,
				ul=_.ul=$('>ul',holder),
				items=_.itms=$(_.items,holder)
			_.preFu()
			
			holder
				.bind('mousemove',function(e){
					if(_.hW<_.ulW)
						_.moveFu(e.pageX)
				})
				
			$(window).resize(function(){
				_.resizeFu()
			})
		}
	},
	bgSlider:{
			slideshow:false,
			duration:1500,
			easing:'',
			preload:false,
			pagination:false,
			pagActiveCl:'current',
			pagEv:'click',
			pagArea:'a',
			current:0,
			method:'fit',
			altCSS:{},
			preload:false,
			spinner:false,
			minSpinnerWait:150,
			afterPreload:function(){},
			preloadFu:function(){
				var _=this,
					n=_.images.length
				$(_.images).each(function(){
					var i=new Image()
					i.src=this
					if(i.complete)
						if(!--n)
							_.afterPreload()
						else
							void(0)
					else
					$(i).load(function(){
						if(!--n)
							_.afterPreload()
					})					
				})
			},
			pagsFu:function(){
				var opt=this,
					pags=opt.pags=$(opt.pagination)
				if(!opt.images)
					opt.images=[],
					pags.each(function(i){
						opt.images.push($('a',this).attr('href'))
					})
				pags.find(opt.pagArea).each(function(i){
					$(this).data({num:i})
				})
				pags.parent()
					.delegate(opt.pagination+':not(.'+opt.pagActiveCl+')'+(opt.pagArea?' '+opt.pagArea:''),opt.pagEv,function(){
						var th=$(this)
						opt.changeFu(th.data('num'))
						opt.pags.not(th.praParent('li').addClass(opt.pagActiveCl)).removeClass(opt.pagActiveCl)						
						return false
					})
			},
			nameMaskFu:function(){
				var _=this,
					tmp,i,ret=[]
				if(_.nameMask.indexOf(','))
					tmp=_.nameMask.split(',')
				if(tmp[1].indexOf('-'))
					tmp[2]=tmp[1].split('-'),
					tmp[1]=tmp[2].shift()
				for(i=tmp[1];i<=tmp[2];i++)
					ret.push(tmp[0].replace('*',i))
				_.images=ret
			},
			preFu:function(){
				var opt=this
				opt.img
					.css({
						position:'absolute',
						left:0,
						top:0
						})
					.css(opt.altCSS)
					.attr({src:opt.images[opt.current]})
					.load(function(){
						opt.img.data({width:opt.img.width(),height:opt.img.height()})
						opt.resizeFu()
					})
				opt.holder
					.css({
						position:'fixed',
						left:0,
						right:0,
						top:0,
						bottom:0,
						zIndex:-1
						})
					.append(opt.img)
				if(opt.spinner)
					opt.spinner.hide()
			},
			resizeFu:function(){
				var opt=this,
					img=opt.img,
					w=opt.w,
					h=opt.h,
					bw=document.body.offsetWidth,
					bh=document.body.offsetHeight,
					k=w/h
				if(opt.method=='fit')
					if(bw/bh<k)
						img.width('auto').height(bh)
					else
						img.width(bw).height('auto')
				opt.w=img.width()
				opt.h=img.height()
			},
			changeFu:function(n){
				var opt=this
				opt.showFu(opt.images[n])
			},
			showFu:function(src){
				var opt=this,
					clone=opt.clone=opt.img.clone()
				
				clone
					.css({
						 opacity:0,
						 left:0,
						 top:0
						 })
					.appendTo(opt.holder)
					.load(function(){
						opt.holder.find('>*').stop()
						var w=clone.width(),
								h=clone.height()
							clone
								.css({
									width:opt.w,
									height:opt.h
								})
						setTimeout(function(){
							opt.spinner.hide()
							clone
								.stop()
								.animate({
										opacity:1
										},{
										duration:opt.duration,
										easing:opt.easing,
										complete:function(){
											var tmp=opt.holder.find('img')
											opt.img=$(this)
											tmp.not(opt.img).remove()
											opt.resizeFu()
											opt.w=w
											opt.h=h
										}
										})
						},opt.minSpinnerWait)
					})
					.attr({src:src})
					opt.spinner.show()
			},
			init:function(opt){
				var holder=opt.holder=this,
					img=opt.img=$('<img>')
				if(opt.pagination)
					opt.pagsFu()
				else
					if(opt.nameMask)
						opt.nameMaskFu()
				if(opt.spinner)
					opt.spinner=$(opt.spinner)
				else
					opt.spinner=$()
				if(opt.images&&opt.images.length)
					opt.preFu()
				if(opt.preload)
					opt.preloadFu()
				if(opt.method=='fit')
					$(window).resize(function(){
						opt.resizeFu()
					})
				holder.data({opt:opt})
			}
		},
		shadowBox:{
			target:false,
			showEv:'click',
			closeBu:false,
			fader:true,
			duration:400,
			faderCSS:{
				position:'fixed',
				left:0,
				top:0,
				bottom:0,
				right:0,
				zIndex:9999,
				opacity:.7,
				background:'#000'
			},
			boxCSS:{
				position:'fixed',
				left:'50%',
				top:'50%',
				zIndex:9999
			},
			callback:function(){},
			preFu:function(){
				var _=this
				if(_.fader)
					_.fader=$('<div>')
						.css(_.faderCSS)
						.bind(_.showEv,function(){
							_.hideFu()
							return false
						})
				_.box=$('<div>')
					.css(_.boxCSS)
					.append(_.target)
			},
			showFu:function(){
				var _=this
				
				_.fader
					.appendTo('body')
					.css({opacity:0})
					.stop()
					.animate({
						opacity:_.faderCSS.opacity
						},{
						duration:_.duration,
						complete:function(){
							_.box
								.appendTo('body')
								.css({
									marginLeft:-_.box.width()/2,
									marginTop:-_.box.height()/2
								})
								.hide()
								.slideDown(_.duration,function(){
									_.callback()
								})
						}						
						})
			},
			hideFu:function(){
				var _=this
				_.box.slideUp(function(){$(this).detach()})
				_.fader
					.stop()
					.animate({
						opacity:0
						},{
						duration:_.duration,
						complete:function(){
							_.fader.detach()
						}
					})
			},
			init:function(_){
				var holder=_.holder=$(this),
					target=_.target=_.target===false?$(holder.attr('href')):$(_.target)
				if(!target.length)
					return false
				else
					_.preFu()
				holder
					.bind(_.showEv,function(){
						_.showFu()
						return false
					})
				if(_.closeBu)
					$(_.closeBu).live(_.showEv,function(){
						_.hideFu()
						return false
					})
			}
		},
	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})
		}
	}
})
