/**
###############################################################################
# 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; 

/**
* 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);
}


/*// show system message
var SystemMessage = {
	Load:function(content){
		SystemMessage.ShowSplash(content);
		setTimeout("SystemMessage.HideSplash()", 5000); 
	},
	ShowSplash:function(content){
		// splash screen
		var splash = document.createElement("div");
		splash.style.cssText = "background:url(../library/icons/info.gif) 5px 2px no-repeat; background-color:#ffffee; padding:10px; padding-left:45px; border-top:1px outset #000; border-bottom:1px outset #000; font-weight:bold; color:#000; position:fixed; top:10px; height:17px; width:100%;";
		splash.setAttribute("id","splashscreen");
		document.documentElement.lastChild.appendChild(splash);
		splash.innerHTML = content;

	},
	HideSplash:function(){
		if (document.getElementById("splashscreen")) {
			var s = document.getElementById("splashscreen");
			var p = s.parentNode;
			p.removeChild(s);
		}
	}
};


*//**
* @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();
	}
} 


// show system message
/*var SystemMessage = {
	Load:function(content){
		SystemMessage.ShowSplash(content);
		setTimeout("SystemMessage.HideSplash()", 2000); 
	},
	ShowSplash:function(content){
		// splash screen
		var splash = document.createElement("div");
//		splash.style.cssText = "background:url(../library/icons/info.gif) 5px 2px no-repeat; background-color:#ffffee; padding:10px; padding-left:45px; border-top:1px outset #000; border-bottom:1px outset #000; font-weight:bold; color:#000; position:fixed; top:10px; height:17px; width:100%;";
		splash.setAttribute("id","splashscreen");
		document.documentElement.lastChild.appendChild(splash);
		splash.innerHTML = '<div><p>' + content + '</p></div>';

	},
	HideSplash:function(){
		if (document.getElementById("splashscreen")) {
			var s = document.getElementById("splashscreen");
			var p = s.parentNode;
			p.removeChild(s);
		}
	}
};
*/

/*
* Progress bar functions
* <div id="progressOutput"></div>
* @access private
*/
var counter = 0;
/*function _initProgressBar()
{
	if (document.getElementById("progressOutput")) {
		document.getElementById("progressOutput").innerHTML = "Status: "; 
	}
	progressBar = window.setInterval("_progressBar()", 1000);
}

function _progressBar()
{
	if (document.getElementById("progressOutput")) {
		document.getElementById("progressOutput").innerHTML = document.getElementById("progressOutput").innerHTML + "#"; 
		if (counter < 30) {
			counter = counter + 1;
		} else {
			_stopProgressBar();
			document.getElementById("progressOutput").innerHTML = "Leider ist ein Fehler aufgetretten. Rufen Sie bitte die Seite noch einmal auf."; 
		}
	}
}*/

function get_width_height()
{
	var x,y;
	if (self.innerHeight) // all except Explorer
	{
		x = self.innerWidth;
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	return new Array(x,y);
}

function get_offset()
{
	var x,y;
	if (self.pageYOffset) // all except Explorer
	{
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	return new Array(x,y);
}

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;'><img src='../library/icons/loading.gif' /></div>"; 
//		document.getElementById("progressOutput").innerHTML = "<div style='top:0px;left:0px;width:"+(size[0]-25)+"px;height:"+size[1]+"px;'><img src='../library/icons/loading.gif' /></div>"; 
	}
//	progressBar = window.setInterval("_progressBar()", 1000);
}

function _progressBar()
{
	if (document.getElementById("progressOutput")) {
		if (counter < 60) {
			counter = counter + 1;
		} else {
			var offset = get_offset();
			var size = get_width_height();
			_stopProgressBar();
			document.getElementById("progressOutput").innerHTML = "<div style='top:"+offset[1]+"px;left:"+offset[0]+"px;width:"+(size[0]-25)+"px;height:"+size[1]+"px;'><p>Leider ist ein Fehler aufgetretten. Rufen Sie bitte die Seite noch einmal auf.</p></div>"; 
//			document.getElementById("progressOutput").innerHTML = "<div style='top:0px;left:0px;width:"+(size[0]-25)+"px;height:"+size[1]+"px;'><p>Leider ist ein Fehler aufgetretten. Rufen Sie bitte die Seite noch einmal auf.</p></div>"; 
		}
	}
}

function _stopProgressBar()
{
//	counter = 0;
//	window.clearInterval(progressBar);
	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><p>' + content + '</p></div>'; 
		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;
}
