(function($){
$.fn.extend({
navs:function(opt){
	if(opt==undefined)
		opt={}
	var ret=this
	this.each(function(i){
		var th=$(this),
			data=th.data('_navs'),
			root={
			  	"undefined":function(){
					var _={
						enable:true,
						hover:false,
						event:'click',
						activeCl:'active',
						navLink:'a[rel=nav]',
						backLink:'a[rel=back]',
						closeLink:'a[rel=close]',
						preFu:function(){
							_.li.each(function(i){
								var th=$(this)
								th.data({num:i})
								if(th.hasClass(_.activeCl))
									_.n=i,
									_.prev=i,
									_.curr=th,
									_.hoverIn(th)
							})							
						},
						refreshFu:function(){
							var _=this
							_.li.each(function(i){
								var th=$(this)
								if(th.hasClass(_.activeCl))
									_.curr=th,
									_.n=th.data('num')
							})
							if(_.curr)
								_.hoverIn(_.curr),
								_.li.not(_.curr).each(function(){
									_.hoverOut($(this))
								})
							
						},
						changeFu:function(n){
							if(n==_.n)
								return false
							if(!_.enable)
								return false
							_.n=n
							_.li.removeClass(_.activeCl)
							_.li.eq(n).addClass(_.activeCl)
							_.refreshFu()
							_.onChangeFu(n)
						},
						onChangeMas:[],
						onChangeFu:function(param){
							$(_.onChangeMas).each(function(){
								if(typeof this=='function')
									this.call(_.me,param)
							})
						},						
						nextFu:function(){
							var n=_.n
							_.changeFu(++n<_.li.length?n:0)
						},
						prevFu:function(){
							var n=_.n
							_.changeFu(--n>=0?n:_.li.length-1)
						},
						controlsFu:function(){
							_.li.each(function(i){
								var li=$(this)
								$('>a',li)
									.bind(_.event,function(){
										_.changeFu(i)
										return false
									})									
							})
						},
						navFu:function(){
							$(_.navLink)
								.live(_.event,function(){
									_.prev=_.n
									_.n=-1
									_.curr=false
									_.li.removeClass(_.currCl)
									_.li.each(function(){_.hoverOut($(this))})
									_.onChangeFu($(this).attr('href'))
									return false
								})
							$(_.backLink)
								.live(_.event,function(){
									_.changeFu(_.prev)
									return false
								})
							$(_.closeLink)
								.live(_.event,function(){
									_.prev=_.n
									_.n=-1
									_.curr=false
									_.li.removeClass(_.currCl)
									_.li.each(function(){_.hoverOut($(this))})
									_.onChangeFu('close')
								})
						},
						hoverFu:function(){
							_.li.each(function(i){
								$('>a',this)
									.bind('mouseenter',function(){
										if(_.hover&&!_.li.eq(i).hasClass(_.activeCl))
											_.hoverIn(_.li.eq(i))										
									})
									.bind('mouseleave',function(){
										if(_.hover&&!_.li.eq(i).hasClass(_.activeCl))
											_.hoverOut(_.li.eq(i))
									})
							})
						},
						init:function(){
							_.me=this
							_.ul=$('>ul',_.me)
							_.li=$('>li',_.ul)
							_.preFu()
							_.controlsFu()
							_.navFu()
							_.hoverFu()
							_.hoverOut(_.li)
							_.refreshFu()
						},
						hoverIn:function(){},
						hoverOut:function(){}
					}
					if(opt)
						$.extend(_,opt)
					if(!data)
						_.init.call(th),
						th.data({_navs:data=_})
					else
						_=data
					ret=_
				},
				"object":function(){
					$.extend(data,opt)					
				},
				"function":function(){
					data.onChangeMas.push(opt)					
				},
		  		"number":function(){
					data.changeFu(opt)					
				},
				"string":function(){
					if(opt=='next'||opt=='prev')
						({
						next:function(){
							data.nextFu()
						},
						prev:function(){
							data.prevFu()
						}
						})[opt]()
				},
				"boolean":function(){
					data.enable=opt
				}
			},
			fu=root[typeof opt]
		
		if(!data&&opt!=undefined)
			root['undefined'](opt)
		if(data.enable||opt===true)
			fu()
	})
	return ret
}
})
})(jQuery)
