
/* 	***************************************************************************
	AJAX
	*************************************************************************** */
	

var xmlhttp;
var queue = new Array();


function addAjaxReqest(url, parsefunc, mymethod, postparam)
{
	var queueLength = queue.length;
	queue[queueLength] = new Array();
	queue[queueLength][0] = url;
	queue[queueLength][1] = parsefunc;
	queue[queueLength][2] = mymethod;
	queue[queueLength][3] = postparam;
	queueLength = queue.length;
	
	if(queueLength==1) {
		getXMLData(queue[0][0], queue[0][1], queue[0][2], queue[0][3]);
	}
}

function getXMLData(url, parsefunc, mymethod, postparam)
{
	
	if(xmlhhtp = getXMLHttpObject() == false) {
		//alert("Fehler beim Anlegen des XMLHttpObject");
		alert("Ein technischer Fehler ist aufgetreten! Bitte laden Sie Ihre Seite neu.");
		return;
	}
	
	if(mymethod == 'POST') {
		xmlhttp.open("POST", url , true);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		
		this.parsefunc = parsefunc;
		xmlhttp.onreadystatechange = handleHttpState;
		
		xmlhttp.send(postparam);
		
	}else{
		xmlhttp.open("GET", url , true);
		
		this.parsefunc = parsefunc;
		xmlhttp.onreadystatechange = handleHttpState;
		
		xmlhttp.send(null);
	}
	
}
 
function getXMLHttpObject()
{

	try 
	{ 
	// Firefox, Opera 8.0+, Safari
	xmlhttp = new XMLHttpRequest(); 
	} 
	catch (error) 
	{ 
    try 
	  { 
	  // Internet Explorer
	  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
	  } 
	  catch (error) 
	  { 
	    try 
	    { 
	    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
	    } 
	    catch (error) 
	    { 
	    return false; 
	    } 
	  } 
	}
}

function handleHttpState()
{
	if (xmlhttp.readyState == 4)
	{ 
	
	try 
	{ 
		if ( xmlhttp.status == 200) {
			// daten erfolgreich geladen: starte Verarbeitung
			parseData(parsefunc);
		} else {
			// fehler
			//alert("Fehler beim Abrufen der XML Daten");
			xmlhttp.abort();
		}
		
		/* Warteschlange abarbeiten */
		queueLength = queue.length;
		if(queueLength > 1 ) {
			queue.shift(); //Erstes Element entfernen, den Rest eine Position nach vorne rŸcken
			getXMLData(queue[0][0], queue[0][1], queue[0][2], queue[0][3]);
		}else{
			queue.shift();
		}
	}
	catch (error) 
	{ 
	   // Abfangen von (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status] im FireFox
	}
		
	}
}



