var middlePanelBottomOffset = 50
var maxMessages = 10
var checkIncrement = 2000
var checkInterval = 0
var checkTimer

function checkMessages() {

	if (activeChannel != null && activeChannel.id != null && activeChannel.id != 'INBOX' && activeChannel.id != 'HELP') {
	var url = 'asp/checkMessages.asp'
	var pars = 'id=' + activeChannel.id +'&r=' + Math.random();

		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: function(response) {
					var r = parseInt(response.responseText, 10)
					if (r > activeChannel.lastCount) {
						getMessages()
					}
					else {
						checkInterval += checkIncrement
						checkTimer = setTimeout("checkMessages()", checkInterval)
					}
				},
				onFailure: function(response) {
					checkInterval += checkIncrement
					checkTimer = setTimeout("checkMessages()", checkInterval)
				}
			});
	}
}


function getMessages() {

	var url = 'asp/getMessages.asp'
	var pars = 'id=' + activeChannel.id + '&lastCount=' + activeChannel.lastCount + '&max=' + maxMessages +'&r=' + Math.random();

	clearTimeout(checkTimer)

	var myAjax = new Ajax.Request(
		url, 
		{
			method: 'get', 
			parameters: pars, 
			onComplete: function(response) {
				var r = response.responseText
				if (r.substr(0,5) == '<?xml') {
					displayMessages(r)
				}
				else {
					// Error getting messages
				}
			},
			onFailure: function(response) {
				// Error getting messages
			}
		});

}


function displayMessages(responseText) {

	var xmlDoc = loadXml(responseText)
	var newMessages = xmlDoc.getElementsByTagName("message")
	var loadedMessages = document.getElementsByClassName('message', $('messsages'))

	var startAt = 0
	var chatCount = parseInt(xmlDoc.getElementsByTagName("chat")[0].getAttribute("count"), 10)

	var xpos, ypos, author, authorId, content
	var messageHTML = ''

	if (newMessages.length > maxMessages) {
		startAt = newMessages.length - maxMessages
	}

	for (i = startAt; i < newMessages.length; i++) {

		messageHTML = ''

		xpos = newMessages[i].getAttribute("x")
		ypos = newMessages[i].getAttribute("y")
		author = newMessages[i].getElementsByTagName("author")[0].firstChild.nodeValue
		authorId = newMessages[i].getElementsByTagName("author")[0].getAttribute("id")
		content = newMessages[i].getElementsByTagName("content")[0].firstChild.nodeValue

		messageHTML += '<div class="message" style="top: '+ypos+'px; left: '+xpos+'px;">'
		messageHTML += '<div class="messageHeader" onclick="showUserOptions(this, \''+authorId+'\',\''+author+'\')">'+author+':</div>'
		messageHTML += '<div class="messageBody">'+content+'</div></div>'

		new Insertion.Bottom($('messages'), messageHTML)
	}

	loadedMessages = document.getElementsByClassName('message', $('messsages'))

	if (loadedMessages.length > maxMessages) {
		for (i = 0; i < (loadedMessages.length - maxMessages); i++) {

			//new Effect.Opacity(loadedMessages[i], {duration:0.8, from:1.0, to:0.0});
			//new Effect.Fade(loadedMessages[i], { duration: 0.8 });
			//Element.hide(loadedMessages[i])
			Element.remove(loadedMessages[i])

		}
	}	

	activeChannel.lastCount = chatCount

	checkInterval = checkIncrement
	checkTimer = setTimeout("checkMessages()", checkInterval)
}


function freezeMessaging() {
	clearTimeout(checkTimer)
}


function setPostMessageFocus(textElement, focused) {

	if (focused) {
		highlightForm(textElement, true)
		stopKeyListening = true
	}
	else {
		highlightForm(textElement, false)
		stopKeyListening = false
	}
}


function postMessage() {

	var xpos = parseInt($('postMessageBox').style.left, 10)
	var ypos = parseInt($('postMessageBox').style.top, 10)
	var message = String($('postMessageBoxTextarea').value).strip().stripTags()

	var errorText
	var errorOccurred = false

	if ($('errorMessage')) {
		Element.remove($('errorMessage'))
	}

	if (message == "") {
		errorText = "No message"
		showErrorMessage($('postMessageBoxTextarea'), errorText)
		errorOccurred = true
	}
	else if (activeChannel == null || activeChannel.id == null) {
		errorText = "No channel loaded"
		showErrorMessage($('postMessageBoxTextarea'), errorText)
		errorOccurred = true
	}

	if (!errorOccurred) {
		sendPostMessage(message, xpos, ypos)
	}
}


