var chat = new Object();

chat.limit = 6;
chat.updateInterval = 5000;
chat.style = "frontpage";
chat.messageAreaId = "shoutBox";
chat.updateUrl = "/forum/fmext/infernoshout.php";
// Enable long line splitting and javascript message limiting.
chat.processLines = true;
chat.userid = -1; // Logged in user id. By default, unkown (-1).

/**
 * Update message field.
 */
chat.update = function() {


	// Start loading animation or whatever...
	chat.onLoadStart();

	// Request new messages.
	new Ajax.Request(this.updateUrl + "?style="+this.style+"&limit="+this.limit+"&hash=" + Math.random(), {
		method: "get",
		parameters: {},
		onSuccess: chat.updateMessageField
	});

	// Recall.
	setTimeout("chat.update()", this.updateInterval);

}

chat.updateMessageField = function(content) {

	// Get response xml.
	var xmlObject = content.responseXML;

	var output = "";

	try {
		// Get logged in user id.
		var shouts = xmlObject.getElementsByTagName('shouts');
		chat.userid = shouts.item(0).attributes.getNamedItem("userid").value;
	} catch(e) {

	}

	try {

		var elements = xmlObject.getElementsByTagName('shout');

		for (var i = 0; i < elements.length; i++) {

			var userid = elements.item(i).attributes.getNamedItem("userid").value;
			var username = elements.item(i).attributes.getNamedItem("username").value;
			var time = elements.item(i).attributes.getNamedItem("timestamp").value;
			var groupid = elements.item(i).attributes.getNamedItem("usergroupid").value;
			var message = elements.item(i).firstChild.data;

			// Split long message lines.
			message = chat.breakLongLines(message);

			// Color username, if admin.
			if (groupid == 6) {
				username = "<span style=\"color: #ff0000; font-weight: bold;\">" + username + "</span>";
			} else if (groupid == 5 || groupid == 7) {
				username = "<span style=\"color: #008000; font-weight: bold;\">" + username + "</span>";
			} else if (groupid == 18 || groupid == 19) {
				username = "<span style=\"color: #fe7a16; font-weight: bold;\">" + username + "</span>";
			} else if (groupid == 39) {
				username = "<span style=\"color: #ffa500; font-weight: bold; \">" + username + "</span>";
			}

			// Convert from from unix-time to human readable time.
			var d = new Date(time * 1000);
			time = "" + chat.addLeadingZero(d.getHours()) + ":" + chat.addLeadingZero(d.getMinutes());

			output += chat.drawRow(userid, username, time, message);

		}

	} catch(e) {
		//document.title += "Error: " + e.toString();
	}

	// Add output.
   	document.getElementById(chat.messageAreaId).innerHTML = output;

	chat.onLoadComplete();

	return;

}

chat.addLeadingZero = function(n) {

	n = n.toString();
	if (n.length == 1) {
		n = "0" + n;
	}

	return n;

}

/**
 * Draws single message row. If you want to create your own template,
 * just override this method.
 */
chat.drawRow = function(userid, username, time, message) {

	return "<table cellspacing=\"0\" cellpadding=\"1\">"
			+ "<tr>"
			+ "<td style=\"vertical-align: top\">"
  			+ "<span class=\"smallfont\" style=\"white-space: nowrap;\"> [<span class=\"time\">"+time+"</span>]&nbsp;</span>"
			+ "</td>"
			+ "<td style=\"vertical-align: top\">"
    		+ "<a href=\"/forum/member.php?u="+userid+"\">"
   			+ "<span class=\"smallfont\">"
    		+ "&lt;"+username+"&gt;"
			+ "</span>"
			+ "</a>"
			+ "</td>"
			+ "<td style=\"vertical-align: top\">"
			+ "<span class=\"smallfont\">"+message+"</span>"
			+ "</td>"
			+ "</tr>"
			+ "</table>";

}

/**
 * Things that happen, when new shouts are being loaded.
 */
chat.onLoadStart = function() {

}

/**
 * Things that happen when messages are loaded.
 */
chat.onLoadComplete = function() {



}

/**
 * Break long lines to smaller pieces.
 */
chat.breakLongLines = function(s) {

	var limit = 30;

	try {

		// Split line to words.
		var words = s.split(/ |\n/);

    	// Output variable.
    	var output = "";

    	// Append lines, but add spaces to long lines.
    	for (var i = 0; i < words.length; i++) {

	      	// Split long words.
	      	while(words[i].length > limit) {

	        	// Append first 30 characters with white space.
	        	output += words[i].substring(0, limit) + " ";

	        	// Slice out first 30 characters.
	        	words[i] = words[i].slice(limit, words[i].length);

	      	}

	      	// Append line.
	      	output += words[i] + " ";

    	}

    	return output;

  	} catch(e) {

		//document.title += "e"+e;

  	}

}

/**
 * Send new message.
 */
chat.send = function(message) {

  	new Ajax.Request('/forum/infernoshout.php', {
	  	method: 'post',
		parameters: {'do': 'shout', 'message': message}
	});

	// onSuccess: chat.update()


}
