/**
 * @desc 兼容不同的浏览器居中scrollCenter
 * @author ZhangHuihua@msn.com
 */
(function($){
	$.fn.extend({

		getWindowSize: function(){
			if ($.browser.opera) { return { width: window.innerWidth, height: window.innerHeight }; }
			return { width: $(window).width(), height: $(window).height() };
		},
		/**
		 * @param options
		 */		
		scrollCenter: function(options){
			// 扩展参数
			var op = $.extend({ z: 1000000, mode:"WH"}, options);
			
			// 追加到 document.body 并设置其样式
			var windowSize = this.getWindowSize();

			return this.each(function(){
				var $this = $(this).css({
					'position': 'absolute',
					'z-index': op.z
				});
				
				// 当前位置参数
				var bodyScrollTop = $(document).scrollTop();
				var bodyScrollLeft = $(document).scrollLeft();
				var movedivTop = (windowSize.height - $this.height()) / 2 + bodyScrollTop;
				var movedivLeft = (windowSize.width - $this.width()) / 2 + bodyScrollLeft;
				
				if (op.mode == "W") {
					$this.appendTo(document.body).css({
						'left': movedivLeft + 'px'
					});
				} else if (op.model == "H"){
					$this.appendTo(document.body).css({
						'top': movedivTop + 'px'
					});	
				} else {
					$this.appendTo(document.body).css({
						'top': (windowSize.height - $this.height()) / 2 + $(window).scrollTop() + 'px',
						'left': movedivLeft + 'px'
					});
				}
				
				// 滚动事件
				$(window).scroll(function(e){
					var windowSize = $this.getWindowSize();
					var tmpBodyScrollTop = $(document).scrollTop();
					var tmpBodyScrollLeft = $(document).scrollLeft();
					
					movedivTop += tmpBodyScrollTop - bodyScrollTop;
					movedivLeft += tmpBodyScrollLeft - bodyScrollLeft;
					bodyScrollTop = tmpBodyScrollTop;
					bodyScrollLeft = tmpBodyScrollLeft;

					// 以动画方式进行移动
					if (op.mode == "W") {
						$this.stop().animate({
							'left': movedivLeft + 'px'
						});
					} else if (op.mode == "H") {
						$this.stop().animate({
							'top': movedivTop + 'px'
						});
					} else {
						$this.stop().animate({
							'top': movedivTop + 'px',
							'left': movedivLeft + 'px'
						});
					}
					
				});
				
				// 窗口大小重设事件
				$(window).resize(function(){
					var windowSize = $this.getWindowSize();
					movedivTop = (windowSize.height - $this.height()) / 2 + $(document).scrollTop();
					movedivLeft = (windowSize.width - $this.width()) / 2 + $(document).scrollLeft();
					
					if (op.mode == "W") {
						$this.stop().animate({
							'left': movedivLeft + 'px'
						});
					} else if (op.mode == "H") {
						$this.stop().animate({
							'top': movedivTop + 'px'
						});
					} else {
						$this.stop().animate({
							'top': movedivTop + 'px',
							'left': movedivLeft + 'px'
						});
					}
					
				});
			});
			
		}
	});
})(jQuery);