document.onclick=mouse_position;

var dynDiv=new Array();
var interval=new Array();

// Basis für dynamische Div Erzeugung
// Vor-Reservierung von dynDiv Feldern

// showInfo
dynDiv[0]=0;

// Header Panel Menü
dynDiv[1]=0;
dynDiv[2]=0;

// Mausposition
var xpos=0;
var ypos=0;

function removeDiv(divNumber)
{
	document.body.removeChild(dynDiv[divNumber]);
}

// Maus Position finden
function mouse_position(e) 
{
	if(!e) e=window.event;
	xpos=e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	ypos=e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
}

// Bewertung
function rate_on(id, pic, showInfo)
{
	var color;
	
	if(pic<=5) color='rgb(255, '+Math.round(255/4 * (pic-1))+', 0)';
	else color='rgb('+Math.round(255-255/5 * (pic-5))+', '+Math.round(255-40/5 * (pic-5))+', 0)';
	
	if(showInfo!=false)
	{
		var ratingToString;
		
		if(pic<2) ratingToString='sehr schlecht';
		else if(pic<4) ratingToString='schlecht';
		else if(pic<8) ratingToString='mittel';
		else if(pic<10) ratingToString='gut';
		else ratingToString='sehr gut';
		
		showStaticInfo('rateForm'+id, pic+'/10 Punkte: '+ratingToString);
	}
	
	/*
	if(dynDiv[0].style.display=='none';) showStaticInfo('ratingPreview'+id, 'Vorschau: '+pic);
	else document.getElementById('showinforesult').innerHTML='Vorschau: '+pic;
	*/
	
	for(var i=1; i<=pic; i++)
	{
		document.getElementById(id+i).style.backgroundColor=color;
	}
	for(var i=pic; i<10;) // i++ ist bereits bei den Anweisungen
	{
		document.getElementById(id+(++i)).style.backgroundColor='silver';
	}
}

function rate_off(id, bew)
{
	var color;
	
	if(bew<4) color="red";
	else if(bew<8)color="#FFD800";
	else color="lime";
	
	for(i=1; i<=bew; i++)
	{
		document.getElementById(id+i).style.backgroundColor=color;
	}
	for(i=bew; i<10;)
	{
		document.getElementById(id+(++i)).style.backgroundColor='silver';
	}
}

// Ein HTML Objekt anzeigen, oder verstecken
function showHide(elementName)
{
	if(document.getElementById(elementName).style.display=='none') document.getElementById(elementName).style.display = 'block';
	else document.getElementById(elementName).style.display = 'none';
}

/* Funktion um zwischen zwei Menüs zu wechseln
var set_menu="none";
function switch_block(menu_1, menu_2)
{
	var act_menu=menu_1;
	
	if(set_menu==act_menu) act_menu='none';
	
	set_menu=act_menu;
	
	switch(act_menu)
	{
		case 'none':
			document.getElementById(menu_1).style.display='none';
			document.getElementById(menu_2).style.display='none';
		break;
		case menu_1:
			document.getElementById(menu_1).style.display='block';
			document.getElementById(menu_2).style.display='none';
		break;
		case menu_2:
			document.getElementById(menu_1).style.display='none';
			document.getElementById(menu_2).style.display='block';
		break;
	}
}
*/

var templateData;
function loadViaTemplate(dataFile, templateFile, requestData, loadElement)
{
	if(typeof templateData=='undefined')
	{
		query(templateFile, '', function()
		{
			templateData=query_result;
		})
	}
	
	query(dataFile, requestData, function()
	{
		var obj=eval("("+query_result+")");
		
		for(i=0; i<obj.plugObject.resultCount; i++)
		{
			document.getElementById(loadElement).innerHTML+=unescape(obj.plugObject.entries[i].subject);
		}
	})
}

// Position eines Elementes finden
function getElementPosition(elementId)
{
	var element=document.getElementById(elementId);
	
	var elem=element;
	var tagname="";
	var x=0;
	var y=0;

	while((typeof(elem)=="object") && (typeof(elem.tagName)!="undefined"))
	{
		y+=elem.offsetTop;
		x+=elem.offsetLeft;
		tagname=elem.tagName.toUpperCase();
		
		if (tagname=="BODY") elem=0;
		
		if (typeof(elem)=="object")
		if (typeof(elem.offsetParent)=="object")
		elem=elem.offsetParent;
	}

	position=new Object();
	position.x=x;
	position.y=y;
	return position;
}

