/*
 * jQuery Wassup plugin
 *
*/

(function($){
	$.fn.wassup = function(){

		$.wassup.init();
		$.wassup.charCount();
		$.wassup.pulse();
		$("#wassups").height($("#contentcolumn").height()-250);

		/** Bind to submit event. */
		$("form#wassup").submit(function(){
			$.wassup.add();
			return false;
		});

		$("#wassupMessage").keypress(function(e){
			var key = window.event ? e.keyCode : e.which;
			if( (key == 13 || key == 3) && (!e.shiftKey) ) {
				$.wassup.add();
				return false;
			} else if(key > 20) {
				if($.wassup.charCount()>=$.wassup.maxCharCount){
					return false;
				}
			} else {
				$.wassup.charCount();
			}
		});
	};

	$.wassup = {
		maxCharCount: 160,
		serverUrl: '/wassup/server/',
		timeStamp: 0,
		currentCharCount: 0,
		pulseInterval: 6000,
		currentUser: '',

		init: function(){
			$("#wassupNick").val($.cookie('wassupNickCookie'));
			$("#wassups").prepend("<ul id='wassupul'></ul>");
		},

		charCount: function(){
			this.currentCharCount = $("#wassupMessage").val().length;
			$("#wassupCharCount").html(this.maxCharCount-this.currentCharCount);
			return this.currentCharCount;
		},

		/** Update the wassup with latest wassups. */
		update: function(json){
			this.timeStamp = json.updated;
			this.queryInProgress = false;

			$("#loading").hide();
			if(json.status == 2){
				return;
			}

			var liClass = '';
			var s = '';
			this.currentUser = json.currentUser.toLowerCase();
			for(i=0; i<json.wassups.length; i++)
			{
				message = json.wassups[i];

				liClass = '';
				if(message.n.toLowerCase()=="mathi")
 				  liClass = " class=\"wassupMathi\" ";
				else if(message.n.toLowerCase() == this.currentUser){
				  liClass = " class=\"wassupMe\" ";
				}

				s = "<li"+ liClass +">" + "<b>" + message.n + "</b>" + " &middot; <span class=\"wassupTime\">"  + message.t + "</span>" + ":<br />" + message.m + "</li>";
				$("#wassupul").prepend(s).fadeIn("slow");
			}
			/*
			$("#wassupul").find("li").each(function(i){
				if(i>20){
					$(this).hide();
				}
			});
			*/
		},

		/** Check for new wassups on server. */
		pulse: function(){
		   if(this.queryInProgress){
			  setTimeout('jQuery.wassup.pulse()', this.pulseInterval);
			  return;
			}
			$("#loading").show();
			this.queryInProgress = true;
			$.getJSON(this.serverUrl,
				{ lastUpdated: this.timeStamp },
				function(json){
					jQuery.wassup.update(json);
				}
			);
			setTimeout('jQuery.wassup.pulse()', this.pulseInterval);
		},

		/** Add new message to the wassup. */
		add: function(){
			var nick = $.trim($("#wassupNick").val()),
				message = $.trim($("#wassupMessage").val());

			if( (nick == "") || (message == "") )
				return false;

			this.queryInProgress = true;
			$("#wassupMessage").val("");
			$.cookie('wassupNickCookie', nick);
			$.wassup.charCount();

			$.getJSON(this.serverUrl,
				{ n: nick, m: message, lastUpdated: this.timeStamp, action: "add" },
				function(json){
					jQuery.wassup.update(json);
				}
			);
			return false;
		}
	};
})(jQuery);
