// object start
function ajaxRequest()
{

	this.obj_nr = 0;
	var args = ajaxRequest.arguments;
	var arg_cnt = 0;
	// arguments
	if(args.length > arg_cnt) this.obj_nr = args[arg_cnt];
	arg_cnt++;
	//
	this.http = null;
	this.timeout = null;
	this.http_active = false;
	this.element_id = false;
	if (window.XMLHttpRequest)
	{
		this.http = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		this.http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	this.sendRequest = function(url)
	{
		var send_method = "GET";
		var http_send = null;
		var args = this.sendRequest.arguments;
		var arg_cnt = 1;
		// arguments
		if(args.length > arg_cnt) this.element_id = args[arg_cnt];
		arg_cnt++;
		if(args.length > arg_cnt) send_method = args[arg_cnt];
		arg_cnt++;
		if(args.length > arg_cnt) http_send = args[arg_cnt];
		arg_cnt++;
		// next argument
		this.http_active = true;
		if(this.http != null)
		{
			var thiscopy = this;
			this.timeout = window.setTimeout("thiscopy.abortRequest();", 10000);
			this.http.open(send_method, url, true);
			
			this.http.onreadystatechange = function(){
				thiscopy.makeResult();
			}
			
			if(send_method == "POST")
			{
				this.http.setRequestHeader(
					"Content-Type",
					"application/x-www-form-urlencoded");
			}
	   		this.http.send(http_send);
		}
		
	}
	
	this.makeResult = function()
	{
		if(this.http.readyState == 1)
		{
			if(this.element_id != false)
			{
				document.getElementById(this.element_id).innerHTML = '<div align="center" style="vertical-align:middle;"><img src="img/loading.gif" border="0"></div>';
			}
		}
		if(this.http.readyState == 4)
		{
			window.clearTimeout(this.timeout);
			var requestResult = this.http.responseText;
			var xjs = find_js(requestResult);
			if(this.element_id != false) document.getElementById(this.element_id).innerHTML = requestResult;
			this.http_active = false;
			eval(xjs);
		}
	}

	this.abortRequest = function()
	{
		this.http.abort();
		this.http_active = false;
	}
}
// object ende

ajax_request = new Array();

function getSlot()
{
	var free_slot = false;
	for(r=0; r<ajax_request.length; r++)
	{
		if(ajax_request[r].http_active == false)
		{
			free_slot = r;
			break;
		}
	}
	if(free_slot == false)
	{
		free_slot = ajax_request.length;
		ajax_request[free_slot] = new ajaxRequest(free_slot);
		// ajax_request[free_slot].newRequest();
	}
	return free_slot;
}
function loadPage(url, el)
{
	var slot = getSlot();
	ajax_request[slot].sendRequest(url, el);
}

function sendForm(formname, el)
{
	var submitbtn = false;
	var args = sendForm.arguments;
	var arg_cnt = 2;
	// arguments
	if(args.length > arg_cnt) submitbtn = args[arg_cnt];
	arg_cnt++;	

	var url = document.forms[formname].action;
	var slot = getSlot();
	var formvalues = new Array();
	formvalues[0] = getFormValues(formname);
	if(submitbtn != false) formvalues[1] = submitbtn.name+"="+submitbtn.value;
	if(formvalues[0] == "") delete(formvalues[0]);
	if(formvalues[1] == "") delete(formvalues[1]);
	formvalues = formvalues.join("&");
	ajax_request[slot].sendRequest(url, el, "POST", formvalues);
}

function find_js(file_string)
{
	start = 0;
	contin=true;
	js="";
	text = file_string;
	while(contin==true)
	{
		p1 = text.indexOf('<script');
		p2 = text.indexOf('</script>')+9;// +9 weil "</script>" 9 zeichen lang ist
		if(p1 != -1)
		{
			js += text.substring(p1,p2);
			text = text.substr(p2);
		}
		else contin = false;
	}
	js = js.replace(/<script>/gi, "");
	js = js.replace(/<script type="text\/javascript">/gi, "");
	js = js.replace(/<\/script>/gi, "");
	//alert(js);
	//eval(js);
	return js;
	//document.write('<scr'+'ipt>'+js+'</scr'+'ipt>');
}

function getFormValues(formname)
{
	var els = new Array();
	var arrs = new Object();
	var returnstring = "";
	var anz = document.forms[formname].elements.length;
	var first_run = true;
	for(a=0; a<anz; a++)
	{
		act = document.forms[formname].elements[a];
		ok = true;
		// insval = act.value;
		insname = act.name;
		if(act.disabled == true)
		{
			ok = false;
			continue;
		}
		// alert(act.name+" ("+act.type+")");
		if(act.type == 'radio' && act.checked != true)
		{
			ok = false;
			continue;
		}
		else if(act.type == 'checkbox' && act.checked != true)
		{
			ok = false;
			continue;
		}
		else if(act.type == 'submit')
		{
			ok = false;
			continue;
		}
		else if(act.type == 'select-one')
		{
			if(act.selectedIndex == -1) act.selectedIndex = 0;
			// alert(act.options[act.selectedIndex].value);
			if(act.options[act.selectedIndex].value != null) els[els.length] = insname+"="+makeValidString(act.options[act.selectedIndex].value); // && act.options[act.selectedIndex].value != ""
			else els[els.length] = insname+"="+makeValidString(act.options[act.selectedIndex].text);
			// alert("select-one");
		}
		else if(act.type == 'select-multiple')
		{
			if(insname.substr(insname.length - 2) == "[]")
			{
				oc = 0;
				for(o=0; o<act.options.length; o++)
				{
					if(act.options[o].selected == true)
					{
						if(act.options[o].value != null) els[els.length] = insname.substr(0, insname.length - 2) + "["+oc+"]=" + makeValidString(act.options[o].value);
						else els[els.length] = insname.substr(0, insname.length - 2) + "["+oc+"]=" + makeValidString(act.options[o].text);
						oc++;
					}
				}
			}
			else
			{
				/*
				if(act.selectedIndex == -1) act.selectedIndex = 0;
				if(act.options[act.selectedIndex].value != null) insval = act.options[act.selectedIndex].value;
				else insval = act.options[act.selectedIndex].text;
				*/
				if(act.selectedIndex == -1) act.selectedIndex = 0;
				if(act.options[act.selectedIndex].value != "" && act.options[act.selectedIndex].value != null) els[els.length] = insname+"="+makeValidString(act.options[act.selectedIndex].value);
				else els[els.length] = insname+"="+makeValidString(act.options[act.selectedIndex].text);
			}
			//
			
		}
		else
		{
			if(insname.substr(insname.length - 2) == "[]")
			{
				var insbasename = insname.substr(0, (insname.length - 2))
				if(!arrs[insbasename]) arrs[insbasename] = 0;
				els[els.length] = insbasename+"["+arrs[insbasename]+"]="+makeValidString(act.value);
				arrs[insbasename]++;
			}
			else els[els.length] = insname+"="+makeValidString(act.value);
		}
		//...
		//
		/*
		if(ok == true)
		{
			if(first_run==false) returnstring += "&";
			// returnstring += insname+"="+insval;
			returnstring += insname+"="+makeValidString(insval);
			first_run = false;
		}
		*/
	}
	returnstring = els.join("&");
	return returnstring;
}
