﻿function $(id)
{
  return document.getElementById(id);
}

function BrowserCompatible () {};

BrowserCompatible.getEvent = function (evt)
{
	return (evt ? evt : (window.event ? window.event : BrowserCompatible.getEvent.caller.arguments[0]));
}

BrowserCompatible.getEventX = function (evt)
{
	if (!evt)
		return 0;
	
	var x = parseInt(evt.clientX ? evt.clientX : evt.pageX);
	
	if ( isNaN(x))
		return 0;
	else
		return x;
}

BrowserCompatible.getEventY = function (evt)
{
	if (!evt)
		return 0;
	
	var y = parseInt(evt.clientY ? evt.clientY : evt.pageY);
	
	if (isNaN (y))
		return 0;
	else
		return y;
}

BrowserCompatible.fireKeyEvent = function (evt)
{
	if (evt)
	{
		if (evt.keyCode)
			evt.keyCode = 0;
		else
			evt.which = 0;
		
		evt.returnValue = false;
	}
}

BrowserCompatible.getSrcElement = function (evt)
{
	if (!evt)
		return null;
	else
		return (evt.srcElement ? evt.srcElement : evt.target);
}

BrowserCompatible.getKeyCode = function (evt)
{
	if (!evt)
		return 0;
	else
		return (evt.keyCode ? evt.keyCode : evt.which); 
}


BrowserCompatible.findWindow = function (windowName)
{
	var currentWindow = window;
	
	try
	{
		while (currentWindow.parent.window)
		{
			currentWindow = currentWindow.parent.window;
			
			if (currentWindow.name == windowName)
				break;
		}
	}
	catch (e)  {}
	
	if (currentWindow.name == windowName)
		return currentWindow;
	else
		return null;
}

BrowserCompatible.isIE = function ()
{
	//return (window.navigator.userAgent.indexOf("MSIE") > -1);
	return (window.navigator.appName.indexOf("Microsoft Internet Explorer") > -1);
}

BrowserCompatible.isMYIE = function ()
{
	//return (window.navigator.userAgent.indexOf("Maxthon") > -1);
	return (window.navigator.appName.indexOf ("Maxthon") > -1);
}

BrowserCompatible.isFirefox = function ()
{
	return (window.navigator.userAgent.indexOf("Firefox") > -1);
}

BrowserCompatible.winWidth   = 0;
BrowserCompatible.winHeight  = 0;
BrowserCompatible.getwinWidth = function()
{
	if (window.innerWidth)//for Firefox
	{
		BrowserCompatible.winWidth = window.innerWidth;
	}
	else if((document.body) && (document.body.clientWidth))
	{
		BrowserCompatible.winWidth = document.body.clientWidth;
	}

	if (document.documentElement && document.documentElement.clientWidth)
	{
		BrowserCompatible.winWidth = document.documentElement.clientWidth;
	}
	return BrowserCompatible.winWidth;
}

BrowserCompatible.getwinHeight = function()
{
	if (window.innerHeight)//for Firefox
	{
		BrowserCompatible.winHeight = window.innerHeight;
	}
	else if((document.body) && (document.body.clientHeight))
	{
		BrowserCompatible.winHeight = document.body.clientHeight;
	}

	if (document.documentElement  && document.documentElement.clientHeight)
	{
		BrowserCompatible.winHeight = document.documentElement.clientHeight;
	}
	return BrowserCompatible.winHeight;
}

BrowserCompatible.getObjTop = function(obj)
{
	var top = 28;
	var tmp = '';
	while (eval("obj" + tmp).tagName != "BODY") 
	{
		tmp += ".offsetParent";
		top += eval("obj" + tmp).offsetTop;
	}
	return top;
}

BrowserCompatible.getObjLeft = function(obj)
{
	var left = 0;
	var tmp = '';
	while (eval("obj" + tmp).tagName != "BODY") 
	{
		tmp += ".offsetParent";
		left += eval("obj" + tmp).offsetLeft;
	}
	return left;
}

BrowserCompatible.hasClassName = function(element, className) 
{
    if (!element) return;
    var elementClassName = element.className;
    if (elementClassName.length == 0) return false;
    if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      return true;
    return false;
}

