/**
 * @project TV Wall
 * @version 2010.06
 * @author Luís Nabais
 * @copyright 2010 by the author
 * @license CC-BY-SA
 */

var $formObserver;
var $previousSearchString = "";
var $previousRequest = null;

function setFormObserver($obj) {
	$formObserver = $obj;
}

function getFormObserver() {
	return $formObserver;
}

function onAddClick(event) {
	var $seriesid = this.readAttribute('rel');
	hideAddForm();
	onShowAdd($seriesid);
	
	this.blur();
}

function onShowAdd($id) {
	var $message = new Message('add', 'Adding show');
	$message.priority = 2;
	addNotification($message);

	var $url = 'php/getXML.php?series=' + $id;
	new Ajax.Request($url, {
		onSuccess : addShow,
		onComplete : function(response) {
			removeNotification('add');
		}
	});
}

function clearSearchResults() {
	var $results = new Element('ul');
	
	removeNotification('search', true);
	
	$('results').replace($results.writeAttribute({ 'id' : 'results'}));
}

function onSearchResponse(response) {
	var $series = cleanResponse(response.responseJSON['Series']);
	
	if (!Object.isArray($series)) {
		$series = [ $series ];
	}
	
	clearSearchResults();
	
	var $results = new Element('ul');
	$series.each(function(item) {
		var $listItem = new Element('li');
		var $title = new Element('a', {
			'href' : '#/show/' + item['SeriesName'].urlize(),
			'class' : 'title',
			'title' : 'View information about ' + item['SeriesName'],
			'rel' : item['seriesid']
		}).update(item['SeriesName']).observe('click', function(item) {
			hideAddForm();
			activateCell(this);
			window.location.hash = this.readAttribute('href');
		});

		// Only show add link if it wasn't added yet
		var $link = "";
		if (!$('show-' + item['seriesid'])) {
			$link = new Element('a', {
				'class' : 'add-link',
				href : '#/add/' + item['SeriesName'].urlize(),
				'rel' : item['seriesid']
			}).update('Add').observe('click', onAddClick);
		}

		$listItem.insert($title).insert($link);
		$results.insert($listItem);
	});
	
	var $oldResults = $('results');
	
	$oldResults.replace($results.writeAttribute({ 'id' : 'results'}));
}

function formOnChange(event) {
	var $input = $('show-name');

	if (!$input.isPlaceholder) {
		var $value = this.getValue();

		if ($value != $previousSearchString) {
			$previousSearchString = $value;

			if ($previousRequest) {
				$previousRequest.abort();
				removeNotification('search');
			}

			if (!$value.empty()) {
				var $url = 'php/search.php?series=' + $value.escapeHTML();

				$previousRequest = new Ajax.Request($url, {
					onSuccess : onSearchResponse,
					onComplete : function(response) {
						removeNotification('search');
					}
				});

				var $message = new Message('search', 'searching');
				addNotification($message);
			} else {
				clearSearchResults();
			}
		}
	}
}

function formOnSubmit(event) {
	var $result = $$('#results .add-link').first();
	
	if ($result) {
		var $seriesid = $result.readAttribute('rel');
		hideAddForm();
		onShowAdd($seriesid);
	}

	event.stop();
}