// eine Nachricht, die an einem Element haftet
showStaticInfoSetBack=new Array();
function showStaticInfo(elementId, content)
{
	if(bodyIsLoaded)
	{
		var text=content;
		
		// wenn dynDiv[0] noch nicht generiert wurde, dann tu das jetzt
		if(dynDiv[0]==null || dynDiv[0]==0)
		{
			
			var divName='dynDivShowInfo';
			dynDiv[0]=document.createElement(divName);
			document.getElementById('body').appendChild(dynDiv[0]);
			
			dynDiv[0].style.position='absolute';
			dynDiv[0].style.width='400px';
			dynDiv[0].style.backgroundColor='transparent';
			dynDiv[0].style.backgroundImage='url(../img/showinfoTop.png)';
			dynDiv[0].style.backgroundRepeat='no-repeat';
			
			dynDiv[0].innerHTML='<div class="showinfobody"><div id="showinforesult">'+text+'</div></div><img src="../img/showinfoBottom.png">';
		}
		
		if(dynDiv[0].style.display=='none') dynDiv[0].style.display='block';
		
		// lade den Text nur, wenn er nicht der Gleiche von letzten Aufruf ist
		if(text.toLowerCase().substr(0, 10)!=document.getElementById('showinforesult').innerHTML.toLowerCase().substr(0, 10))
		{
			//alert(document.getElementById('showinforesult').innerHTML+" !ungleich! "+text);
			document.getElementById('showinforesult').innerHTML=text;
		}
		
		// Element markieren
		showStaticInfoSetBack[elementId]=new Array();
		showStaticInfoSetBack['elementId']=elementId;
		showStaticInfoSetBack[elementId]['borderWidth']=document.getElementById(elementId).style.borderWidth;
		showStaticInfoSetBack[elementId]['borderColor']=document.getElementById(elementId).style.borderColor;
		showStaticInfoSetBack[elementId]['borderStyle']=document.getElementById(elementId).style.borderStyle;
		
		//alert(document.getElementById(elementId).style.borderWidth);
		
		if(document.getElementById(elementId).style.borderWidth.length==0)
		{
			//alert('undefined');
			document.getElementById(elementId).style.borderWidth='2px';
			document.getElementById(elementId).style.borderStyle='solid';
		}
		//alert(document.getElementById(elementId).style.borderWidth);
		document.getElementById(elementId).style.borderColor='#FFD800';
		
		// Nachricht anzeigen
		elementPos=getElementPosition(elementId);
		
		// Nachricht um 10% der Breite nach rechts verschieben
		elementPos.x+=document.getElementById(elementId).offsetWidth * 0.1;
		
		dynDiv[0].style.left=elementPos.x;
		dynDiv[0].style.top=elementPos.y+document.getElementById(elementId).offsetHeight;
	}
}

function hideStaticInfo()
{
	if(dynDiv[0]!=0)
	{
		document.getElementById(showStaticInfoSetBack['elementId']).style.borderWidth=showStaticInfoSetBack[showStaticInfoSetBack['elementId']]['borderWidth'];
		document.getElementById(showStaticInfoSetBack['elementId']).style.borderColor=showStaticInfoSetBack[showStaticInfoSetBack['elementId']]['borderColor'];
		document.getElementById(showStaticInfoSetBack['elementId']).style.borderStyle=showStaticInfoSetBack[showStaticInfoSetBack['elementId']]['borderStyle'];
		dynDiv[0].style.display='none';
	}
}

// wird bei headerPanel.php verwendet
function str_replace(searchString, changeString, mainString)
{
	// Fehlerprüfung
	if((mainString==null) || (searchString == null)) return null;
	if((mainString.length==0) || (searchString.length==0)) return mainString;
	
	// Kein changeString übergeben?
	if ((changeString==null) || (changeString.length==0)) changeString = "";
	
	var lengthSearchString=searchString.length;
	var lengthChangeString=changeString.length;
	var pos=mainString.indexOf(searchString, 0);
	
	while (pos >= 0)
	{
		mainString = mainString.substring(0, pos) + changeString + mainString.substring(pos + lengthSearchString);
		pos = mainString.indexOf(searchString, pos + lengthChangeString);
	}
	
	return mainString;
}

