﻿// JScript 文件
/**
 * @fileoverview zoommer 对象是Qzone5.0框架的全局对象，里面包含了zoommer所用到的所有方法，事件等
 * @author QzoneWebGroup
 * @version 1.03
 */
if (typeof zoommer == "undefined" || !zoommer) {
	/**
	 * zoommer全局对象
	 * @namespace zoommer全局对象
	 */
	var zoommer = {}; //如果不想在firebug中显示出来zoommer对象则使用这行
	// window.zoommer = {};
}
/* 获取对象坐标
		 * @param {HTMLElement} el
		 * @return 对象
		 * @type Array
		 */ 
(function()
{
  var vie, vff, vopera, vsf, vapple, wintype, mactype;
	var discerned = false;
	
	var agent = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel|Minefield).(\d+\.\d+))|(?:Opera.(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))/.exec(navigator.userAgent);
	
	var os = /(Windows.*?;)|(Mac OS X.*?;)/.exec(navigator.userAgent);
	if (agent) {
		vie = agent[1] ? parseFloat(agent[1]) : NaN;
		vff = agent[2] ? parseFloat(agent[2]) : NaN;
		vopera = agent[3] ? parseFloat(agent[3]) : NaN;
		vsf = agent[4] ? parseFloat(agent[4]) : NaN;
		if (!isNaN(vsf)) {
			vapple = parseFloat((/Version\/(\d+(?:\.\d+)?)/).exec(navigator.userAgent)[1]);
		}
	} else {
		vie = vff = vopera = vsf = vapple = NaN;
	}
	if (os) {
		wintype = !!os[1];
		mactype = !!os[2];
	} else {
		wintype = mactype = false;
	}
	function adjustBehaviors(){
		if (ua.ie < 7) {
			try {
				document.execCommand('BackgroundImageCache', false, true);
			} catch (ignored) {}
		}
		adjusted = true;
	}
/**
	 * 客户浏览器类型判断
	 * @namespace 客户浏览器类型判断
	 */
	zoommer.userAgent = {
		/**
		 * 取firefox版本号
		 * @return {Number} firefox版本号，不是firefox则为NaN
		 */
		firefox: vff,
		
		/**
		 * 取IE版本号
		 * @return {Number} IE版本号，不是IE则为NaN
		 */
		ie: vie,
		/**
		 * 取opera版本号
		 * @return {Number} opera版本号，不是opera则为NaN
		 */
		opera: vopera,
		/**
		 * 取safari总版本号
		 * @return {Number} safari总版本号，不是safari则为NaN
		 */
		safari: vsf,
		/**
		 * 取safari友好版本号
		 * @return {Number} safari友好版本号，不是safari则为NaN
		 */
		safariV: vapple,
		/**
		 * 取Windows版本
		 * @return {String} windows系统描述字符串
		 */
		windows: wintype,
		/**
		 * 取Mac版本
		 * @return {String} Mac系统描述字符串
		 */
		macs: mactype,
		/**
		 * 微调浏览器行为
		 */
		adjustBehaviors: adjustBehaviors
	};
})();
/**
 * 事件驱动对象，包含许多事件驱动以及绑定等方法,关键
 * @namespace
 */
