function getParam(response, param){
	var value = response.getElementsByTagName(param);
	if(value.length){
		if(value[0].childNodes.length > 1){
			for(var i = 0; i < value[0].childNodes.length; i++)
				if(value[0].childNodes[i].nodeType == 4)
					return value[0].childNodes[i].data;
		} else {
			return value[0].firstChild.data;
		}
	}
	return 0;
}

function FTEngine(url) {
	this.url = url;
	
	this.makeRequest = function () {
		this.initRequestObj();
		if( typeof(request) != "undefined" ) {
			var xmlRequestDoc = "<\?xml version='1.0' encoding='UTF-8' standalone='yes'\?>\n";
			xmlRequestDoc += "<request>\n";

			for(var i = 0; i < arguments.length; i++) {
				var attribute = arguments[i].split('=',2);
				if( attribute[0].indexOf('[]') == -1 ) {
					xmlRequestDoc += "<"+attribute[0]+">"+attribute[1]+"</"+attribute[0]+">\n";
				} else {
					var name = attribute[0].substr(0, attribute[0].length-2);
					xmlRequestDoc += "<"+name+" multi=\"true\">"+attribute[1]+"</"+name+">\n";
				}
			}
			
			currentInstance = arguments[1];
			
			xmlRequestDoc += "</request>";
			
//			alert(xmlRequestDoc);
			
			request.onreadystatechange = onResponse;
			request.open("POST", this.url, true);
			request.send(xmlRequestDoc);
		} else {
			alert('Your browser doesn\'t support XMLHTTPRequest.');
		}
	}
	
	this.processForm = function(form_name) {
		var form = document.forms[form_name];
		if( form != 'undefined' && form != null ) {
			var executeString = "this.makeRequest(";
			var inputs = form.getElementsByTagName('input');
			for( var i=0; i<inputs.length; i++ ) {
				if( inputs[i].name != "" ) {
					if((((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked ) ||
						(inputs[i].type != 'checkbox' && inputs[i].type != 'radio')) && !inputs[i].disabled )
					{
						executeString += "'"+inputs[i].name+"="+inputs[i].value+"',";
					}
				}
			}
			
			var selects = form.getElementsByTagName('select');
			for( var i=0; i<selects.length; i++ ) {
				if(selects[i].name != "" && !selects[i].disabled) {
					if( selects[i].name.indexOf('[]') == -1 ) {
						executeString += ", '"+selects[i].name+"="+selects[i].value+"'";
					} else {
						for(var j=0; j<selects[i].options.length; j++)
							if( selects[i].options[j].selected )
								executeString += "'"+selects[i].name+"="+selects[i].options[j].value+"',";
					}
				}
			}
			
			var textAreas = form.getElementsByTagName('textarea');
			for( var i=0; i<textAreas.length; i++ ) {
				if(textAreas[i].name != "" && !textAreas[i].disabled) {
					executeString += "'"+textAreas[i].name+"="+textAreas[i].value+"',";
				}
			}
			
//			alert(executeString);
			
			executeString = executeString.substr(0, executeString.length-1)+")";
			eval(executeString);
		}
	}
	
	this.initRequestObj = function(){
		if(window.ActiveXObject)
			request = new ActiveXObject("MSXML2.XMLHTTP");	
		else if(window.XMLHttpRequest)
			request = new XMLHttpRequest();
	}
}

function onResponse() {
	if(request.readyState == 4)
	{
		if(request.status == 200) {
			if(request.responseXML){
				if(navigator.appName == "Microsoft Internet Explorer"){
					request.responseXML.loadXML(request.responseText);
				}
				var response = request.responseXML.documentElement;
				var modules = response.getElementsByTagName('module');
//				alert(modules.length);
				for(var i=0; i<modules.length; i++) {
					var content = getParam(modules[i], 'content');
					var instance = getParam(modules[i], 'instance');
//					alert(instance);
//					alert(content);
										
					var container = document.getElementById(instance == ''?currentInstance:instance);
					if( container != 'undefined' && container != null ) {
						container.innerHTML = content;
					}
					
				}
				
				var debug_info = getParam(response, 'debug');
				var onload = getParam(response, 'onload');
				
				if(onload) {
					eval(onload);
				}
				
			} else {
				var content = request.responseText;
				var container = document.getElementById(currentInstance);
				if( container != 'undefined' && container != null ) {
					container.innerHTML = content;
				}
			}
			
//			alert(request.responseText);
			
			hideMessage();
		}
		else if(request.status == 404) {
			//printErrorMessage('Requested page not found');
			showMessage('error');
		}
		else {
			//printErrorMessage("There was a problem retrieving the response");
			showMessage("error");
		}
	}
	if( request.readyState == 1 ) {
		showMessage('&nbsp;LOADING...&nbsp;');
	}
}

function printErrorMessage(message) {
	var error_area = document.getElementById('error_area');
	if( error_area != null && error_area!='undefined') {
		error_area.innerHTML = message;
	} else {
		alert(message);
	}
}

function showMessage(msg) {
	var el = document.getElementById('message_log');
	if(el != 'undefined' && el != null) {
		el.innerHTML = msg;
		el.style.display = 'block';
	}
}

function hideMessage() {
	var el = document.getElementById('message_log');
	if(el != 'undefined' && el != null) {
		el.style.display = 'none';
	}
}