/**
 * @author vincent voyer
 * vincent.voyer@gmail.com
 */
(function($){
	$.fn.ajaxChat = function(params){
		
		var params = $.extend({
			refresh:1.7
		},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 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("writeChat.php",{ //this is the url of your server side script that will handle write function
							msg: message
						}, function(data){
							input.removeAttr("disabled");
							input.focus();
							if (data) 
								chat.append('<p><small>('+
data.time +')</small> ' + data.nickname + ' &gt; <strong>' + data.msg +
'</strong></p>');
							ajaxStatus.hide();
						}, 'json');
					}
					
					return false;
				});
			}
			
			// handle the read messages function
			var readMessages = function(){
				$.getJSON("readChat.php",
function(data){
					$.each(data, function(i,msg){
						chat.append('<p><small>('+
msg.time +')</small> '+msg.nickname+' &gt; <strong>'+msg.msg+'</strong></p>');
					});
					setTimeout(readMessages,params.refresh*1000);
				});
			}
			
			chooseNickname.submit(function(){
				var tryNickname=$(this).find(':input:first').val();

				$.post("nicknameChat.php", { //this is the url of your server side script that will handle write function
					nickname: tryNickname
				}, function(data){
					if (data) {
						chooseNickname.remove();
						chatContainer.show();
						writeInput.show();
						readMessages();
						
						writeInput.find(':input').val('salutare!').parent().trigger('submit');
						
					} else {
						alert('bad nickname, try something else !');
					}
				}, 'json');
				
				return false;
			});

			if (!params.existentUsername.length) {

				chatContainer.hide();
				writeInput.hide();
				ajaxStatus.hide();

			} else {

				chooseNickname.remove();
				chatContainer.show();
				writeInput.show();
				readMessages();

			}
			
			activateKeyboard();
		}
		
		return this.each(function(){
			chat($(this));
		});		
	};
})(jQuery)

