jQuery(document).ready(function(e) {
	var sb = jQuery("#course_search");
	var sq_default = "Number, Title, etc.";
	sb.html('<img class="new_badge" src="/college/psc/images/new_badge.png" border="0" alt="" /><a href="/college/psc/courses/coursedb/"><img class="caption" src="/college/psc/images/course_search_text.png" alt="" border="0" /></a><input type="text" name="sq" id="sq" value="' + sq_default + '"/>');
	var sq = jQuery("#sq");
	var res = jQuery("#sq_results").attr("has_results", false).attr("selected_index", -1);
	sq.focus(function(e) {
		res.show();
		if (sq.val() == sq_default) {
			sq.addClass("active");
			sq.val("");
		}
		sq.select();
		sq.attr("no_blur", false);
	});
	sq.blur(function(e) {
		if (sq.val() == "") {
			sq.val(sq_default);
			sq.removeClass("active");
			res.hide();
		} else if (sq.attr("no_blur") != "true") {
			sq.attr("blur_timer", window.setTimeout(function() {
				res.hide();
			}, 1000));
		}
	});
	sq.keyup(function(e) {
		window.clearTimeout(sq.attr("timer"));
		window.clearTimeout(res.attr("hide_timer"));
		if (e.which != 38 && e.which != 40) {
			sq.attr("timer", window.setTimeout(function() {
				jQuery.getJSON("/college/psc/courses/coursedb/data.php?a=quicksearch&q=" + sq.val(), function(data) {
					res.empty();
					res.attr("has_results", false);
					if (data.num_results > 0) {
						res.attr("has_results", true);
						var to_display = Math.min(data.num_results, data.max_results);
						res.html('<span class="status">Showing ' + to_display + ' results. <a href="/college/psc/courses/coursedb/results.php?a=quicksearch&q=' + sq.val() + '">See all ' + data.num_results + '</a>.</span><ol id="res_list"></ol>');
						var res_list = jQuery("#res_list");
						for (var i = 0; i < to_display; i++) {
							var r = document.createElement('li');
							var base_abbreviation = data['results'][i]['dept_abbreviation'];
							var abbreviation = base_abbreviation;
							if (data['results'][i]['ir_xl_abbrev'] != null) {
								abbreviation = data['results'][i]['ir_xl_abbrev'] + "/" + abbreviation;
							}
							var title = (data['results'][i]['title'].length > 30) ? (data['results'][i]['title'].substr(0, 28) + "...") : (data['results'][i]['title']);
							jQuery(r).html('<a href="/college/psc/courses/' + base_abbreviation + data['results'][i]['number'] + '"><strong>' + abbreviation + ' ' + data['results'][i]['number'] + ' ' + title + '</strong></a>');
							res_list.append(r);
						}
					} else {
						res.html('<span class="status">No results.</span>');
						pageTracker._trackEvent("quickSearch", "searchNoResults", sq.val());
					}
					res.show();
				});
				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 = jQuery("#res_list li");
				var idx = parseInt(res.attr("selected_index"));
				idx = (idx > -1) ? (idx - 1) : (-1);
				jQuery("#res_list li").removeClass('highlight');
				if (idx >= 0) {
					jQuery(items[idx]).toggleClass("highlight");
				}
				res.attr("selected_index", idx);
			} else if (e.which == 40) {
				// Down arrow
				var items = jQuery("#res_list li");
				var idx = parseInt(res.attr("selected_index"));
				idx = (idx < items.length) ? (idx + 1) : (items.length);
				jQuery("#res_list li").removeClass('highlight');
				if (idx < items.length) {
					jQuery(items[idx]).toggleClass("highlight");
				}
				res.attr("selected_index", idx);
			} else if (e.which == 13) {
				// return
				var items = jQuery("#res_list li");
				var idx = parseInt(res.attr("selected_index"));
				if (jQuery(items[idx]).children("a")[0].href) {
					window.location = jQuery(items[idx]).children("a")[0].href;
				}
			}
			return false;
		}
	});
	res.bind("mouseover", function(e) {
		sq.attr("no_blur", true);
		window.clearTimeout(sq.attr("blur_timer"));
		window.clearTimeout(res.attr("hide_timer"));
	});
	res.bind("mouseout", function(e) {
		res.attr("hide_timer", window.setTimeout(function() {
			res.hide();
			sq.blur();
		}, 1000));
	});
});
