
	var shoutboxAjaxRequest = null;
	var lastmessage         = 0;
	var queuedmessage       = null;
	var timerPending        = false;
	var sbcontent           = null;
	var sbRequestParams     = null;
	var sbCallback          = null;
	var sbPageUrl           = null;
	var sbSession           = null;
	var sbOptReload         = 0;
	var sbOptOrderAsc       = 0;
	var sbOptWidth          = '100%';
	var sbOptHeight         = '150px';
	
	
	function initShoutbox(w, h, reload, order, url, sid, iframeheader) {
		sbOptReload   = reload * 1000;
		sbOptOrderAsc = order;
		sbPageUrl     = url;
		sbSession     = '&s=' + sid;
		sbOptWidth    = w;
		sbOptHeight   = h;
		
		// prepare div element
		sbcontent           = document.getElementById('shoutboxcontent');
		sbcontent.innerHTML = '<iframe src="about:blank" id="shoutboxcontentframe" name="shoutboxcontentframe" scrolling="auto" frameborder="0" allowtransparency="true" style="background-color:transparent; width:100%; height:' + sbOptHeight + '; border:0px;"></iframe>';
		frames.shoutboxcontentframe.document.write('\x3chtml\x3e\x3chead\x3e' + iframeheader + '\x3c/head\x3e\x3cbody style="margin:0px; padding:0px;"\x3e<div class="shoutboxMessageFrame shoutboxFrameInner container-2" style="margin:0px; padding:0px; position:absolute; top:0px; left:0px; width:100%; height:100%;"><div id="shoutboxcontent" class="shoutboxMessageFrame shoutboxFrameInner container-2 smallFont" style="text-align:left; margin:0px; padding:0px;"></div></div>\x3c/body\x3e\x3c/html\x3e');
		frames.shoutboxcontentframe.document.close();
		sbcontent = null;
		
		// start shoutbox
		setTimeout('shoutboxTimer()', 1000);
		
		return;
	}
	
	
	function setShoutboxCallback(cb) {
		sbCallback = cb;
		return;
	}
	
	
	function shoutboxTimer() {
		if (this.sbcontent == null) {
			this.sbcontent = frames.shoutboxcontentframe.document.getElementById('shoutboxcontent');
		}
		
		this.timerPending = false;
		sendShoutboxAjaxRequest();
		
		return;
	}
	
	
	function sendShoutboxAjaxRequest() {
		if(this.shoutboxAjaxRequest == null) {
			var appendmessage = '';
			
			if(this.sbRequestParams != null) {
				appendmessage += '&' + this.sbRequestParams;
			}
			
			if(this.queuedmessage != null) {
				appendmessage += '&message=' + encodeURIComponent(this.queuedmessage);
				this.queuedmessage = null;
			
				if(document.getElementById('shoutboxGuestName') != null) {
					appendmessage += '&guestname=' + encodeURIComponent(document.getElementById('shoutboxGuestName').value);
				}
			}
			
			this.shoutboxAjaxRequest = new AjaxRequest();
			return this.shoutboxAjaxRequest.openPost(
								sbPageUrl + '/index.php?page=ShoutboxContent&output=xml' + sbSession,
								'since=' + this.lastmessage + appendmessage,
								function() { handleShoutboxContentRequest(); }
			);
		}
		
		return true;
	}
	
	function sendShoutboxMessage() {
		this.queuedmessage = document.getElementById('shoutboxMessage').value;
		document.getElementById('shoutboxMessage').value='';
		return !sendShoutboxAjaxRequest();
	}
	
	function handleShoutboxContentRequest() {
		if (this.shoutboxAjaxRequest && this.shoutboxAjaxRequest.xmlHttpRequest.readyState == 4) {
			if(this.shoutboxAjaxRequest.xmlHttpRequest.status == 200 && this.shoutboxAjaxRequest.xmlHttpRequest.responseXML) {
				var lines = this.shoutboxAjaxRequest.xmlHttpRequest.responseXML.getElementsByTagName('lines');
				
				if(lines.length > 0) {
					var newContent = '';
					
					if (this.sbCallback != null) {
						this.sbCallback(lines[0]);
					}
					
					for(var i=0; i<lines[0].childNodes.length; i++) {
						var line = lines[0].childNodes[i];
						
						if(line.childNodes.length > 0) {
							var node = line.childNodes[0];
							
							if(node.nodeType == 3 || node.nodeType == 4) {
								if(line.tagName == 'line') {
									if(sbOptOrderAsc == 1) {
										newContent = newContent + node.nodeValue + '<br/>';
									}
									else {
										newContent = node.nodeValue + '<br/>' + newContent;
									}
								}
								else if(line.tagName == 'last') {
									this.lastmessage = node.nodeValue;
								}
							}
						}
					}
					
					if(sbOptOrderAsc == 1) {
						this.sbcontent.innerHTML = this.sbcontent.innerHTML + newContent;
					}
					else {
						this.sbcontent.innerHTML = newContent + this.sbcontent.innerHTML;
					}
				}
				
				if(sbOptOrderAsc == 1) {
					// scroll the frame to the bottom
					frames.shoutboxcontentframe.scrollTo(0, 999999);
				}
				
				// request was successfully handled...
				this.shoutboxAjaxRequest.xmlHttpRequest.abort();
				this.shoutboxAjaxRequest = null;
				
				// if a message was queued, send another request immediately
				if(this.queuedmessage) {
					sendShoutboxAjaxRequest();
				}
				else if(sbOptReload > 0 && !this.timerPending) {
					this.timerPending = true;
					setTimeout('shoutboxTimer()', sbOptReload);
				}
			}
		}
		
		return;
	}
	
	function sbWhisperTo(name) {
		document.getElementById('shoutboxMessage').value = '/w "' + name + '" ' + document.getElementById('shoutboxMessage').value;
		return;
	}
	
	function sbDeleteMsg(msgid) {
		var line = frames.shoutboxcontentframe.document.getElementById('sbLine' + msgid);
		var msg  = frames.shoutboxcontentframe.document.getElementById('sbMsg' + msgid);
		var text = msg.innerHTML.replace(/[\n\r]/g, ' ').replace(/\<.*?\>/g, '');
		
		if(confirm(langShoutboxDeleteConfirm + '\n' + text)) {
			// delete linebreak
			line.parentNode.removeChild(line.nextSibling);
			
			// delete message node
			line.parentNode.removeChild(line);
			
			// send delete command
			var ajaxRequest = new AjaxRequest();
			ajaxRequest.openPost(
								'index.php?page=ShoutboxContent&output=none' + sbSession,
								'delete=' + msgid,
								function() { }
			);

		}
		
		return;
	}
	

