function sendText (textMessage) {
	// ### textMessage definiert?
	if (textMessage == undefined)
		textMessage = document.chatAction.chatLine.value;
	
	// ### Ajax abschicken
	FotU_Ajax.SendData('module=chat&sub=text&chatSession=' + chatSession + '&message=' + textMessage + '&channelID=' + iChannelOpened);
	document.chatAction.chatLine.value = '';
	document.chatAction.chatLine.focus();
	return false;
}

function CheckChatConnection () {
	// ### Noch bei 0?
	iActTime = Date.parse(new Date());
	if (iLastSyncTime == 0)
		iLastSyncTime = iActTime;
	else if (iLastSyncTime <= (iActTime-60000))
	{
		// ### Sync neustarten..
		alert('Verbindung abgebrochen.. Synchronisation neugestartet!');
		FotU_Ajax.ChatSync();
		iLastSyncTime = iActTime;
	}
	
	/*
	// ### Hat sich die Größe des Fensters verändert?
	iSizesChanged = iSizeChatMaster - document.body.clientHeight;
	iSizesChanged = Number(iSizesChanged); 
	if (iSizesChanged != 0)
	{
		// ### Fenster anpassen!
		iNewChatOver = iSizeChatOver - iSizesChanged;
		document.getElementById('chatOver').style.height = iNewChatOver + 'px';
		iNewUsersOver = iSizeUsersOver - iSizesChanged;
		document.getElementById('usersOver').style.height = iNewUsersOver + 'px';
		
		// ### Variablen setzen
		iSizeChatMaster = document.body.clientHeight;
		iSizeChatOver = iNewChatOver;
		iNewUsersOver = iNewUsersOver;
	}*/
}