function parseData(parsefunc)
{

	if(parsefunc == 'postComment'){
		//
		// POST COMMENT
		//
		var xmlDocument = xmlhttp.responseXML;
		var Feedback = xmlDocument.getElementsByTagName("Feedback")[0].childNodes[0].nodeValue;
		var Success = xmlDocument.getElementsByTagName("Success")[0].childNodes[0].nodeValue;
		document.getElementById('feedback').innerHTML = '<span>'+Feedback+'<\/span>';
		document.getElementById('feedback').style.display = "block";
		if(Success=='yes') {
			document.getElementById('postComment').innerHTML = '<input type="button" name="eintragen" value="Eintragen" class="imgbtn disabled" \/>';
			document.getElementById('message').value = '';
			document.getElementById('feedback').className = 'feedback';
			getComments(0);
			window.location.hash = 'kommentare';
		}else{
			document.getElementById('feedback').className = 'alert';
			window.location.hash = 'feedback';
		}
	}else if(parsefunc == 'saveComment'){
		//
		// SAVE COMMENT
		//
		var xmlDocument = xmlhttp.responseXML;
		var Feedback = xmlDocument.getElementsByTagName("Feedback")[0].childNodes[0].nodeValue;
		var Success = xmlDocument.getElementsByTagName("Success")[0].childNodes[0].nodeValue;
		var Offset = xmlDocument.getElementsByTagName("Offset")[0].childNodes[0].nodeValue;
		document.getElementById('feedback').innerHTML = '<span>'+Feedback+'<\/span>';
		document.getElementById('feedback').style.display = "block";
		if(Success=='no') {
			document.getElementById('feedback').className = 'alert';
			window.location.hash = 'feedback';
		}else{
			var DivID = 'comment'+Success;
			var FormDivID = 'edit'+Success;
			var FormID = 'kommentaredit'+Success;
			var MessageID = 'message'+Success;
			
			document.getElementById(DivID).style.display = "none";
			document.getElementById(FormDivID).style.display = "none";
			
			document.getElementById(MessageID).value = '';
			document.getElementById('feedback').className = 'feedback';
			getComments(Offset);
		}
	}else if(parsefunc == 'deleteComment'){
		//
		// DELETE COMMENT
		//
		var xmlDocument = xmlhttp.responseXML;
		var Feedback = xmlDocument.getElementsByTagName("Feedback")[0].childNodes[0].nodeValue;
		var Success = xmlDocument.getElementsByTagName("Success")[0].childNodes[0].nodeValue;
		var Offset = xmlDocument.getElementsByTagName("Offset")[0].childNodes[0].nodeValue;
		document.getElementById('feedback').innerHTML = '<span>'+Feedback+'<\/span>';
		document.getElementById('feedback').style.display = "block";
		if(Success=='yes') {
			document.getElementById('feedback').className = 'feedback';
			getComments(Offset);
			window.location.hash = 'kommentare';
		}else{
			document.getElementById('feedback').className = 'alert';
			window.location.hash = 'feedback';
		}
	}else if(parsefunc == 'editComment'){
		//
		// EDIT COMMENT
		//
		var xmlDocument = xmlhttp.responseXML;
		var Feedback = xmlDocument.getElementsByTagName("Feedback")[0].childNodes[0].nodeValue;
		var Success = xmlDocument.getElementsByTagName("Success")[0].childNodes[0].nodeValue;
		var Offset = xmlDocument.getElementsByTagName("Offset")[0].childNodes[0].nodeValue;
		if(Success=='no') {
			document.getElementById('feedback').innerHTML = '<span>'+Feedback+'<\/span>';
			document.getElementById('feedback').style.display = "block";
			document.getElementById('feedback').className = 'alert';
			window.location.hash = 'feedback';
		}else{
			var DivID = 'comment'+Success;
			var FormDivID = 'edit'+Success;
			var FormID = 'kommentaredit'+Success;
			var MessageID = 'message'+Success;
			
			document.getElementById(DivID).style.display = "none";
			var result= '';
			result += '<form id="'+FormID+'" name="'+FormID+'" action="" method="post">';
			result += '<textarea name="'+MessageID+'" id="'+MessageID+'" rows="12" cols="59" class="ganz klein">'+Feedback+'</textarea><br />';
			result += '<input type="button" name="speichern" value="Speichern" class="imgbtn linksfluss" title="&Auml;nderung speichern" onClick="saveComment('+Success+','+Offset+');" />';
			result += '<input type="button" name="abbrechen" value="Abbrechen" class="imgbtn" title="Abbrechen" onClick="document.getElementById(\''+FormDivID+'\').style.display = \'none\'; document.getElementById(\''+DivID+'\').style.display = \'block\';" />';
			result += '<div class="stopfloat"><\/div>';
			result += '</form>';
			document.getElementById(FormDivID).innerHTML = result;
			document.getElementById(FormDivID).style.display = "block";
		}
	}else if(parsefunc == 'getComments'){
		//
		// GET COMMENTS
		//
		var xmlDocument = xmlhttp.responseXML;
		var offset = xmlDocument.getElementsByTagName("Offset")[0].childNodes[0].nodeValue;
		var blocksize = xmlDocument.getElementsByTagName("Blocksize")[0].childNodes[0].nodeValue;
		var itemanzahl = xmlDocument.getElementsByTagName("Itemanzahl")[0].childNodes[0].nodeValue;
		var result= '';
		for(var i=0; i< xmlDocument.getElementsByTagName("Comment").length; i++)
		{
		
		var base = xmlDocument.getElementsByTagName("Comment")[i];
		var ComId = base.getElementsByTagName("ComId")[0].childNodes[0].nodeValue;
		var UserId = base.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;
		var ContentId = base.getElementsByTagName("ContentId")[0].childNodes[0].nodeValue;
		var CommentText = base.getElementsByTagName("CommentText")[0].childNodes[0].nodeValue;
		//CommentText = Url.decode(CommentText); CommentText = CommentText.replace(/_/g, " ");
		var Author = base.getElementsByTagName("Author")[0].childNodes[0].nodeValue;
		var AuthorRight = base.getElementsByTagName("AuthorRight")[0].childNodes[0].nodeValue;
		var AuthorEntry = base.getElementsByTagName("AuthorEntry")[0].childNodes[0].nodeValue;
		var AuthorImg = base.getElementsByTagName("AuthorImg")[0].childNodes[0].nodeValue;
		var AuthorStatus = base.getElementsByTagName("AuthorStatus")[0].childNodes[0].nodeValue;
		var AuthorOnline = base.getElementsByTagName("AuthorOnline")[0].childNodes[0].nodeValue;
		var AuthorSex = base.getElementsByTagName("AuthorSex")[0].childNodes[0].nodeValue;
		var Statusbericht = base.getElementsByTagName("Statusbericht")[0].childNodes[0].nodeValue;
		var EditLink = base.getElementsByTagName("EditLink")[0].childNodes[0].nodeValue;
		var Uhrzeit = base.getElementsByTagName("Time")[0].childNodes[0].nodeValue;
		var DateD = base.getElementsByTagName("DateD")[0].childNodes[0].nodeValue;
		var DateM = base.getElementsByTagName("DateM")[0].childNodes[0].nodeValue;
		var DateY = base.getElementsByTagName("DateY")[0].childNodes[0].nodeValue;
		var ClassAdd = (AuthorRight=='admin')?' admin':'';
		//ClassAdd = (AuthorEntry=='owner')?' owner':'';
		ClassAdd = (Statusbericht=='owner')?' owner':'';
		var EditAdd = (EditLink!='x')?EditLink:'';
		
		var DivID = 'comment'+ComId ;
		var FormDivID = 'edit'+ComId ;
		
		
		var AuthorSexIcon = (AuthorSex=='1') ? '<img src="'+abs_path+'img_style/icon_female.gif" alt="Weiblich" width="14" height="17" title="Weiblich">' : '<img src="'+abs_path+'img_style/icon_male.gif" alt="M&auml;nnlich" width="14" height="17" title="M&auml;nnlich">';
		var AuthorOnlineIcon = (AuthorOnline=='1') ? '<img src="'+abs_path+'img_style/icon_online.gif" alt="Online" width="13" height="13" title="Online" />' : '<img src="'+abs_path+'img_style/icon_offline.gif" alt="Offline" width="13" height="13" title="Offline" />';
		
		
		result += '<div class="comment">';
		result += '<div class="autor'+ClassAdd+'">';
		result += '<div class="datum"><span class="tag">'+DateD+'<\/span> <span class="monat">'+DateM+'<\/span> <span class="jahr">'+DateY+'<\/span><\/div>';
		result +=  (AuthorImg!="") ? '<div class="userbild" style="background-image: url('+abs_path+'user_img/'+AuthorImg+');">&nbsp;<\/div>': '<div class="userbild">&nbsp;<\/div>';
		result += '<p>'+AuthorOnlineIcon+' '+AuthorSexIcon+' <b>'+Author+'</b> ('+AuthorStatus+') schreibt um '+Uhrzeit+':<br />'+EditAdd+'<\/p>';
		result += '<div class="clearfloat"><\/div>';
		result += '<\/div>';
		result += '<div id="'+DivID+'"><p>'+CommentText+'<\/p><\/div>';
		result += '<div id="'+FormDivID+'" style="display: none;"><\/div>';
		result += '<\/div>';
		
		} // End for
		
		document.getElementById('kommentare').innerHTML = result;
		document.getElementById('loadkommentare').style.visibility = "hidden";
		document.getElementById('kommentare').style.visibility = "visible";
		document.getElementById('kommentarzahl').innerHTML = itemanzahl;
		
		var seitenanzahl = Math.ceil(itemanzahl / blocksize);
		
		if(seitenanzahl>1) { 
			paginator('getComments','kommentare',offset,blocksize,itemanzahl,7); 
		}else{
			document.getElementById('pagerkommentare').style.display = "none";
		}
		
		if(offset>0) window.location.hash = 'kommentare';
		
	}else if(parsefunc == 'loadCommentModul'){
		var response = xmlhttp.responseText;
		var aktublock = document.getElementById('commentblockid').value;
		if(aktublock!=""){
			document.getElementById('c_'+aktublock).innerHTML = response;
			getComments(0);
		}
		
	}
}


