/*
 * cis.js
 * Brown University
 * CIS Template
 * John Pennypacker
 * John_Pennypacker@brown.edu
 * 2008-06-12
 */
 
/* Backwards compability to make JQuery to work with interface */

/* I commented this out while updating to jquery ui 1.7  --jdp */
/*
(function($){
$.extend({ dequeue : function(elem, effect) {
$(elem).dequeue(effect);
}
});
})(jQuery);
*/
/*
 * A little snippet of jQuery to kick things off.
 */
$(document).ready(function(){

	// initialize the double nav
	if($(".navigation-wrapper").length > 1) {
		$("#cis-main-nav ul").eq(0).hide();
		$("#cis-main-nav h6").bind("click", toggleMainNav);
		$("#cis-main-nav h6").prepend('<img src="'+ basehref +'/img/icon-home-nav.png" alt="Show Main CIS Navigation" class="navicon" />');
	}

	$("#header").append(gIcon);
	
	$("#header").append(gForm);
	$("#content").prepend('<div id="gresults"></div>');

	$("#gSearch-form").hide();
	// set the form's height based on the bannerSize
	$("#gSearch-form").css({top: (bannerSize+1) + "px"});
	$("#gSearch-icon").css({top: (bannerSize+3) + "px"});

	$("#gresults").css({top: "12px", right:"12px", width: 300+"px", display: "none" });
	
	$("#gSearch-icon").bind("click", function() {
		toggleSearch();
	});
	$("#gSearch-icon").before('<span id="gSearchArea">Search</span>');
	$("#gSearchArea").bind("click", function() { toggleSearch(); });


	$("#q").bind("keyup", function() {
		think();
	});

	$("#q").bind("focus", function() {
		if ($(this).val() == "Search") $(this).val("");
	});
	$("#q").bind("blur", function() {
		if ($(this).val() == "") $(this).val("Search");
	});
	
	ginit();
	
	//move the default search's result to our js-dependent page
	$("#navbar #f2").attr({action: "http://www.brown.edu/cis/search/"});
	
	nestedList(".navigation");
	
	if($(".navigation").length > 1) {
		toggleSubList($(".navigation").eq(1).find("li .parentlist").eq(0));
	}

});

$(window).unload(function() {
	saveNavState();
});


/*
 * Toggle Main CIS Nav
 */
	function toggleMainNav(el) {
		if($("#cis-main-nav ul").eq(0).is(":hidden")) {
			$("#cis-main-nav ul").eq(0).slideDown();
		} else {
			$("#cis-main-nav ul").eq(0).slideUp();
		}
	}
	


/*
 * Make the nav fancy
 */
	function nestedList(selector) {
		$(selector+" li:has(ul)").prepend(foldtron2000);
		$(selector+" li:has(ul) .parentlist").bind("click", function() {toggleSubList($(this));});
		$(selector+" li:has(ul)>a").bind("click", function() {toggleSubList($(this).parent("li").find(".parentlist").eq(0)); return false; });

		$(selector+" li:has(ul) ul").each(function(i){
			$(this).prepend("<li><a href='"+ $(this).parent("li").find("a").eq(0).attr("href") +"' class='overview'>Overview</a></li>");
		});
		$(selector+" li ul").hide();

		// give each nav element a num attribute with a unique number
		$(selector+" li:has(ul)").each(function(i){$(this).attr({num:i})});
		restoreNavState(selector);
	}

/*
 * create an object, get the navigation's visibility state and save it as a cookie.
 */
	function saveNavState() {
		var data='';
		$("#cis-main-nav li[num]").each(function(i){
			if($(this).attr("num") != 0) data += ",";
			data += $(this).attr("num") +":"
			if($(this).find("ul").eq(0).is(":hidden")) {
				data += 0;
			} else {
				data += 1;
			}
		});
		document.cookie=cookieName +"="+ escape(data);
	}

/*
 * read the navigation state
 */
	function restoreNavState(selector) {
		
		if (document.cookie.length>0) {
			var s=document.cookie.indexOf(cookieName + "=");
			if (s != -1) { 
				s = s + cookieName.length + 1; 
				var e = document.cookie.indexOf(";", s);
				if(e == -1) e = document.cookie.length;
				var cookiedata = unescape(document.cookie.substring(s, e));
				var pairs = cookiedata.split(",");
				if(pairs) {
					var data = new Object();
					for(var i=0; i<pairs.length; i++) {
						var bits = pairs[i].split(":");
						data[bits[0]] = bits[1];
					}
				}

				if(data) {
					$(selector+" li[num]").each(function(i){
						if(data[i] && data[i] == 1) {
							toggleSubList($(this).find(".parentlist").eq(0));
						}
					});
				}
			}
		return false;
		}
	}

