var rssName = '';
var rssUrl = '';

function validate ()
{
	var rssUrl = document.getElementById ('defaultField');
	var validationError = document.getElementById ('validationError');
	var returnValue;
	if ((rssUrl.value) && (rssUrl.value.trim () != ''))
	{
		validationError.style.display = 'none';
		returnValue = true;
	}
	else
	{
	    validationError.style.display = '';
	    returnValue = false;
    }

    return returnValue;
}

function reset ()
{
	hideSeparator ();
	notify ('');
	hideAddBookmark ();

	resetDirectory ('blogdigger');
	resetDirectory ('podscope');
	resetDirectory ('odeo');
	resetDirectory ('audioweblogs');

	current = null;

	return;
}

function resetDirectory (key)
{
	var pendingElement = document.getElementById (key + '_pending');
	pendingElement.style.display = '';

	var successElement = document.getElementById (key + '_success');
	successElement.style.display = 'none';

	var failureElement = document.getElementById (key + '_failure');
	failureElement.style.display = 'none';

	var failureImage = document.getElementById (key + '_failureImage');
	failureImage.title = '';

	var errorTextElement = document.getElementById (key + '_errorText');
	errorTextElement.style.display = 'none';
	errorTextElement.innerHTML = '';

	var mainElement = document.getElementById (key);
	mainElement.style.display = 'none';

	return;
}

function enableSubmission ()
{
	var button = document.getElementById ('startPingingButton');
	button.disabled = false;

	return;
}

function disableSubmission ()
{
	var button = document.getElementById ('startPingingButton');
	button.disabled = true;

	return;
}

function showSeparator ()
{
	var separator = document.getElementById ('separator');
	separator.style.display = '';

	return;
}

function hideSeparator ()
{
	var separator = document.getElementById ('separator');
	separator.style.display = 'none';

	return;
}

function showAddBookmark ()
{
	var addBookmark = document.getElementById ('addBookmark');
	addBookmark.style.display = '';

	var addBookmarkHref = document.getElementById ('addBookmarkHref');
	addBookmarkHref.href = 'http://www.allpodcasts.com/PingAll/Default.aspx?url=' + escape (rssUrl);

	return;
}

function hideAddBookmark ()
{
	var addBookmark = document.getElementById ('addBookmark');
	addBookmark.style.display = 'none';

	var addBookmarkHref = document.getElementById ('addBookmarkHref');
	addBookmarkHref.href = '';

	return;
}

function pingingComplete()
{
    notify('<b>Pinging complete.</b>');
    enableSubmission();
    showAddBookmark();
}

function startPinging()
{
    try
	{
		reset ();

		rssUrl = document.getElementById ('defaultField').value;
		notify ('Working: Fetching and parsing ' + rssUrl + '...');
		disableSubmission ();

		showSeparator ();

		var blogdigger = function() {
		    showPending('blogdigger');
		    var successCallback = createSuccessCallback('blogdigger', pingingComplete);
		    var failureCallback = createFailureCallback('blogdigger', pingingComplete);
		    PageMethods.PingBlogDigger(rssUrl, rssName, successCallback, failureCallback);
		}

		var podscope = function() {
		    showPending('podscope');
		    var successCallback = createSuccessCallback('podscope', blogdigger);
		    var failureCallback = createFailureCallback('podscope', blogdigger);
		    PageMethods.PingPodScope(rssUrl, rssName, successCallback, failureCallback);
		}

		var odeo = function() {
		    showPending('odeo');
		    var successCallback = createSuccessCallback('odeo', podscope);
		    var failureCallback = createFailureCallback('odeo', podscope);
		    PageMethods.PingOdeo(rssUrl, rssName, successCallback, failureCallback);
		}

		var audioweblogs = function() {
		    showPending('audioweblogs');
		    var successCallback = createSuccessCallback('audioweblogs', odeo);
		    var failureCallback = createFailureCallback('audioweblogs', odeo);
		    PageMethods.PingAudioWebLogs(rssUrl, rssName, successCallback, failureCallback);
		}

		var itunes = function() {
		    showPending('itunes');
		    var successCallback = createSuccessCallback('itunes', audioweblogs);
		    var failureCallback = createFailureCallback('itunes', audioweblogs);
		    PageMethods.PingItunes(rssUrl, rssName, successCallback, failureCallback);
		}

		var successFetchingAndParsing = function(result) {
		    rssName = result;
		    notify('Working: Pinging directories for "' + rssName + '".');
		    itunes();
		}

		var failureFetchingAndParsing = function(result) {
		    var fullResult = new Object();
		    fullResult.error = result.get_message();
		    showResult(key, fullResult);
		    notify('<b>Pinging suspended.</b> "' + fullResult.error + '".');
		    enableSubmission();
		}

		PageMethods.FetchAndParse(rssUrl, successFetchingAndParsing, failureFetchingAndParsing);
    }
	catch (ex)
	{
		alert (ex);
	}

	return;
}

function createSuccessCallback(key, next) {
    var successCallback = function(result) {
        var fullResult = new Object();
        fullResult.value = result;
        showResult(key, fullResult);
        if (next) {
            next();
        }
    }

    return successCallback;
}

function createFailureCallback(key, next) {
    var failureCallback = function(result) {
        var fullResult = new Object();
//        var s = '';
//        for (var x in result) {
//            s += x + ': ' + result[x] + '\n';
//        }
//        alert(s);
        fullResult.error = result.get_message ();
        showResult(key, fullResult);
        if (next) {
            next();
        }
    }

    return failureCallback;
}

function notify (notification)
{
	var notificationArea = document.getElementById ('notificationArea');
	notificationArea.innerHTML = notification;

	return;
}

function showPending (key)
{
	var mainElement = document.getElementById (key);
	mainElement.style.display = '';

	return;
}

function showResult (key, result)
{
	var pendingElement = document.getElementById (key + '_pending');
	if (result && !result.error)
	{
		var successElement = document.getElementById (key + '_success');
		pendingElement.style.display = 'none';
		successElement.style.display = '';
		if ((result.value) && (result.value.trim () != ''))
		{
			var successImage = document.getElementById (key + '_successImage');
			successImage.title = result.value;
		}
	}
	else
	{
		var failureElement = document.getElementById (key + '_failure');
		var failureImage = document.getElementById (key + '_failureImage');
		var errorTextElement = document.getElementById (key + '_errorText');
		pendingElement.style.display = 'none';
		failureElement.style.display = '';
		errorTextElement.style.display = '';
		if (result)
		{
			failureImage.title = result.error.sanitise ();
			errorTextElement.innerHTML = result.error;
		}
	}

	return;
}

String.prototype.trim = function ()
{
	return this.replace (/^\s+|\s+$/g, '');  
}

String.prototype.sanitise = function ()
{
	return this.replace (/\<[^\>]*\>/gi, '');  
}
