/* jslint verified 2008.12.30 */
/*jslint browser: true, onevar: true, undef: true, white: false, eqeqeq: true */
/*globals $, $$, Ajax, Constants, User, statusBar, letterPicked, letterFailed, pickLetter */
var Users = function() {
	var previousLetter, results,
		ids = {
			alphabet: 'alphabet', results: 'results'
		}, classes = {
			hasUsers: 'hasUsers', hover: 'hover', selected: 'selected'
		};

	function setupLetter(el) {
		el.addEvent('mouseover', function() { el.addClassName(classes.hover); });
		el.addEvent('mouseout', function() { el.removeClassName(classes.hover); });
		el.addClick(function() { pickLetter(el); });
	}
	function setup() {
		results = $(ids.results);
		var alphabet = $(ids.alphabet),
			letters = alphabet.getElementsByTagName('span'),
			first, i;
		for (i=0; i<letters.length; ++i) {
			if ($$(letters[i]).hasClassName(classes.hasUsers)) {
				if (!first) { first = letters[i]; }
				setupLetter(letters[i]);
			}
		}
		pickLetter(first);
	}

	function pickLetter(letter) {
		if (previousLetter !== letter) {
			if (previousLetter) { previousLetter.removeClassName(classes.selected); }
			letter.addClassName(classes.selected);
			previousLetter = letter;
			var ajax = new Ajax(Constants.ajax() + 'users',
				{	method: 'get',
					onSuccess: letterPicked,
					onFailure: letterFailed,
					parameters: 'l=' + letter.scan()
				}
			);
			ajax.send();
		}
	}

	function letterPicked(request) {
		var response = JSON.parse(request.responseText), id;
		results.empty();
		for (id in response) {
			if (response.hasOwnProperty(id)) {
				results.appendChild(new User(id, response[id], User.style.large));
			}
		}
	}
	function letterFailed(request) {
		statusBar.error("Sorry, your search failed. Please try again.");
	}

	window.addLoad(setup);
}();
