/*
 * ajax类
 */

// 定义 XMLHTTP 读取的各种状态
var XMLHTTP_READYSTATE_UNLOAD = 0; // send()方法还没有被调用
var XMLHTTP_READYSTATE_READING = 1; // send()方法已经被调用，请求还是在处理中
var XMLHTTP_READYSTATE_READED = 2; // send()方法已完成，整个应答已接收
var XMLHTTP_READYSTATE_EXCHANING = 3; // 正在解析应答
var XMLHTTP_READYSTATE_FINISHED = 4; // 已解析，准备好进行下一步处理

// 定义 XMLHTTP 服务器返回的状态
var XMLHTTP_STATUS_OK = 200;	//正常状态

// 定义其他ajax用的变量
var ajaxUrls = new Array(); // 记录已经生成ajax对象的url，防止重复点击。
var ajaxStacks = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);// ajax 对象时间占位堆栈。


// AJAX类 @参数：结果类型 1 HTML 2 XML
function ajaxClass(resultType) {

	for(var _stackIndex = 0; _stackIndex < ajaxStacks.length && ajaxStacks[_stackIndex] != 0; _stackIndex++);//note 查询空闲的时间位
	ajaxStacks[_stackIndex] = 1;// 表示该任务占位

	var ajax = new Object();

	// 默认为 XML 方式
	ajax._resultType = resultType ? resultType : 'XML';

	ajax._callFunciton = null;	// 回调函数
	ajax._postContent = '';	// post内容
	ajax.ajaxUrl = '';	// ajax的url
	ajax.showArea = null; // 显示区域
	ajax._stackIndex = 0;
	ajax._stackIndex = _stackIndex;

	
	ajax.setResultType = function(resultType) {
		ajax._resultType = resultType;
	}
	
	// 初始化
	ajax._initiation = function() {
		var q = false;
		 if(window.ActiveXObject) {
			var IExmlhttps = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
			for(var i=0; i<IExmlhttps.length; i++) {
				try {
					q = new ActiveXObject(IExmlhttps[i]);
					if(q) {						
						return q;
					}
				} catch(e) {
					continue;
				}
			}
		} else if(window.XMLHttpRequest) {
			q = new XMLHttpRequest();
			if(q.overrideMimeType) {
				q.overrideMimeType('text/xml');
			}
		} 
		
		return q;		
	}

	ajax._xmlhttp = ajax._initiation();

	ajax._parseResult = function() {		
		if(ajax._xmlhttp.readyState == XMLHTTP_READYSTATE_FINISHED && ajax._xmlhttp.status == XMLHTTP_STATUS_OK) {
			if(ajaxUrls.length > 0 ) {
				for(k in ajaxUrls) {
					if(ajaxUrls[k] == ajax.ajaxUrl) {
						ajaxUrls[k] = null;
					}
				}
			}
			if(ajax._callFunciton) {
				if(ajax._resultType == 'HTML') {
					ajax._callFunciton(ajax._xmlhttp.responseText, ajax);
				} else if(ajax._resultType == 'XML') {
					//if(ajax._xmlhttp.responseXML.lastChild != null) {
						var result = ajax._xmlhttp.responseXML.lastChild.firstChild.nodeValue != null ? ajax._xmlhttp.responseXML.lastChild.firstChild.nodeValue : ajax._xmlhttp.responseText;
						//result = result != null ? result : '异常错误';
						ajax._callFunciton(result, ajax);
					//}
				}
			}
			ajaxStacks[ajax._stackIndex] = 0;// 清空标志位，使其它对象有时间段可以被申请
		}
	}	
	
	ajax.get = function(ajaxUrl, callFunciton) {
		if(in_array(ajaxUrl, ajaxUrls)) {
			return false;
		} else {
			ajaxUrls.push(ajaxUrl);
		}
		ajax.ajaxUrl = ajaxUrl;
		ajax._xmlhttp.onreadystatechange = ajax._parseResult;
		ajax._callFunciton = callFunciton ? callFunciton : null;
		//var delay = attackevasive & 1 ? (ajax._stackIndex + 1) * 1000 : 100;
		var delay = (ajax._stackIndex + 1) * 1000;
		if(window.XMLHttpRequest) {
			setTimeout(function(){
			ajax._xmlhttp.open('GET', ajax.ajaxUrl, true);
			ajax._xmlhttp.send(null);}, delay);
		} else {
			setTimeout(function(){
			ajax._xmlhttp.open("GET", ajax.ajaxUrl, true);
			ajax._xmlhttp.send();}, delay);
		}

	}
	
	ajax.post = function(ajaxUrl, postContent, callFunciton) {
		if(in_array(ajaxUrl, ajaxUrls)) {
			return false;
		} else {
			ajaxUrls.push(ajaxUrl);
		}
		ajax.ajaxUrl = ajaxUrl;
		ajax._postContent = postContent;
		ajax._xmlhttp.onreadystatechange = ajax._parseResult;
		ajax._callFunciton = callFunciton ? callFunciton : null;
		ajax._xmlhttp.open('POST', ajaxUrl);
		ajax._xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		ajax._xmlhttp.send(ajax._postContent);
	}
	return ajax;
}

function getOnly(url) {
	var a = new ajaxClass();
	a.get(url);
}

/**
 * 设置html元素中的内容
 * @param string ajax.php的连接
 * @param string 显示的元素名称 （a_ajax 这里为a）
 * @param string post传递的值
 * @param string 载入的时候显示的文字信息
 */
