/*========================================
Name: CreateEasyCMS For Ajax
=========================================
Web : http://www.CeCms.Net
Bbs : http://bbs.CeCms.Net
Copyright (C) HangZhou Sinfo Network Ltd. All Rights Reserved.
注: 本程序采用AJAXRequest 0.7类。
===========================================*/
/*AJAXRequest类部分 开始*/
function AJAXRequest() {
	var xmlPool=[],AJAX=this,ac=arguments.length,av=arguments;
	var xmlVersion=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
	var emptyFun=function(){};
	var av=ac>0?typeof(av[0])=="object"?av[0]:{}:{};
	var encode=av.charset?av.charset.toUpperCase()=="UTF-8"?encodeURIComponent:escape:encodeURIComponent;
	this.url=getp(av.url,"");
	this.oncomplete=getp(av.oncomplete,emptyFun);
	this.content=getp(av.content,"");
	this.method=getp(av.method,"POST");
	this.async=getp(av.async,true);
	this.onexception=getp(av.onexception,emptyFun);
	this.ontimeout=getp(av.ontimeout,emptyFun);
	this.timeout=getp(av.timeout,3600000);
	this.onrequeststart=getp(av.onstartrequest,emptyFun);
	this.onrequestend=getp(av.onendrequest,emptyFun);
	if(!getObj()) return false;
	function getp(p,d) { return p?p:d; }
	function getObj() {
		var i,j,tmpObj;
		for(i=0,j=xmlPool.length;i<j;i++) if(xmlPool[i].readyState==0||xmlPool[i].readyState==4) return xmlPool[i];
		try { tmpObj=new XMLHttpRequest; }
		catch(e) {
			for(i=0,j=xmlVersion.length;i<j;i++) {
				try { tmpObj=new ActiveXObject(xmlVersion[i]); } catch(e2) { continue; }
				break;
			}
		}
		if(!tmpObj) return false;
		else { xmlPool[xmlPool.length]=tmpObj; return xmlPool[xmlPool.length-1]; }
	}
	function $(id){return document.getElementById(id);}
	function $N(n,d){n=parseInt(n);return(isNaN(n)?d:n);}
	function $VO(v) {
		if(typeof(v)=="string") {
			if(v=$(v)) return v;
			else return false; }
		else return v;
	}
	function $ST(obj,text) {
		var nn=obj.nodeName.toUpperCase();
		if("INPUT|TEXTAREA".indexOf(nn)>-1) obj.value=text;
		else try{obj.innerHTML=text;} catch(e){};
	}
	function $CB(cb) {
		if(typeof(cb)=="function") return cb;
		else {
			cb=$VO(cb);
			if(cb) return(function(obj){$ST(cb,obj.responseText);});
			else return emptyFun; }
	}
	function send(purl,pc,pcbf,pm,pa) {
		var purl,pc,pcbf,pm,pa,ct,ctf=false,xmlObj=getObj(),ac=arguments.length,av=arguments;
		if(!xmlObj) return false;
		if(!pm||!purl||!pa) return false;
		var ev={url:purl, content:pc, method:pm};
		purl+=(purl.indexOf("?")>-1?"&":"?")+Math.random();
		xmlObj.open(pm,purl,pa);
		AJAX.onrequeststart(ev);
		if(pm=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ct=setTimeout(function(){ctf=true;xmlObj.abort();},AJAX.timeout);
		xmlObj.onreadystatechange=function() {
			if(ctf) { AJAX.ontimeout(ev); AJAX.onrequestend(ev); }
			else if(xmlObj.readyState==4) {
				ev.status=xmlObj.status;
				try{ clearTimeout(ct); } catch(e) {};
				try{ if(xmlObj.status==200) pcbf(xmlObj); else AJAX.onexception(ev); }
				catch(e) { AJAX.onexception(ev); }
				AJAX.onrequestend(ev);
			}
		}
		if(pm=="POST") xmlObj.send(pc); else xmlObj.send("");
	}
	this.setcharset=function(cs) {
		if(cs.toUpperCase()=="UTF-8") encode=encodeURIComponent; else encode=escape;
	}
	this.get=function() {
		var purl,pcbf,ac=arguments.length,av=arguments;
		purl=ac>0?av[0]:this.url;
		pcbf=ac>1?$CB(av[1]):this.oncomplete;
		if(!purl&&!pcbf) return false;
		send(purl,"",pcbf,"GET",true);
	}
	this.update=function() {
		var purl,puo,pinv,pcnt,ac=arguments.length,av=arguments;
		puo=ac>0?$CB(av[0]):emptyFun;
		purl=ac>1?av[1]:this.url;
		pinv=ac>2?$N(av[2],1000):null;
		pcnt=ac>3?$N(av[3],0):null;
		if(pinv) {
			send(purl,"",puo,"GET",true);
			if(pcnt&&--pcnt) {
				var cf=function(cc) {
					send(purl,"",puo,"GET",true);
					if(cc<1) return; else cc--;
					setTimeout(function(){cf(cc);},pinv);
				}
				setTimeout(function(){cf(--pcnt);},pinv);
			}
			else return(setInterval(function(){send(purl,"",puo,"GET",true);},pinv));
		}
		else send(purl,"",puo,"GET",true);
	}
	this.post=function() {
		var purl,pcbf,pc,ac=arguments.length,av=arguments;
		purl=ac>0?av[0]:this.url;
		pc=ac>1?av[1]:"";
		pcbf=ac>2?$CB(av[2]):this.oncomplete;
		if(!purl&&!pcbf) return false;
		send(purl,pc,pcbf,"POST",true);
	}
	this.postf=function() {
		var fo,vaf,pcbf,purl,pc,pm,ac=arguments.length,av=arguments;
		fo=ac>0?$VO(av[0]):false;
		if(!fo||(fo&&fo.nodeName!="FORM")) return false;
		vaf=fo.getAttribute("onsubmit");
		vaf=vaf?(typeof(vaf)=="string"?new Function(vaf):vaf):null;
		if(vaf&&!vaf()) return false;
		pcbf=ac>1?$CB(av[1]):this.oncomplete;
		purl=ac>2?(av[2]!=null?(av[2]!=""?av[2]:fo.action):fo.action):(fo.action?fo.action:this.url);
		pm=ac>3?(av[3]!=null?(av[3]!=""?av[3]:"POST"):"POST"):(fo.method?fo.method.toUpperCase():"POST");
		if(!pcbf&&!purl) return false;
		pc=this.formToStr(fo);
		if(!pc) return false;
		if(pm) {
			if(pm=="POST") send(purl,pc,pcbf,"POST",true);
			else if(purl.indexOf("?")>0) send(purl+"&"+pc,"",pcbf,"GET",true);
				else send(purl+"?"+pc,"",pcbf,"GET",true);
		}
		else send(purl,pc,pcbf,"POST",true);
	}
	/* formToStr
	// from SurfChen <surfchen@gmail.com>
	// @url     http://www.surfchen.org/
	// @license http://www.gnu.org/licenses/gpl.html GPL
	// modified by xujiwei
	// @url     http://www.xujiwei.cn/
	*/
	this.formToStr=function(fc) {
		var i,qs="",and="",ev="";
		for(i=0;i<fc.length;i++) {
			e=fc[i];
			if (e.id!=''||e.name!='') {
				if (e.type=='select-one'&&e.selectedIndex>-1) ev=e.options[e.selectedIndex].value;
				else if (e.type=='checkbox' || e.type=='radio') {
					if (e.checked==false) continue;
					ev=e.value;
				}
				else ev=e.value;
				ev=encode(ev);
				qs+=and+(e.id!=''?e.id:e.name)+'='+ev;
				and="&";
			}
		}
		return qs;
	}
}
/*AJAXRequest类部分 结束*/

/*AJAX调用 开始*/
/*Ajax检测信息是否重复
sObjectID		检测对象ID
sObjectName		检测对象信息名称
sOutObjID		输出对象ID
sUrl			递交路径
sCheckNull		是否强制非空(true--非空,false--可为空)
*/
function Ajax_chkRepeat(sObjectID,sObjectName,sOutObjID,sUrl,sCheckNull)
{	
	var OutObjID  = document.getElementById(sOutObjID);
	var ajax   = new AJAXRequest;
	ajax.setcharset("escape");
	if (sCheckNull.toLowerCase()=="true")
	{
		if(!sObjectID.value) {
			OutObjID.innerHTML="<span style='color:red;'>请输入" + sObjectName + "</span>";
			return false;
		}
	}
	OutObjID.innerHTML="正在检测，请稍候";
	ajax.get(sUrl+sObjectID.value,
		function(obj) {
			OutObjID.innerHTML=unescape(obj.responseText);
		}
	);
}

/*输出Get方式信息
sOutObjID		输出对象ID
sUrl			递交路径
ShowType		载入显示形式: 0-无提示信息,1-以文字形式,1-以图片形式		
*/
function Ajax_showGetHtml(sOutObjID,sUrl,ShowType) 
{
	var OutObjID  = (typeof(sOutObjID)=="string"?document.getElementById(sOutObjID):sOutObjID);
	var ajax=new AJAXRequest;
	ajax.setcharset("escape");
	if (ShowType==2)
		{OutObjID.innerHTML="正在载入,请稍后...<img src='/Images/Ajax/loading.gif' width='32'>";}
	else if (ShowType==1)
		{OutObjID.innerHTML="正在载入,请稍后...";}	
	else
		{OutObjID.innerHTML="";}
	ajax.get(sUrl,
		function(obj) {
				//原始
				//OutObjID.innerHTML=unescape(obj.responseText);
				var s = unescape(obj.responseText);
				AjaxInnerHTML(OutObjID, s);
		}
	);
} 

/*输出Post方式信息
sOutObjID		输出对象ID
sFormid			表单ID
ShowType		载入显示形式: 0-无提示信息,1-以文字形式,1-以图片形式		
sUrl			url请求的URL，不指定则使用表单的action属性
sMethod			method请求方式，不指定则使用表单的method属性
*/
function Ajax_showPostHtml(sOutObjID,sFormid,ShowType,sUrl,sMethod) {
	var OutObjID  = typeof(sOutObjID)=="string"?document.getElementById(sOutObjID):sOutObjID;
	sFormid = typeof(sFormid)=="string"?sFormid:(sFormid.id!=''?sFormid.id:sFormid.name);
	var ajax=new AJAXRequest;
	ajax.setcharset("escape");
	if (ShowType==2)
		{OutObjID.innerHTML="正在载入,请稍后...<img src='/Images/Ajax/loading.gif' width='32'>";}
	else if (ShowType==1)
		{OutObjID.innerHTML="正在载入,请稍后...";}	
	else
		{OutObjID.innerHTML="";}
	ajax.postf(sFormid,
		function(obj) {
				//原始
				//OutObjID.innerHTML=unescape(obj.responseText);
				var s = unescape(obj.responseText);
				AjaxInnerHTML(OutObjID, s);
		},sUrl,sMethod
	);
}

//在指定容器中以HTML方式输出信息
function AjaxInnerHTML(obj, htmlCode) {
	if (is_ie) {//针对IE会忽略首位CSS的识别，强制增加隐藏对象
		htmlCode = '<span style="display:none">for IE</span>' + htmlCode;
		htmlCode = formatscript(obj, htmlCode);
		obj.innerHTML = htmlCode;
		obj.removeChild(obj.firstChild);
    } else {//for Firefox
        var obj_next = obj.nextSibling;
        var obj_parent = obj.parentNode;
        obj_parent.removeChild(obj);
		htmlCode = formatscript(obj, htmlCode);
        obj.innerHTML = htmlCode;
        if (obj_next) {
            obj_parent.insertBefore(obj, obj_next)
        } else {
            obj_parent.appendChild(obj);
        }
    }
}

//动态加载JS脚本
function formatscript(obj, s) {
	if(s.indexOf('<script') == -1) return s;
	var p = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/ig;
	var arr = new Array();
	while(arr = p.exec(s)) {
		appendscript(obj, arr[1], arr[2], arr[3]);
	}
	s = s.replace(p, '');
	p = /<script(.*?)>([^\x00]+?)<\/script>/ig;
	if (is_ie) {
		s = s.replace(/<script([^>]*)>/gi,'<script$1 defer>');
	}
	return s;
}

//绑定并执行JS文件
var arrscripts = new Array();
function appendscript(obj, src, reload, charset) {
	var id = hash(src);
	if(!reload && in_array(id, arrscripts)) return;
	if(reload && document.getElementById(id)) {
		document.getElementById(id).parentNode.removeChild(document.getElementById(id));
	}
	arrscripts.push(id);
	var scriptNode = document.createElement("script");
	scriptNode.defer = true;
	scriptNode.language = "javascript"; 
	scriptNode.type = "text/javascript";
	scriptNode.id = id;
	scriptNode.charset = charset;
	scriptNode.src = src;
	try {
		obj.appendChild(scriptNode);
	} catch(e) {}
	scriptNode=null;
}
//Ajax执行一个页面
function Ajax_Get(sUrl) 
{
	var ajax=new AJAXRequest;
	ajax.get(sUrl,function(obj){});
}

//检查数组中是否存在某个值（在 haystack 中搜索 needle，如果找到则返回 TRUE，否则返回 FALSE）
function in_array(needle, haystack) {
	if(typeof needle == 'string' || typeof needle == 'number') {
		for(var i in haystack) {
			if(haystack[i] == needle) {
					return true;
			}
		}
	}
	return false;
}

//得到一个定长的hash值， 依赖于 stringxor()
function hash(string, length) {
	var length = length ? length : 32;
	var start = 0;
	var i = 0;
	var result = '';
	filllen = length - string.length % length;
	for(i = 0; i < filllen; i++){
		string += "0";
	}
	while(start < string.length) {
		result = stringxor(result, string.substr(start, length));
		start += length;
	}
	return result;
}

function stringxor(s1, s2) {
	var s = '';
	var hash = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	var max = Math.max(s1.length, s2.length);
	for(var i=0; i<max; i++) {
		var k = s1.charCodeAt(i) ^ s2.charCodeAt(i);
		s += hash.charAt(k % 52);
	}
	return s;
}
/*AJAX调用 结束*/
var digg_sID_arrstr='|';
/*Digg方式投票
sOutObjID		输出对象ID
sID				信息ID		
sPostType		投票类型		
*/
function digg(sOutObjID,sID,sPostType)
{
	if (sID=='') return false;
	if (digg_sID_arrstr.indexOf('|'+sID+'|')!=-1) return false;
	var sType = sPostType.toUpperCase();
	var sUrl = config.WebDir+'Common/Getdigg.asp';
	var sPostUrl
	switch(sType){
	case "ANTI":
		sPostUrl = sUrl+"?InfoID="+sID+"&Action=Update&Type=0";
		break;
	case "SUPPORT":
		sPostUrl = sUrl+"?InfoID="+sID+"&Action=Update&Type=1";
		break;
	case "NEUTRAL":
		sPostUrl = sUrl+"?InfoID="+sID+"&Action=Update&Type=2";
		break;
	default:
		sPostUrl = sUrl+"?InfoID="+sID;
		break;
	}
	digg_sID_arrstr+=sID+'|';
	Ajax_showGetHtml(sOutObjID,sPostUrl,0)
}