function Hijax(ignoreTiny, needSavedId, autoAjax) {
	var container,url,canvas,data,loading,callback,request;
	//var ignoreTiny = false;
	if(!ignoreTiny) ignoreTiny = false;
	if(!needSavedId) needSavedId = false;
	if(!autoAjax) autoAjax = false;
    
    
	//var needSavedId = true;
	this.setContainer = function(value) {
		container = value;
	};
	this.setUrl = function(value) {
		url = value;
	};
	this.setCanvas = function(value) {
		canvas = value;
	};
	this.setLoading = function(value) {
		loading = value;
	};
	this.setCallback = function(value) {
		callback = value;
	};
	this.captureData = function() {
		//if (container){
        //alert('test3');
			if (container.getAttribute("class") == "autoAjax"){
				var query = container.getAttribute("id");
				url+= "?"+query;
				return !start();
			} else {
				document.createElement("form");
				if ((container.nodeName.toLowerCase() == "form")||(container.className == "form")||(container.className == "forminput")) {
					if(autoAjax) {
						return buildFormQuery(container, container.className);
					}
					else {
						container.onsubmit = function() {
							return buildFormQuery(this);
						};
					}
				} else {
					var links = container.getElementsByTagName("a");
					for (var i=0; i<links.length; i++) {
						if ((links[i].className != 'ignore')&&(links[i].className != 'delta')){ 
							links[i].onclick = function() {
								if (this.className.match("removeTiny")){ 
									fieldId = this.id.substr(11);
									removeTinyMce(fieldId);
								}
								var query = this.getAttribute("href").split("?")[1];
								url+= "?"+query;
								return !start();
							};
						}
					}
					links = null;
				}
			}
		//}
	};
	
	var buildFormQuery = function(toBuild, wrapClass) {
		var query = "";
        
		if ((wrapClass == 'form')||(wrapClass == 'forminput')) wrapper = toBuild.childNodes;
		else wrapper = toBuild.elements;	
		for (var i=0; i<wrapper.length; i++) {
			if (wrapper[i].type == 'checkbox'){
				// dont send checkbox if value is false
				if (wrapper[i].checked == true) {
					// check if removing field
					var nameArr = wrapper[i].name.split(':');
					if (nameArr[1] == 'f_removed') {
						if (wrapper[i].value == 'on') ignoreTiny = true;
					}
	
					query+= wrapper[i].name;
					query+= "=";
					query+= escape(wrapper[i].value);
					query+= "&";							
				}
			}
			else {
				//alert(wrapper[i].value);
				query+= wrapper[i].name;
				query+= "=";
				val = escape(wrapper[i].value);
				//alert(val);
				//if (val.substr(2) == '%u') {
					//alert('test');
					//val = val.replace(/%u/,'&#x');	
					//val = val+';';
				//}
				query+= val;
				query+= "&";
			}
		}
		//alert(query);
		data = query;
		return !start();
		return true;
	}
	
	var start = function() {
		request = getHTTPObject();
		if (!request || !url) {
			return false;
		} else {
			initiateRequest();
			return true;
		}
	};

	var getHTTPObject = function() {
		var xmlhttp = false;
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					 xmlhttp = false;
				}
			}
		}
		return xmlhttp;
	};
	var initiateRequest = function() {
		if (loading) {
			loading();
		}
		request.onreadystatechange = completeRequest;
		if (data) {

			//alert(url);
	request.open("POST", url, true);
	//request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	//alert(data);
	request.send(data);
	} else {
	request.open("GET", url, true);
	request.send(null);
	}
	};

 var completeRequest = function() {
  if (request.readyState == 4) {
   if (request.status == 200 || request.status == 304) {
    if (canvas) {
	 //alert("test");
		//alert(canvas.id);
		canvas.innerHTML = request.responseText;
		//alert(canvas.innerHTML);
		tempHTML = canvas.innerHTML.replace(/"/g, "");
		if (tempHTML.indexOf('value=ajaxSUCCESS') > 0) {
			fieldID = tempHTML.indexOf('id=ajaxField');
			var fieldIDValue = tempHTML.substr(fieldID+3);
			fieldIDValueEnd = fieldIDValue.indexOf(' ');
			fieldIDValue = fieldIDValue.substr(0,fieldIDValueEnd);
			newAjaxField = document.getElementById(fieldIDValue);
			//alert(fieldIDValue);
			newAjaxField.onchange  = function(){
				var elementId = 'wrap-'+fieldIDValue;
				//alert(elementId);
				newElement = document.getElementById(elementId);
				ajaxSave(newElement);
			}
			newAjaxField.onfocus  = function(){
				clearBg(fieldIDValue);
			} 	
			//alert(fieldIDValue);
			showSuccess(fieldIDValue);
		}
		if (tempHTML.indexOf('value=ajaxFAILED') > 0) {
			fieldID = tempHTML.indexOf('id=ajaxField');
			var fieldIDValue = tempHTML.substr(fieldID+3);
			fieldIDValueEnd = fieldIDValue.indexOf(' ');
			fieldIDValue = fieldIDValue.substr(0,fieldIDValueEnd);
			newAjaxField = document.getElementById(fieldIDValue);
			//alert(newAjaxField);
			newAjaxField.onchange  = function(){
				var elementId = 'wrap-'+fieldIDValue;
				newElement = document.getElementById(elementId);
				//alert(newElement);
			} 	
			showFailure(fieldIDValue);	
		}
        if(canvas.id) saveField(canvas.id); // This had been commented out but required to save a ajax form AWW 11-03-09
    }
    if (callback) {
     callback();
    }
	// added for updating a custom field after save
	if(needSavedId) {
		var fieldArr = request.responseText.split(':');
		field = fieldArr[0];
		val = fieldArr[1];
		//document.getElementById(field).value = val;
		//alert('New Value Added');
	}
	if(ignoreTiny == false) addTiny(canvas.id);
}
  }
 };

}