// Eine Vorrichtung für das Senden von Einträgen(Kommentare, etc.)
/* Hinweis
Gästebucheinträge und Kommentare werden im Gruppensystem
abgespeichert, d.h. beide übergeben als Parameter 'act' den
Wert 'group_topic_entry_post'
*/
function submit_form(act, data, formId)
{
	var submit_button;
	
	if(formId!=null) submit_button=formId+'SubmitButton';
	else
	{
		// Standardbezeichnungen
		submit_button='submit_button';
		formId='submit_form';
	}
	
	var block_error='errors';
	var block_content='';
	var file;
	
	switch(act)
	{
		case 'bugReport':
			file='../groups/js_post_group_entry.php';
			
			if(document.forms[formId].elements['nick'].value!="") data+='&nick='+escape(document.forms[formId].elements['nick'].value);
			else data+='&nick=empty';
			
			data+='&text='+escape(document.forms[formId].elements['text'].value);
			block_content='none';
		break;
		case 'group_topic_entry_post':
			file='../groups/js_post_group_entry.php';
			data+='&nick='+escape(document.forms[formId].elements['nick'].value);
			data+='&text='+escape(document.forms[formId].elements['text'].value);
		break;
		case 'group_topic_post':
			file='../forum/js_post_group_topic.php';
			data+='&titel='+escape(document.forms['group_topic_form'].elements['titel'].value);
			data+='&text='+escape(document.forms['group_topic_form'].elements['text'].value);
		break;
		case 'shoutbox_entry_post':
			file='../forum/js_post_group_entry.php';
			data+='&nick='+escape(document.forms['submit_form'].elements['nick'].value);
			data+='&text='+escape(document.forms['submit_form'].elements['text'].value);
		break;
		case 'login':
			file='../headerPanelUserBoard.php';
			//alert(formId);
			data+='&nick='+escape(document.forms[formId].elements['nick'].value);
			data+='&password='+escape(document.forms[formId].elements['password'].value);
			
			block_content='headerPanelUserBoardContent';
			submit_button="headerPanelUserBoardSubmitButton";
		break;
	}
	
	document.getElementById(submit_button).disabled=true;
	query_submit(file, data, block_content, block_error, submit_button);
}

