/*****************************************

             AJAX JS MODUL

    (c) 2007-2009 by Juergen Hoog

******************************************/

jh_ajax_global_id = 2;
jh_http_request = new Array();

/*
  jh_ajax
	url ......... (string)
					die aufrurufende URL
	output ..... (string)
					"htmlreplace" = ausgabe in ein html objekt
					"tovar" = ausgabe in einer variable
	container ... (string)
					id eines html-objektes, das den inhalt des requests empfangen soll oder
					variablenname, in die der inhalt geschrieben werden soll
					ist das html-objekt nicht vorhanden, wird ajax zwar ausgefuehrt, aber nichts zurueckgegeben
	beginfunc ... (string)
					Name einer Funktion, die vor dem Ausfuehren des AJAX Loads aufgerufen werden soll
	endfunc ..... (string) | (array)
					Name einer Funktion, die nach dem fertigen Ausfuehren des AJAX Loads aufgerufen werden soll
	xml .........
	jh_ajax_id .. (bool) | (int) | (string)
					Identifikator eines bestimmten AJAX Loaders
					Dieser Parameter kann angegeben werden, um eine bestimmte AJAX-Instanz zu verwenden
					sinnvoll wenn mehrere ajax befehle fuer denselben container abgesetzt werden
					Aus Kompatibilitaetsgruenden wird auch true/false akzeptiert:
					true ... id=1 / false(default) ... laufende increments der id
					
*/
function jh_ajax(url, output, container, beginfunc, endfunc, xml, jh_ajax_id) {
	
	switch (typeof(jh_ajax_id)) {
		case 'string':
		case 'number':
			jh_http_request[jh_ajax_id] = false;
			break;
		case 'boolean':
		case 'undefined':
		default:
			if (jh_ajax_id) {
				jh_ajax_id = 1;
			} else {
				jh_ajax_global_id++;
				jh_ajax_id = jh_ajax_global_id;
				jh_http_request[jh_ajax_id] = false;
			}
			break;
	}
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		jh_http_request[jh_ajax_id] = new XMLHttpRequest();
		if (jh_http_request[jh_ajax_id].overrideMimeType) {
			jh_http_request[jh_ajax_id].overrideMimeType((xml==true) ? 'text/xml' : 'text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			jh_http_request[jh_ajax_id] = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			try {
				jh_http_request[jh_ajax_id] = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e) {}
		}
	}

	if (!jh_http_request[jh_ajax_id]) {
		alert('Could not load AJAX');
		return false;
	}
	
	// beginfunc ausfuehren
	if (typeof(beginfunc) == 'function') {
		eval(beginfunc + '();');
	} else if (typeof(eval(beginfunc)) == 'function') {
		eval(beginfunc + '()');
	}

	// eine endfunc oder mehrere?
	endfunccode = '';
	if (endfunc) {
		if ((typeof(endfunc) == 'object') && (endfunc.length)) {
			for (var i=0; i < endfunc.length; i++) {
				endfunccode += 'if (typeof(' + endfunc[i] + ') == \'function\') ' + endfunc[i] + '(); ';
			}
		} else {
			endfunccode = 'if (typeof(' + endfunc + ') == \'function\') ' + endfunc + '(); ';
		}
	}

	switch (output) {
		case 'htmlreplace':
			outputcode = 'if (document.getElementById(\'' + container + '\')) document.getElementById(\'' + container + '\').innerHTML = res;';
			break;
		case 'tovar':
		default:
			outputcode = '' + container + ' = res;'
			break;
	}
	
	
	// readyStates: 
	//	0 uninitialized
	//	1 loading (send aufgerufen)
	//	2 loaded (header+status verfuegbar)
	// 	3 interactive (downloading)
	//	4 completed
	jh_http_request[jh_ajax_id].onreadystatechange = new Function('jh_ajax_handler_' + jh_ajax_id, '	\
		switch (jh_http_request[' + jh_ajax_id + '].readyState) {										\
			case 4:																						\
				switch (jh_http_request[' + jh_ajax_id + '].status) {									\
					case 200:																			\
						var res = jh_http_request[' + jh_ajax_id + '].responseText;						\
						break;																			\
					default:																			\
						var res = jh_http_request[' + jh_ajax_id + '].statusText;						\
						break;																			\
				}																						\
				' + outputcode + '																		\
				' + endfunccode + '																		\
		}																								\
	');

	url = url.replace(/&amp;/g, '&'); // Kill the &amp;, weil das beim AJAX gar nicht gemocht wird und zu unfunktioniertheit führt.
	jh_http_request[jh_ajax_id].open('GET', url, true);
	jh_http_request[jh_ajax_id].send(null);

	return jh_ajax_id;
}

function jh_ajax_abort(jh_ajax_id) {
	if (jh_http_request[jh_ajax_id]) {
		jh_http_request[jh_ajax_id].abort();
	}
}