/*BOOM_ADD_FILE



BOOM_ADD_FILE*/

X.add('util',function(C){
	
	var $=jQuery;
		
//两个参数时：得到一个元素的id，如果没有给elem加上指定id 并返回它。	
//一个参数时：传入一个id，返回对应元素
	C.mark=function(elem,id){
		if(arguments.length==1&&typeof elem == 'string'&&elem){
			return $('#'+elem);
		}
		
		var elem=$(elem),
			oldId=elem.attr('id');
		
		if(oldId){
			return oldId;
		}
		elem.attr('id',id);
		return id;
	};
	
	C.queryParam={
		get:function(str){
			
			var queryString='',
				obj={},
				ar=[],
				i;
			
			queryString=str||window.location.search.substring(1);
			queryString+='&';
			ar=queryString.split('&');
			for(i=0;i<ar.length;i++){
				if(ar[i]){
					obj[ar[i].substring(0,ar[i].indexOf('='))]=ar[i].substring(ar[i].indexOf('=')+1);
				}
			}
			return obj;	
					
		},
		
		set:function(obj){
			
			var queryString='?';
			for(var p in obj){
				if(obj.hasOwnProperty(p)){
					queryString+=p+'='+obj[p]+'&';
				}
			}
			return queryString.substring(0,queryString.length-1);
						
		}
	};
	
	//消息通知 
	//msg 消息内容
	//type 消息类型 error(红色显示) warning(黄色显示) 默认warning
	//time 自动隐藏时间
	//indicate(msg,time) 或者  indicate(msg,type,time)
	function indicate(msg,type,time){
		if(typeof type === 'number'){
			time=type;
			type='waring';
		}
		var $=jQuery,
			indicator=$('#indicator');
			
		
		if(indicator.length==0){
			indicator=$('<div>',{id:'indicator'}).html('<div class="CB"><div class="CON" id="indicator_content">  </div><div class="BB"></div></div>');
			indicator.appendTo($('body'));
		}
		
		if(type=="error"){
			$('div.CB',indicator).addClass('error');
			window.setTimeout(hideIndicator,time||8000);
		}
		else{
			$('div.CB',indicator).removeClass('error');
		}
		
		if(msg){
			if($.browser.msie&&parseFloat($.browser.version)<7){
				indicator.css('top',$(document).scrollTop());
			}
			$('#indicator_content').html(msg);
			indicator.css('display','block');
			if(time){
				window.setTimeout(hideIndicator,time);
			}
		}
		else{
			indicator.css('display','none');
		}
		
		indicator=null;
	};
	
	function hideIndicator(){
		jQuery('#indicator').css('display','none')
	};
	
	C.indicate=indicate;
	
	
},{requires:['jquery.js']});
X.use('util');


