// initialize objects
function init() {
	//initAjax();
}

//
var debugwin = false;
function debug(str) {
	if(debugwin.document) {
		debugwin.document.getElementsByTagName("pre")[0].appendChild(debugwin.document.createTextNode(str+"\n"));
		debugwin.scroll(0,debugwin.innerHeight*10);
	} else {
		var xsize = screen.width
		var ysize = screen.height
		var breite=xsize/2
		var hoehe=ysize/2
		var xpos=(xsize-breite)
		var ypos=(ysize-hoehe)
		debugwin = window.open("","debugwin","scrollbars=yes,statusbar=no,toolbar=no,location=no,directories=no,resizable=yes,menubar=no,width="+breite+",height="+hoehe+",screenX="+xpos+",screenY="+ypos+",top="+ypos+",left="+xpos);
		debugwin.document.getElementsByTagName("body")[0].appendChild(debugwin.document.createElement("pre"));
		debugwin.document.title = "Konsole";
		debug(str);
	}
}


// AJAX functions
var ajaxObjects;
var isAjaxCapable = false;
var serializer;

function initAjax() {
	if(true) {
		isAjaxCapable = true;
		serializer = new XMLSerializer();
		ajaxObjects = new Array();

		for(id in hashMap) {
			ajaxObjects[id] = document.getElementById(id);
		}

	}
}

function ajaxRequest(pageId) {
	if(isAjaxCapable) {

		var xml = document.createElement("request");
		var ele;
		for(id in hashMap) {
			ele = document.createElement(id);
			ele.setAttribute("hash", hashMap[id]);
			xml.appendChild(ele);
		}
		xml.removeAttribute("xmlns");

		try {
			var req =  new XMLHttpRequest();
			var me = this;
		
			req.open("POST", document.location.href.substring(0,document.location.href.lastIndexOf("?")), true);
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
			req.onreadystatechange = function () {

				if (req.readyState == 4) {
					if(!req.responseXML) {
						debug("Server FATAL:\n\n"+req.responseText)
					} else if(req.responseXML.getElementsByTagName("parsererror")[0]) {
						var s = "Server ERROR:\n\n";
						s += serializer.serializeToString(req.responseXML)+"\n";
						debug(s);
					} else {
						ajaxUpdate(req.responseXML);
					}
						
				}
			};
			req.send("page=" + pageId + "&ctype=xml&hashes=" + encodeURIComponent(serializer.serializeToString(xml)));
			
			return false;
		} catch(e) {
			debug("error: while performing AJAX Serverrequest: " + e.toString());
			return true;
		}		

	} else {
		return true;
	}
}

function ajaxUpdate(xml) {
debug(serializer.serializeToString(xml));
	var str;
	var tags;
	for(id in hashMap) {
		str = "";
		tags = xml.getElementsByTagName(id);
		if(tags[0]) {
debug(tags[0].getAttribute("hash")+" == "+hashMap[id]);
			hashMap[id] = tags[0].getAttribute("hash");
			for(var i=0; i<tags[0].childNodes.length; i++) {
				str += serializer.serializeToString(tags[0].childNodes.item(i));
			}
			document.getElementById(id).innerHTML = str;
		}
	}
	
	window.scroll(0,0);

}

