// Default greeting that Sternest says when a user starts a conversation.
// Programmer can change this.
var GREETINGS = ["Hello!"];

// Default message that Sternest says when there is an error on the response.
// Programmer can change this.
var MESSAGES_ON_ERROR = ["Hmmm..."];

function submitFormRemotely(form) {
	if (isBlank($('msg').value)) 
		return;
	
	new Ajax.Request('/say.json', {
		asynchronous: true, 
		evalScripts: true,  
		onLoading: function(request) {
			messageSent(request);
		},
		onSuccess: function(request) {
			messageReceived(request.responseText.evalJSON());
		},
		onFailure: function(request) {
			errorReceived(request.responseText.evalJSON());
		},
		parameters: Form.serialize(form)
	});
}

function messageSent(request) {
	// Add the user's message only when it is not just blank spaces
	if ($('msg').value.replace(/\s*/g, '') != "") {
		addMessage("webuser", $('msg').value);
		
		// Wait until addMessage is done, usually takes a second.
		setTimeout(scrollChatContent, 1000);
	}
	
	$('msg').value = "";
}

// Handles event when a message has been received.
// @params	message	an Object with attributes message and response.
function messageReceived(obj) {
	var response = obj.message.response;
	// Wait 1.5 seconds before responding.
	setTimeout(function() {
		addMessage("sternest", response);
	}, 1500);
}

// Handles event when an error was received.
// @params	errors	an Array of strings describing the errors.
function errorReceived(errors) {
	var error = errors.first();
	
	var count = MESSAGES_ON_ERROR.length;
	var i = Math.floor(Math.random() * count);
	var response = MESSAGES_ON_ERROR[i];
	addMessage("sternest", response, error);
}

function scrollChatContent() {
    $("chat_content").scrollTop = $("chat_content").scrollHeight;
}

function isBlank(str) {
	return str.replace(/\s*/g, '') == "";
}

// Message count is the number of messages on the chat window.
// This value is also used to give each message a unique name.
var messageCount = 0;

// Adds chat-like message to the chat_content.
// @param	source	the name of the person who said the message
// @param	msg		the message
// @param	errorMsg	additional error message	
function addMessage(source, msg, errorMsg) {
	var messageId = "message_" + messageCount;
	
	// If there is an error message, add a note to the message.
	if (errorMsg) {
		msg += " <small>(" + errorMsg + ")</small>";
	} else {
		// do nothing.
	}
	
	$('chat_content').insert('<div id="'
	 + messageId
	 + '" style="display:none;"><div><b>'
	 + source
	 + ":</b> "
	 + msg
	 + "</div></div>");
	
	Effect.Appear(messageId, { duration: 1.0 });
	
	messageCount += 1;
}

function greetUser() {
	var count = GREETINGS.length;
	var i = Math.floor(Math.random() * count);
	var response = GREETINGS[i];
	addMessage("sternest", response);
}
