
//Konstruktor
function MiniAjax()
{
	this.AJAX_divObject;
	this.AJAX_timer;
	this.AJAX_XMLrequest;	
}

MiniAjax.request = function(method, URL, formID, divID) 
{
	this.AJAX_divObject=document.getElementById(divID);
	this.AJAX_XMLrequest = MiniAjax.createXMLHttpRequest();	
	if ((this.AJAX_XMLrequest) && (URL) && (this.AJAX_divObject))
	{
		URL = MiniAjax.checkURL(URL); //alert(URL);
		this.AJAX_XMLrequest.open(method, URL, true);

		this.run = function ()
		{
			//if(this.AJAX_XMLrequest.readyState == 2)
			//{
			//	var content = this.AJAX_XMLrequest.responseText;
			//	this.AJAX_divObject.innerHTML = this.AJAX_divObject.innerHTML + content;
			//}
			//else 
			if (this.AJAX_XMLrequest.readyState == 4)
			{
				var content = this.AJAX_XMLrequest.responseText;
				this.AJAX_divObject.innerHTML = content;
				//alert('innerHTML : ' + this.AJAX_divObject.innerHTML);
				MiniAjax.parseandexecutescript(content);
				window.clearInterval(this.AJAX_timer);
			};
		};
		var self = this;
		var closure = function () 
		{
			self.run();
		};
		this.AJAX_XMLrequest.onreadystatechange = closure;

		if (method.toUpperCase() == 'POST')
		{
			//alert('form2param(' + formID + ') : ' + form2param(formID));
			this.AJAX_XMLrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			this.AJAX_XMLrequest.send(MiniAjax.form2param(formID));
		}
		else
		{
			this.AJAX_XMLrequest.send(null);
		}


		this.AJAX_timer = window.setInterval(closure, 500);
	};
}


MiniAjax.createXMLHttpRequest = function () 
{ 
	var req = null; 
	
	try 
	{ 
		req = new ActiveXObject("MSXML2.XMLHTTP"); 
	} 
	catch (err_MSXML2) 
	{ 
		try 
		{ 
			req = new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch (err_Microsoft) 
		{ 
			if (typeof XMLHttpRequest != "undefined")  
				req = new XMLHttpRequest; 
		} 
	} 
	
	return req; 
}

MiniAjax.form2param = function(formID)
{
	var param = '';
	var form = document.getElementById(formID)
	if (form)
	{
		var inputs = form.getElementsByTagName('input');
		param += MiniAjax.form2paramGetValues(inputs);
		var inputs = form.getElementsByTagName('select');
		param += MiniAjax.form2paramGetValues(inputs);
		var inputs = form.getElementsByTagName('textarea');
		param += MiniAjax.form2paramGetValues(inputs);
		var inputs = form.getElementsByTagName('option');
		param += MiniAjax.form2paramGetValues(inputs);
	}
	return param.substr(1);
}

MiniAjax.form2paramGetValues = function(inputs)
{
	var param = '';
	if (inputs)
	{
		for (var i=0; i < inputs.length; i++) 
		{
			var tagName = inputs[i].tagName.toLowerCase()
			var elementName = inputs[i].name;
			if (elementName == '' && (inputs[i].id))
			{
				elementName = inputs[i].id;
			}
			
			if (elementName != '')
			{
				if (tagName == 'radio' || tagName == 'checkbox')
				{
					if (inputs[i].checked)
					{
						param += '&' + elementName + '=' + encodeURIComponent(inputs[i].value);
					}
				}
				else if (tagName == 'option')
				{
					if (inputs[i].selected)
					{
						param += '&' + elementName + '=' + encodeURIComponent(inputs[i].value);
					}
				}
				else
				{
					param += '&' + elementName + '=' + encodeURIComponent(inputs[i].value);
				}
			}
		}
	}
	return param;
}



MiniAjax.checkURL = function(URL)
{
	if (URL.toLowerCase().indexOf('ajax=1') == -1)
	{
		if (URL.toLowerCase().indexOf('asp?') == -1)
		{
			URL += '?ajax=1';
		}
		else
		{
			URL += '&ajax=1';
		}
	}
	return URL;
}
	
MiniAjax.parseandexecutescript = function(content)
{
	if (content)
	{
		//alert('Content : \n\n' + content);
		//http://dojotoolkit.org/pipermail/dojo-interest/2006-January/003635.html
		// Remove the script tags we matched
		repl = new RegExp('<script.*?src=".*?".*?</script>');
		content = content.replace(repl, '');
		// Clean up content: remove inline script  comments
		repl = new RegExp('//.*?$', 'gm');
		content = content.replace(repl, '\n');
		// Clean up content: remove carraige returns
		repl = new RegExp('[\n\r]', 'g');
		content = content.replace(repl, ' ');
		// Match anything inside <script> tags
		src = new RegExp('<script.*?</script>', 'g');
		matches = content.match(src);
		// For each match that is found...
		if (matches != null)
		{
			for (i = 0; i < matches.length; i++)
			{
				// Remove begin tag
				var repl = new RegExp('<script.*?>', 'gm');
				var script = matches[i].replace(repl, '');
	
				// Remove end tag
				repl = new RegExp('</script>', 'gm');
				script = script.replace(repl, '');

				// Execute commands
				if (script != '')
				{
					//alert('Script ' + i + ' : \n\n' + script);
					setTimeout(script, 250);
				}
			}
		}
		else
		{
			//alert('keine Matches');
		}
	}
};

