// 2007-03-18 echew
// CT Ajax Functions
// NOTE: Any update, pls remember to put in comment

var gCtAjLayerList;

function CtAjLayer(id,msg) { 
	var browser = navigator.appName; 
	this.ie=(browser == "Microsoft Internet Explorer")?1:0;
	
	if (!gCtAjLayerList) gCtAjLayerList = new Array();
	
	gCtAjLayerList[id]=this;
	//this.div=id;
	//if (document.getElementById("_aj_"+id)) this.div="_aj_"+id; 

	this.div="_aj_"+id;
 	if (!msg) msg="Loading..";
 	this.msg=msg;
	this.idle=1;
}

CtAjLayer.prototype={
	display:function(buf) {
		var layer = document.getElementById(this.div);
		if (!layer) return;
		if (typeof layer.innerHTML =="undefined") return;
		layer.innerHTML=buf;
		//var ajx_layer = document.getElementById("ajx_layer");
		//if (ajx_layer) ajx_layer.value="<script defer>alert('k');</script>";
	},
	
	load:function (url) {
		if (this.url == url) return;  
		if (!this.idle) this.abort();
		this.req=0;

		var xmlHttp;
		try {   
        		xmlHttp=new XMLHttpRequest();
    		} catch (e) {   
        		try {
            			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        		} catch (e) {
            			try {
                			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            			} catch (e) {
                			alert("Your browser does not support AJAX!");
                			return false;
            			}
       			}
    		}
		xmlHttp.onreadystatechange=function() {
			switch(xmlHttp.readyState) {
			case 4:
			  var	caller=CtAjLayer_Caller(xmlHttp);
				caller.display(xmlHttp.responseText);
// does not work in IE6 or below
//			xmlHttp.caller.display(xmlHttp.responseText);
			break;
			}
  		} 
		//xmlHttp.caller=this;
		this.req=xmlHttp;

		this.display(this.msg);
		
		// Send request
		this.idle=0;
  		this.url=url;
  		try {
			this.req.open("GET",url);
			this.req.send(null);
  		}
  		catch(e) {
			alert("Error:"+e.toString());
		}
  	},

	abort: function () {
   		this.req.abort();
   		this.idle=1;
   		this.timer=0;
  	},
  
	timeout: function() {
 		switch (this.req.readyState) { 
			case 1, 2, 3: 
			this.req.abort();
    		break; 

  			case 4:
    		this.process(1);
    		return;
    		break;

    		default: 
    		this.abort();
    		break; 
  		}  
 	}
}
 
function CtAjLayer_Caller(req) {
	for(i in gCtAjLayerList) {
	 var obj=gCtAjLayerList[i];
	 if (!obj) continue;
	 if (obj.req==req) return obj;
	}
}



