/**
 * 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(5 * 1000);
}

/**
 * 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(5 * 1000);
}

/**
 * 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(5 * 1000);
}

/*
 * Assert that the "pingSiteForm" form-data represents a valid Ping.
 */
function isAValidWeblogsPing(pingSiteForm)
{
	var name = pingSiteForm.elements['weblogName'].value;
	var url  = pingSiteForm.elements['weblogUrl'].value;

	if (name.match(".+") && url.match("https?://(.+)\.(.+)"))
	{
		return true;
	}
	return false;
}

function enableSubmitIfValid(form)
{
	if (isAValidWeblogsPing(form))
	{
		document.getElementById('submit').disabled = false;
	}
	else
	{
		document.getElementById('submit').disabled = true;
	}
}

/**
 * Behaviour-style (http://bennolan.com/behaviour) DOM event handlers.
 */
var pingSiteFormEventHandlers = {
	'input#weblogName' : function(el)
	{
		el.onchange = function()
		{
			if (el.value.length > 0)
			{
				el.style.backgroundColor = '#FFFFFF';
			}
			else
			{
				el.style.backgroundColor = '#FFDDDD';	
			}
			enableSubmitIfValid(document.getElementById('pingSiteForm'));
		}
	},
	'input#weblogUrl' : function(el)
	{
		el.onchange = function()
		{
			var weblogUrl = el.value;
			if (weblogUrl.match("https?://(.+)\.(.+)"))
			{
				el.style.backgroundColor = '#FFFFFF';
			}
			else
			{
				el.style.backgroundColor = '#FFDDDD';	
			}
			enableSubmitIfValid(document.getElementById('pingSiteForm'));
		}
	},
	'button#submit' : function(el)
	{
		el.onclick = function()
		{
			if (!isAValidWeblogsPing($('pingSiteForm')))
			{
				error("Invalid ping submission.");
			}
			else
			{
				el.disabled = true;
				
				var pingSiteRequest = "/pingSiteForm?" + 
					Form.serialize(document.getElementById('pingSiteForm'));
				
				var request = newXmlHttpRequest();
				request.onreadystatechange = getReadyStateXmlHandler(request,
					function(response)
					{
						var message = response.getElementsByTagName("message")[0];
						info(message.firstChild.nodeValue);
						el.disabled = false;
					}
				);
				request.open("GET", pingSiteRequest, true);
				request.send(null);
	
				return false;
			}
		}
	}
};
Behaviour.register(pingSiteFormEventHandlers);
