/*******************************************
通用方法
********************************************/
// 以 ID 获取元素
function $$(id){
	return document.getElementById(id);
}

/*******************************************
通用浏览器对象
********************************************/
var ExpUtil = new Object();
ExpUtil.userAgent =  window.navigator.userAgent.toUpperCase();
ExpUtil.isIE = false;
ExpUtil.isFireFox = false;
ExpUtil.isXHTML = false;

// 获取浏览器版本
ExpUtil.getVersion = function() {
	if (this.userAgent.indexOf("MSIE") > -1) {
		this.isIE = true;
		if (document.all[0].nodeType == 8 && document.all[0].nodeValue.toUpperCase().indexOf("XHTML") > -1) {
			this.isXHTML = true;
		}
	} 
	else if (this.userAgent.indexOf("FIREFOX") > -1) {
		this.isFireFox = true;
		
		if (document.doctype && document.doctype.publicId && document.doctype.publicId.toUpperCase().indexOf("XHTML") > -1) {
			this.isXHTML = true;
		}
	}
}

ExpUtil.getVersion();

// 添加子节点
ExpUtil.appendChildNode = function(parent,child) {
	if (this.isIE) {
		parent.insertBefore(child);
	} 
	else {
		parent.appendChild(child);
	}
}

// 获取元素文本
ExpUtil.getElementInnerText = function(el) {
	if (this.isIE) {
		return el.innerText;
	} 
	else {		
		return el.textContent;
	}

}

// 设置元素文本
ExpUtil.setElementInnerText = function(el,text) {
	if (this.isIE)	{
		el.innerText = text;
	} 
	else {
		el.textContent = text;
	}
}

ExpUtil.setElementValue = function(el,value) {
    el.value = value;
}

ExpUtil.getElementValue = function(el,value) {
    return el.value;
}


/*******************************************
事件处理函数
********************************************/
// 注册事件
// obj: 事件宿主
// eventName: 事件名
// handler: 事件处理函数引用
// capture: 事件处理方式（true:事件捕获阶段, false:事件冒泡阶段）
ExpUtil.regEvent = function(obj,eventName,handler,capture) {
	if (this.isIE) {	
		try {
			if (this.isXHTML) {
				obj.attachEvent(eventName,handler);
			}
			else {			
				obj.attachEvent(eventName,function(){handler.call(obj);});
			}			
		}
		catch(e) {			
		}
	} 
	else {
		eventName = eventName.substring(2,eventName.length);
		capture = (capture == null) ? false : capture;
		obj.addEventListener(eventName,handler,capture);
	}
}

// 注销事件
// obj: 事件宿主
// eventName: 事件名
// handler: 事件处理函数引用
// capture: 事件处理方式（true:事件捕获阶段, false:事件冒泡阶段）
ExpUtil.unregEvent = function(obj,eventName,handler,capture) {
	if (this.isIE)	{
		try {		
			if (this.isXHTML) {
				obj.detachEvent(eventName,handler);
			}
			else {			
				obj.detachEvent(eventName,function(){handler.call(obj);});
			}
		}
		catch(e) {			
		}
	} 
	else {
		eventName = eventName.substring(2,eventName.length);
		capture = (capture == null) ? false : capture;
		obj.removeEventListener(eventName,handler,capture);
	}
}

// 获取事件宿主
ExpUtil.getEventSourceElement = function(oEvent) {
	if (this.isIE)	{
		return oEvent.srcElement;
	} 
	else {
		return oEvent.target;
	}
}

// 获取事件的第二目标
ExpUtil.getEventToElement = function(oEvent) {
	if (this.isIE)	{
		return oEvent.toElement;
	} 
	else {
		return oEvent.relatedTarget;
	}
}

// 停止事件复制（不再继续引发事件）
ExpUtil.stopEvent = function(oEvent) {
	if (this.isIE)	{
		oEvent.cancelBubble = true;
	} 
	else {
		oEvent.stopPropagation();
	}
}

// 引发事件
ExpUtil.triggerEvent = function(obj, eventName, eventType) {
    if (this.isIE)	{
        obj.fireEvent(eventName);
    }
    else {
		if (eventType == null || eventType == "") {
			eventType = "HTMLEvents";
		}

        var e = document.createEvent(eventType);
        eventName = eventName.substring(2,eventName.length);
        e.initEvent(eventName, false, false);
		obj.dispatchEvent(e);
    }
}

// 获取事件鼠标位置
ExpUtil.mousePosition = function(ev) { 
    if(ev.pageX || ev.pageY){ 
        return {x:ev.pageX, y:ev.pageY}; 
    }
    
    if (ExpUtil.isXHTML) {	
        return {    
            x:ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft, 
            y:ev.clientY + document.documentElement.scrollTop  - document.documentElement.clientTop
        };
    }
        
    return {    
        x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 
        y:ev.clientY + document.body.scrollTop  - document.body.clientTop
    };
}







