/**
 * Serialize timeout event handlers.
 */
var _feedbackFadingTimer = null;

function fadeFeedbackIn(delay)
{
	if (_feedbackFadingTimer != null)
	{
		clearTimeout(_feedbackFadingTimer);
	}
	_feedbackFadingTimer= setTimeout("new Effect.Fade(document.getElementById('feedback'))", delay);
}

/**
 * Displays some information to the user in easy to see navy :-).
 */
function info(message)
{
	document.getElementById('feedback').style.color = '#000080';
	document.getElementById('feedback').innerHTML = message;
	new Effect.Appear(document.getElementById('feedback'));
	fadeFeedbackIn(5000);
}

/**
 * Displays a warning to the user in easy to see orange :-).
 */
function warn(message)
{
	document.getElementById('feedback').style.color = '#FFA500';
	document.getElementById('feedback').innerHTML = message;
	new Effect.Appear(document.getElementById('feedback'));
	fadeFeedbackIn(5000);
}

/**
 * Displays an error to the user in easy to see red :-).
 */
function error(message)
{
	document.getElementById('feedback').style.color = '#FF0000';
	document.getElementById('feedback').innerHTML = message;
	new Effect.Appear(document.getElementById('feedback'));
	fadeFeedbackIn(5000);
}

/*
 * Assert that the "pingform.html" form-data represents a valid Audio Ping.
 */
function isAValidAudioPing(pingform)
{
	var name = pingform.elements['name'].value;
	var url  = pingform.elements['url'].value;
	
	if (name == "")
	{
		error("Feed name must not be empty.");
	}
	else if (url == "" || url == "http://" || url == "https://")
	{
		error("URL must not be empty.");
	}
	else
	{
		return true;
	}
	return false;
}

/**
 * Behaviour-style (http://bennolan.com/behaviour) DOM event handlers.
 */
var pingformEventHandlers = {

	'input#name' : function(el)
	{
		el.onblur = function()
		{
			if (el.value == "")
			{
				warn("FYI, you must supply a Feed name...");
			}
		}
	},
	'input#url' : function(el)
	{
		el.onblur = function()
		{
			if (el.value == "")
			{
				warn("FYI, you must supply a URL...");
			}
		}
	},
	'button#submit' : function(el)
	{
		el.onclick = function()
		{
			if (isAValidAudioPing(document.getElementById('pingform')))
			{
				var pingSiteRequest = "/pingSiteForm?" + Form.serialize(document.getElementById('pingform'));
				
				var request = newXmlHttpRequest();
				request.onreadystatechange = getReadyStateXmlHandler(request,
					function(response)
					{
						var message = response.getElementsByTagName("message")[0];
						info(message.firstChild.nodeValue);
					}
				);
				request.open("GET", pingSiteRequest, true);
				request.send(null);
			}
			return false;
		}
	}
};
Behaviour.register(pingformEventHandlers);
