$(document).ready(function() {
	var sq = $("#quick_search_query");
	var sq_default = "Enter a course number, title, professor surname, semester, year, IR, PSC, keyword . . . ";
	sq.val(sq_default);
	sq.attr("timer", 0);
	sq.blur();
	$("#res").hide().attr("has_results", false).attr("selected_index", -1);
	sq.focus(function() {
		if (sq.val() == sq_default) {
			sq.toggleClass("active").val("");
		}
	});
	sq.blur(function() {
		if (sq.val() == "") {
			sq.toggleClass("active").val(sq_default);
		}
	});
	sq.keydown(function(e) {
		if (e.which == 13) {
			return false;
		}
	});
	sq.keyup(function(e) {
		window.clearTimeout(sq.attr("timer"));
		if (sq.val() == "") {
			$("#res").empty().hide().attr("has_results", false);
		} else if (sq.val() != "") {
			if (e.which != 38 && e.which != 40) {
				sq.attr("timer", window.setTimeout(function() {
					$.getJSON("/college/psc/courses/coursedb/data.php?a=quicksearch&q=" + sq.val(), function(data) {
						$("#res").empty();
						for (var i = 0; i < data['results'].length; i++) {
							var d = document.createElement('button');
							var abbreviation = data['results'][i]['dept_abbreviation'];
							if (data['results'][i]['ir_xl_abbrev'] != null) {
								abbreviation = data['results'][i]['ir_xl_abbrev'] + "/" + abbreviation;
							}
							$(d).html("<strong>" + abbreviation + " " + data['results'][i]['number'] + " " + data['results'][i]['title'] + "</strong>");
							if (data['results'][i]['s_count'] > 0) {
								for (var j = 0; j < data['results'][i]['sections'].length; j++) {
									var s = data['results'][i]['sections'][j];
									var section_d = document.createElement('div');
									$(section_d).html(s['semester'] + " " + s['year'] + " (" + s['last_name'] + ")<br />" + s['time']);
									$(d).append(section_d);
									$(d).attr("selected", false);
								}
							}
							$(d).bind("mouseenter mouseleave", function(e) {
								$(this).toggleClass("hover");
								return false;
							}).bind("click", { courseid: data['results'][i]['id'] }, function(e) {
								window.location = "/college/psc/courses/coursedb/course.php?courseid=" + e.data.courseid;
								return false;
							});
							$("#res").append(d).show().attr("has_results", true).attr("selected_index", -1);
						}
						if (data['num_results'] > data['max_results']) {
							var moreResultsDiv = document.createElement("div");
							$(moreResultsDiv).html("Your query returned " + data['num_results'] + " results. Only the top " + data['max_results'] + " results of your query are shown. To view all results, <a href=\"results.php?a=quicksearch&q=" + sq.val() + "\">click here</a>.").addClass("alert");
							$("#res").prepend(moreResultsDiv);
						} else if (data['num_results'] == 0) {
							pageTracker._trackEvent("quickSearch", "searchNoResults", sq.val());
						}
					});
					pageTracker._trackEvent("quickSearch", "searchExecuted", sq.val());
				}, 300));
			}
			
			if ($("#res").attr("has_results") == true || $("#res").attr("has_results") == "true") {
				if (e.which == 38) {
					// Up arrow
					var items = $("#res button");
					var idx = parseInt($("#res").attr("selected_index"));
					idx = (idx > -1) ? (idx - 1) : (-1);
					$("#res button").removeClass('hover');
					if (idx >= 0) {
						$(items[idx]).toggleClass("hover");
					}
					$("#res").attr("selected_index", idx);
				} else if (e.which == 40) {
					// Down arrow
					var items = $("#res button");
					var idx = parseInt($("#res").attr("selected_index"));
					idx = (idx < items.length) ? (idx + 1) : (items.length);
					$("#res button").removeClass('hover');
					if (idx < items.length) {
						$(items[idx]).toggleClass("hover");
					}
					$("#res").attr("selected_index", idx);
				} else if (e.which == 13) {
					// return
					var items = $("#res button");
					var idx = parseInt($("#res").attr("selected_index"));
					if (idx >= 0) {
						$(items[idx]).focus();
						$(items[idx]).click();
					}
				}
			}
		}
	});
});