var message_div = "#chat_content";
var refresh_div = "#chat_refresh";
var message_input = "#chat_message";
var message_button = "#chat_send";
var ChatDirty = false;
var ChatActiveRefresh = 36600; //37 seconds if active
var ChatInactiveRefresh = 66600; //67 seconds if in bg
var VerificationCode = "post";
var MinMessageLength = 2;
var MaxMessageLength = 1024;
var MinTimePost = 3*1000;

var CurrentChannel = "Chat"

var ChatRefreshTime = ChatActiveRefresh;
var ChatLastMessageID = 0;
var ChatLastRefreshTime = new Date().getTime();
var LastTimePost = null;
var CurrentTimer = null;
var RefreshTimer = null;

function SendChatMessage() {
	var channel = "Chat";
	var msg = $j(message_input).val();

	if (msg.length < MinMessageLength) {
		alert("Prekratko sporočilo");
		return;
	}

	if (msg.length > MaxMessageLength) {
		alert("Predolgo sporočilo");
		return;
	}

	if (LastTimePost) {
		var FromLast = new Date().getTime() - LastTimePost;
		if (FromLast<MinTimePost) {
			alert('Naslednje sporočilo lahko pošljete šele čez ' + (MinTimePost-FromLast)/1000 + ' sekund.');
			$j(message_button).text("Pošlji znova!");
			return;
		}
	}

	$j(message_button).text("Pošiljam...");

	$j.post("/chat.php",
		{ chat_action: "Post", chat_to: channel, chat_type: 1, chat_message: msg, chat_vc: VerificationCode },
		function(xml) { ChatPostCallback(xml); },
		"xml"
	);
}

function ChatPostCallback(xml) {
	var ok = $j("ok", xml).text();
	if (ok) {
		$j(message_input).val('');
		$j(message_button).text("Poslano!");
		$j(message_button).css('disabled', 'true');
		LastTimePost = new Date().getTime();
		if (CurrentTimer) {
			clearTimeout(CurrentTimer); delete CurrentTimer;
			GetChatMessages(CurrentChannel, ChatLastMessageID);
		}

		setTimeout("$j(message_button).css('disabled', 'false');$j(message_button).text('Pošlji');", MinTimePost);
		return;
	}

	var err = $j("err", xml).text();
	alert("Sporočila ni bilo mogoče poslati. Napaka: " + err)
	$j(message_button).text("Pošlji znova!");
}

function GetChatMessages(channel, last_id) {
	$j.post("/chat.php",
		{ chat_action: "Get", chat_to: channel, chat_id: last_id, chat_vc: VerificationCode },
		function(xml) { ChatCallback(xml); CheckRefresh(channel); },
		"xml"
	);
}

function CheckRefresh() {
	if (CurrentTimer) {
		clearTimeout(CurrentTimer); delete CurrentTimer;
	}
	//FIXME: ne uporablja več cur_channel
	CurrentTimer = setTimeout("GetChatMessages('" + CurrentChannel + "', " + ChatLastMessageID + ")", ChatRefreshTime);
}

function ChatCallback(xml) {
	var err = $j("err", xml).text();

	if (err) {
		$j(message_div).html("Napaka: " + err);
		return;
	}

	var NewMessages = $j("msg", xml);
	if (!ChatDirty) {
		if (!NewMessages || NewMessages.length == 0) {
			$j(message_div).html("<div class='chat_message'>Ni sporočil.</div>");
		} else {
			$j(message_div).html("");
		}
		UpdateRefreshTime();
	}

	ChatLastRefreshTime = new Date().getTime();


	if (NewMessages.length > 0) {
		ChatDirty = true;
		ChatLastMessageID = $j(NewMessages[NewMessages.length-1]).attr("id");

		NewMessages.each(function(id) {
			var msg = $j(this).attr("t");
			msg = ReplaceSmilies(unescape(msg));
			$j(message_div).prepend("<div class='chat_from'><b><a title='Poslano: " + $j(this).attr("d") + "'>"+$j(this).attr("f") + "</a></b></div><div class='chat_message'>" + msg + "</div>");
		});
	}
}

function UpdateRefreshTime() {
	var s = Math.round((new Date().getTime() - ChatLastRefreshTime)/100);
	s = s/10;
	$j(refresh_div).html(s + " s");
	RefreshTimer = setTimeout("UpdateRefreshTime()", 666);
}

function ChatToggleSmiley() {
	var txt = $j("#chat_smiley_toggle").text();
	if (txt.indexOf("+")>-1)
		$j("#chat_smiley_toggle").text("Smeški [-]");
	else
		$j("#chat_smiley_toggle").text("Smeški [+]");

	$j("#chat_smiley_img").toggle();
}

function ChatSmiley(s){
	$j(message_input).val($j(message_input).val() + " " + s + " ");
}

var smilies = new Array();
smilies.push(':)___smile');
smilies.push(':D___laugh');
smilies.push(':(___sad');
smilies.push(':o___shock');
smilies.push(':p___tongue');
smilies.push(';)___wink');
smilies.push(':|___blah');
smilies.push('x(___mad');
smilies.push(':~___drool');

function ReplaceSmilies(msg) {
	$j(smilies).each(function() {
		var symbol = this.split("___")[0];
		var name = this.split("___")[1];
		msg = msg.replace(" " + symbol + " ", "<img src='/images/smilies/" + name + ".gif' alt='" + name + "' />");
	});
	return msg;
}

window.onfocus = function() {
	ChatRefreshTime = ChatActiveRefresh;
	//Force reload
	if ((new Date().getTime() - ChatLastRefreshTime) > ChatActiveRefresh) {
		if (CurrentTimer) {
			clearTimeout(CurrentTimer);
			delete CurrentTimer;
		}
		GetChatMessages(CurrentChannel, ChatLastMessageID);
	}
}

window.onblur = function() {
	ChatRefreshTime = ChatInactiveRefresh;
}