BrowserCompatible.addClassName = function(element, className) 
{
    if (!element) return;
    var elementClassName = element.className;
	if (elementClassName.length == 0) 
	{
		element.className = elementClassName;
		return;
	}
    if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) 
		return;
	element.className = elementClassName + " " +  className;
}

BrowserCompatible.removeClassName = function(element, className) 
{
    if (!element) return;
	var elementClassName = element.className;
    if (elementClassName.length == 0) return;
	if(elementClassName == className)
	{
		element.className = "";
		return;
	}
	if (elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
		element.className = elementClassName.replace((new RegExp("(^|\\s)" + className + "(\\s|$)"))," ");
}

function Ajax () {};
Ajax.tipDiv = null;
Ajax.bgColor     = "#CC4444";
Ajax.borderColor = "#666666";
Ajax.fontColor   = "#ffffff";
Ajax.message     = "\u6b63\u5728\u5904\u7406\uff0c\u8bf7\u7a0d\u5019...";
Ajax.pool = [];
Ajax.tipBinder = ["INPUT", "SPAN", "DIV", "IMAGE"];

Ajax.inTipBinder = function (tagName)
{
	for (var i = 0; i < Ajax.tipBinder.length; i++)
	{
		if (tagName == Ajax.tipBinder[i])
			return true;
	}
	
	return false;
}

Ajax.getSrcElement = function (evt)
{
	var srcElement = BrowserCompatible.getSrcElement (evt);
	
	if (!srcElement || !Ajax.inTipBinder (srcElement.tagName) || evt.button >= 2)
		return null;
	else
		return srcElement;
}

Ajax.setTip = function(bgColor,borderColor,fontColor,message)
{
	if(!(bgColor == "null" || bgColor == null))
		Ajax.bgColor = bgColor;
		
	if(!(borderColor == "null" || borderColor == null))
		Ajax.borderColor = borderColor;

	if(!(fontColor == "null" || fontColor == null))
		Ajax.fontColor = fontColor;
	
	if(!(message == "null" || message == null))
		Ajax.message = message;
};

Ajax.showTip = function (evt)
{
	var srcElement = Ajax.getSrcElement (evt);
	
	if (!srcElement)
		return;
	
	try
	{
		if (!srcElement.type || srcElement.type.toLowerCase() != "text")
			srcElement.disabled = true;
	}
	catch (E) {}
	
	var x = BrowserCompatible.getEventX (evt);
	var y = BrowserCompatible.getEventY (evt);
	
	if (!Ajax.tipDiv)
	{
		Ajax.tipDiv = document.createElement("div");
		Ajax.tipDiv.style.cssText =  "visibility:visible;position:absolute;width:150;height:18;background-color:" + Ajax.bgColor + ";border-style:solid;border-width:1;border-color:" + Ajax.borderColor + ";font-size:12px;color:" + Ajax.fontColor + ";padding:1px;";
		Ajax.tipDiv.innerHTML = Ajax.message;
		
		Ajax.tipDiv.style.left = (x + 15) + "px";
		Ajax.tipDiv.style.top = (y + 10) + "px";
		
		document.body.appendChild (Ajax.tipDiv);
	}
	else
	{
		Ajax.tipDiv.style.left = (x + 15) + "px";
		Ajax.tipDiv.style.top = (y + 10) + "px";
		Ajax.tipDiv.style.visibility = "visible";
		Ajax.tipDiv.style.display = "";
	}
}

Ajax.hideTip = function ()
{
	if (Ajax.tipDiv)
	{
		Ajax.tipDiv.style.visibility = "hidden";
		Ajax.tipDiv.style.display = "none";
	}
}

Ajax.createLoading = function(left,top,imgsrc,message,id,parentObj)
{
	var left = left || "5%";	
	if(!isNaN(left)) left = parseInt(left,10) + "px";
	var top = top || "40%";
	if(!isNaN(top)) top = parseInt(top,10) + "px";
	if(!imgsrc) imgsrc = "../images/loading.gif";
	var message = message || "正在加载数据，请稍后......";
	if(!id) id = "ajaxLoadingDiv";
	if(!parentObj) parentObj = document.body;
	
	var div = document.createElement("div");
	div.id = id;
	div.style.cssText ="position:absolute;background-color:#FFCC00;color:#FF0000;border:#ccc solid 1px;font-size:12px;padding-bottom:2px;text-align:center;vertical-align:middle;white-space:nowrap;left:" + left + ";top:" + top + ";";
	div.innerHTML = '<img src="'+ imgsrc + '" width="16" height="16" style="margin-left:2px;margin-top:2px;"/>&nbsp;' + message;
	
	parentObj.appendChild (div);
}

Ajax.removeLoading = function(id)
{
	if(!id) id = "ajaxLoadingDiv";
	var div = document.getElementById(id);
	if(div)
	{
		div.parentNode.removeChild(div);
	}
}

Ajax.getInstance =function ()
{
    for (var i = 0; i < Ajax.pool.length; i++)
    {
        if (Ajax.pool[i].flag == 0 && (Ajax.pool[i].http_request.readyState == 0 || Ajax.pool[i].http_request.readyState == 4))
        {
        	Ajax.pool[i].flag = 1;
        	
        	return Ajax.pool[i];
        }
    }
    
    var http_request = Ajax.createHttpRequestObj();
    
    var l = Ajax.pool.length;
  	
    Ajax.pool[l] = {"flag":1,"http_request":http_request};
    
    return Ajax.pool[l];
}

Ajax.createHttpRequestObj = function ()
{
	var objXMLHttp = null;
	
	if (window.XMLHttpRequest)
	{
		objXMLHttp = new XMLHttpRequest();
	    
		if (objXMLHttp.overrideMimeType)
			objXMLHttp.overrideMimeType('text/xml');
	}
	else
	{
	    var MSXML = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0'];
	    
	    for(var n = 0; n < MSXML.length; n++)
	    {
	        try
	        {
	            objXMLHttp = new ActiveXObject(MSXML[n]);        
	            break;
	        }
	        catch(e) {}
	    }
	}
	
  return objXMLHttp;
}

Ajax.bindListener = function (http_request_handler, callbackFunction, srcElement)
{
	var ME = {};
		ME.http_request = http_request_handler.http_request;
		ME.http_request_handler = http_request_handler;
		if(callbackFunction.indexOf("(") == -1)
		{
			ME.callbackFunction = callbackFunction + "(ME.responseText)";
		}
		else if(callbackFunction.indexOf("http_request") != -1)
		{
			ME.callbackFunction = callbackFunction.replace(/\.http_request/,"");
		}
		else
		{
			ME.callbackFunction = callbackFunction;
		}
		ME.srcElement = srcElement;
		ME.responseText = "";
	
	http_request_handler.http_request.onreadystatechange = function ()
	{
		if (ME.http_request_handler.http_request.readyState == 4)
		{
			Ajax.hideTip ();
			
			if (ME.http_request_handler.http_request.status == 200)
			{
				ME.responseText = ME.http_request.responseText;
				
				if (ME.callbackFunction != null)
				{
					try
					{
						eval (ME.callbackFunction);
					}
					catch (e)	
					{
						alert("实际错误消息为：" + e.message + "\n错误类型字符串为：" + e.name);
					}
				}
			}
			else
			{
				var status = ME.http_request_handler.http_request.status;
				if(status == 403)
				{
					alert("你请求的页面禁止访问!");
				}
				else if(status == 404)
				{
					alert("你请求的页面不存在!");
				}
				else if(status == 500)
				{
					alert("你请求的页面服务器内部错误!");
				}
				else if(status == 502)
				{
					alert("Web服务器收到无效的响应!");
				}
				else if(status == 503)
				{
					alert("服务器繁忙，请稍后再试!");
				}
				else
				{
					alert("你请求的页面遇到问题，操作失败!错误代码:" + status);
				}
				
				if (ME.errorHandleFunction != null)
				{
					try
					{
						eval (ME.errorHandleFunction);
					}
					catch (E) {}
				}
			}
			
			try
			{
				ME.http_request_handler.flag = 0;
				ME.http_request_handler.http_request.abort ();
				
				if (ME.srcElement && (!ME.srcElement.type || ME.srcElement.type.toLowerCase() != "text"))
				{
					ME.srcElement.disabled = false;
				}
			}catch (E) {}
		}
	}
}

Ajax.sendGetRequest = function (url, asynchronize, callbackFunction)
{
	var evt = BrowserCompatible.getEvent();
	var srcElement = Ajax.getSrcElement (evt);
	
	Ajax.showTip (evt);
	
	var http_request_handler = Ajax.getInstance();
	
	Ajax.bindListener (http_request_handler, callbackFunction, srcElement);
	
	if (url.indexOf ("?") > 0)
		url = url + "&random=" + new Date().getTime();
	else
		url = url + "?random=" + new Date().getTime();
	
	http_request_handler.http_request.open ('GET', url, asynchronize);
	
	http_request_handler.http_request.send (null);
	
	return false;
}

Ajax.sendGetRequest2 = function (url, asynchronize, callbackFunction)
{
	var evt = BrowserCompatible.getEvent();
	var srcElement = Ajax.getSrcElement (evt);
	
	Ajax.showTip (evt);
	
	var http_request_handler = Ajax.getInstance();
	
	Ajax.bindListener (http_request_handler, callbackFunction, srcElement);
	
	if (url.indexOf ("?") > 0)
		url = url + "&random=" + new Date().getTime();
	else
		url = url + "?random=" + new Date().getTime();
	
	http_request_handler.http_request.open ('GET', url, asynchronize);
	
	http_request_handler.http_request.send (null);
	
	return false;
}

Ajax.sendPostRequest2 = function (url, requireString, asynchronize, callbackFunction)
{
	var evt = BrowserCompatible.getEvent();
	var srcElement = Ajax.getSrcElement (evt);
	
	Ajax.showTip (evt);
	
	var http_request_handler = Ajax.getInstance();
	
	Ajax.bindListener (http_request_handler, callbackFunction, srcElement);
	
	if (url.indexOf ("?") > 0)
		url = url + "&random=" + new Date().getTime();
	else
		url = url + "?random=" + new Date().getTime();
	
	http_request_handler.http_request.open ('POST', url, asynchronize);
	
	http_request_handler.http_request.setRequestHeader ('Content-Type','application/x-www-form-urlencoded');
	http_request_handler.http_request.setRequestHeader ("Content-length", requireString.length);
	http_request_handler.http_request.setRequestHeader ("Connection", "close");
	
	http_request_handler.http_request.send (requireString);
	
	return false;
}

Ajax.sendPostRequest = function (url, formElement, asynchronize, callbackFunction)
{
	var evt = BrowserCompatible.getEvent();
	var srcElement = Ajax.getSrcElement (evt);
	
	Ajax.showTip (evt);
	
	var http_request_handler = Ajax.getInstance();
	
	Ajax.bindListener (http_request_handler, callbackFunction, srcElement);
	
	if (url.indexOf ("?") > 0)
		url = url + "&random=" + new Date().getTime();
	else
		url = url + "?random=" + new Date().getTime();
	
	http_request_handler.http_request.open ('POST', url, asynchronize);
	
	var requireString = Ajax.parseParameteres (formElement);
	
	//设置标志，用户服务器端的编码处理
	requireString = "byAjax=1&" + requireString;
	
	http_request_handler.http_request.setRequestHeader ('Content-Type','application/x-www-form-urlencoded');
	http_request_handler.http_request.setRequestHeader ("encoding", "utf-8");
	http_request_handler.http_request.setRequestHeader ("Content-length", requireString.length);
	http_request_handler.http_request.setRequestHeader ("Connection", "close");
	
	http_request_handler.http_request.send (requireString);
	
	return false;
}

Ajax.sendPostRequest3 = function (url, formElement, asynchronize, callbackFunction)
{
	var evt = BrowserCompatible.getEvent();
	var srcElement = Ajax.getSrcElement (evt);
	
	Ajax.showTip (evt);
	
	var http_request_handler = Ajax.getInstance();
	
	Ajax.bindListener (http_request_handler, callbackFunction, srcElement);
	
	if (url.indexOf ("?") > 0)
		url = url + "&random=" + new Date().getTime();
	else
		url = url + "?random=" + new Date().getTime();
	
	http_request_handler.http_request.open ('POST', url, asynchronize);
	
	var requireString = Ajax.parseParameteres (formElement);
	
	//设置标志，用户服务器端的编码处理
	requireString = "byAjax=1&" + requireString;
	
	http_request_handler.http_request.setRequestHeader ('Content-Type','application/x-www-form-urlencoded');
	http_request_handler.http_request.setRequestHeader ("encoding", "utf-8");
	http_request_handler.http_request.setRequestHeader ("Content-length", requireString.length);
	http_request_handler.http_request.setRequestHeader ("Connection", "close");
	
	http_request_handler.http_request.send (requireString);
	
	return false;
}

Ajax.parseElements = function (elements, formNode)
{
	for (var i = 0; i < formNode.elements.length; i++)
	{
		var elm = formNode.elements[i];
		
		if(!elm || elm.tagName.toLowerCase() == "fieldset")
			continue;
		
		var t = elm.type.toLowerCase ();
		
		if (t == "hidden" || t == "text" || t == "textarea" || t == "password" || t == "checkbox" || t == "radio" || t == "select" || t == "select-one")
			elements[elements.length] = elm;
	}
}

Ajax.encodeString = function (str)
{
	if (str == null || str == "")
		return str;
	
	var ret = "";
	var value = escape(str);
	var match, re = /%u([0-9A-F]{4})/i;
	
	value = value.replace(/\+/g, "%2B");
	
	while((match = value.match(re)))
	{
		ret += value.substring(0, match.index) + escape("%u") + match[1];
		value = value.substring(match.index+match[0].length);
	}
	
	ret += value;
	
	return ret;
}

Ajax.encodeAcute = function(str)
{
	if (str == null || str == "")
		return str;
	
	var value = str;
	var ret = "";
	var match, re = /'/;
	
	while((match = value.match(re)))
	{
		ret += value.substring(0, match.index) + "&acute;";
		value = value.substring(match.index+match[0].length);
	}
	
	ret += value;
	
	return ret;
}

Ajax.uncodeAcute = function(str)
{
	if (str == null || str == "")
		return str;
	
	var value = str;
	var ret = "";
	var match, re = /&acute;/;
	
	while((match = value.match(re)))
	{
		ret += value.substring(0, match.index) + "'";
		value = value.substring(match.index+match[0].length);
	}
	
	ret += value;
	
	return ret;
}

Ajax.parseParameteres = function (formObj)
{
	Ajax.elements = [];
	Ajax.parseElements (Ajax.elements, formObj);
	
	var s = "";
	
	for (var i = 0; i < Ajax.elements.length; i++)
	{
		var obj = Ajax.elements[i];
		
		if (obj.type == "hidden")
		{
			s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
		}
		else if (obj.type == "text")
		{
			s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
		}
		else if (obj.type == "textarea")
		{
			s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
		}
		else if (obj.type == "password")
		{
			s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
		}
		else if (obj.type == "checkbox")
		{
			if (obj.checked)
			{
				s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
			}
		}
		else if (obj.type == "radio")
		{
			if (obj.checked)
			{
				s += obj.name + "=" + Ajax.encodeString(obj.value) + "&";
			}
		}
		else if (obj.type == "select")
		{
			if (obj.selectedIndex > -1)
				s += obj.name + "=" + Ajax.encodeString(obj.options[obj.selectedIndex].value) + "&";
		}
		else if (obj.type == "select-one")
		{
			if (obj.selectedIndex > -1)
				s += obj.name + "=" + Ajax.encodeString(obj.options[obj.selectedIndex].value) + "&";
		}
	}

	return s;
}

/**
*获得表单中所有控件的名称
*
*/
Ajax.getFormNames = function(theForm)
{
	  var names	= new Array(theForm.length);
	  
	  for(i=0; i<theForm.length; i++)
	  {
		names[i] = theForm.elements[i].name;
	  }
	  return names;
}

Ajax.setFormValues = function(data,theForm)
{
	if(typeof(data) != "object")
	{
		data = eval('(' + data + ')');
	}
	var len = theForm.length;
	for(i = 0; i < len; i++)
	{
		var elementName = theForm.elements[i].name;
		if(data[elementName])
		{
			theForm.elements[i].value = data[elementName];
		}
	}
}

Ajax.setTableValues = function(data,Table)
{
	if(typeof(data) != "object")
	{
		data = eval('(' + data + ')');
	}
	var tds = Table.getElementsByTagName("td");
	var len = tds.length;
	for(i = 0; i < len; i++)
	{
		if(tds[i].id == "")continue;
		var elementName = tds[i].id;
		
		if(data[elementName])
		{
			tds[i].innerHTML = data[elementName];
		}
	}
}