function setInnerHTML(url, oId, postStr, loading) {
	//var showArea = $(oId + '_ajax');
	
	var a = new ajaxClass();
	
	url += '&showId=' + oId;
	
	a.showArea = exist(oId + '_ajax') ? $(oId + '_ajax') : null;
	
	loading = loading ? loading : 'loading.......';	
	a.showArea.innerHTML = loading;
	
	if(!postStr) {	
		a.get(url, function(s, a){
			a.showArea.innerHTML = s;
			if(exist(oId + '_form')) {
				$(oId + '_form').reset();
			}
		});
	} else {
		a.post(url, postStr, function(s, a){
			a.showArea.innerHTML = s;
			if(exist(oId + '_form')) {
				$(oId + '_form').reset();
			}
		});
	}
}

function getForm(oId) {
	var i, query = '', comma = '';
	var e, eValue; // 元素对象object数组
	var frmObj = $(oId + '_form');
	  
	for(i = 0;i < frmObj.length; i++) {
		e = frmObj[i];// 获取当前的元素
		//alert(e.name + '=' + e.value);
		if(e.name == null || e.name==""){
			continue;
		} else if(e.type == 'reset' || e.type == 'image') {// ignore this type
			continue;
		} else if((e.type=='checkbox' || e.type=='radio') && e.checked == false) {
			continue;
		}		
		
		query += comma + encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value);		
		comma="&";		
	}
	return query;
}
 

/** 用来显示ajax消息
 * @param string url值
 * @param object 事件对象
 */
function ajaxMsg(url, e, loading) {
	var _x = e.clientX;
	var _y = e.clientY;
	
	loading = loading ? loading : 'loading.......';
	
	pocAlert(loading, _x, _y);
	
	var a = new ajaxClass();
	a.get(url, function(s, ajax){
		pocAlert(s, _x, _y);
		
	});
}

var msgw,msgh,bordercolor,titleheight,titlecolor;
msgw = 300; // 提示窗口的宽度
msgh = 100; // 提示窗口的高度
titleheight = 25 // 提示窗口标题高度
bordercolor="#000000"; // 提示窗口的边框颜色
titlecolor="#c51100"; // 提示窗口的标题颜色

/** pocle增强消息提示框
 * @param string 消息内容
 * @param integer 左上角x坐标
 * @param integer 左上角y坐标
 */
function pocAlert(msg, x, y){document.documentElement.scrollTop 
	
	var offSetLeft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.scrollLeft;
	var offSetTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.scrollTop;
	offSetLeft = typeof(offSetLeft) == 'number' ? offSetLeft : 0;
	offSetTop = typeof(offSetTop) == 'number' ? offSetTop : 0;
	if(offSetLeft != 0 || offSetTop != 0) {
		x += offSetLeft;
		y += offSetTop;
		//window.scroll(offSetLeft, offSetTop);
	}	

	if(x + msgw > document.body.clientWidth) {
		x = document.body.clientWidth - msgw; 
	}
	
	if(!exist('ajaxMsgDiv')) {		
		
	//	var sWidth,sHeight;
	//	sWidth=screen.width;
	//	sHeight=screen.height;
	
		var msgObj=document.createElement("div");
		msgObj.setAttribute("id","ajaxMsgDiv");
		msgObj.setAttribute("align","center");
		msgObj.style.background="white";
		msgObj.style.border="1px solid " + bordercolor;
		msgObj.style.position = "absolute";
		msgObj.style.left = x + "px";;
		msgObj.style.top = y + "px";
		msgObj.style.font="12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";
		//msgObj.style.marginLeft = window.event.clientX+"px";
		//msgObj.style.marginTop = window.event.clienty+"px";
		msgObj.style.width = msgw + "px";
		msgObj.style.height = msgh + "px";
		msgObj.style.textAlign = "center";
		msgObj.style.lineHeight ="25px";
		msgObj.style.zIndex = "30000";
		document.body.appendChild(msgObj);
		
		var title=document.createElement("h4");
		title.setAttribute("id","msgTitle");
		title.setAttribute("align","right");
		title.style.margin="0";
		title.style.padding="3px";
		title.style.background=bordercolor;
		title.style.filter="progid:DXImageTransform.Microsoft.Alpha(startX=20, startY=20, finishX=100, finishY=100,style=1,opacity=75,finishOpacity=100);";
		title.style.opacity="0.75";
		title.style.border="1px solid " + bordercolor;
		title.style.height="18px";
		title.style.font="12px Verdana, Geneva, Arial, Helvetica, sans-serif";
		title.style.color="white";
		title.style.cursor="pointer";
		title.innerHTML="×";
		title.onclick=function(){
			//document.body.removeChild(bgObj);
			$("ajaxMsgDiv").removeChild(title);
			document.body.removeChild(msgObj);
		}
		$("ajaxMsgDiv").appendChild(title);
		
		var txt=document.createElement("p");
		txt.style.margin="1em 0";
		txt.setAttribute("id","ajaxMsgTxt");
		txt.innerHTML=msg;
		$("ajaxMsgDiv").appendChild(txt);
			
	} else {
		
		var msgObj=$("ajaxMsgDiv");
		msgObj.style.left = x + "px";;
		msgObj.style.top = y + "px";
		$('ajaxMsgTxt').innerHTML=msg;
	}
	
}