/*
 * Toggle navigation sub menus
 */
	function toggleSubList(el) {

		if($(el).parent("li:has(ul)").children("ul").eq(0).is(":hidden")) {
			$(el).parent("li:has(ul)").children("ul").eq(0).slideDown("fast");
			$(el).attr({src: iconOpen});
		} else {
			$(el).parent("li:has(ul)").children("ul").eq(0).slideUp("fast");
			$(el).attr({src: iconClosed});
		}
		saveNavState();
	}
	

/*
 * Make it look like we're thinking when google is thinking.
 */

	function think() {
		if($("#q").val() != "") {
			$("#header").append('<img src="'+ basehref +'/img/loader.gif" alt="" class="gloader" />');
			$(".gloader").css({top: (bannerSize+3) + "px"});
		} else {
			$(".gloader").remove();
			$("#gresults").hide();
		}
	}
	
/*
 * Toggles the search box.
 */
	function toggleSearch() {
		if( $("#gSearch-form").is(":hidden") ) {
			$("#gSearch-form").slideDown("fast");
			if($("#gresults .gsc-trailing-more-results").length) $("#gresults").slideDown("fast");
			$("#gSearch-icon").attr({ src: basehref +'/img/icon-search-over.png'});
		} else {
			$("#gSearch-form, #gresults").slideUp("fast");
			$("#gSearch-icon").attr({ src: basehref +'/img/icon-search.png'});
		}
	}



/*
 * Initialize the Google search widget
 */
	function ginit() {

		// Create a search control
		var searchControl = new GSearchControl();
		
		var options = new GdrawOptions();
		options.setInput(document.getElementById("q"));


		var gso = new GsearcherOptions();

		gso.setNoResultsString("Your search returned no results.  Doublecheck your spelling or try a different query.");
		gso.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
		searcher = new GwebSearch();
		// REF: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_class_GSearchControl
		
		// restricts results to CIS @ Brown  (contact John Pennypacker for info)
		searcher.setSiteRestriction("001181619027632779475:zt8jkn-iwpc", null, "http://www.brown.edu/cis/search/?cx=001181619027632779475%3Azt8jkn-iwpc&cof=FORID%3A11&q=__QUERY__&sa=Search&hl=__HL__");
		searcher.setRestriction(GSearch.RESTRICT_SAFESEARCH, GSearch.SAFESEARCH_STRICT);
		searchControl.addSearcher(searcher, gso);
		searchControl.setLinkTarget(GSearch.LINK_TARGET_SELF);
		searchControl.setResultSetSize(GSearch.SMALL_RESULTSET);
		
		searchControl.setSearchCompleteCallback(window, hideLoader);
		
		// tell the searcher to draw itself and tell it where to put results
		searchControl.draw(document.getElementById("gresults"), options);
		
		// execute an inital search
		// searchControl.execute("brunonia");
		
	}

/*
 * Hides the search box "loader" gif
 */

function hideLoader() {
	$("#gresults").slideDown();
	$(".gloader").remove();
}

var cookieName = 'AAACISNav';

var gIcon = '<img src="'+ basehref +'/img/icon-search.png" alt="Search" id="gSearch-icon" /></span>';
var gForm = '<form id="gSearch-form" action="http://www.brown.edu/cis/search/" method="get"><input type="hidden" name="cx" value="001181619027632779475:zt8jkn-iwpc" /><input type="hidden" name="cof" value="FORID:11" /><input type="hidden" name="ie" value="UTF-8" /><input type="text" name="q" id="q" value="Search" /></form>';

//show plus and minus icons for the Macintosh-impaired
if(navigator.userAgent.indexOf("Windows") != -1) {
	var iconOpen = basehref +'/img/icon-list-open.png';
	var iconClosed = basehref +'/img/icon-list-closed.png';
} else {
	var iconOpen = basehref +'/img/icon-list-open-arrow.png';
	var iconClosed = basehref +'/img/icon-list-closed-arrow.png';
}

var foldtron2000 = '<img src="' + iconClosed + '" alt="Display sub-items" class="parentlist" />';