$(document).ready(function() {
	workq = Array();
	busy  = false;
	function qrun()
	{
		for (var jobs_done=0; jobs_done < 100; jobs_done++) {
			if (workq.length > 0) {
				w = workq.shift();
				w[0](w[1]);
			}
			else {
				busy = false;
				break;
			}
		}
		setTimeout(qrun, 0);
	}
	qrun();
	function enqueue(f, p)
	{
		if (!busy) {
			busy = true;
		}
		workq.push(Array(f,p));
	}

	function hide_row(el) { $(el).css('display', 'none'); }
	function show_row(el) { $(el).css('display', 'table-row'); }
	function hide_el(el) { $(el).hide(); }
	function show_el(el) { $(el).show(); }
	function append_anchor(anchor_text) {
		$("#anchors").html($("#anchors").html() + anchor_text)
		$(".anchor_link").click(function() {
			filter_byletter($(this).text().toUpperCase());
			return false;
		})
		$("#anchor_link_all").click(function() {
			$(".item").each(function(idx, el) {
				$(el).css('display', 'table-row');
			})
			return false;
		})
	};

	function filter_substring(flt)
	{
		enqueue(show_el, $("#wait_icon"));
		$(".item").each(function(idx, el) {
			txt = $(el).find("A").text();
			if (txt.toUpperCase().replace('¨', 'Å').indexOf(flt) != -1)
				enqueue(show_row, $(el));
			else
				enqueue(hide_row, $(el));
		})
		enqueue(hide_el, $("#wait_icon"));
	}
	function filter_byletter(flt) {
		enqueue(show_el, $("#wait_icon"));
		$(".item").each(function(idx, el) {
			letter = $(el).find("A").text().substr(0,1).toUpperCase();
			if (letter == '¨') letter = 'Å';
			if (letter == flt)
				enqueue(show_row, $(el));
			else
				enqueue(hide_row, $(el));
		})
		enqueue(hide_el, $("#wait_icon"));
	}

	// Generate achors
	enqueue(show_el, $("#wait_icon"));
	var anc = Array();
	$(".item").each(function(idx, el) {
		letter = $(el).find("A").text().substr(0,1);
		if (letter == '¨') letter = 'Å';
		if ($.inArray(letter, anc) == -1)
			anc.push(letter.toUpperCase());
	})
	anc.sort();
	for (i=0;i<anc.length;i++) {
		c = anc[i];
		enqueue(append_anchor, "<A href='#' class='anchor_link'>" + c + "</A> | ");
	}
	enqueue(hide_el, $("#wait_icon"));

	var last_filter_val = "";
	var filter_tmr = null;
	function filter_func()
	{
		if (last_filter_val)
			filter_substring(last_filter_val);
		else {
			$(".item").each(function(idx, el) {
				$(el).css('display', 'table-row');
			})
		}
		filter_tmr = null;
	}
	$('#filter').keyup(function() {
		filter_val = $('#filter').val().toUpperCase().replace('¨', 'Å');
		if (last_filter_val != filter_val) {
			last_filter_val = filter_val;
			if (filter_tmr) {
				clearTimeout(filter_tmr);
				filter_tmr = null;
			}
			filter_tmr = setTimeout(filter_func, 100);
		}
	});
})