X.add('json',function(C){
	var JSON=window.JSON,
		useNative=!!(Object.prototype.toString.call(JSON)==='[object JSON]'&&JSON),
		$=jQuery,
		specialChars= {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},
		_replaceChars=function(chr){
			return specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
		},
		
		_string=function(str){
			return '"' + str.replace(/[\x00-\x1f\\"]/g, _replaceChars) + '"';
		},
		
		_stringify=function(h,key){
			var v=h[key],
				a=[],
				i=0;

			if(typeof v === 'string'){
				return _string(v);
			}
			if(typeof v==='boolean'||typeof v === 'number' ){
				return String(v);
			}
			if($.isArray(v)){
				for(;i<v.length;i++){
					a[i]=_stringify(v,i);
				}
				return '['+a.join()+']';
			}
			if($.isPlainObject(v)){
				for(var p in v){
					if(v.hasOwnProperty(p)){
						a[i++]=_string(p)+':'+_stringify(v,p);
					}
				}
				return '{'+a.join(',')+'}';
			}
			return 'null';
		};
	
	C.JSON={
		//只支持 object array boolean number string
		stringify:function(json){
			if(useNative){
				return JSON.stringify(json);
			}
			return _stringify({'':json},'');	
		},
		parse:function(str){
			return $.parseJSON(str);
		}
	};
});



X.add('cookie',function(C){
	var $=jQuery,
		doc=document;
	
	C.Cookie={
		_createCookieString:function(name,value,encode,options){
			
			var text=name+'='+(encode?encodeURIComponent(value):value),
				options=options||{},
				expires=options.expires,
				domain=options.domain,
				path=options.path;
				
			if($.isPlainObject(options)){
				if(expires instanceof Date){
					text+=';expires='+expires.toUTCString();
				}
				if(domain){
					text+=';domain='+domain;
				}
				if(path){
					text+=';path='+path;
				}
				if(options.secure===true){
					text+=';secure';
				}
			}
			return text;
		},
		_parseCookieString:function(text,decode){
			if(!text){
				return null;
			}
			var cookies={},
				cookiePark=text.split(/;\s/g),
				cookieNameValue=[];
			
			for(var i=0;i<cookiePark.length;i++){
				cookieNameValue=cookiePark[i].split('=');
				cookies[cookieNameValue[0]]=decode?decodeURIComponent(cookieNameValue[1]):cookieNameValue[1];
			}
			return cookies;
		},
		get:function(name){
			var cookies=this._parseCookieString(document.cookie,true);
			if(cookies&&cookies[name]!==undefined){
				return cookies[name];
			}
			return null;
		},
		set:function(name,value,options){
			var text=this._createCookieString(name,value,true,options);
			document.cookie=text;
			return text;
		},
		remove:function(name){
			var text=this._createCookieString(name,'',false,{expires:new Date(0)});
			document.cookie=text;
			
		}	
	};
});


//分页
X.add('page',function(C){
	
	var CONF={
		//中间显示多少页
		middle:5,
		
		//翻页链接， @PAGE@ 会替换成页数
		url:'#@PAGE@'
	};
	
	function BasePage(page,pageTotal,conf){
		this.opt=C.merge(CONF,conf);
		this.page=page;
		this.pageTotal=pageTotal;		
	}
	
	BasePage.prototype={
		
		_setUrl:function(num){
			return this.opt.url.replace(/\@PAGE\@/,num);
		},
		
		_getFirst:function(){
			return '<a href="'+this._setUrl(1)+'" class="first '+(this._checkFirst()?'disabled first-disabled':'')+'">首页</a>';
		},
		
		_getLast:function(){
			return '<a href="'+this._setUrl(this.pageTotal)+'" class="last '+(this._checkLast()?'disabled last-disabled':'')+'">尾页</a>';
		},
		
		_getMiddle:function(){
			/*
			var cur=this.page,
				total=this.pageTotal,
				middle=this.opt.middle,
				next=middle/2,
				prev=middle/2-1,
				start,
				end,
				i,
				strAr=[];
			
			//一屏就能显示所有页
			if(total<=middle){
				start=1;
				end=total;
			}
			else if(cur-prev<1){
				start=1;
				end=middle;
			}
			else if(cur+next>total){
				end=total;
				start=total-middle;
			}
			else{
				start=cur-prev;
				end=cur+next;
			}
			
			for(i=start;i<=end;i++){
				strAr.push('<a href="'+this._setUrl(i)+'" class="'+(i==cur?'on':'')+'">'+i+'</a>');
			}
			
			if(total>end){
				strAr.push('...');
			}
			
			return strAr.join('');
			*/
			
			var cur=this.page,
				total=this.pageTotal,
				middle=this.opt.middle,
				nextPart=Math.ceil(middle/2),
				prevPart=nextPart-1,
				start,
				end,
				i,
				strAr=[];
			
			//一屏就能显示所有页
			if(total<=middle){
				start=1;
				end=total;
			}
			//当前页到左半部分可以衍生到第一页之前
			else if(cur-prevPart<1){
				start=1;
				end=middle;
			}
			//当前页到右半部分可以衍生到最后一页之后
			else if(cur+nextPart>total){
				end=total;
				start=total-middle;
			}
			else{
				start=cur-prevPart;
				end=cur+nextPart;
			}
			
			for(i=start;i<=end;i++){
				strAr.push('<a href="'+this._setUrl(i)+'" class="'+(i==cur?'on':'')+'">'+i+'</a>');
			}
			
			if(start>2){
				strAr.unshift('<a href="'+this._setUrl(1)+'">1</a>...');
			}
		
			if(total-end>1){
				strAr.push('...<a href="'+this._setUrl(total)+'">'+total+'</a>');
			}
			
			return strAr.join('');

			
		},
		
		_getPrevious:function(){
			return '<a href="'+this._setUrl(this.page-1)+'" class="previous '+(this._checkFirst()?'disabled previous-disabled':'')+'">«&nbsp;Previous</a>';
		},
		
		_getNext:function(){
			return '<a href="'+this._setUrl(this.page+1)+'" class="next '+(this._checkLast()?'disabled next-disabled':'')+'">Next&nbsp;»</a>';
		},
		
		_checkFirst:function(){
			if(this.page==1){
				return true;
			}
			return false;
		},
		
		_checkLast:function(){
			if(this.page==this.pageTotal){
				return true;
			}
			return false;
		},
		
		getHTML:function(){
			
			if(this.pageTotal<2){
				return '';
			}
			else{
				return [this._getPrevious(),this._getMiddle(),this._getNext()].join('');
			}		
		}
		
	};
	
	C.BasePage=BasePage;
});





//input 默认值
X.add('placeholder',function(C){
	var $=jQuery,
		ATTR='data-placeholder',
		CLS='input-holder';
	
	function placeholder(){
		var inputs=$('input');
		inputs.each(function(index,item){
			var item=$(item);
			if(item.attr('type')!='text'||!item.attr(ATTR)){
				return;
			}
			var holder=item.attr(ATTR);
			
			item.val(holder);
			item.bind('focus',focusHandler);
			item.bind('blur',blurHandler);
			item.addClass(CLS);
		});
	}
	
	function focusHandler(event){
		var target=$(event.target),
			holder=target.attr(ATTR);
			
		if(holder==target.val()){
			target.val('');
			target.removeClass(CLS);
		}
	}
	
	function blurHandler(event){
		var target=$(event.target),
			holder=target.attr(ATTR);

		if($.trim(target.val())==''){
			target.val(holder);
			target.addClass(CLS);
		}		
	}
	
	placeholder();
	
	//针对头部导航特殊处理
	var top_input=$('input.js_topsearch'),
		curtain=$('span.js_searchTopHolder');
	
	function topInputHandler(event){
		var target=$(event.target),
			form=target.closest('form'),
			t=event.type;
			
		if(t=='focus'){
			form.addClass('search-h-focus');
		}
		else{
			form.removeClass('search-h-focus');
			if(target.val()==''){
				curtain.fadeIn();
			}
		}
	}
	top_input.bind('focus',topInputHandler);
	top_input.bind('blur',topInputHandler);
	
	
	curtain.bind('click',function(){
		top_input[0].focus();
		curtain.fadeOut(200);
	});
});

//鼠标经过需要透明度变化的元素
X.add('fading',function(){
	var $=jQuery,
		CLS='js_fading',
		ATTR='data-fading';
	
	function seek(){
		var elems=$('.'+CLS);
		elems.each(function(indx,item){
			var item=$(item);
			if(!item.attr(ATTR)){
				return;
			}
			
			item.bind('mouseenter',handler);
			item.bind('mouseleave',handler);
		});
	}
	
	function handler(event){
		
		var elem=$(event.currentTarget);
			t=event.type,
			fade=elem.attr(ATTR).split(',');
			
			
		if(t=='mouseleave'){
			fade.reverse();
		}
		//elem.css('opacity',fade[0]);
		elem.stop(true,true);
		elem.animate({'opacity':fade[1]},{duration:305});
	}
	

	
	$(document).ready(seek);
});

//导航菜单
X.add('menu',function(C){
	var $=jQuery,
	
		CONFIG={
			
		};
	
	function LinkMenu(container){
		
		if(!container||container.length==0){
			return;
		}
		
		var self=this;
		
		self.containerId=C.guid();
		
		self.timer=null;
		
		self.active=[];
		
		C.mark(container,self.containerId);
		
		self._init();
		
		
	}
	
	LinkMenu.prototype={
		_init:function(){
			var container=C.mark(this.containerId),
				triggers=$('.js_menu_hook',container),
				tris=[],
				menus=[];
			
			triggers.each(function(index,item){
				var item=$(item);
				
				var brother=$(item).attr('data-menu');
				if(!brother){
					return;
				}
				var tid=C.guid(),
					pid=C.guid(),
					panel=$('.'+brother,container)[0];
					
				C.mark(item,tid);
				tris.push(tid);
				C.mark(panel,pid);
				item.attr('data-menu',pid);
				menus.push(pid);
			});
			
			triggers.bind('mouseenter',$.proxy(this,'_triggerEnter'));
			triggers.bind('mouseleave',$.proxy(this,'_triggerLeave'));

			
			var me=$.proxy(this,'_menuEnter');
			var ml=$.proxy(this,'_menuLeave');
			
			$.each(menus,function(index,item){
				C.mark(item).bind('mouseenter',me);
				C.mark(item).bind('mouseleave',ml);
			})
			
			this.triggers=tris;
			this.menus=menus;
			
			this._hide=$.proxy(this,'_hide');
		},
		_triggerEnter:function(event){
			this._cancel();
			this._hideAll();
			var target=$(event.currentTarget),
				menu=C.mark(target.attr('data-menu'));
			
			menu.css('display','block');
			menu.css('left',target.position().left);
			target.addClass('active');
			this.active=[target.attr('id'),menu.attr('id')];
		},
		_triggerLeave:function(event){
			this._delayHide();
		},
		_menuEnter:function(event){
			this._cancel();
		},
		_menuLeave:function(event){
			this._hide();
		},
		_hide:function(){
			var active=this.active;
			if(active.length>0){
				C.mark(active[0]).removeClass('active');
				C.mark(active[1]).css('display','none');				
			}

		},
		_delayHide:function(){
			this.timer=setTimeout(this._hide,10);
		},
		_hideAll:function(){
			$.each(this.menus,function(i,n){
				C.mark(n).css('display','none');
			});
			$.each(this.triggers,function(i,n){
				C.mark(n).removeClass('active');
			})
		},
		_cancel:function(){
			clearTimeout(this.timer);
		}
	};
	
	C.LinkMenu=LinkMenu;
	
});


//Switchable 
//technology from Kissy

CN6.add('switchable',function(C){
	var $=jQuery,
		DISPLAY='display',
		NONE='none',
		BLOCK='block';
	
	/**
	 * 
	 * @param {String} container_sel 容器的jquery selector
	 * @param {Object} conf
	 */
	function Switchable(container_sel,conf){
		var self=this;
		
		self.conf=C.merge(Switchable.CONF,conf);
		
		//container的id 也是Switchabled实例对象的id
		self.id=C.guid();
		
		//activeIndex
		self.activeIndex=self.conf.activeIndex;
		
		//鼠标经过出发trigger时  所用 setTimeout hook
		self.triggerTimer=0;
		
		//一个jquery 对象 包含所有panle
		//self.panels=null;
		
		//一个jquery对象包含所有trigger
		//self.triggers=null
		
		//当前项
		//self.activeIndex=0
		
	
		self.init(container_sel);
		self.addPlugin();	
		
		self._switchBinded=$.proxy(self,'_switch');
		
		//切到第一个
		if(self.conf.autoInit){
			self._switch(0,true);	
		}
		
	}
	Switchable.CONF={
		
		//触发swtich元素外层class
		triggerWrapCls:'triggers',
		
		//switch面板元素外层class
		panelWrapCls:'panels',
		
		//触发swtich元素的class ，如果已设置triggerWrapCls可以不设置此参数
		triggerCls:'',
		
		panelCls:'',	
		
		triggerType:'click', //or mouse
		
		//是否需要trigger
		hasTrigger:true,
		
		//向前翻按钮class
		prevCls:'prev',
		
		//向后翻按钮class
		nextCls:'next',

		prevDisabledCls:'disabled',
		
		nextDisabledCls:'disabled',
		
		//是否有前后导航按钮
		browse:false,
		
		//需要安装的插件
		plugin:[],
		
		//默认激活的tab / panel
		activeIndex:0,
		
		activeTriggerCls:'on',
		
		delay:200,
		
		onSwitch:$.noop,
		
		//是否自动初始化
		//自动切换到第一panel
		autoInit:true,
		
		//上下翻滚时是否循环
		loop:false
	};
	Switchable.Plugins={};
	Switchable.prototype={
		init:function(selector){
			var self=this,
				conf=self.conf,
				container=$(selector).eq(0),
				id='',
				panels;
			
			if(container.length==0){
				return;
			}
			
			if(id=container.attr('id')){
				self.id=id;
			}
			else{
				container.attr('id',self.id);
			}
			
			if(conf.panelCls){
				panels=$('.'+conf.panelCls,container);
			}
			else{
				panels=$('.'+conf.panelWrapCls,container).children();
			}
			self.panels=panels;
			self.length=panels.length;
			
			if(conf.autoInit){
				//自动初始化时 从最后一个panel切到第一个panel
				self.activeIndex=self.length-1;				
			}

			
			
			self._bindTrigger();
			self._bindBrowse();	
			

			
		},
		_bindTrigger:function(){
			var self=this,
				length=self.length,
				conf=self.conf;
											
			if(conf.hasTrigger!==true){
				return;
			}
			
			var container=$('#'+self.id),
				triggers;
			
			if(conf.triggerCls){
				triggers=$('.'+conf.triggerCls,container);
			}
			else{
				triggers=$('.'+conf.triggerWrapCls,container).eq(0).children();
			}
			
			//需要trigger 但又没得到  然后自己创建，这情况triggerWrap 必须是ul 或者 ol
			if(triggers.length===0){
				$('.'+conf.triggerWrapCls,container).eq(0).html(self._createTrigger(length));
				triggers=$('.'+conf.triggerWrapCls,container).eq(0).children();
			}
			
			triggers.each(function(index,item){
				$(item).attr('data-index',index);
			});
			
			self.triggers=triggers;
			
			//即使鼠标经过触发，也要加click事件
			triggers.bind('click',$.proxy(self,'_clickHandler'));
			
			if(conf.triggerType=='mouse'){
				triggers.bind('mouseenter',$.proxy(self,'_mouseenterHandler'));
				triggers.bind('mouseleave',$.proxy(self,'_mouseleaveHandler'));
			}

		},
		//绑定向前 向后 按钮
		_bindBrowse:function(){
			var self=this,
				conf=self.conf,
				container,
				prevTrigger,
				nextTrigger;
									
			if(conf.browse===false){
				return;
			}

			container=$('#'+self.id);
			
			prevTrigger=$('.'+conf.prevCls,container);
			nextTrigger=$('.'+conf.nextCls,container);
			
			prevTrigger.bind('click',$.proxy(self,'_prev'));
			nextTrigger.bind('click',$.proxy(self,'_next'));
			
			self.prevTrigger=prevTrigger;
			self.nextTrigger=nextTrigger;
		},
		_clickHandler:function(event){
			var index=Number($(event.currentTarget).attr('data-index'));
			
			window.clearTimeout(this.triggerTimer);
			
			if((!isNaN(index))&&index>=0){
				this._switch(index);
			}
			
			if(this.conf.triggerType=='click'){
				event.preventDefault();
			}
			
		},
		_mouseenterHandler:function(event){
			var self=this,
				index=Number($(event.currentTarget).attr('data-index'));
			
			if((!isNaN(index))&&index>=0){
				self.tempIndex=index;
				self.triggerTimer=setTimeout(self._switchBinded,self.conf.delay);
			}
		},
		_mouseleaveHandler:function(event){
			clearTimeout(this.triggerTimer);
		},
		_switch:function(index){
			var self=this,
				conf=self.conf,
				//self.tempIndex 起到一个数据传递的作用
				//为了避免产生过多的闭包
				index=typeof self.tempIndex=='number'?self.tempIndex:index,
				activeIndex=self.activeIndex,
				panels=self.panels,
				triggers=self.triggers,
				length=self.length,
				prevTrigger=self.prevTrigger,
				nextTrigger=self.nextTrigger,
				prevDisabledCls=conf.prevDisabledCls,
				nextDisabledCls=conf.nextDisabledCls;
			
			delete self.tempIndex;
			
			
			if(self._switchValid(index,activeIndex)==false){
				return;
			}
			
			self._switchPanel(panels.eq(activeIndex),panels.eq(index),index);
			
			if(triggers){
				self._switchTrigger(triggers.eq(activeIndex),triggers.eq(index))
			}
			if(conf.browse===true){

				prevTrigger.removeClass(prevDisabledCls);
				nextTrigger.removeClass(nextDisabledCls);
				
				if(index==0){
					prevTrigger.addClass(prevDisabledCls);
				}
				if(index==length-1){
					nextTrigger.addClass(nextDisabledCls);
				}
			}
			self.activeIndex=index;
			conf.onSwitch.call(self);
		},
		_switchValid:function(index,activeIndex){
			if(index==activeIndex){
				return false;
			}
			if(index>=this.length){
				return false;
			}
			return true;
		},
		_switchTrigger:function(fromTrigger,toTrigger){
			var self=this,conf=self.conf;
			fromTrigger.removeClass(conf.activeTriggerCls);
			toTrigger.addClass(conf.activeTriggerCls);
		},
		_switchPanel:function(fromElem,toElem,index){
			fromElem.css(DISPLAY,NONE);
			toElem.css(DISPLAY,BLOCK);			
		},
		_next:function(event){
			var self=this,
				conf=self.conf,
				index=self.activeIndex+1;
							
			event.preventDefault();
			
			if(index>=self.length&&!conf.loop){
				return;
			}
			
			if(index>=self.length&&conf.loop){
				index=0;
			}
			
			self._switch(index);
		},
		_prev:function(event){
			var self=this,
				conf=self.conf,
				index=self.activeIndex-1;
			
			event.preventDefault();
			if(index<0&&!conf.loop){
				return;
			}
			if(index<0&&conf.loop){
				index=self.length-1;
			}
			self._switch(index);
		},
		_createTrigger:function(len){
			var i=0,
				strAr=[];
				
			for(;i<len;i++){
				strAr.push('<li>'+(i+1)+'</li>');
			}
			return strAr.join('');
		},
		addPlugin:function(){
			if(!this.conf.plugin){
				return;
			}
			var Plugins=Switchable.Plugins,
				p=this.conf.plugin,
				i=0,
				len=p.length;

			for(;i<len;i++){
				if(Plugins[p[i]]){
					Plugins[p[i]].install(this);
				}
			}
		}
	};
	
	C.Switchable=Switchable;
});

CN6.add('switchable-autoplay',function(C){
	var $=jQuery,
		Switchable=C.Switchable,
		CONF=Switchable.CONF;
	
	C.mix(CONF,{
		//间隔时间
		interval:2000,
		
		//鼠标停留 是否暂停
		overPause:true
	},true);
	
	Switchable.Plugins['autoplay']={
		install:function(host){
			var container=$('#'+host.id),
				conf=host.conf;
			
			if(conf.overPause===true){
				container.bind('mouseenter',$.proxy(host,'pause'));
				container.bind('mouseleave',$.proxy(host,'start'));
			}

			host.timer=0;
			host.startTimer=0;
			
			//避免每次调用play函数时都通过$.proxy产生闭包
			host._play=$.proxy(host,'play');
			
			host.start();
		}
	}

	//扩展Switchable原型对象
	C.mix(Switchable.prototype,{
		start:function(){
			var self=this;
			self.startTimer=setTimeout(self._play,self.conf.interval);
		},
		pause:function(){
			window.clearTimeout(this.timer);
			window.clearTimeout(this.startTimer);
		},
		play:function(){
			var self=this,
				length=self.length,
				activeIndex=self.activeIndex,
				index=activeIndex+1;
			

			if(index>=length){
				index=0;
			}
			self._switch(index);
			self.timer=window.setTimeout(self._play,self.conf.interval);
		}
	},true);
		


},{requires:['switchable']});


CN6.add('switchable-effect',function(C){
	var $=jQuery,
		Switchable=C.Switchable,
		Effects=Switchable.Effects={},
		Fun,
		AutoFun,
		
		SCROLLY='scrolly',
		SCROLLX='scrollx',
		OPACITY='opacity',
		ZINDEX='zIndex';
	
	//循环滚动时 调整panel位置 
	function adjustPosition(direction,trend){
		var self=this,
			//从第一个到最后一个  or   从最后一个到第一个
			elem=trend>0?self.panels.eq(0):self.panels.eq(self.length-1),
			dire=direction==='x'?'left':'top',
			pro={'position':'relative'},
			viewSizeIndex=direction==='x'?0:1;
		
		if(trend>0){
			pro[dire]=self.length*self.viewSize[viewSizeIndex];
		}
		else{
			pro[dire]=-self.length*self.viewSize[viewSizeIndex];
		}
		
		
		elem.css(pro);
	}
	
	//恢复位置
	function resetPosition(direction,trend){
		var self=this,
			runner=self.panels.parent(),
			elem=trend>0?self.panels.eq(0):self.panels.eq(self.length-1),
			dire=direction==='x'?'left':'top';
			
		elem.css(dire,0);
		
		if(trend>0){
			runner.css(dire,0);
		}
		else{
			runner.css(dire,-(self.length-1)*self.viewSize[direction==='x'?0:1]);
		}
		
	}
	
	C.mix(Switchable.CONF,{
		effect:'fade', // or 'scrolly' ,'scrollx'
		
		 //设置每次显示的高宽 [300,200] 宽300 高200
		 //当效果为滚动时 每次切换会滚动一屏的距离 ， 一般情况下不用设置
		 //他会取第一个panel的宽高作为值
		 //不过很多时候都取不到panel的宽高，建议设置此值
		viewSize:[] ,
		
		//切换panel动画时间 
		duration:500,
		
		//滚动的时候是否循环. 与loop不同。
		circular:true
		
	},true);
	
		
	Effects={
		//此效果时每个panel 的position 必须为absolute
		fade:function(fromElem,toElem){
			toElem.css(OPACITY,0);
			toElem.css(ZINDEX,9);
			fromElem.css(ZINDEX,1);
			
			//停止上帧动画
			fromElem.stop(true,true);
			toElem.animate({'opacity':1},{duration:this.conf.duration,complete:function(){
				fromElem.css(OPACITY,0);
			}});

		},
		//每次滚一屏
		scroll:function(fromElem,toElem,direction,index){
			var self=this,
				conf=self.conf,
				runner=self.panels.parent(),
				back=$.noop,
				prop={},
				viewSizeIndex=direction=='x'?0:1,
				diff=self.viewSize[viewSizeIndex]*index,
				trend;
			
			
			if(conf.circular){
				if(index===0&&self.activeIndex===self.length-1){
					trend=1;
				}
				if(index===self.length-1&&self.activeIndex===0){
					trend=-1;
				}

				if(trend!=undefined){
					adjustPosition.call(self,direction,trend);
					diff=trend>0?self.viewSize[viewSizeIndex]*self.length:-self.viewSize[viewSizeIndex];
					back=function(){
						resetPosition.call(self,direction,trend);
					};						
				}
			}
			
			prop[direction=='x'?'left':'top']=-diff + 'px';
			runner.stop(false,true);
			runner.animate(prop,{complete:back,duration:conf.duration});

		}
	};
	
	Switchable.Plugins['effect']={
		name:"effect",
		install:function(host){
			var conf=host.conf,
				panels=host.panels,
				activeIndex=host.activeIndex,
				effect=conf.effect;
			
			C.mix(host,Fun,true);
			if(effect=='fade'){
				panels.each(function(index,item){
					$(item).css({
						'opacity':index==activeIndex?1:0,
						'zIndex':index==activeIndex?9:1
					});
				});
			}
			if(effect=='scrolly'||effect=='scrollx'){
				panels.parent().css({'position':'absolute','top':0,'left':0});
				host.viewSize=[conf.viewSize[0]||panels.eq(0).width(),conf.viewSize[1]||panels.eq(0).height()];
			}
			
			
		}
	};
	

	
	//覆盖Prototype的方法
	Fun={
		_switchPanel:function(fromElem,toElem,index){
			var self=this,
				conf=self.conf,
				effect=conf.effect;
			
			if(effect==SCROLLY||effect==SCROLLX){
				Effects['scroll'].call(self,fromElem,toElem,effect==SCROLLY?'y':'x',index);
			}
			else{
				effect=Effects[effect];
				effect.call(self,fromElem,toElem,index);
			}
			
		}
	};
	
 

},{requires:['switchable']});


CN6.add('switchable-all',function(){},{requires:['switchable','switchable-effect','switchable-autoplay']});


CN6.add('appover',function(C){
	var $=jQuery,
		CONF={
			id:'',
			
			//box将要插入的父元素， 默认为body
			parent:null, 
			
			//相对于父元素的偏移量[x,y],如果只有一个元素表示纵轴的偏移量，水平方向会居中[y]
			offset:[], 
			
			 //or remove 隐藏方式 display:none 或者直接从dom移除
			closeType:'display',
			
			//是否单独显示，默认为true 只显示一个box，display时如果有其他box显示，会先隐藏它们。
			alone:true, 
			
			//是否添加半透明背景层 需要给#curtain加样式 上面注释里有
			mask:false, 
			
			//浮层宽度
			width:480,
			
			//显示的时候调用(display)
			onShow:$.noop, 
			
			//隐藏的时候调用(hide)
			onHide:$.noop,
			
			//创建浮层element后调用
			onCreate:$.noop,
			
			//创建浮层的函数，如果添加次参数，函数需要返回浮层的 html element 对象
			createBox:null 
		},
		//存放已经实例化的appover的id
		appoverAry=[];
	
	function Appover(title,content,options){
		var opt=C.merge(CONF,options),
			self=this;
		
		self.title=title;
		self.content=content;
		self.options=opt;
		
		//最外层div元素的id
		//self.id
		 

		this._init();
	}
	Appover.prototype={
		_init:function(){
			var self=this,
				opt=self.options,
				ele=null;
			
			//如果有id而且此id已经创建过appover实例
			if(opt.id&&$.inArray(opt.id,appoverAry)>-1){
				self.id=opt.id;
				return self;
			}
			self.id=opt.id||'dialog'+C.guid();
			if($.isFunction(opt.createBox)){
				ele=opt.createBox.call(self);
				ele.attr('id')?self.id=ele.attr('id'):ele.attr('id',self.id);
			}
			else{
				ele=self._createBox();
			}
			if(opt.parent){
				$(opt.parent).append(ele);
			}
			else{
				$('body').append(ele);
			}
			if(opt.offset[0]!==undefined){
				self.setPos(opt.offset);
			}
			if(opt.width){
				ele.css('width',opt.width);
			}
			$('.close',ele).click(opt.closeType=='remove'?$.proxy(this.remove,self):$.proxy(this.hide,self));
			appoverAry.push(self.id);
			this.options.onCreate.call(this);
		},
		_createBox:function(title,content){
			var htmlStr='<div class="hd fix"><h5>'+this.title+'</h5> <em class="close">关闭</em></div><div class="bd"> </div>',
				ele=$('<div>',{id:this.id,className:'dialogBox'}).css('display','none').html(htmlStr);
				
				
			if(typeof this.content ==='string'){
				$('.bd',ele).html(this.content)
			}
			else{
				$('.bd',ele).append(this.content);
			}
			return ele;
		},
		_createMask:function(){
			if(this.options.mask===false){
				return;
			}
			
			if($('#curtain').length==1){
				$('#curtain').css('display','block');
				return;
			}
			var d=$('<div>',{id:'curtain',css:{height:$(document).height()}});
			$('body').append(d);
		},
		_dropMask:function(){
			$('#curtain').css('display','none');
		},
		setPos:function(offset){
			var opt=this.options,
				win;
				
			if(opt.offset.length==1){
				win=$(window);
				$('#'+this.id).css({left:win.width()/2-opt.width/2,top:win.scrollTop()+offset[0]});
			}
			else{
				$('#'+this.id).css({left:offset[0],top:offset[1]});
			}
			
		},
		display:function(offset){
			var offset=offset||this.options.offset;
			
			if(this.options.alone===true){
				$.each(appoverAry,function(i,id){
					$('#'+id).css('display','none');
				});
			}

			this._createMask();
			
			if($.isArray(offset)){
				this.setPos(offset);
			}
			
			this.options.onShow.call(this);

			$('#'+this.id).css('display','block');

			
		},
		hide:function(event){
			this._dropMask();
			$('#'+this.id).css('display','none');
			event&&event.preventDefault();
			this.options.onHide.call(this);
		},
		remove:function(){
			$('#'+this.id).remove();
			this._dropMask();
			appoverAry.splice($.inArray(this.id),1);
		}
	};
	
	C.Appover=Appover;
});


/**@license 
 * 
 * Includes jQuery.ScrollTo
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 */
CN6.add('scrollTo',function(){

(function( $ ){
	
	var $scrollTo = $.scrollTo = function( target, duration, settings ){
		$(window).scrollTo( target, duration, settings );
	};

	$scrollTo.defaults = {
		axis:'xy',
		duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
	};

	// Returns the element that needs to be animated to scroll the window.
	// Kept for backwards compatibility (specially for localScroll & serialScroll)
	$scrollTo.window = function( scope ){
		return $(window)._scrollable();
	};

	// Hack, hack, hack :)
	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
	$.fn._scrollable = function(){
		return this.map(function(){
			var elem = this,
				isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;

				if( !isWin )
					return elem;

			var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
			
			return $.browser.safari || doc.compatMode == 'BackCompat' ?
				doc.body : 
				doc.documentElement;
		});
	};

	$.fn.scrollTo = function( target, duration, settings ){
		if( typeof duration == 'object' ){
			settings = duration;
			duration = 0;
		}
		if( typeof settings == 'function' )
			settings = { onAfter:settings };
			
		if( target == 'max' )
			target = 9e9;
			
		settings = $.extend( {}, $scrollTo.defaults, settings );
		// Speed is still recognized for backwards compatibility
		duration = duration || settings.speed || settings.duration;
		// Make sure the settings are given right
		settings.queue = settings.queue && settings.axis.length > 1;
		
		if( settings.queue )
			// Let's keep the overall duration
			duration /= 2;
		settings.offset = both( settings.offset );
		settings.over = both( settings.over );

		return this._scrollable().each(function(){
			var elem = this,
				$elem = $(elem),
				targ = target, toff, attr = {},
				win = $elem.is('html,body');

			switch( typeof targ ){
				// A number will pass the regex
				case 'number':
				case 'string':
					if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
						targ = both( targ );
						// We are done
						break;
					}
					// Relative selector, no break!
					targ = $(targ,this);
				case 'object':
					// DOMElement / jQuery
					if( targ.is || targ.style )
						// Get the real position of the target 
						toff = (targ = $(targ)).offset();
			}
			$.each( settings.axis.split(''), function( i, axis ){
				var Pos	= axis == 'x' ? 'Left' : 'Top',
					pos = Pos.toLowerCase(),
					key = 'scroll' + Pos,
					old = elem[key],
					max = $scrollTo.max(elem, axis);

				if( toff ){// jQuery / DOMElement
					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );

					// If it's a dom element, reduce the margin
					if( settings.margin ){
						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
					}
					
					attr[key] += settings.offset[pos] || 0;
					
					if( settings.over[pos] )
						// Scroll to a fraction of its width/height
						attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
				}else{ 
					var val = targ[pos];
					// Handle percentage values
					attr[key] = val.slice && val.slice(-1) == '%' ? 
						parseFloat(val) / 100 * max
						: val;
				}

				// Number or 'number'
				if( /^\d+$/.test(attr[key]) )
					// Check the limits
					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );

				// Queueing axes
				if( !i && settings.queue ){
					// Don't waste time animating, if there's no need.
					if( old != attr[key] )
						// Intermediate animation
						animate( settings.onAfterFirst );
					// Don't animate this axis again in the next iteration.
					delete attr[key];
				}
			});

			animate( settings.onAfter );			

			function animate( callback ){
				$elem.animate( attr, duration, settings.easing, callback && function(){
					callback.call(this, target, settings);
				});
			};

		}).end();
	};
	
	// Max scrolling position, works on quirks mode
	// It only fails (not too badly) on IE, quirks mode.
	$scrollTo.max = function( elem, axis ){
		var Dim = axis == 'x' ? 'Width' : 'Height',
			scroll = 'scroll'+Dim;
		
		if( !$(elem).is('html,body') )
			return elem[scroll] - $(elem)[Dim.toLowerCase()]();
		
		var size = 'client' + Dim,
			html = elem.ownerDocument.documentElement,
			body = elem.ownerDocument.body;

		return Math.max( html[scroll], body[scroll] ) 
			 - Math.min( html[size]  , body[size]   );
			
	};

	function both( val ){
		return typeof val == 'object' ? val : { top:val, left:val };
	};

})( jQuery );


});



