var is = {
    ie:      navigator.appName == 'Microsoft Internet Explorer',
    java:    navigator.javaEnabled(),
    ns:      navigator.appName == 'Netscape',
    ua:      navigator.userAgent.toLowerCase(),
    version: parseFloat(navigator.appVersion.substr(21)) ||
             parseFloat(navigator.appVersion),
    win:     navigator.platform == 'Win32'
}
is.mac = is.ua.indexOf('mac') >= 0;
if (is.ua.indexOf('opera') >= 0) {
    is.ie = is.ns = false;
    is.opera = true;
}
if (is.ua.indexOf('gecko') >= 0) {
    is.ie = is.ns = false;
    is.gecko = true;
}

// CSS

function changeStyle(style) {
	if (style && style != oldStyle && document.getElementById) {
		if (oldStyle) {
			styleObj = document.getElementById("style"+oldStyle);
			styleObj.disabled = true;
		}
		styleObj = document.getElementById("style"+style);
		styleObj.disabled = false;
		oldStyle = style;
	}
}

// Basic

function getValue(obj) {
	if (obj.firstChild)
		return obj.firstChild.nodeValue;
	else
		return obj.innerText;
}

function setValue(obj, value) {
	if (obj.firstChild)
		obj.firstChild.nodeValue = value;
	else
		obj.innerText = value;
}

// Scrolling functions

function scroll2Bottom()
{
	doScroll(1, 2000);
}

function getScrollArea() {
	var parent = document.getElementById("messages");
	if (is.ie && parent)
		return parent;
	else
		return document.body;
}

function getDocHeight()
{
	var parent = getScrollArea();
	if (is.ie && parent)
		return parent.scrollHeight;
	else if (document.height)
		return document.height;
	else if (parent)
		return parent.scrollHeight;
}

var oldH = getDocHeight();

function scrollMsg(count)
{
	if (count > 0) {
		var newH = getDocHeight();
		var num = Math.floor((newH - oldH)/9);
		var remainder = (newH - oldH)%9;
		oldH = newH;
		doScroll(0, remainder);
		doScroll(num, 9);
	}
}

function scrollOnce(count)
{
	setTimeout('doScroll(0, '+(18*count*2)+')', 200);
}

function doScroll(count, step)
{
    if (is.ie) {
	var scroll = getScrollArea();
	scroll.scrollTop += step;
    } else if (window.scrollBy)
        window.scrollBy(0, step);
    else if (window.scroll)
        window.scroll(0, step);

	if (count > 0)
		setTimeout('doScroll('+(count-1)+', '+step+')', 1);

	movePopup(step);
}

// Popup function

function msgPopup(pseudo)
{
	window.open('/chat/templates/userOptions.php?dest='+pseudo, 'options', 'width=450,height=400,resizable=yes,scrollbars=yes');
	return false;
}

var popupNick;
var popupTop;

function isPopup() {
	var popupContainer = document.getElementById("popup");
	if (popupContainer && popupContainer.style.visibility == 'visible')
		return true;
	else
		return false;
}

function hidePopup(force) {
	var popupContainer = document.getElementById("popup");
	if (popupContainer)
		popupContainer.style.visibility='hidden';
	longTmout = false;
	stopTmout();
}

function movePopup(offset) {
	if (!isNaN(popupTop) && isPopup()) {
		popupTop += offset;
		setPopupPos();
	}
}

function setPopupPos() {
	if (document.getElementById) {
		var popupContainer = document.getElementById("popup");
		var parent = getScrollArea();
		var buddyaccess = document.getElementById("buddyaccess");
		if (popupContainer && parent) {
			if (buddyaccess && popupTop < buddyaccess.height+parent.scrollTop+2)
				popupTop =  buddyaccess.height+parent.scrollTop+2;
			else if (popupTop < parent.scrollTop+2) {
				popupTop = parent.scrollTop+2;
			} else if (popupTop+popupContainer.clientHeight > parent.scrollTop+parent.clientHeight-2) {
				popupTop=parent.scrollTop+parent.clientHeight-popupContainer.clientHeight-2;
			} else if (popupTop+popupContainer.clientHeight > getDocHeight()-2) {
				popupTop=getDocHeight()-popupContainer.clientHeight-2;
			}
			popupContainer.style.top=popupTop;
		}
	}
}

function doFocus() {
	var popupInput = document.getElementById("popupmsg");
	popupInput.focus();
}

function showPopup() {
	var popupContainer = document.getElementById("popup");
	if (popupContainer) {
		setPopupPos();
		popupContainer.style.left=0;
		popupContainer.style.visibility='visible';
		setTimeout('doFocus()', 500);
	}
}

var longTmout = false;
var tmout;
function restartTmout() {
	if (tmout)
		startTmout();
}
function startTmout() {
	stopTmout();
    if (longTmout)
        duration = 8000;
    else
        duration = 3500;
    tmout = setTimeout('hidePopup(false)', duration);
}
function stopTmout() {
	if (tmout) {
		clearTimeout(tmout);
		tmout=null;
	}
}

