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

function clearSelectedCells() {
	$$('#content article.selected').each(function(item) {
		item.removeClassName('selected');
	});
}

function changeSelection(origin, destiny) {
	origin.removeClassName('selected');
	destiny.addClassName('selected');
}

// TODO: FINISH HIM!
function selectRight($selected) {
	if ($selected.hasClassName('square')) {
		
	} else {
		var $next = $selected.next('article');
		if ($next && ($selected.hasClassName('wide') && $selected.up().hasClassName('large'))) {
			changeSelection($selected, $next);
		} else {
			$next = $selected.up().next('.box');
			if (!$next) {
				clearSelectedCells();
			} else {
				$next = $next.down('article');
				changeSelection($selected, $next);
			}
		}
	}
}

function selectLeft($selected) {
	if ($selected.hasClassName('square')) {
		
	} else {
		var $next = $selected.previous('article');
		if ($next && ($selected.hasClassName('wide') && $selected.up().hasClassName('large'))) {
			changeSelection($selected, $next);
		} else {
			$next = $selected.up().previous('.box');
			if (!$next) {
				clearSelectedCells();
			} else {
				$next = $next.childElements().last();
				changeSelection($selected, $next);
			}
		}
	}
}

function selectUp($selected) {
	if ($selected.hasClassName('tall')) {
		var $next = $selected.previous('article');
		if ($next) {
			changeSelection($selected, $next);
		} else {
			$next = $selected.up().previous('.box');
			if (!$next) {
				clearSelectedCells();
			} else {
				$next = $next.childElements().last();
				changeSelection($selected, $next);
			}
		}
	} else {
		
	}
}

function selectDown($selected) {
	if ($selected.hasClassName('tall')) {
		var $next = $selected.next('article');
		if ($next) {
			changeSelection($selected, $next);
		} else {
			$next = $selected.up().next('.box');
			if (!$next) {
				clearSelectedCells();
			} else {
				$next = $next.down('article');
				changeSelection($selected, $next);
			}
		}
	} else {
		
	}
}

function selectedClick(keycode) {
	var $selected = $$('#content article.selected').first();
	if ($selected) {
		switch (keycode) {
		case Event.KEY_DELETE:
			if (!$selected.hasClassName('empty')) {
				$selected.removeClassName('selected');
				removeCell($selected);
			}
			break;
		case Event.KEY_RETURN:
			if ($selected.hasClassName('empty')) {
				showAddForm();
			} else {
				activateCell($selected);
			}
			break;
		}
	}
}

function selectMove(keycode) {
	// TODO: finish movement. Keep disabled till then
	//return;

	var $selected = $$('#content article.selected').first();
	if ($selected) {
		switch (keycode) {
		case Event.KEY_UP:
			selectUp($selected);
			break;
		case Event.KEY_DOWN:
			selectDown($selected);
			break;
		case Event.KEY_LEFT:
			selectLeft($selected);
			break;
		case Event.KEY_RIGHT:
			selectRight($selected);
			break;
		}
	} else {
		switch(keycode) {
			case Event.KEY_LEFT:
			case Event.KEY_UP:
				$$('#content article').last().addClassName('selected');
				break;
			default:
				$$('#content article').first().addClassName('selected');
				break;
		}
	}
}