X.add('bag',function(C){
	var $=jQuery,
		mark=C.mark;
	
	
	var API='/get_cart.php',
		API_DEL='/cart.php?json=1&step=1&act=del',
		BAG_ID='bagBox',
		BAG_BADGE='bagBadge',
		
		LOADING_CLS='bag-box-loading',
		SWITCH_CLS='bag-box-muti',
		EMPTY_CLS='bag-box-empty';
			
			
	
	var _timer_=null,
		_updated_=false;
	
	function showBag(){
		if(_timer_){
			clearTimeout(_timer_);
		}		
		var box=mark(BAG_ID);
		if(box.css('display')=='block'){
			return;
		}
		box.css('visibility','hidden').css('display','block').css('height','auto');
		var height=box.height();
		box.css('height',0).css('display','block').css('visibility','visible');
		mark(BAG_ID).animate({'height':height},{duration:400});		
	}
	
	function hideBag(){
		var box=mark(BAG_ID);
		box.css('overflow','hidden');
		box.animate({'height':0},{duration:400,complete:function(){
			$(this).css('display','none').css('overflow','auto');
		}});		
	}
	
	function delayHide(time){
		var t=time||500
		_timer_=window.setTimeout(hideBag,t);
	}	

	
	function hookHandler(event){
		if(event.type=='mouseenter'){
			showBag();
			return;
		}
		delayHide();
	}
	
	function boxHandler(event){
		
		if(event.type=="mouseenter"){
			clearTimeout(_timer_);
			return;
		}
		delayHide();
		

	}
	
	//更新数据
	function update(data){
		var box=mark(BAG_ID);
		
		if(data){
			updateBack(data);
			return;
		}
		
		$.ajax({
			url:API,
			dataType:'json',
			success:updateBack	
		});
	}
	
	function updateBack(data){
		
		if(data.flag!='1'){
			alert(data.msg);
			return;
		}
		
		
		var box=mark(BAG_ID),
			badge=mark(BAG_BADGE),
			data=data.content;
			
		if(data.items.length<1){
			box.addClass(EMPTY_CLS);
			badge.find('.price').html(0);
			badge.find('.num').html(0);			
			return;
		}
		
		badge.find('.price').html(data.totalPrice);
		badge.find('.num').html(data.totalNum);
		
		box.find('.panels').empty();
		box.find('.body').clone().appendTo(box);
		box.find('.body').eq(0).remove();
		$('#cart_total_count').html(data.totalNum);
		$('#cart_total_price').html(data.totalPrice);
		
		var goods=data.items,
			i=0,
			len=goods.length,
			li,
			obj,
			fragment=document.createDocumentFragment();
			
		for(;i<len;i++){
			if(i%2==0){
				var ul=$('<ul>',{className:'glist-bag'});
				fragment.appendChild(ul[0]);
			}
			obj=goods[i];
			li=$('<li>',{id:'goods'+obj.id,className:'fix'});
			li.html('<div class="wrap"><p class="pic"><a href="'+obj.link+'"><img src="'+obj.pic+'" /></a></p>\
					<p class="title"><a href="'+obj.link+'">'+obj.title+'</a></p>\
					<p>'+obj.goods_attr+'</p>\
					<p>数量：'+obj.goods_number+'</p>\
					<p>￥'+obj.price+'</p>\
					<span class="close" data-id="'+obj.id+'"> </span></div>');
					
			ul.append(li);
		}
		
		box.find('.panels').append(fragment);
		
		box.find('.panels').bind('click',function(event){
			var target=event.target;
			
			if(!$.nodeName(target,'span')){
				return;
			}
			
			target=$(target);
			
			if(!target.hasClass('close')){
				return;
			}
			
			 var id=target.attr('data-id');
			//if(confirm('确定要删除吗?')){
				$.ajax({
					url:API_DEL,
					data:'id='+id,
					dataType:'json',
					success:delBack
				});				
			//}

		});
		
		if(len>2){
			box.addClass(SWITCH_CLS);
			
			new C.Switchable(box,{
				plugin:['effect'],
				effect:'scrolly',
				autoInit:false,
				browse:true,
				panelCls:'glist-bag',
				duration:200,
				viewSize:['',288]
			});
		}
		else{
			box.removeClass(SWITCH_CLS);
			box.find('.panels').removeAttr('style');
		}
		
		

		
		box.removeClass(LOADING_CLS);
		box.removeClass(EMPTY_CLS);
		
		if(box.css('display')=='block'){
			box.css('display','none');
			showBag();
		}
	}
	
	function delBack(data){
		update(data);
	}
	
	function loading(){
		mark(BAG_ID).addClass(LOADING_CLS);
	}
	/*
	function addToBag(event){
		$.scrollTo('body',30);
		event.preventDefault();
		
		showBag();
		
		if(_timer_){
			window.clearTimeout(_timer_);
		}
		
		_timer_=window.setTimeout(hideBag,2000);
	}
	*/
	try{
	mark(BAG_BADGE).bind('mouseenter',hookHandler).bind('mouseleave',hookHandler);
	mark(BAG_ID).bind('mouseenter',boxHandler).bind('mouseleave',boxHandler);		
	}
	catch(e){}


	
	C.Bag={
		update:update,
		show:showBag,
		delayHide:delayHide,
		loading:loading
		
	}
	
},{requires:['scrollTo']});




X.use('jquery.js',function(C){
	
jQuery(document).ready(function(){
	var $=jQuery;
	
	X.use('menu','placeholder','fading',function(C){
		new C.LinkMenu($('div.gnav')[0]);
	});
	
	
});
	
});


//--joke

X.use('jquery.js','appover',function(C){
var ar=[];
var timer=null;
var an=[38,38,40,40,37,37,39,39,66,65];
function clear(){
	ar=[];
}
function geek(){
	new C.Appover('Hello Geek','',{
		offset:[22],
		mask:true,
		createBox:function(){
			var box=jQuery('<div>');
			box.html('<h1>Hello Geek</h1><p>You also can visit I-XIU by:</p><p style="padding:50px 0;text-align:center;"><img style="" src="iimm/bar_code.png" /></p>');
			box.attr('class','popbox');
			return box;
		}
	}).display();
}
function match(){
	for(var i=0,len=an.length;i<len;i++){
		if(ar[i]!=an[i]){
			return false
		}
	}
	return true;
}
jQuery(document).bind('keydown',function(event){
	ar.push(event.which);
	
	if(match()){
		geek();
	}
	if(timer){
		clearTimeout(timer);
	}
	timer=setTimeout(clear,1500)
});
})


//--joke


