/**
* OpenPHPNuke: Great Web Portal System
*
* Copyright (c) 2001-2010 by
* Heinz Hombergsheinz ( at ) hhombergs.de
* Stefan Kaletta stefan ( at ) kaletta.de
* Alexander Weber xweber ( at ) kamelfreunde.de
*
* This program is free software. You can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
* See LICENSE for details.
*
* This software is based on various code found in the internet
* See CREDITS for details
* If you are an author of a part of opn and not you are not mentioned
* SORRY for that ! We respect your rights to your code, so please send
* an eMail to devteam@openphpnuke.com we will include you to the CREDITS asap
*/

	var ajax_target_id = '';

	function ajax_build_request(formname) {
		var request = '';
		var numberofelements = document.forms[formname].elements.length;
		request = '&' + 'ajaxfunction=' + formname;
		ajax_debug("Formname: " + formname + "\nCounter Element: " + numberofelements + "\nURI: " + document.forms[formname].action); 
		for (var i = 0; i < numberofelements;i++) {
			switch (document.forms[formname].elements[i].type) {
				case "radio":
				case "checkbox":
					ajax_debug("Element: " + document.forms[formname].elements[i].type + "\nName: " + document.forms[formname].elements[i].name + "\nInhalt: " + document.forms[formname].elements[i].value + "\nChecked: " + document.forms[formname].elements[i].checked);
					if (document.forms[formname].elements[i].checked == true) {
						request += '&' + escape(document.forms[formname].elements[i].name) + "=" + document.forms[formname].elements[i].value;
					}
					break;
				case "hidden":
				case "text":
				case "select-one":
					ajax_debug("Element: " + document.forms[formname].elements[i].type + "\nName: " + document.forms[formname].elements[i].name + "\nInhalt: " + document.forms[formname].elements[i].value);
					if (document.forms[formname].elements[i].name == "ajaxid") { break; }
					request += '&' + escape(document.forms[formname].elements[i].name) + "=" + escape(document.forms[formname].elements[i].value);
					break;
				default:
					ajax_debug("?!?! Unbekanntes Element: " + document.forms[formname].elements[i].type + "\nName: " + document.forms[formname].elements[i].name + "\nInhalt: " + document.forms[formname].elements[i].value);
			}
		}
		ajax_debug("Request: " + request);		
		return request;
	}
	
	function ajax_send_form (formname) {
		window.location.href = '#' + document.forms[formname].elements['ajaxid'].value;

		var request = ajax_build_request(formname);
		ajax_debug("Formname: " + formname + "\nElement-ID: " + document.forms[formname].elements['ajaxid'].value + "\nURI: " + document.forms[formname].action); 
		ajax_do_call(formname, document.forms[formname].elements['ajaxid'].value, document.forms[formname].action, request);	
	}
	
	function ajax_send_link (formname, elementid, url) {
		window.location.href = '#' + elementid;

		ajax_debug("Formname: " + formname + "\nElement-ID: " + elementid + "\nURL: " + url);
		ajax_do_call(formname,elementid,url,'&' + 'ajaxfunction=' + formname);
	}

	function ajax_display (elementid, data) {

		document.getElementById (elementid).innerHTML = data;

	}

	function ajax_init_object() {

		ajax_debug('ajax_init_object() called..');

		var A;

		var msxmlhttp = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP');
		for (var i = 0; i < msxmlhttp.length; i++) {
			try {
				A = new ActiveXObject(msxmlhttp[i]);
			} catch (e) {
				A = null;
			}
		}

		if (!A && typeof XMLHttpRequest != 'undefined')
			A = new XMLHttpRequest();
		if (!A)
			ajax_debug('could not create connection object.');
		return A;
	}

	var ajax_requests = new Array();

	function ajax_cancel() {
		for (var i = 0; i < ajax_requests.length; i++) 
			ajax_requests[i].abort();
	}

	function ajax_do_call(function_name, elementid, uri, request) {
		var i, x, n, k;
		var post_data;
		var target_id;
		
		ajax_debug('in ajax_do_call()..' + 'POST' + '/' + ajax_target_id);
		target_id = ajax_target_id;

		post_data = "rst=" + escape(ajax_target_id);
		post_data += "&" + "rsrnd=" + new Date().getTime();
		post_data += request;

		x = ajax_init_object();
		if (x == null) {
			if (ajax_failure_redirect != '') {
				location.href = ajax_failure_redirect;
				return false;
			} else {
				ajax_debug("NULL ajax object for user agent:\n" + navigator.userAgent);
				return false;
			}
		} else {
			x.open('POST', uri, true);
			// window.open(uri);

			ajax_requests[ajax_requests.length] = x;

			x.setRequestHeader('Method', 'POST ' + uri + ' HTTP/1.1');
			x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

			x.onreadystatechange = function() {
				if (x.readyState != 4) 
					return;

				ajax_debug('received ' + x.responseText);

				var status;
				var data;
				var txt = x.responseText.replace(/^\s*|\s*$/g,"");
				status = txt.charAt(0);
				data = txt.substring(2);

				if (status == '') {
					// let's just assume this is a pre-response bailout and let it slide for now
				} else if (status == '-') 
					alert('Error: ' + data);
				else {
					ajax_display (elementid, data);
				}
			};
		}

		ajax_debug(function_name + " uri = " + uri + "/post = " + post_data);
		x.send(post_data);
		ajax_debug(function_name + ' waiting..');
		delete x;
		return true;
	}	