/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

//
// PAGINATOR
//

function paginator(funcname,elementId,myoffset,myblocksize,itemanzahl,pageblock) {
	//var elementId = elementId;
	//var funcname = funcname;
	var pagerId = "pager"+elementId;
	var blocksize = Number(myblocksize);
	var offset = Number(myoffset);
	var this_page = (offset / blocksize) + 1;
	var item_anzahl = Number(itemanzahl);
	var seiten_anzahl = Math.ceil(item_anzahl / blocksize);
	var page_block = Number(pageblock);
	
	//var debug = 'elementId: '+elementId+'\n funcname: '+funcname+'\n pagerId: '+pagerId+'\n blocksize: '+blocksize+'\n offset: '+offset+'\n this_page: '+this_page+'\n item_anzahl: '+item_anzahl+'\n seiten_anzahl: '+seiten_anzahl+'\n page_block: '+page_block+'\n';
	//alert(debug);
						
	var anfang = 0;
	var prev = ((this_page-1) * blocksize)-blocksize;
						
	var next = ((this_page-1) * blocksize)+blocksize;
	var end = ((seiten_anzahl-1) * blocksize);
						
						
	var myPager= '';
	myPager += '<div class="paginator">';
					
	// Anfang Link
	myPager += this_page<2?'<span class="start">&laquo;&laquo;<\/span>':'';
	myPager += this_page>1?'<a href="javascript:'+funcname+'('+anfang+');" class="prev" title="Zum Anfang">&laquo;&laquo;<\/a>':'';
	// Prev Link
	myPager += this_page<2?'<span class="start">&laquo;VORHERIGE<\/span>':'';
	myPager += this_page>1?'<a href="javascript:'+funcname+'('+prev+');" class="prev">&laquo;VORHERIGE<\/a>':'';
						
	var show_pages = seiten_anzahl;
	if(show_pages > page_block) { show_pages = page_block; }
					
	var page_block_start = this_page - (Math.ceil(page_block/2) - 1);
			
	if(page_block_start < 1) { page_block_start = 1; }
							
							
	if (page_block_start + (show_pages - 1) > seiten_anzahl) { page_block_start = seiten_anzahl - (show_pages - 1); }
						
	myPager += page_block_start > 1?'<span class="break">...<\/span>':'';
	

	
	for(var x = page_block_start; x < (page_block_start + show_pages); x++) {
		var myNum = (x - 1) * blocksize;
		myPager += this_page==x?'<span class="thispage">'+x+'<\/span>':'';
		myPager += this_page!=x?'<a href="javascript:'+funcname+'('+myNum+');">'+x+'<\/a>':'';
	}
						
	myPager += page_block_start + (show_pages - 1) < seiten_anzahl?'<span class="break">...<\/span>':'';
			
	// Next Link
	myPager += this_page==seiten_anzahl?'<span class="end">N&Auml;CHSTE&raquo;<\/span>':'';
	myPager += this_page<seiten_anzahl?'<a href="javascript:'+funcname+'('+next+');" class="next">N&Auml;CHSTE&raquo;<\/a>':'';
	// Ende Link
	myPager += this_page==seiten_anzahl?'<span class="end">&raquo;&raquo;<\/span>':'';
	myPager += this_page<seiten_anzahl?'<a href="javascript:'+funcname+'('+end+');" class="next" title="Zum Ende">&raquo;&raquo;<\/a>':'';
						
	myPager += '<\/div">';
	myPager += '<div class="results">('+item_anzahl+' Eintr&auml;ge)<\/div>';
					
	document.getElementById(pagerId).innerHTML = myPager;
	document.getElementById(pagerId).className = 'pages';	
	document.getElementById(pagerId).style.display = "block";				
}
					
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/

var Url = {

	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},

	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}

