﻿(function(){
	var doc = document
//jQuery.noConflict();
	var AW = window.AW = {
		
		event:{
			//模拟自定义事件
			customEvent: function(){
				
				var listeners = [];
				var cusEvent = {
					addLisener: function(callback, scope, args){
						if(typeof(callback) !== "function"){
							return;
						}
						
						listeners.push({callbackFn:callback, scope: scope || window, args: args});

					},
					
					removeLisener: function(callback){
						if(!listeners || !listeners.length){
							return;
						}
						for(var i = 0, len = listeners.length; i < len; i++){
							if(listeners[i].callbackFn === callback){
								listeners.splice(i, 1);
							}
						}
					},
					
					removeLisenerAll: function(){
						listeners = [];
					},
					
					fire: function(){
						if(!listeners || !listeners.length){
							return;
						}
			
						for(var i = 0, len = listeners.length; i < len; i ++){
							listeners[i].callbackFn.call(listeners[i].scope, listeners[i].args);
						}
					}
				};
				
				return cusEvent;
			}
		},
			
		
		header: {
			init: function(){
				var timer;
				jQuery('#header .item a').hover(function(){
					var item = jQuery(this),
						self = item.parent();
					
					if(self.hasClass('hover')){
						return;
					}
					timer = setTimeout(function(){
						self.addClass('hover');
						item.addClass('current');
						jQuery(self).find('.ico').css('top', '0px').animate({ top: 42},  'fast'); 
					}, 300);
				}, function(){
					if(timer){
						window.clearTimeout(timer);
					}
					var item = jQuery(this),
						self = item.parent();
						self.find('.ico').animate({ top: 0 },  'fast', null, function(){
						self.removeClass('hover');
						item.removeClass('current');
					}); 
					
				});
				
			}
		}
	
	};
	
	
	/**
	 * tab切换
	 * @class 
	 * @method tab 
	 * @param  {Object}  cfg 参数配置 
	 * @return {Object}  
	 */
	jQuery.fn.tab = function (cfg){
		var config = {
			triggerEl: "li", //触发元素
			cls:'current',   //触发时的className
			container:'.list'//tab对应的容器
		};

		if(cfg){
			jQuery.extend(config, cfg);
		}
		jQuery(this).each(function (i){
			var self = jQuery(this);
			var box = self.find(config.container);
			jQuery(this).find(config.triggerEl).each(function(i){
				jQuery(this).mouseover(function(){
					self.find('.' + config.cls).removeClass(config.cls);
					jQuery(this).addClass(config.cls);
					box.hide();
					box.eq(i).show();
				});
			});
			
			var currentIndex = jQuery(this).find(config.triggerEl).index(jQuery(this).find('.' + config.cls));
	
			box.eq(currentIndex).show();
			
		});
		
	};
	
	/**
	 * 滚动组件,当前仅限于左右滚动
	 * @class 
	 * @method imageRoller 
	 * @param  {Object}  options 参数配置 
	 */
	jQuery.fn.imageRoller = function (options){
		var setting={
			count: 1,           //每次滚动个数
			width: 800,			//单个滚动元素的宽度（应包括padding\margin\border）
			inner: 'li',		//滚动元素
			outer: 'ul',		//滚动元素的包裹元素（控制此元素的位置来控制视窗的位置）
			left: '.prev',		//往左滚动的btn
			right: '.next',		//往右滚动的btn
			viewContainer: '.list',
			cycle: true,		//是否需要循环滚动
			auto:false,         //是否自动滚动
			interval: 3000,     //自动滚动的间隔时间
			delay: 500 //滚动一次所需要的时间
		};
		if(options){
			jQuery.extend(setting,options);
			
		}
		
		return jQuery(this).each(function(i){
			var curr = 0,
				viewNumber = Math.round(jQuery(this).find(setting.viewContainer).width()/setting.width),
				items = jQuery(this).find(setting.inner),
				showers = jQuery(setting.shower).find('li'),
				totalNum = items.length,
				total = totalNum - viewNumber,
				outer = jQuery(this).find(setting.outer);
			
			
			var self = this;
			
			//showers.css('visibility', 'visible');
			//showers.css('filter', 'alpha(opacity=100)');
			
			var wholeEffect = function(){
				
				//如果下一帧或者上一帧不存在，则改变btn的状态
				var changeStat = function(){
					var left = jQuery(self).find(setting.left),
						right = jQuery(self).find(setting.right);
					if(curr > 0){
						left.removeClass('prev-disabled');			
					} else {
						left.addClass('prev-disabled');
					}

					if(curr < total){
						right.removeClass('next-disabled');
					} else {
						right.addClass('next-disabled');
					}
					
				};
				
				/**
				 *	a.不循环滚动与循环效果不一样
				 *  b.循环效果滚动可设手动触发和自动滚动
				 */

					/******************************************
					 *	循环滚动
					 *****************************************/
					total = totalNum;
					var eles = jQuery(self).find(setting.inner);
					eles.each(function(){
						jQuery(this).clone().appendTo(outer);
					});
					eles.each(function(){
						jQuery(this).clone().appendTo(outer);
					});
					
					
					var _items = jQuery(self).find(setting.inner);
					
					var showerEffect = function(){
						
						var triggerLiNum = curr + 1;
						if(curr <= total){
							triggerLiNum = triggerLiNum + total;
						}
				
						showers.hide('slow');
						_items.removeClass('current');
						_items.eq(triggerLiNum).addClass('current');
						if(triggerLiNum >= total){
							triggerLiNum = triggerLiNum - total;
						}
						if(triggerLiNum >= total){
							triggerLiNum = triggerLiNum - total;
						}
						
						showers.eq(triggerLiNum).fadeIn('slow');
					
					};
					
					_items.each(function(i){
						jQuery(this).attr('index', i);
						jQuery(this).click(function(e){
							var index = parseInt(jQuery(this).attr('index'));
							
							if(jQuery(this)[0].className == 'current'){
								return false;
							}
							
							var prev = jQuery(this).prev();
							
							if(prev[0].className == 'current'){
								curr = index - setting.count - 1;
								curr = curr < 0 ? (curr + total) : (curr >= total ? (curr - total) :curr);
								scrollRight(true);
							} else {
								index - setting.count + 1;
								curr = curr < 0 ? (curr + total) : (curr >= total ? (curr - total) :curr);
								//console.log(index)
								scrollLeft(true);
								
							}
							
							showerEffect();
							return false;
						});
					});

					var totalWidth = setting.width * totalNum;
					outer.css("margin-left", -totalWidth + 'px');
					
					showerEffect();
					
					
					//left btn 向右滚动
					var scrollLeft = function(notAuto){
						curr = curr - setting.count;

						if(curr >= 0){
							outer.animate({
								marginLeft: parseInt(outer.css("margin-left")) + setting.width * setting.count
							}, setting.delay);
						}
						
						if(curr < 0){	
							var currMargin = - (totalWidth - parseInt(outer.css("margin-left")));
							outer.css('margin-left', currMargin + 'px');
							outer.animate({
								marginLeft: currMargin + setting.width * setting.count
							}, setting.delay);
							curr = total + curr;	
						}
						if(!notAuto){
							showerEffect();
						}
					};
					//right btn 向左滚动
					var scrollRight = function(notAuto){

						curr = curr + setting.count;
						
						if(curr <= total){
							outer.animate({
								marginLeft: parseInt(outer.css("margin-left")) - setting.width * setting.count
							}, setting.delay);
							
							//triggerLiNum = triggerLiNum + total;
							
						}
						if(curr > total){
							
							curr = curr - total;
							outer.css('margin-left', -(totalWidth - setting.width * (setting.count - curr)) );
							outer.animate({
								marginLeft: -(setting.width * curr) - totalWidth
							}, setting.delay);	
							
							
						}
						
						if(!notAuto){
							showerEffect();
						}
						
						
						
					};


				
				
				//向左
				jQuery(self).find(setting.left).click(function (){
					scrollLeft();
					this.blur();
					return false;
				});
				//向右
				jQuery(self).find(setting.right).click(function (){
					scrollRight();
					this.blur();
					return false;
				});
			
			};
			
			
			//小于三个的时候
			if(total < 0){
				items.each(function(i){
					jQuery(this).attr('index', i);
					jQuery(this).click(function(e){
						var index = parseInt(jQuery(this).attr('index'));
						curr = index;
						if(jQuery(this)[0].className == 'current'){
							return false;
						}
						showers.hide('slow');
						items.removeClass('current');
						items.eq(curr).addClass('current');
						showers.eq(curr).fadeIn('slow');
						return false;
					});
				});
				//向左
				jQuery(this).find(setting.left).click(function (){
					curr ++ ;
					if(curr > totalNum - 1){
						curr = 0;
					}
					items.eq(curr).click();
					this.blur();
					return false;
				});
				//向右
				jQuery(this).find(setting.right).click(function (){
					curr -- ;
					if(curr < 0){
						curr = totalNum - 1;
					}
					items.eq(curr).click();
					this.blur();
					return false;
				});
				
				items.eq(curr).click();
				
				
			} else {//完整效果
				wholeEffect();
			}
			
			
			//自动滚动
			if(setting.auto){
				var timer = setInterval(function(){
						jQuery(self).find(setting.right).click();
					}, setting.interval);
				jQuery(self).hover(function(e){
					if(timer){
						window.clearInterval(timer);
					}
				}, function(e){
					timer = setInterval(function(){
						jQuery(self).find(setting.right).click();
					}, setting.interval);
				});
			
			}
			
			
		});
		
	};
	
	
	/**
	 * 图片幻灯片
	 * @class 
	 * @method slide 
	 * @param  {Object}  cfg 参数配置 
	 * @return {Object}  幻灯片对象
	 */
	jQuery.fn.slide = function(cfg){
		var config = {
            delay: 1000,    //延时
			height:240,     //滚动高度
			itemCls:'',	    //滚动item的class
			animate: true,  //是否需要动画（还是简单切换）
			direction: 'up',//滚动方向
			triggerCls:null, //触发的cls
            callback: null  //每滚动一次执行的回调函数
        };
		var current = 0,
			t_timer = null;
		
        if(cfg) jQuery.extend(config,cfg);
		
		var container = config.container ? jQuery(config.container) : jQuery(this).find("ul").eq(0),
			slides = config.itemCls ? container.find(config.itemCls) : container.find("li"),
			total = slides.length,
			self = jQuery(this),
			triggers = config.triggerCls ? self.find(config.triggerCls) : [],
			isStop = false;
			
		if(!slides ||slides.length <= 1){
			return;
		}
		/**
		 * 幻灯片切换
		 * @private 
		 * @method doSlide 
		 * @param  {Number}  切换到第几个幻灯片
		 */
		var doSlide = function(n){
			//幻灯停止
			if(isStop){
				return;
			}
			current = (typeof(n)? current : n);
			
			if(config.direction === 'up'){//垂直方向
				if(config.animate){
					container.animate({
						marginTop:-(config.height * current)
					},200);
				} else {
					container.css({marginTop:-(config.height * current)});
				}
			} else {//水平方向
				if(config.animate){
					container.animate({
						marginLeft:-(config.width * current)
					},200);
				} else {
					container.css({marginLeft:-(config.width * current)});
				}			
			}
						

			if(config.callback){
				config.callback.call(config.callback);
			}
			triggers.parent().find(".current").removeClass("current");
			triggers.eq(current).addClass("current");					
			current = ((current + 1) >= total) ? 0 : current + 1;				
		};
		
		/**
		 * 幻灯片滚动
		 * @private 
		 * @method start 
		 */
		var start = function(){	
			isStop = false;
			if(t_timer)			
			window.clearInterval(t_timer);
			t_timer = setInterval(doSlide, config.delay);			
		};
		
		/**
		 * 幻灯片停止滚动
		 * @private 
		 * @method stop 
		 */
		var stop = function(){
			if(t_timer)
			window.clearInterval(t_timer);
			isStop = true;
		};
		
		/**
		 * 根据幻灯片个数创建按钮，当前为固定格式及className
		 * @private 
		 * @method createBtns 
		 */
		var createBtns = function(){
			var ul = doc.createElement("ul");
			ul.className = "slide-triggers";
			for(var i = 0, length = slides.length; i < length; i++){
				var li = doc.createElement("li");
				li.innerHTML = i + 1;
				ul.appendChild(li);
			}
			
			self.append(ul);
			triggers = self.find(".slide-triggers li");
			
		};
		var _delay ;
		var init = function(){
			triggers.eq(current).addClass("current");
			triggers.each(function(n){
				jQuery(this).hover(function(){
					var _self = jQuery(this);
					if(_delay){
						window.clearTimeout(_delay);
					}
					_delay = setTimeout(function(){
						start();
						current = n;
						doSlide();
						_self.addClass("current");
					}, 200);
					stop();
					
				}, function(){
					start();
				});
				
			});
		};
		//幻灯片添加事件
		slides.each(function(){
			jQuery(this).hover(function(){
				stop();
			}, function(){
				start();
			});
		});
		
		if(!triggers.length){
			createBtns();
		}
		init();
		
		
		//默认滚动
		t_timer = setInterval(doSlide, config.delay);
		
		return{
		
			current: current,
			
			start: start,
			
			stop: stop,
			
			gotoSlide: function(n){
				doSlide(n);
			}
		
		};
		
		
	};
	
	//title提示
	jQuery.fn.pop = function(options){
		var setting={
			flag: 'li',
			pop: '.ico',
			delay: 300
		};
		if(options){
			jQuery.extend(setting,options);
			
		}
		var items = jQuery(this).find(setting.flag);
		var timer;
		items.hover(function(){
			var self = jQuery(this);
			if(timer){
				window.clearTimeout(timer);
			}
			timer = setTimeout(function(){
				self.css('z-index', '100');
				self.find(setting.pop).animate({ top: -42}).show();
			}, setting.delay);
			
		}, function(){
			if(timer){
				window.clearTimeout(timer);
			}
			jQuery(this).find(setting.pop).animate({ top: 0}).hide();
			jQuery(this).css('z-index', '');
		});
		
	}
	
	
	/**
	 * 弹框：是否有遮罩层通过参数masked来配置。遮罩层样式需要在配置中说明maskCls
	 *       并且需要事先在样式表中定义好。如果有遮罩层，则在Ie6下还需要定义shimCls
	 * @class 
	 * @method menu 
	 * @param  {Object}  cfg 参数配置 
	 * @return {Object}  弹框对象
	 */
	$.fn.popup = function(option){
		var setting = {
			cls: "",
			style: '', //border:1px solid #ccc; padding:10px;position:absolute;background-color:#fff;
			hasCloseBtn: true,
			masked: true,
			maskCls: "masked",
			shimCls: "masked-shim",
			closeCls:"container-close"
		};
		
		if(option) $.extend(setting,option);
		
				
		var dialog, mask, shim;
		
		dialog = $(this);
		
		
		if(!$(this).length){
			dialog = $(doc.createElement("div"));
			dialog.attr("class", setting.cls);
			dialog.attr("id", this.selector.substr(1, this.selector.length));
			$(document.body).append(dialog);
		} 
		
		dialog.get(0).style.cssText = setting.style;
		dialog.css({"position":"absolute", "z-index": "100" ,"visibility": "hidden"});
		
		//是否有关闭按钮
		if(setting.hasCloseBtn){
			var close =  doc.createElement("input");
			close.type = "button";
			close.value = "关闭";
			close.className = setting.closeCls;
			dialog.append(close);
			$(close).click(function(){
				handle.hide();
			})
			
		}
		
		//是否有遮罩层
		if(setting.masked){
			/*if(ie6){
				shim = doc.createElement("iframe");
				shim.className = setting.shimCls;
				$(doc.body).append(shim);
			} */
			
			shim = $(shim);
			mask = doc.createElement("div");
			mask.id = setting.maskedId || "";
			mask.className = setting.maskCls || "";
			mask.style.visibility = "hidden";
			$(doc.body).append(mask);
		}
		
		mask = $(mask);
		
		//自定义关闭及展示事件
		var onHide = new AW.event.customEvent(),
			onShow = new AW.event.customEvent(),
			onBeforeHide = new AW.event.customEvent(),
			onBeforeShow = new AW.event.customEvent();
		
		var handle = {};
		
		handle.dialog = dialog;
		
		//遮罩层
		handle.mask = mask;
		
		//ie6下的隐性iframe
		handle._shim = shim;
		
		/**
		 * 弹框的位置定位，在window resize时重新定位;
		 *       暂时没有在window滚动时（scroll）重新定位
		 * @method setPosition 
		 */
		handle.setPosition = function(){
			var bHeight = dialog.height();
			//解决页面刷新后，iframe高度重置为0的情况,100,200为随意值
			bHeight = bHeight < 100 ? 200 : bHeight;
			var scrollTop = doc.documentElement.scrollTop || doc.body.scrollTop;
			var bTop = doc.documentElement.clientHeight/2 + scrollTop - bHeight/2;
			
			var bWidth = dialog.width() || parseInt(dialog[0].style.width);
			bTop = bTop < 0 ? 0 : bTop;
			dialog.css({"top": bTop, "left": (doc.documentElement.clientWidth - bWidth)/2});
			

			if(mask){
				var viewHeight =(doc.documentElement.scrollHeight >= doc.documentElement.clientHeight ? doc.documentElement.scrollHeight : doc.documentElement.offsetHeight) + "px";
				$(mask).css({"width": doc.documentElement.scrollWidth, "height": viewHeight});
				$(shim).css({"width": doc.documentElement.scrollWidth, "height": viewHeight});
			}
		};
		
		/**
		 * dialog 弹出，弹出时重新定位
		 *       暂时没有在window滚动时（scroll）重新定位
		 *		 同时触发事先注册好的onShow事件
		 * @method show 
		 */
		handle.show = function(e){
			onBeforeShow.fire();
			
			handle.setPosition();
			
			dialog.css({"visibility": "visible"});
			
			if(handle.mask){
				
				$(mask).css({"visibility": "visible"});

				if(shim){
					$(mask).css({"visibility": "visible"});
				}
				
			}
			
			dialog.css("visibility", "visible");
			onShow.fire();
		};
		
		/**
		 * dialog 关闭
		 *		 同时触发事先注册好的onShow事件
		 * @method show 
		 */
		handle.hide = function(){
			onBeforeHide.fire();
			dialog.css("visibility", "hidden");
			if(handle.mask){
				mask.css("visibility", "hidden");
				if(handle._shim){
					shim.css("visibility", "hidden");
				}
			}
			onHide.fire();
		};
		
		/**
		 * 给dialog开放事件订阅
		 *		 只支持两个事件:onShow - dialog执行show方法后的回调
		 *						onHide - dialog执行hide方法后的回调
		 * @method subscribe 
		 * @param {String}      eventName   事件名称，如onShow或者onHide
		 * @param {Function}    callback    事件触发时，注册的回调方法
		 * @param {Object}      scope       回调方法执行的语境
		 * @param {Any}         args        传递给回调方法的参数
		 */
		handle.subscribe = function(eventName, callback, scope, args){
			if(!this[eventName]){
				this[eventName] = new TB.customEvent(); 
			}
			this[eventName].addLisener(callback, scope, args);	
			
		};
		
		/**
		 * 给dialog取消订阅事件
		 *		 只支持两个事件:onShow - dialog执行show方法后的回调
		 *						onHide - dialog执行hide方法后的回调
		 * @method unSubscribe 
		 * @param {String}      eventName   事件名称，如onShow或者onHide
		 * @param {Function}    callback    要取消的注册事件
		 */
		handle.unSubscribe = function(eventName, callback){
			if(!this[eventName]){
				return;
			}
			if(!callback){
				handle[eventName].removeLisenerAll();
				return;
			}
			handle[eventName].removeLisener(callback, scope, args);
		};
		
		handle.onShow = onShow;
		
		handle.onHide = onHide;
		
		handle.onBeforeShow = onShow;
		
		handle.onBeforeHide = onHide;
		
		$(window).bind('resize', function(e){
			handle.setPosition();
		});
		
		return handle;
		
	};
	
	
	function fixpng24(id){
		var arVersion = navigator.appVersion.split("MSIE");
		var version = parseFloat(arVersion[1]);
		if ((version >= 5.5) ){
			var imagesArr = $('#' + id).find('img');
		   for(var i=0; i< imagesArr.length; i++){
			  var img = imagesArr[i];
			  if (img.src.toLowerCase().slice(-3) == "png"){
				 var imgID = (img.id) ? "id='" + img.id + "' " : "";
				 var imgClass = img.className || '';
				 var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
				 var imgStyle = "display:inline-block;" + img.style.cssText ;
				 if (img.align == "left") imgStyle = "float:left;" + imgStyle;
				 if (img.align == "right") imgStyle = "float:right;" + imgStyle;
				 //if (img.parentNode.href) imgStyle = "cursor:pointer;" + imgStyle;
				 
				 var strNewHTML = "<span " + imgID + imgClass + imgTitle
				 + " style=\"width:" + img.offsetWidth + "px; height:" + img.offsetHeight + "px;" + imgStyle
				 + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
				 + "(src='" + img.src + "', sizingMethod='scale');\"></span>";
				 img.outerHTML = strNewHTML;
				 //i--;
			  }
		   }
		}
	}
	
	var win = window, 
		doc = document, 
		decode = decodeURIComponent,
        ua = navigator.userAgent.toLowerCase(),
        ie6 = /msie 6/.test(ua);//ie6
		

	
	jQuery(document).ready(function(){
		
		AW.header.init();
		fixpng24('shower');
		
	
	});

})();
