/**
 * ###############################################################################
 * # Author  : Andreas Schmidt                                                   #
 * # Company : Planit-Products GmbH & Co. KG                                     #
 * # E-Mail  : a.schmidt@planit-products.de                                      #
 * ###############################################################################
 */

/**
 *	EXAMPLE
 *
 *	$arr_output = array();
 *	$arr_output[] = "dataOutput____" . $variable; 
 *	$arr_output[] = "message____The query was empty!"; 
 *	$arr_output[] = "cmd____document.getElementById('id').innerHTML = \'\'"; 
 *	print implode("<!-- ajax splitter -->", $arr_output);
 */

var http_request = null; 
var loadingImage = "<img src='templates/images/loading.gif' />";

/**
 * Ajax initialisation
 */
function ajaxInit() 
{ 
	try { 
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest(); 
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType("text/html; charset=utf-8");
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
		} else { 
			alert("Your Webbrowser unfortunately supports no Ajax!"); 
		} 
	} 
	
	catch(e) { 
		alert("Fehler: " + e); 
	} 
} 


/**
 * @param string	URL String i.e. http://www.test.de?test=1&counter=9
 * @return void
 */
function ajaxGo(url, content, debag) 
{ 
	var debag = _checkDefault(debag, false);
	if (debag) {
		alert(url);
		alert(content);
	}

	ajaxInit(); 
	if (http_request) { 
		_initProgressBar();
		http_request.open("POST", url, true); 
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.onreadystatechange = function () {_ajaxCallback(debag);}; 
		http_request.send(content); 
	} 
}


function ajaxFormSave(url, form, debag) 
{
	serialized_form = new Array();
	for (var i = 0; i < form.elements.length; i++) {
		if ((form.elements[i].type == "text"
			|| form.elements[i].type == "password" 
			|| form.elements[i].type == "textarea") 
				/*&& !form.elements[i].disabled*/ 
				&& form.elements[i].value) {
			serialized_form[i] = _urlencode(form.elements[i].name) + "=" + _urlencode(form.elements[i].value);
		}
		if (form.elements[i].type == "hidden" && form.elements[i].value) {
			serialized_form[i] = _urlencode(form.elements[i].name) + "=" + _urlencode(form.elements[i].value);
		}
		if (form.elements[i].type == "select-one" /*&& !form.elements[i].disabled*/) {
			for (var j=0; j<form.elements[i].length; j++) {
				if (form.elements[i].options[j].selected == true && form.elements[i].options[j].value != '') {
					serialized_form[i] = _urlencode(form.elements[i].name) + "=" + _urlencode(form.elements[i].options[j].value);
				}
			}
		}
			
		if ((form.elements[i].type == 'checkbox' || form.elements[i].type == 'radio')/* && !form.elements[i].disabled*/) {
			if (form.elements[i].length) {
				for (var j=0; j<form.elements[i].length; j++) {
					if (form.elements[i][j].checked == true) {
						serialized_form[i] = _urlencode(form.elements[i].name) + "=" + _urlencode(form.elements[i][j].value);
					}
				}
			} else {
				if (form.elements[i].checked == true) {
					serialized_form[i] = _urlencode(form.elements[i].name) + "=" + _urlencode(form.elements[i].value);
				}			
			}
		}
	}
	ajaxGo(url, serialized_form.join("&"), debag);
}


/**
 * @param string	ID from a div tag i.e. <div id="myId"></div> id="myId:myId2:myId3"....
 * @return void
 *
 * i.e. http_request.responseText = "
 *	First output for 1 Id
 *	<!-- ajax splitter -->
 *	Second output for 2 Id
 */
function _ajaxCallback(debag) 
{ 
	if (4 == http_request.readyState) { 
		if (200 != http_request.status) { 
			alert("Error " + http_request.status + ": " + http_request.statusText); 
		} else { 
			if (http_request.responseText) {
				var aText = http_request.responseText.split("<!-- ajax splitter -->");
				for (var i = 0; i < aText.length; i++) {
					var sContent = aText[i].split("____");

					if (debag) {
						alert(sContent[0]);
						alert(sContent[1]);
					}
					
					if (sContent[0] == "cmd") {
						eval(sContent[1]);
					} else if (sContent[0] == "message") {
						setTimeout("sysMessage('"+sContent[1]+"')");
					} else if (sContent[0] && sContent[1]) {
						if (document.getElementById(sContent[0])) {
							document.getElementById(sContent[0]).innerHTML = sContent[1]; 
						}
					} else if (document.getElementById(sContent[0])) {
						document.getElementById(sContent[0]).innerHTML = "";
					} else {
						alert(sContent[0]);
					}
				}
			}
		}
		_stopProgressBar();
	}
} 


function _get_width_height()
{
	var x,y;
    
    // all except Explorer
	if (self.innerHeight) {
		x = self.innerWidth;
		y = self.innerHeight;
	
    // Explorer 6 Strict Mode   
    } else if (document.documentElement && document.documentElement.clientHeight) {
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	
    // other Explorers   
    } else if (document.body) {
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	return new Array(x,y);
}


function _get_offset()
{
	var x,y;
    
    // all except Explorer
	if (self.pageYOffset) {
		x = self.pageXOffset;
		y = self.pageYOffset;
	
    // Explorer 6 Strict
    } else if (document.documentElement && document.documentElement.scrollTop) {
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	
    // all other Explorers
    } else if (document.body) {
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	return new Array(x,y);
}


/**
 * Progress bar functions
 * <div id="progressOutput"></div>
 * @access private
 */
function _initProgressBar()
{
	var offset = _get_offset();
	var size = _get_width_height();
	if (document.getElementById("progressOutput")) {
		document.getElementById("progressOutput").innerHTML = "<div style='top:"+offset[1]+"px;left:"+offset[0]+"px;width:"+(size[0]-25)+"px;height:"+size[1]+"px;'>"+loadingImage+"</div>"; 
	}
}


function _stopProgressBar()
{
	if (document.getElementById("progressOutput")) {
		document.getElementById("progressOutput").innerHTML = ""; 
	}
}


function sysMessage(content)
{
	if (document.getElementById("progressOutput")) {
		var offset = _get_offset();
		var size = _get_width_height();
		document.getElementById("progressOutput").innerHTML = "<div style='top:"+offset[1]+"px;left:"+offset[0]+"px;width:"+(size[0]-25)+"px;height:"+size[1]+"px;'><p>" + content + "</p></div>"; 
	}
	setTimeout("sysMessageHide()", 2000); 
}


function sysMessageHide()
{
	if (document.getElementById("progressOutput")) {
		document.getElementById("progressOutput").innerHTML = ""; 
	}
}


/**
 * Encode string 
 */
function _urlencode(str) 
{
	var code = "";
	for (var i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") {
			code += "+";
		} else if (str.charAt(i) == "+") {
			code += "%2B";
		} else if (str.charCodeAt(i) > 127) {
			code += encodeURI(str.charAt(i));
		} else {
			code += escape(str.charAt(i));
		}
	}
	return code;
}


/**
* Set default values
*
* @access private
* @param string 	sended value
* @return string	value
*/
function _checkDefault(parameter, defaultValue)
{
	if (typeof parameter == "undefined") {
		return defaultValue;
	}
	return parameter;
}