function displayPopup() {
	if (http.readyState == 4) {
		var popupContents = unescape(http.responseText);
		var items=popupContents.split("|");
		//if (popupNick == items[0]) {
			hidePopup(true);
			var elem = document.getElementById("popupimg");
			if (items[1]) {
				elem.src='http://www.jeuxdecartes.net/static/img/trombino/'+items[1]+'.jpg';
				elem.style.display='inline';
				addListener(elem, 'load', setPopupPos);
			} else {
				elem.style.display='none';
				removeListener(elem, 'load');
			}
			elem = document.getElementById("popupname");
			setValue(elem, items[0]);
			elem = document.getElementById("popupcomment");
			setValue(elem, items[2]);
			elem = document.getElementById("popupbuddyimg");
			if (items[3] == 1)
				elem.src = "/chat/static/love1.gif";
			else if (items[3] == -1)
				elem.src = "/chat/static/love-1.gif";
			else
				elem.src = "/chat/static/love0.gif";
			elem = document.getElementById("popupmsgresult");
			elem.style.display='none';
			elem = document.getElementById("popupmsgform");
			elem.style.display='inline';
			elem = document.getElementById("popupcomplainlink");
			setValue(elem, "Se plaindre de "+items[0]);
			elem = document.getElementById("popupresult");
			elem.style.display='none';
			showPopup();
			//window.setTimeout('hidePopup()', 10000);
		//}
	}
}

function launchPopup(target) {
	popupNick = getValue(target);
	popupTop = target.offsetTop-10;
	sendRequest('/chat/transactions/getUserInfos.php?nick='+escape(popupNick), displayPopup);
}

// Popup actions

function msgResult() {
	if (http.readyState == 4) {
		var elem = document.getElementById("popupmsgresult");
		setValue(elem, unescape(http.responseText));
		elem.style.display='inline';
		elem = document.getElementById("popupmsgform");
		elem.style.display='none';
		setPopupPos();
		window.setTimeout("hidePopup(true)", 4000);
	}
}

function sendMsg(formObj) {
	var msg = formObj.message.value;
	var nick = popupNick;
	sendRequest('/chat/transactions/ajaxSendUserMessage.php?sendTo='+escape(nick)+'&message='+escape(msg), msgResult);
	formObj.message.value = '';
	return false;
}

function displayResult() {
	if (http.readyState == 4) {
		var elem = document.getElementById("popupresult");
		setValue(elem, unescape(http.responseText));
		elem.style.display='inline';
		window.setTimeout("hidePopup(true)", 4000);
	}
}

function sendSpecial(special) {
	var nick = popupNick;
	sendRequest('/chat/transactions/ajaxSendUserMessage.php?sendTo='+escape(nick)+'&special='+escape(special), displayResult);
	return false;
}

function toggleBuddy(nick, elem) {
	if (nick == '')
		nick = popupNick;
	if (elem == '')
		elem = document.getElementById("popupbuddyimg");
	if (elem.src.indexOf("/chat/static/love-1.gif") > 0) {
		score = 0;
		elem.src = "/chat/static/love0.gif";
	} else if (elem.src.indexOf("/chat/static/love1.gif") > 0) {
		score = -1;
		elem.src = "/chat/static/love-1.gif";
	} else {
		score = 1;
		elem.src = "/chat/static/love1.gif";
	}
	sendRequest('/chat/transactions/saveBuddy.php?buddy='+escape(nick)+'&score='+escape(score)+'&noredirect=true', displayResult);
	return false;
}

function complain() {
	var nick = popupNick;
	sendRequest('/chat/transactions/ajaxComplain.php?user='+escape(nick), displayResult);
	return false;
}

// Buddies

var timerRefreshBL;

function toggleBuddyList() {
  var buddylist = document.getElementById("buddylist");
  var buddyimg = document.getElementById("buddyimg");
  if (buddylist && buddyimg) {
    if (buddylist.style.display == 'none') {
      buddylist.style.display='block';
      buddyimg.src = "/chat/static/liston.gif";
      updateBuddyList();
      //timerRefreshBL = setInterval('updateBuddyList()', 120000)
    } else {
      buddylist.style.display='none';
      buddyimg.src = "/chat/static/listoff.gif";
      //clearInterval(timerRefreshBL);
    }
    //setTimeout('toggleBuddyList()', 10000);
  }
}

function updateBuddyList() {
	sendRequest('/chat/transactions/ajaxGetBL.php', doUpdateBuddyList);
	return false;
}

