function Xajax()
{
if (xajaxDebug) this.DebugMessage = function(text) { alert("Xajax Debug:\n " + text) };
this.workId = 'xajaxWork'+ new Date().getTime();
this.depth = 0;
//Get the XMLHttpRequest Object
this.getRequestObject = function()
{
if (xajaxDebug) this.DebugMessage("Initializing Request Object..");
var req;
try
{
req=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
req=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e2)
{
req=null;
}
}
if(!req && typeof XMLHttpRequest != "undefined")
req = new XMLHttpRequest();
if (xajaxDebug) {
if (!req) this.DebugMessage("Request Object Instantiation failed.");
}
return req;
}
// xajax.$() is shorthand for document.getElementById()
this.$ = function(sId)//$是什么?
{
return document.getElementById(sId);
}
// xajax.include(sFileName) dynamically includes an external javascript file
this.include = function(sFileName)
{
var objHead = document.getElementsByTagName('head');
var objScript = document.createElement('script');
objScript.type = 'text/javascript';
objScript.src = sFileName;
objHead[0].appendChild(objScript);
}
// xajax.addHandler adds an event handler to an element
this.addHandler = function(sElementId, sEvent, sFunctionName)
{
if (window.addEventListener)
{
//eval的含义?
eval("this.$('"+sElementId+"').addEventListener('"+sEvent+"',"+sFunctionName+",false);");
}
else
{
eval("this.$('"+sElementId+"').attachEvent('on"+sEvent+"',"+sFunctionName+",fal**);");
}
}
// *ajax.removeHandler removes an event handler from an element
this.removeHandler = function(sElementId, sEvent, sFunctionName)
{
if (window.addEventListener)
{
eval("this.$('"+sElementId+"').removeEventListener('"+sEvent+"',"+sFunctionName+",false);");
}
else
{
eval("this.$('"+sElementId+"').detachEvent('on"+sEvent+"',"+sFunctionName+",fal**);");
}
}
// *ajax.create creates a new child node under a parent
this.create = function(sParentId, sTag, sId)
{
var objParent = this.$(sParentId);
objElement = document.createElement(sTag);
objElement.setAttribute('id',sId);
objParent.appendChild(objElement);
}
// xajax.insert inserts a new node before another node
this.insert = function(sBeforeId, sTag, sId)
{
var objSibling = this.$(sBeforeId);
objElement = document.createElement(sTag);
objElement.setAttribute('id',sId);
objSibling.parentNode.insertBefore(objElement, objSibling);
}
this.getInput = function(sType, sName, sId)
{
var Obj;
if (sType == "radio" && !window.addEventListener)
{
alert('here');
Obj = document.createElement('<input type="radio" id="'+sId+'" name="'+sName+'">');
}
else
{
Obj = document.createElement('input');
Obj.setAttribute('type',sType);
Obj.setAttribute('name',sName);
Obj.setAttribute('id',sId);
}
return Obj;
}
// xajax.createInput creates a new input node under a parent
this.createInput = function(sParentId, sType, sName, sId)
{
var objParent = this.$(sParentId);
var objElement = this.getInput(sType, sName, sId);
objParent.appendChild(objElement);
}
// xajax.insertInput creates a new input node before another node
this.insertInput = function(sBeforeId, sType, sName, sId)
{
var objSibling = this.$(sBeforeId);
var objElement = this.getInput(sType, sName, sId);
objSibling.parentNode.insertBefore(objElement, objSibling);
}
// xajax.remove deletes an element
this.remove = function(sId)
{
objElement = this.$(sId);
if (objElement.parentNode && objElement.parentNode.removeChild)
{
objElement.parentNode.removeChild(objElement);
}
}