function query_submit(file, data, block_content, block_error, submit_button)
{
	var error=null;
	
	var nr=dynDiv.length;
	
	var timeActual=new Date();
	var divName='dynDivQuery'+nr;
	dynDiv[nr]=document.createElement(divName);
	document.getElementById('body').appendChild(dynDiv[nr]);
	
	dynDiv[nr].style.position='absolute';
	dynDiv[nr].style.padding='5px';
	dynDiv[nr].style.backgroundColor='#FFD800';
	dynDiv[nr].style.color='black';
	dynDiv[nr].style.border='1px solid #555555';
	dynDiv[nr].style.backgroundImage='url(../img//query_pop/menu_trans.png)';
	dynDiv[nr].style.left=(xpos+8)+'px';
	dynDiv[nr].style.top=ypos+'px';
	
	dynDiv[nr].innerHTML='<div id="'+divName+'Text"></div><img src="../img/query_pop/throbber.gif">';
	
	var strURL=file;
	var xmlHttpReq=null;
	
	// XMLHttpRequest als Javascript Objekt
	if(window.XMLHttpRequest) 
	{
		xmlHttpReq=new XMLHttpRequest();
	}
	// XMLHttpRequest als ActiveX Objekt (IE5 bis 6)
	else if(window.ActiveXObject) 
	{
		xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	xmlHttpReq.open('POST', strURL, true);
	xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpReq.setRequestHeader("Pragma", "no-cache");
	xmlHttpReq.setRequestHeader("Cache-Control", "must-revalidate");
	xmlHttpReq.setRequestHeader("If-Modified-Since", document.lastModified);
	xmlHttpReq.onreadystatechange = function() 
	{
		switch(xmlHttpReq.readyState)
		{
			case 1:
				//alert(divName+' - '+nr);
				document.getElementById(divName+'Text').innerHTML='Verbindung wird hergestellt!';
				//+divName+' - '+nr
			break;
			case 2:
				document.getElementById(divName+'Text').innerHTML='Verbindung hergestellt!';
			break;
			case 3:
				document.getElementById(divName+'Text').innerHTML='Daten werden verarbeitet!';
			break;
			case 4:
				if(xmlHttpReq.status==404) error='401 Page not found!';
				else if(xmlHttpReq.status==500) error='500 Interner Serverfehler!';
				
				if(error==null)
				{
					response=xmlHttpReq.responseText;
					if(response.charAt(0)!="F")
					{
						if(block_content=='') page_refresh();
						else if(block_content!='none') document.getElementById(block_content).innerHTML=response;
						
						//document.getElementById(block_error).innerHTML='';
					}
					else
					{
						//document.getElementById(block_error).innerHTML=response;
						errorText='<div style="color:red;">'+response+'</div>';
						action_pop('message', errorText);
						
						document.getElementById(submit_button).disabled=false;
					}
					
					document.getElementById(divName+'Text').innerHTML='Daten wurden verarbeitet!';
				}
				else
				{
					errorText='<b>Fehler!</b><br />';
					errorText+='Aktion Aufruf von \''+file+'\' mit Parameter/n \''+data+'\' ist fehlgeschlagen!<br />';
					errorText+='Fehlermeldung: \''+error+'\'';
					
					action_pop('message', errorText);
				}
				
				interval[nr]=window.setInterval('clearInterval(interval['+nr+']); removeDiv('+nr+');', 800);
			break;
		}
	}
	xmlHttpReq.send(data);
}

// Vorrichtung für das Anfordern von Daten, welches entweder hinterfragt wird, oder dessen angefordete Daten in einem dynDiv angezeigt werden sollen
function action_pop(act, data)
{
	var nr=dynDiv.length;
	var timeActual=new Date();
	
	var divName='dynDivActionPop'+timeActual.getTime();
	dynDiv[nr]=document.createElement(divName);
	document.getElementById('body').appendChild(dynDiv[nr]);
	
	dynDiv[nr].style.position='absolute';
	dynDiv[nr].style.display='block';
	dynDiv[nr].style.width='400px';
	dynDiv[nr].style.backgroundColor='transparent';
	dynDiv[nr].style.backgroundImage='url(../img/showinfoTop.png)';
	dynDiv[nr].style.backgroundRepeat='no-repeat';
	
	dynDiv[nr].style.left=(xpos-8)+'px';
	dynDiv[nr].style.top=ypos+'px';
	
	var subject='Aktion ausführen';
	var text='Aktion ausführen?';
	var text_confirm='ja';
	var file, post;
	
	switch(act)
	{
		case 'group_entries_delete':
			file='../groups/js_group_entries.php';
			post='action=group_entries_delete&'+data;
			text='Eintrag l&ouml;schen?';
		break;
		case 'group_topic_delete':
			file='../groups/js_group_topic.php';
			post='action=group_topic_delete&'+data;
			text='Thema l&ouml;schen?';
		break;
		case 'guestbook_entries_delete':
			file='../user/js_profile_guestbook.php';
			post='action=profile_guestbook_entries_delete&'+data;
			text='Eintrag l&ouml;schen?';
		break;
		
		case 'group_topic_notification_add':
			file='../groups/js_groupTopicNotification.php';
			post='action=add&'+data;
			text='Topic abonnnieren?';
		break;
		case 'group_topic_notification_delete':
			file='../groups/js_groupTopicNotification.php';
			post='action=delete&'+data;
			text='Abonnnement l&ouml;schen?';
		break;
		
		case 'groupMembershipRequest':
			file='../groups/js_groupMemberSendMembershipRequest.php';
			post=data;
			text='Willst du der Gruppe beitreten?';
		break;
		case 'groupMembershipExit':
			file='../groups/js_groupMemberExitMembership.php';
			post=data;
			text='Willst du die Gruppe verlassen?';
		break;
		
		case 'user_delete':
			file='../yazone/js_user.php';
			post='action=user_delete&userId='+data;
			text='User l&ouml;schen?';
		break;
		case 'user_freeze':
			file='../yazone/js_user.php';
			post='action=user_freeze&userId='+data;
			text='User einfrieren?';
		break;
		
		case 'entry_delete':
			file='../entertainmentBlog/js_entertainmentBlogEntries.php';
			post='action=entry_delete&entryId='+data;
			text='Eintrag entfernen?';
		break;
		
		case 'history_info':
			file='';
			post='';
			text_confirm='';
			text='Es wird in der Datenbank gesucht...';
			query('../yazone/js_get_history_info.php', 'pageviewId='+data, divName);
		break;
		case 'elDeleteBlogEntry':
			file='../earthlost/js_news_delete.php';
			post='news_id='+data;
			text='News l&ouml;schen?';
		break;
		
		case 'userFriendshipRequest':
			file='../user/js_userRelationSendFriendshipRequest.php';
			post=data;
			text='Willst du eine Freundschaftsanfrage losschicken?';
		break;
		case 'userFriendshipConfirm':
			file='../user/js_userRelationHandleFriendshipRequest.php';
			post=data;
			text='Willst du den Freundschaftsantrag annehmen?';
		break;
		case 'userFriendshipRefuse':
			file='../user/js_userRelationHandleFriendshipRequest.php';
			post=data;
			text='Willst du den Freundschaftsantrag ablehnen?';
		break;
		
		case 'message':
			file='';
			post='';
			subject='Achtung';
			text_confirm='';
			text=data;
		break;
	}
	
	dynDiv[nr].innerHTML+='<div class="action_body_outer"><div class="action_body_inner"><a href="javascript:removeDiv(\''+nr+'\');"><img style="float:right;" src="../img/close.gif"></a>'+subject+'</div><div class="showInfoContent" id="'+divName+'">'+text+'<br /><a href="javascript:query(\''+file+'\', \''+post+'\', \''+divName+'\');">'+text_confirm+'</a></div></div><img src="../img/showinfoBottom.png">';
}

// Funktion zum Anfordern von Daten, die Daten werden in einem Div abgelegt, wenn der Parameter 'block' übergeben wird
function query(file, parameter, block)
{
	var error=null;
	
	var nr=dynDiv.length;
	
	var timeActual=new Date();
	var divName='dynDivQuery'+nr;
	dynDiv[nr]=document.createElement(divName);
	document.getElementById('body').appendChild(dynDiv[nr]);
	
	dynDiv[nr].style.position='absolute';
	dynDiv[nr].style.padding='5px';
	dynDiv[nr].style.backgroundColor='#FF9D5B';
	dynDiv[nr].style.color='black';
	dynDiv[nr].style.border='1px solid #555555';
	dynDiv[nr].style.backgroundImage='url(../img//query_pop/menu_trans.png)';
	dynDiv[nr].style.left=(xpos+8)+'px';
	dynDiv[nr].style.top=ypos+'px';
	
	dynDiv[nr].innerHTML='<div id="'+divName+'Text"></div><img src="../img/query_pop/throbber.gif">';
	
	//<a href="javascript:removeDiv('+nr+');">X</a>
	
	var strURL=file;
	var xmlHttpReq=null;
	
	// XMLHttpRequest als Javascript Objekt
	if(window.XMLHttpRequest) 
	{
		xmlHttpReq=new XMLHttpRequest();
	}
	// XMLHttpRequest als ActiveX Objekt (IE5 bis 6)
	else if(window.ActiveXObject) 
	{
		xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	xmlHttpReq.open('POST', strURL, true);
	xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpReq.setRequestHeader("Pragma", "no-cache");
	xmlHttpReq.setRequestHeader("Cache-Control", "must-revalidate");
	xmlHttpReq.setRequestHeader("If-Modified-Since", document.lastModified);
	
	xmlHttpReq.onreadystatechange=function() 
	{
		switch(xmlHttpReq.readyState)
		{
			case 1:
				document.getElementById(divName+'Text').innerHTML='Verbindung wird hergestellt!';
			break;
			case 2:
				document.getElementById(divName+'Text').innerHTML='Verbindung hergestellt!';
			break;
			case 3:
				document.getElementById(divName+'Text').innerHTML='Daten werden geladen!';
			break;
			case 4:
				if(xmlHttpReq.status==404) error='401 Page not found!';
				else if(xmlHttpReq.status==500) error='500 Interner Serverfehler!';
				
				if(error==null)
				{
					query_result=xmlHttpReq.responseText;
					
					if(query_result=='Daten entfernt!') page_refresh();
					else if(typeof block=='function') block(query_result);
					else
					{
						document.getElementById(block).innerHTML=query_result;
					}
					
					document.getElementById(divName+'Text').innerHTML='Daten wurden geladen!';
				}
				else
				{
					errorText='<b>Fehler!</b><br />';
					errorText+='Aktion Aufruf von \''+file+'\' mit Parameter/n \''+parameter+'\' ist fehlgeschlagen!<br />';
					errorText+='Fehlermeldung: \''+error+'\'';
					
					action_pop('message', errorText);
				}
				
				interval[nr]=window.setInterval('clearInterval(interval['+nr+']); removeDiv('+nr+');', 800);
			break;
		}
	}
	
	xmlHttpReq.send(parameter);
	//return(xmlHttpReq.responseText);
}

function pushingExchange(element, newContent, amountOfPixelsToMove)
{
	amountOfPixelsToMove*=-1;
	
	if(dynDiv[element+'New']!=null) var oldContent=dynDiv[element+'New'].innerHTML;
	
	// Content Container
	dynDiv[element+'Container']=document.createElement("dynDivPageContainer");
	dynDiv[element+'Old']=document.createElement("dynDivPageLeft");
	dynDiv[element+'New']=document.createElement("dynDivPageRight");
	
	var container=dynDiv[element+'Container'];
	var oldDiv=dynDiv[element+'Old'];
	var newDiv=dynDiv[element+'New'];
	
	
	container.style.display="block";
	
	if(amountOfPixelsToMove>0)
	{
		container.style.marginLeft=0;
		container.style.pushMarginLeft=0;
		targetX=-800;
		
		oldDiv.style.styleFloat='left';
		oldDiv.style.cssFloat='left';
		newDiv.style.styleFloat='right';
		newDiv.style.cssFloat='right';
	}
	else
	{
		container.style.marginLeft=-800;
		container.style.pushMarginLeft=-800;
		targetX=0;
		
		oldDiv.style.styleFloat='right';
		oldDiv.style.cssFloat='right';
		newDiv.style.styleFloat='left';
		newDiv.style.cssFloat='left';
	}
	
	if(oldContent==null) oldDiv.innerHTML=document.getElementById(element).innerHTML;
	else oldDiv.innerHTML=oldContent;
	
	newDiv.innerHTML=newContent;
	
	container.style.vAlign="top";
	container.style.width='1600px';
	
	oldDiv.style.width='800px';
	oldDiv.style.display='block';
	
	newDiv.style.width='800px';
	
	// Anzeigen
	container.innerHTML="";
	container.appendChild(oldDiv);
	container.appendChild(newDiv);
	
	document.getElementById(element).innerHTML="";
	document.getElementById(element).appendChild(container);
	
	container.style.pushIntervalObject=window.setInterval('pushDynDiv(\''+element+'\', '+amountOfPixelsToMove+', '+targetX+');', 10);
}

function pushDynDiv(elementId, px, posX)
{
	var el=dynDiv[elementId+'Container'];
	
	if(px>0 && (el.style.pushMarginLeft-px)<posX)
	{
		clearInterval(el.style.pushIntervalObject);
		px=(el.style.pushMarginLeft-posX);
		
		dynDiv[elementId+'Old'].style.display='none';
	}
	else if(px<0 && (el.style.pushMarginLeft-px)>posX)
	{
		clearInterval(el.style.pushIntervalObject);
		px=(el.style.pushMarginLeft-posX);
		
		dynDiv[elementId+'Old'].style.display='none';
	}
	
	el.style.pushMarginLeft-=px;
	el.style.marginLeft=el.style.pushMarginLeft;
}