/*
 * AjaxObject is a hypothetical object that encapsulates the transaction
 *     request and callback logic.
 *
 * handleSuccess( ) provides success case logic
 * handleFailure( ) provides failure case logic
 * processResult( ) displays the results of the response from both the
 * success and failure handlers
 * call( ) calling this member starts the transaction request.
 */

var messageSentHTML = '';
var messagePanelHTML = '';

window.onload = function() {
	messagePanelHTML = $('messagepanel').innerHTML;
	messageSentHTML = $('messageSentHTML').innerHTML;
	Element.remove('messageSentHTML');
}

var aBorderColours = new Array();

var AjaxObject = {

	handleSuccess:function(o){
		$('sendingmessage').style.display = 'none';
		// This member handles the success response
		// and passes the response object o to AjaxObject's
		// processResult member.
		var xmlstruc = o.responseXML;
		var response = xmlstruc.getElementsByTagName('response');
		var overallstatus = response[0].getElementsByTagName('overallstatus')[0].firstChild.nodeValue;

		if (overallstatus == 'ok') {
			$('messagepanel').innerHTML = messageSentHTML;
			setTimeout("$('messagepanel').innerHTML = messagePanelHTML;",8000);
		} else if (overallstatus == 'fail') {
			$('sendbutton').disabled = false;
			$('errornotification').style.display = 'block';
			var errorBulletPointsHTML = '';
			var fields = response[0].getElementsByTagName('fields');

			for (var i=0; i<fields.length; i++) {
				var field = fields[i].getElementsByTagName('field');
				for (var j=0; j<field.length; j++) {
					var fieldname = field[j].getElementsByTagName('name')[0].firstChild.nodeValue;
					var fieldstat = field[j].getElementsByTagName('status')[0].firstChild.nodeValue;

					if (fieldstat == 'fail') {
						$(fieldname+'_label').setAttribute("class", "form-label-error");
						$(fieldname+'_label').setAttribute("className", "form-label-error");
						aBorderColours[fieldname] = $(fieldname).style.borderColor;
						$(fieldname).style.borderColor = 'red';
						errorBulletPointsHTML = errorBulletPointsHTML + '<li>'+fieldname+' needs correcting</li>';
					} else {
						// in case a previous error has been fixed, we need to set it back to it's normal colours
						$(fieldname+'_label').setAttribute("class", "form-label");
						$(fieldname+'_label').setAttribute("className", "form-label");
						$(fieldname).style.borderColor = (typeof(aBorderColours[fieldname]) == 'undefined')?'':aBorderColours[fieldname];
					}
				}
			}

			$('error-list').innerHTML = errorBulletPointsHTML;

		}
	},

	handleFailure:function(o){
		// Failure handler
	},

	processResult:function(o){
		// This member is called by handleSuccess
	},

	startRequest:function() {
		$('sendingmessage').style.display = 'inline';
		YAHOO.util.Connect.asyncRequest('POST', '/emailer.php', callback, Form.serialize('folutions.comment.form'));
	}

};

/*
 * Define the callback object for success and failure
 * handlers as well as object scope.
 */
var callback =
{
	success:AjaxObject.handleSuccess,
	failure:AjaxObject.handleFailure,
	scope: AjaxObject
};