function sendPostMessage(message, xpos, ypos) {

	var url = "asp/postMessage.asp"
	var pars = 'id=' + activeChannel.id + '&message=' + escape(message) + '&x=' + xpos + '&y=' + ypos + '&max=' + maxMessages + '&r=' + Math.random();

	var myAjax = new Ajax.Request(
		url, 
		{
			method: 'post', 
			parameters: pars, 
			onLoading: function(response) {
				$('postMessagePostButton').innerHTML = '<img src="img/tick.gif" /> Posting...'
			},
			onComplete: function(response) {
				var r = response.responseText
				if (r.substr(0,5) == '<?xml') {
					$('postMessagePostButton').innerHTML = '<img src="img/tick.gif" /> Post'
					$('postMessageBoxTextarea').value = ""
					Element.hide($('postMessageBox'))
					displayMessages(r)
				}
				else {
					showErrorMessage($('postMessageBoxTextarea'), r)
					$('postMessagePostButton').innerHTML = '<img src="img/tick.gif" /> Try again'
				}
			},
			onFailure: function(response) {
				showErrorMessage($('postMessageBoxTextarea'), 'No connection')
				$('postMessagePostButton').innerHTML = '<img src="img/tick.gif" /> Try again'
			}
		});

}

function randomPostMessage() {
	
	var middlePanelWidth = Element.getDimensions('middlePanel').width
	var middlePanelHeight = Element.getDimensions('middlePanel').height - middlePanelBottomOffset
	var xpos = Math.floor(Math.random()*middlePanelWidth)
	var ypos = Math.floor(Math.random()*middlePanelHeight)

//	if (!Element.visible('postMessageBox')) {
		displayPostMessage(xpos, ypos)
//	}
//	else {
//		focusOnPostMessage()
//	}
}


function focusOnPostMessage() {
	var t = setTimeout("$('postMessageBoxTextarea').focus()",100)
//	$('postMessageBoxTextarea').focus()
}


function showPostMessage(e) {

	var panelx = Position.cumulativeOffset($('middlePanel'))[0]
	var panely = Position.cumulativeOffset($('middlePanel'))[1]
	var xpos = Event.pointerX(e)
	var ypos = Event.pointerY(e)

	xpos = xpos - panelx
	ypos = ypos - panely

	displayPostMessage(xpos, ypos)

}



function displayPostMessage(xpos, ypos) {

	var panelx = Position.cumulativeOffset($('middlePanel'))[0]
	var panely = Position.cumulativeOffset($('middlePanel'))[1]
	var boxWidth = Element.getDimensions('postMessageBox').width
	var boxHeight = Element.getDimensions('postMessageBox').height
	var viewFrameLeft = Position.cumulativeOffset($('viewFrameContainer'))[0] - panelx
	var viewFrameBottom = Position.cumulativeOffset($('viewFrameContainer'))[1] - panely + Element.getDimensions('viewFrameContainer').height
	var viewFrameWidth = Element.getDimensions('viewFrameContainer').width


	if ((xpos + boxWidth) >= Element.getDimensions('middlePanel').width) {
		xpos = Element.getDimensions('middlePanel').width - boxWidth - 1
	}
	if ((xpos + boxWidth) >= viewFrameLeft && xpos < viewFrameLeft && ypos <= viewFrameBottom) {
		xpos = viewFrameLeft - boxWidth - 1
	}
	else if (xpos >= viewFrameLeft && xpos < (viewFrameLeft + viewFrameWidth) && ypos <= viewFrameBottom) {
		ypos = viewFrameBottom + 1
	}
	if ((ypos + boxHeight) >= (Element.getDimensions('middlePanel').height - middlePanelBottomOffset)) {
		ypos = Element.getDimensions('middlePanel').height - boxHeight - 1 - middlePanelBottomOffset
	}


	if ($('errorMessage')) {
		Element.remove($('errorMessage'))
	}


	$('postMessageBox').style.left = xpos
	$('postMessageBox').style.top = ypos

// Effect.Grow caused errors in Safari and IE 7 
	Element.show($('postMessageBox'))
	focusOnPostMessage()

/*	if (safariBrowser) {
		Element.show($('postMessageBox'))
		focusOnPostMessage()
	}
	else {
		if (!Element.visible('postMessageBox')) {
			new Effect.Grow('postMessageBox', {duration: 0.8, direction: top, afterFinish: focusOnPostMessage})	
		}
		else {
			focusOnPostMessage()
		}
	}
*/	
}


function hidePostMessage() {
	$('postMessagePostButton').innerHTML = '<img src="img/tick.gif" /> Post'
	$('postMessageBoxTextarea').value = ""

// Effect.Grow caused errors in Safari and IE 7 
	Element.hide('postMessageBox')

/*	if (safariBrowser) {
		Element.hide('postMessageBox')
	}
	else {
		new Effect.Shrink('postMessageBox', {duration: 0.8, direction: top})
	}
*/
}