zoommer.event =
{
 /**
	 * 按键代码映射
	 * @namespace QZONE.event.KEYS 里面包含了对按键的映射
	 */
	KEYS: {
		/**
		 * 退格键
		 */
		BACKSPACE: 8,
		/**
		 * tab
		 */
		TAB: 9,
		RETURN: 13,
		ESC: 27,
		SPACE: 32,
		LEFT: 37,
		UP: 38,
		RIGHT: 39,
		DOWN: 40,
		DELETE: 46
	},

	/**
	 * 扩展类型，这类事件在绑定的时候允许传参数，并且用来特殊处理一些特别的事件绑定
	 * @ignore
	 */
	extendType: /(click|mousedown|mouseover|mouseup|mousemove|scroll|contextmenu)/i,

/**
	 * 根据不同浏览器获取对应的Event对象
	 * @param {Event} evt
	 * @return 修正过的Event对象, 同时返回一个修正button的自定义属性;
	 * @type Event
	 */ 
	getEvent: function (evt){
	    evt = evt || window.event;
	    
	    /*修正Mozilla的event事件*/
        if (!evt && !zoommer.userAgent.ie) {
            var c = this.getEvent.caller;
            while (c) {
                evt = c.arguments[0];
                if (evt && Event == evt.constructor) {
                    break;
                }
                c = c.caller;
            }
        }
	    return evt;
	},
	/**
	 * 获得鼠标按键
	 * @param {Object} evt
	 * @return {number} 鼠标按键 -1=无法获取event 0=左键 1= 中键 2= 右键
	 */
	getButton: function(evt){
		var e = zoommer.event.getEvent(evt);
		if (!e) {
			return -1
		}
		
		if (zoommer.userAgent.ie) {
			return e.button - Math.ceil(e.button/2);
		}else{
			return e.button;
		}
	},
/**
	 * 获取事件触发时的鼠标位置x
	 * @param {Object} evt 事件对象引用
	 */
	mouseX: function(evt){
		evt = zoommer.event.getEvent();
		return evt.pageX ||
		(evt.clientX +
		(document.documentElement.scrollLeft || document.body.scrollLeft));
	},

	/**
	 * 获取事件触发时的鼠标位置y
	 * @param {Object} evt 事件对象引用
	 */
	mouseY: function(evt){
		evt = zoommer.event.getEvent();
		return evt.pageY ||
		(evt.clientY +
		(document.documentElement.scrollTop || document.body.scrollTop));
	}


}
/**
 * dom 对象处理
 * @namespace QZONE.dom
 */
zoommer.dom =
{
  getById: function(id) {
			return document.getElementById(id);
		},

		/**
		 * 获取对象坐标
		 * @param {HTMLElement} el
		 * @return 对象
		 * @type Array
		 */ 
		getPosition: function(el){
		   var size = zoommer.dom.getSize(el);
		   	var xy = zoommer.dom.getXY(el);
			
		    return {"top":xy[1],"left":xy[0],"width":size[0],"height":size[1]};
		},
		
		/**
		 * 获取对象坐标
		 * @param {HTMLElement} el
		 * @return Array [top,left]
		 * @type Array
		 */ 
		getXY: function(el){
		    var _t=0;
		    var _l=0;
			if (zoommer.userAgent.ie){ //document.documentElement.getBoundingClientRect顶IE的这个属性，获取对象到可视范围的距离
                
                var box = el.getBoundingClientRect();
				var oDoc = el.ownerDocument;
				_t = box.top - 2 + this.getScrollTop(oDoc);
				_l = box.left - 2 + this.getScrollLeft(oDoc);
			}else{
			    while (el.offsetParent) {
			        _t += el.offsetTop;
			        _l += el.offsetLeft;
			        el = el.offsetParent;
			    }
			}
		    return [_l,_t];
		},

		/**
		 * 获取对象尺寸
		 * @param {HTMLElement} el
		 * @return Array [width,height]
		 * @type Array
		 */ 
		getSize: function(el){
		    var _w = el.offsetWidth;
		    var _h = el.offsetHeight;
		    return [_w,_h];
		},
		
		/**
		 * 设置dom坐标
		 * @param {HTMLElement} el
		 * @param {string|number} x 横坐标
		 * @param {string|number} y 纵坐标
		 */
		setXY: function(el,x,y){
			el = this.get(el);
			var _ml = parseInt(this.getStyle(el,"marginLeft")) || 0;
			var _mt = parseInt(this.getStyle(el,"marginTop")) || 0;
			
			this.setStyle(el,"left",parseInt(x) - _ml + "px");
			this.setStyle(el,"top",parseInt(y) - _mt + "px");
		},
		/**
		 * 获取对象scrollLeft的值
		 * @param {Object} doc document
		 */
		getScrollLeft: function(doc){
            doc = doc || document;
            return Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
		},
		
		/**
		 * 获取对象的scrollTop的值
		 * @param {Object} doc document
		 */
		getScrollTop: function(doc){
            doc = doc || document;
            return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
		},
		
		/**
		 * 获取对象scrollHeight的值
		 * @param {Object} doc document
		 */
		getScrollHeight: function(doc){
            doc = doc || document;
            return Math.max(doc.documentElement.scrollHeight, doc.body.scrollHeight);
		},
		
		/**
		 * 获取对象的scrollWidth的值
		 * @param {Object} doc document
		 */
		getScrollWidth: function(doc){
            doc = doc || document;
            return Math.max(doc.documentElement.scrollWidth, doc.body.scrollWidth);
		}		
}