function doUpdateBuddyList() {
	if (http.readyState == 4) {
		  var buddies = http.responseText.parseJSON();
		  for (i = 0; i < buddies.length && i < 10; i++) {
		  	var buddy = buddies[i];
			var buddyitem = document.getElementById("buddyitem"+i);
			setValue(buddyitem, buddy);
			buddyitem.style.visibility='visible';
		  }
		  for (; i < 10; i++) {
			var buddyitem = document.getElementById("buddyitem"+i);
			buddyitem.style.visibility='hidden';
		  }
  }
}

// Supervision

var numErrors = -5;

function monitorUpdate() {
	if (window.parent.updater.forceUpdate)
		numErrors = 0;
	else {
		numErrors++;
		if (numErrors >= 2) {
			window.parent.updater.location.reload();
			addSysMsg('** Reconnexion **');
		}
	}
}

// DOM functions

function addListener(node, event, fct) {
	if (node.addEventListener) // W3C DOM Level 2
		node.addEventListener(event, fct, false);
	else if (node.attachEvent) // Fallback for IE/Windows
		node.attachEvent('on'+event, fct);
}

function removeListener(node, event) {
}

function handleKeyPress(e) {
    longTmout = true;
    if (e && e.which)
        keyCode = e.which;
    else if (window.event && window.event.keyCode)
        keyCode = window.event.keyCode;
    else
       return;
    if (keyCode == 27)
        hidePopup(false);
    else
        restartTmout();
}

function clickMe(e)
{
	if (e && e.currentTarget) { // W3C DOM
		launchPopup(e.currentTarget);
	} else if (event && event.srcElement) { // Fallback
		if (document.getElementById)
			launchPopup(event.srcElement);
		else
			msgPopup(escape(event.srcElement.innerText));
	}

	return false;
}

function parseHtml(nodeList, text, nbsmil)
{
	if (nodeList.length == 0)
		return;

	var parentNode = nodeList[nodeList.length-1];
	var index = text.search(/<\/?[^>]*>/)
	if (index == -1) {
		index = text.length;
	}
	if (index > 0) {
		var newNode = document.createTextNode(text.substring(0, index));
		parentNode.appendChild(newNode);
	}
	if (index < text.length) {
		var tag = text.substr(index+1, 1);
		if (tag == "*") {
			nbsmil++;
			var closeIndex = text.indexOf(">");
			if (nbsmil<5) {
				var newNode = document.createElement("img");
				newNode.setAttribute('src', '/chat/static/'+text.substring(index+2, closeIndex));
				//newNode.setAttribute('width', 15);
				//newNode.setAttribute('height', 15);
				newNode.setAttribute('hspace', 2);
				parentNode.appendChild(newNode);
			}
			parseHtml(nodeList, text.substr(closeIndex+1), nbsmil);
		} else if (tag == "b" || tag == "i") {
			var newNode = document.createElement(tag);
			parentNode.appendChild(newNode);
			nodeList.push(newNode);
			parseHtml(nodeList, text.substr(index+3), nbsmil);
		} else if (tag == "/") {
			nodeList.pop();
			parseHtml(nodeList, text.substr(index+4), nbsmil);
		}
	}
	return;
}

function addMsg(nick, description, text, personal)
{
	var parent = document.getElementById("messages");
	//var parent = root;
	var messageNode = document.createElement('p');

	if (personal)
		messageNode.className = 'border';

	var authorNode = document.createElement('a');
	authorNode.className = 'menubold';
	addListener(authorNode, 'click', clickMe);

	var newTextNode = document.createTextNode(nick);
	authorNode.appendChild(newTextNode);
	messageNode.appendChild(authorNode);

	if (description) {
	//	authorNode.setAttribute('title', description);

		var tipNode = document.createElement('sup');
		messageNode.appendChild(tipNode);
		//var tipSubNode = document.createElement('i');
		var newTextNode = document.createTextNode('?');
		//tipSubNode.appendChild(newTextNode);
		tipNode.appendChild(newTextNode);
	}

	parseHtml(new Array(messageNode), " - "+text, 0);
	parent.appendChild(messageNode);
}

function addSysMsg(text)
{
	var parent = document.getElementById("messages");
	//var parent = root;
	var messageNode = document.createElement('p');

	messageNode.className = 'bold';
	var newTextNode = document.createTextNode(text);
	messageNode.appendChild(newTextNode);
	parent.appendChild(messageNode);
}

function addSpecialMsg(text1, text2, link)
{
	var parent = document.getElementById("messages");
	//var parent = root;
	var messageNode = document.createElement('p');

	messageNode.className = 'bold';
	var newTextNode = document.createTextNode("** "+text1+" ");
	messageNode.appendChild(newTextNode);

	var newLinkNode = document.createElement("a");
	newLinkNode.href = link;
	newLinkNode.className = "bold";
	newTextNode = document.createTextNode(text2);
	newLinkNode.appendChild(newTextNode);
	messageNode.appendChild(newLinkNode);

	newTextNode = document.createTextNode(" **");
	messageNode.appendChild(newTextNode);

	parent.appendChild(messageNode);
}
