//==========AJAX FUNCTIONS OBJECT============================
function TOOLSCONTEXT_Ajax() {
	
}

TOOLSCONTEXT_Ajax.prototype.sendParams = function(scriptPath, params, getResponse, async, callback) {
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
        xmlhttp = new XMLHttpRequest();
        var ieModel = false;
        /*
        if (xmlhttp.overrideMimeType) {
            xmlhttp.overrideMimeType('text/xml');
        }
        */
   	} else if (window.ActiveXObject) { // IE
   		var ieModel = true;
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (async && callback) {
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4) {
				eval(callback+'(xmlhttp.responseText);');
			}
		};
    }
	postUrl = TOOLSCONTEXT.uriRoot + 'tools/software/original/' + scriptPath;
	if (TOOLSCONTEXT.debug == 'toHelp') TOOLSCONTEXT.utility.dumpToHelp(postUrl + '<br><br>\n\n' + params + '<br><br>\n\n');
	xmlhttp.open("POST", postUrl, async);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(params);
	if (TOOLSCONTEXT.debug == 'toHelp') TOOLSCONTEXT.utility.dumpToHelp(xmlhttp.responseText);
	if (!async) {
		if (getResponse == 'noResponse') return;
		if (getResponse == 'text') return xmlhttp.responseText;
		if (ieModel) {
			rh = xmlhttp.getAllResponseHeaders();
			return xmlhttp.responseXML;
		} else {
			var parser = new DOMParser();
			var xmlDoc = parser.parseFromString(xmlhttp.responseText, "text/xml");	
			return xmlDoc;
		}
	}
};

TOOLSCONTEXT_Ajax.prototype.prepParams = function(entityName, params) {
	out = 'cleanOutput=yes&' + entityName + '.display=data';
	for (key in params) {
		curParam = escape(params[key]);
		out += '&' + entityName + '.' + key + '=' + curParam;
	}
	return out;
};

TOOLSCONTEXT_Ajax.prototype.loadData = function(url, params) {
	xmlDoc = this.sendParams(url, params);
	
	dataRoot = xmlDoc.getElementsByTagName('TOOLSCONTEXTDATA')[0];
	dataOut = new Array();
	for (i = 0; i < dataRoot.childNodes.length; i++) {
		curNode = dataRoot.childNodes[i];
		if (curNode.tagName && (curNode.tagName.indexOf(entityName) != -1)) {
			dataOut[curNode.tagName] = new Array();
			for (j = 0; j < curNode.childNodes.length; j++) {
				dataNode = curNode.childNodes[j];
				if (dataNode.tagName) {
					if (dataNode.firstChild) {
						dataOut[curNode.tagName][dataNode.tagName] = dataNode.firstChild.data;
					} else {
						dataOut[curNode.tagName][dataNode.tagName] = '';
					}
				}	
			}
			dataOut[curNode.tagName].id = dataOut[curNode.tagName].TOOLSCONTEXTid;
		}
	}
	return dataOut;
};

TOOLSCONTEXT_Ajax.prototype.saveOneProp = function(entityName, entityId, propertyName, textValue) {
	p = new Array();
	p.action = 'store';
	p.id = entityId;
	p['dp.' + propertyName] = textValue;
	params = this.prepParams(entityName, p);
	this.sendParams('go.php', params, 'noResponse');
};
TOOLSCONTEXT_Ajax.prototype.deleteItem = function(entityName, entityId) {
	p = new Array();
	p.id = entityId;
	p.action = 'delete';
	params = this.prepParams(entityName, p);
	this.sendParams('go.php', params, 'noResponse');
};
TOOLSCONTEXT_Ajax.prototype.addItem = function(entityName, parentId) {
	p = new Array();
	p['dp.Title'] = 'New Page';
	p['dp.content'] = parentId;
	p.action = 'store';
	params = this.prepParams(entityName, p);
	this.sendParams('go.php', params, 'noResponse');
};
TOOLSCONTEXT_Ajax.prototype.getChildContent = function(parentId) {
	entityName = 'content';
	var p = new Array();
	p.action = 'search';
	p.propertySet = 'narrowColumn';
	p['dp.content.idValue'] = parentId;
	params = this.prepParams(entityName, p);
	childContent = this.loadData('go.php', params);
	return childContent;
};
TOOLSCONTEXT_Ajax.prototype.getOneProperty = function(entityName, entityId, propertyName, propertySet) {
	if (!propertySet) propertySet = 'narrowColumn';
	var p = new Array();
	p.id = entityId;
	p.propertySet = propertySet;
	params = this.prepParams(entityName, p);
	xmlDoc = this.sendParams('go.php', params);
	propertyNodes = xmlDoc.getElementsByTagName(propertyName);
	if (!propertyNodes[0]) return '';
	if (!propertyNodes[0].firstChild) return '';
	return propertyNodes[0].firstChild.data;
};

if (!TOOLSCONTEXT) {
var TOOLSCONTEXT = new Object();
	TOOLSCONTEXT.uriRoot = '/';
	TOOLSCONTEXT.utility = new Object();
	TOOLSCONTEXT.utility.isIE = function () {
		if (document.all) {
			return true;
		} else {
			return false;
		}
};
}
	
TOOLSCONTEXT.ajax = new TOOLSCONTEXT_Ajax();