// ### Eventhandler
function eventHandler (eventType, eventID, eventHandling)
{
	// ### Format entpuzzeln
	switch (eventType) {
		case "joinchannel":
			// ### Neuen Channel erstellen
			a_ActiveChannels[iChannelsCount] = eventID;
			a_ChannelInfos['channel_' + eventID] = eventHandling;
			a_ChannelLog['channel_' + eventID] = '';
			a_ChannelUsers['channel_' + eventID] = '';
			
			// ### Channel-Vater-Element
			var newChannel = document.createElement("div");
			newChannel.setAttribute("id", "channel_" + iChannelsCount);
			newChannel.setAttribute("style", "padding-left: 4px; float: left;");
			
			// ### Linkes inneres Element
			var channelLeft = document.createElement("div");
			channelLeft.setAttribute("id", "channel_settings_l_" + iChannelsCount);
			channelLeft.setAttribute("style", "float: left;");
			newChannel.appendChild(channelLeft);
			
			// ### Verlinkung für Channel
			var channelA = document.createElement("a");
			channelA.setAttribute("id", "channel_settings_a_" + iChannelsCount);
			channelA.setAttribute("style", "text-decoration: none; cursor: pointer;");
			var channelUnder = document.createElement("div");
			channelUnder.setAttribute("style", "float: left; height: 22px; background-image: url('/images/chat/channels_list_bg.png'); width: 100px; text-align: center;");
			var channelContent = document.createElement("div");
			channelContent.setAttribute("id", "channel_name_" + iChannelsCount);
			channelContent.setAttribute("class", "chat_bl");
			channelContent.setAttribute("style", "padding-top: 4px;");
			var channelText = document.createTextNode(eventHandling);
			
			// ### Elemente hinzufügen
			channelContent.appendChild(channelText);
			channelUnder.appendChild(channelContent);
			channelA.appendChild(channelUnder);
			newChannel.appendChild(channelA);
			
			// ### Rechtes äußeres Element
			var channelRight = document.createElement("div");
			channelRight.setAttribute("id", "channel_settings_r_" + iChannelsCount);
			channelRight.setAttribute("style", "float: left;");
			newChannel.appendChild(channelRight);
			
			// ### Zur Channelliste hinzufügen
			var channelList = document.getElementById('channelList');
			channelList.appendChild(newChannel);
			
			// ### Inhalte setzen ;)
			document.getElementById("channel_settings_l_" + iChannelsCount).innerHTML = '<img src="/images/chat/channels_list_l.png">';
			document.getElementById("channel_settings_r_" + iChannelsCount).innerHTML = '<img src="/images/chat/channels_list_r.png">';
			
			// ### CSS-Classen setzen
			document.getElementById("channel_" + iChannelsCount).className = 'channelOver';
			document.getElementById("channel_settings_l_" + iChannelsCount).className = 'channelLeft';
			document.getElementById("channel_settings_a_" + iChannelsCount).className = 'channelBg';
			document.getElementById("channel_settings_r_" + iChannelsCount).className = 'channelRight';
			document.getElementById("channel_name_" + iChannelsCount).className = 'chat_bl';
			document.getElementById("channel_name_" + iChannelsCount).style.paddingTop = '4px';
			document.getElementById("channel_settings_a_" + iChannelsCount).style.cursor = 'pointer';
			
			// ### Verlinkung ;D
			document.getElementById("channel_settings_a_" + iChannelsCount).onclick=function(){SwitchChannel(this.id.replace(/channel_settings_a_/, ""));};
			SwitchChannel(iChannelsCount);
			
			// ### Ende ;)
			iChannelsCount++;
			break;
		
		case "leavechannel":
			// ### Channel suchen
			iIntChannelID = -1;
			for (iTmp = 0; iTmp < iChannelsCount; iTmp++)
			{
				// ### Ist das der Channel?
				if (a_ActiveChannels[iTmp] == eventID)
				{
					// ### Interne ChannelID gefunden :)
					iIntChannelID = iTmp;
				}
			}
			
			// ### Channel gefunden?
			if (a_ActiveChannels[iIntChannelID] > 0)
			{
				// ### Channel verlassen!
				a_ActiveChannels[iIntChannelID] = 0;
				delete a_ChannelInfos['channel_' + eventID];
				delete a_ChannelLog['channel_' + eventID];
				delete a_ChannelUsers['channel_' + eventID];
			}
			
			// ### Elemente löschen
			channelDiv = document.getElementById('channel_' + iIntChannelID);
			channelDiv.parentNode.removeChild(channelDiv);
			
			// ### Ist der Channel geöffnet?
			if (eventID == iChannelOpened)
			{
				// ### Aktueller Channel ist bereits zu!
				iWindowOpened = -1;
				
				// ### Channel switchen
				fChannelFallback = true;
				for (iTmp = 0; iTmp < iChannelsCount; iTmp++)
				{
					// ### Ist der Channel aktiv?
					if (a_ActiveChannels[iTmp] > 0)
					{
						// ### Den Channel joinen!
						SwitchChannel(iTmp);
						fChannelFallback = false;
					}
				}
				
				// ### Muss nen Fallback geöffnet werden?
				if (fChannelFallback == true)
				{
					// ### Layer -1 öffnen
					SwitchChannel(-1);
				}
			}
			
			// ### Ende ;)
			break;
		
		case "newChatlines":
			// ### Neuen Inhalt übernehmen
			eventHandling = eventHandling.replace(/#AT#/g, "@");
			a_ChannelLog['channel_' + eventID] += eventHandling;
			
			// ### Muss gescrollt werden?
			if (eventID == iChannelOpened)
			{
				// ### Inhalt setzen und scrollen
				document.getElementById("chatContent").innerHTML = a_ChannelLog['channel_' + channelID];
				document.getElementById("chatOver").scrollTop = document.getElementById("chatContent").offsetHeight;
			}
			else
			{
				// ### Channel highlighten ;)
				iIntChannelID = -1;
				for (iTmp = 0; iTmp < iChannelsCount; iTmp++)
				{
					// ### Ist das der Channel?
					if (a_ActiveChannels[iTmp] == eventID)
					{
						// ### Interne ChannelID gefunden :)
						document.getElementById('channel_name_' + iTmp).className = 'chat_or';
					}
				}
			}
			break;
		
		case "newChatUserList":
			// ### Neuen Inhalt übernehmen
			eventHandling = eventHandling.replace(/#AT#/g, "@");
			a_ChannelUsers['channel_' + eventID] = eventHandling;
			
			// ### Muss gescrollt werden?
			if (eventID == iChannelOpened)
				document.getElementById("chatUsers").innerHTML = a_ChannelUsers['channel_' + channelID];
			break;
		
		case "chatSync":
			iLastSyncTime = Date.parse(new Date());
			break;

		default:
			alert('unknown action: ' + eventType);
			break;
	}
}

function SwitchChannel(windowID)
{
	// ### Irgendein Channel geöffnet?
	if (iWindowOpened != -1)
	{
		// ### Nun nicht mehr :)
		document.getElementById('channel_name_' + iWindowOpened).style.fontWeight = 'normal';
	}
	
	// ### Channel öffnen
	channelID = a_ActiveChannels[windowID];
	iWindowOpened = windowID;
	iChannelOpened = channelID;
	document.getElementById("chatContent").innerHTML = a_ChannelLog['channel_' + channelID];
	document.getElementById("chatUsers").innerHTML = a_ChannelUsers['channel_' + channelID];
	document.getElementById("chatOver").scrollTop = document.getElementById("chatContent").offsetHeight;
	
	// ### Channel-Hervorhebung
	if (windowID != -1)
	{
		// ### Highlighten
		document.getElementById('channel_name_' + windowID).className = 'chat_bl';
		document.getElementById('channel_name_' + windowID).style.fontWeight = 'bold';
	}
	
	// ### In die Chatline wechseln
	document.chatAction.chatLine.focus();
}

function FotUChatConnct ()
{
	// ### Welche Channels sollen gejoint werden?
	sChannelsToJoin = '';
	var arrBoxen = document.getElementsByName("joinChannels[]");
	for (var i = 0; i < arrBoxen.length; i++) {
		if(arrBoxen[i].checked == true) {
			// ### Den Channel joinen..
			if (sChannelsToJoin != '')
				sChannelsToJoin += '&';
			sChannelsToJoin += 'joinChannels[]=' + arrBoxen[i].value;
		}
	}
	if (sChannelsToJoin != '')
		sChannelsToJoin = '&' + sChannelsToJoin;
	
	// ### Welcher Nickname?
	sUseNickname = 'user';
	var arrBoxen = document.getElementsByName("useNickname");
	for (var i = 0; i < arrBoxen.length; i++) {
		if(arrBoxen[i].checked == true) {
			sUseNickname = arrBoxen[i].value;
		}
	}
	
	// ### Ajax abschicken
	FotU_Ajax.SendData('module=chat&sub=connect&masterOver=' + document.body.clientHeight + '&chatOver=' + document.getElementById('chatOver').offsetHeight + '&usersOver=' + document.getElementById('usersOver').offsetHeight + '&useNickname=' + sUseNickname + sChannelsToJoin);
	return false;
}

function openHelp(url,scrolling,width,height) {
	open(url, "fotu_hilfe", "resizable=no, menubar=no, locationbar=no, status=no, hotkeys=no, dependent=yes, width=" + width + ", height=" + height + ", screenX=0, screenY=0, scrollbars=" + scrolling)
}

function FotU_HandleRequest (SentActions)
{
	for (var i = 0; i < SentActions.length; i++) {
		type = SentActions[i].getElementsByTagName("type")[0].firstChild.nodeValue;
		switch (type) {
			case "alert":
				alert(SentActions[i].getElementsByTagName("answer")[0].firstChild.nodeValue);
				break;
			case "renew":
				document.getElementById(SentActions[i].getElementsByTagName("element")[0].firstChild.nodeValue).innerHTML = SentActions[i].getElementsByTagName("answer")[0].firstChild.nodeValue;
				break;
			case "addContent":
				document.getElementById(SentActions[i].getElementsByTagName("element")[0].firstChild.nodeValue).innerHTML += SentActions[i].getElementsByTagName("answer")[0].firstChild.nodeValue;
				break;
			case "window":
				FotU_Ajax.SpawnWindow(SentActions[i].getElementsByTagName("element")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("answer")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("top")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("left")[0].firstChild.nodeValue)
				break;
			case "ress":
				document.getElementById('ress_min').innerHTML = SentActions[i].getElementsByTagName("min")[0].firstChild.nodeValue;
				document.getElementById('ress_ves').innerHTML = SentActions[i].getElementsByTagName("ves")[0].firstChild.nodeValue;
				document.getElementById('ress_met').innerHTML = SentActions[i].getElementsByTagName("met")[0].firstChild.nodeValue;
				break;
			case "buildstreet":
				BuildStreet(SentActions[i].getElementsByTagName("field")[0].firstChild.nodeValue);
				break;
			case "knockdownstreet":
				KnockDownStreet(SentActions[i].getElementsByTagName("field")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("belag")[0].firstChild.nodeValue);
				break;
			case "forward":
				document.location.href = SentActions[i].getElementsByTagName("answer")[0].firstChild.nodeValue;
				break;
			case "eventHandler":
				eventHandler(SentActions[i].getElementsByTagName("eventType")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("eventID")[0].firstChild.nodeValue, SentActions[i].getElementsByTagName("eventHandling")[0].firstChild.nodeValue);
				break;
			case "chatlines":
				break;
			case "none":
				break;
			default:
				// ### nothing
				alert('check');
				break;
		}
	}
}