/**
 * @author vincent voyer
 * vincent.voyer@gmail.com
 */
(function($){
	$.fn.ajaxChat = function(params){
		
		var params = $.extend({
			refresh:4
		},params);
		
		var chat = function (jElt) {
			//jElt is the jQuery object where the function starts
			var chatContainer=jElt.find('.chat');
			var chat=chatContainer.find('div'); // this is div containing the messages
			//var chatp=chatContainer.find('p');
			var writeInput=jElt.find('.writeInput');
			var chooseNickname=jElt.find('.chooseNickname');
			var ajaxStatus=jElt.find('.ajaxStatus');
			
			// handle the submit message function
			var activateKeyboard = function(){
				writeInput.submit(function(){
					var input = $(this).find(':input');
					var message = input.val();
					
					if ($.trim(message).length > 0) { // need to have something to say !
						ajaxStatus.show();
						
						input.val('');
						input.blur();
						input.attr("disabled", "disabled"); // we have to this so there'll be less spam messages
						$.post("/chat/index.html", { //this is the url of your server side script that will handle write function
							msg: message, action: 'write'
						}, function(data){
							input.removeAttr("disabled");
							input.focus();
							if (data) 
								//chat.append('<small>('+ data.created +')</small> ' + data.nickname + ' &gt; <strong>' + data.msg + '</strong><br/>');
								chat.append('<strong>' + data.nickname + '</strong> &rsaquo; ' + data.msg + '<br/>');
							chat.animate({scrollTop:40000}, 'fast');
							//alert(chat.height());
							ajaxStatus.hide();
						}, 'json');
					}
					
					return false;
				});
			}
			
			// handle the read messages function
			var readMessages = function(){
				$.post("/chat/index.html", {action: 'read'},function(data){
					$.each(data, function(i,msg){
						chat.append('<strong>' + msg.nickname + '</strong> &rsaquo; ' + msg.msg + '<br/>');
						window.focus();
					});
					chat.animate({scrollTop:40000}, 'fast');
					setTimeout(readMessages,params.refresh*1000);
				}, 'json');
			}
			
			chooseNickname.submit(function(){
				var tryNickname=$(this).find(':input:first').val();
				var trySubject=$('#try_subject').val();
				$('#choose_nick_btn').hide();

				$.post("/chat/index.html", { //this is the url of your server side script that will handle write function
					nickname: tryNickname, subject: trySubject, action: 'chooseNickname'
				}, function(data){
					if (data) {
						chooseNickname.remove();
						
						chatContainer.show();
						writeInput.show();
						readMessages();
						
						writeInput.find(':input').val('Hello, I am in the chat.').parent().trigger('submit');
						
					} else {
						$('#choose_nick_btn').show();
						alert('Invalid nickname, try another one!');
					}
				}, 'json');
				
				return false;
			});
			
			chatContainer.hide();
			writeInput.hide();
			ajaxStatus.hide();
			
			activateKeyboard();
		}
		
		return this.each(function(){
			chat($(this));
		});		
	};
})(jQuery)
