/**
 * 右下角广告
 * 
 * @author linxs@35.cn
 */
(function($) { 
	$.fn.cavanAdvertisement = function(o) {
		// 默认参数
		o = $.extend({
			floatType: 4,
			openTime: 10
		}, o || {});
		
		// 插件扩展
		return this.each(function() {
			var div = $(this);
			var jsFunction = '';
			switch(o.floatType) {
				case 0:
					var div1 = div.clone();
					div1.attr('id', 'website_adver1').insertAfter(div).show();
					jsFunction = fixBothSidebar;
					break;
				
				case 3:
					var direction = 1;
					var fromX = 2;
					var fromY = 2;
					jsFunction = floatByDiagonal;
					break;
					
				case 2:
					var pageArray = $.getPageSize();
					var fromY = parseInt(pageArray[3] - 2);
					var slideUp = false;
					jsFunction = slideUpDown;
					break;
					
				case 1:
					var pointerX = 2;
					var pointerY = 2;
					//定时关闭
					if(o.openTime>0){
						hideTimer = setTimeout(function() {
							$(document).unbind("mousemove");
							$(".floadivClose img").click();
						}, o.openTime*1000);
					}
					$(document).mousemove(function(e){
				        pointerX = e.pageX
				        pointerY = e.pageY;
					});
					jsFunction = floatByPointer;
					break;
					
				case 4:
				default:
					jsFunction = fixRightBottom;
					break;
			}
			var time = 10;
			var timer = null;
			var hideTimer=null;
			init();
			
			/**
			 * 初始化
			 */
			function init()
			{
				startTimer();
				
				$(".floadivClose img").bind("click", function() {
					clearInterval(timer);
					clearTimeout(hideTimer);
					$(this).parents(".floatage").hide();
				});
				
				//定时关闭
				if(o.openTime>0){
					hideTimer = setTimeout(function() {
						//$(document).mousemove=null;
						$(".floadivClose img").click();
					}, o.openTime*1000);
				}

				div.show().hover(function() {
					clearInterval(timer);
					clearTimeout(hideTimer);
				}, function() {
					if (div.css("display") != "none") {
						startTimer();	
					}
				});
			}
			
			
			/**
			 * 计时开始
			 */
			function startTimer()
			{
				timer = setInterval(function() {
					jsFunction.call(this);
				}, time);
			}
			
			/**
			 * 从上往下飘
			 */
			function slideUpDown()
			{
				scrollArray = $.getPageScroll();
				pageArray = $.getPageSize();
				if (fromY <= 2) {
					if (!slideUp) {
						slideUp = true;
						div.slideUp(1300, function() {
							slideUp = false;
							
							fromY = parseInt(pageArray[3] - 2);
						});
					}
				} else {
					fromY -= 1.5;
				}
				
				if ($.browser.msie && /6.0/.test(navigator.userAgent)) {
					// ie6下的bottom不同
					scrollArray[1] = 0;
				}
				div.show().css({"bottom": fromY - scrollArray[1] + "px", "right": "2px"});
			}
			
			/**
			 * 顺着鼠标飘
			 */
			function floatByPointer()
			{
				pageArray = $.getPageSize();
				fromX = parseInt(div.css("left"), 10);
				fromY = parseInt(div.css("top"), 10);
				if (isNaN(fromX) || fromX < 0) {
					fromX = 2;
				}
				if (isNaN(fromY) || fromY < 0) {
					fromY = 2;
				}
				maxX = parseInt(pageArray[2] - div.outerWidth(true) - 2);
				maxY = parseInt(pageArray[1] - div.outerHeight(true) - 2);
				offsetX = Math.ceil(Math.abs((pointerX - fromX)) / time);
				offsetY = Math.ceil(Math.abs((pointerY - fromY)) / time);
				if (pointerY < fromY) {
					offsetY = -offsetY; 
				}
				if (pointerX < fromX) {
					offsetX = -offsetX; 
				}
				
				fromX = fromX + offsetX;
				fromY = fromY + offsetY;
				if (fromX >= maxX) {
					fromX = maxX;
				}
				if (fromY >= maxY) {
					fromY = maxY;
				}
				div.css({"top": fromY + "px", "left": fromX + "px"});
			}
			
			/**
			 * 对角线飘
			 */
			function floatByDiagonal()
			{
				scrollArray = $.getPageScroll();
				pageArray = $.getPageSize();
				minX = 2;
				minY = 2;
				maxX = parseInt(pageArray[2] - div.outerWidth(true) - 2);
				maxY = parseInt(pageArray[3] - div.outerHeight(true) - 2);
				stepX = 1;
				stepY = (maxY / maxX) * stepX;
				
				if (direction) {
					fromX = parseFloat(fromX + stepX);
					fromY = parseFloat(fromY + stepY);
				} else {
					fromX = parseFloat(fromX - stepX);
					fromY = parseFloat(fromY - stepY);
				}
				
				// 确定方向
				if (fromX <= minX && fromY <= minY) {
					fromX = minX;
					fromY = minY;
					direction = 1;
				}
				if (fromX >= maxX && fromY >= maxY) {
					fromX = maxX;
					fromY = maxY;
					direction = 0;
				}
				
				div.css({"top": fromY + scrollArray[1] + "px", "left": fromX + scrollArray[0] + "px"});
			}
			
			/**
			 * 对联飘
			 */
			function fixBothSidebar()
			{
				pageArray = $.getPageSize();
				// 修改为在最底下漂
				// maxY = parseInt(pageArray[3] - div.outerHeight(true) * 2);
				maxY = parseInt((pageArray[3] - div.outerHeight(true)) / 2);
				if (document.all) {
					scrollArray = $.getPageScroll();
					
					fromY = parseInt(div.css("top"), 10);
					toY = maxY + scrollArray[1];
					if (isNaN(fromY) || fromY < 0) {
						fromY = toY;
					}
					offsetY = Math.ceil(Math.abs((toY - fromY)) / time);
					if (toY < fromY) {
						offsetY = -offsetY; 
					}
					div.css({"top": fromY + offsetY + "px", "left": "2px"});
					div1.css({"top": fromY + offsetY + "px", "right": "2px"});
				} else {
					div.css({"position":"fixed", "top": maxY + "px", "left": "2px"});
					div1.css({"position":"fixed", "top": maxY + "px", "right": "2px"});
				}
			}
			
			/**
			 * 右下角飘
			 */
			function fixRightBottom() {
				pageArray = $.getPageSize();
				maxY = parseInt(pageArray[3] - div.outerHeight(true) - 2);
				if (document.all) {
					scrollArray = $.getPageScroll();
					
					fromY = parseInt(div.css("top"), 10);
					toY = maxY + scrollArray[1];
					if (isNaN(fromY) || fromY < 0) {
						fromY = toY;
					}
					offsetY = Math.ceil(Math.abs((toY - fromY)) / time);
					if (toY < fromY) {
						offsetY = -offsetY; 
					}
					div.css({"top": fromY + offsetY + "px", "right": "2px"});
				} else {
					div.css({"position": "fixed", "top": maxY + "px", "right": "2px"});
				}
			}
		}); // end plugin
	};
})(jQuery);
