$(document).ready(function () { prepSearch(); });
$(document).ready(function () { prepCQLis(); });

function prepSearch () {
	if (!document.getElementById('searchQA')) $("h1").after('<p id="searchQA"></p>');
	else var s = document.getElementById('searchQA');
	$("#searchQA").append('<label>Search:</label><input type="text" id="searchInput" name="q" />');
	$('#searchInput').attr("autocomplete","off");
	$("#searchInput").bind("keyup",trySearch);
	var img = document.createElement('img');
	img.src = '/grad/media/css/images/button_clear.gif';
	img.id = 'clear-button';
	img.onclick = function () {
		resetResults();
	}
	$("#searchQA").append(img);
}
var keyDelay;
var fadeDelay;
function trySearch() {
	if (keyDelay) {
		window.clearTimeout(keyDelay);
	}
	if (fadeDelay) window.clearTimeout(fadeDelay);
	if ($("#searchInput").val() != '') {
		keyDelay = window.setTimeout("doSearch()", 800);
	} else fadeDelay = window.setTimeout('$("#searchResults:visible").fadeOut()', 600);
}
function doSearch() {
	var pattern = new RegExp($("#searchInput").val(), 'i');
	if (!document.getElementById('searchResults')) {
		$("#searchQA").after('<div id="searchResults"><h4>Search Results</h4><ul></ul></div>');
	} else {
		clearResults();
	}
	var hasResults = 0;
	$('p.question').each(function () {
		var oT = this.offsetTop;
		var q = $('a',this).html();
		var searchString = $(this).parent().children().text();
		if (searchString.match(pattern)) {
			hasResults = 1;
			if (!this.className.match('match')) $(this).addClass('match');
			var newresult = document.createElement('li');
			var newa = document.createElement('a');
			$(newa).html(q);
			newa.href = '';
			newa.refScroll = oT;
			newa.refElem = $(this).parents("li"); // set as the LI element
			newa.onclick = function () {
				//alert("test");
				$("li.display").removeClass("display").addClass("normal");
				toggleContent(this.refElem);
				var coords = getXY(this.parentNode);
				window.scrollTo(1,coords[1]+$("#searchResults").height());
				return false;
			}
			newresult.appendChild(newa);
			$('#searchResults ul').append(newresult);
		} else {
			$(this).removeClass('match');
		}
	});
	if (!hasResults) $("#searchResults ul").append('<li>There are no matches.</li>');
	$("#searchResults:hidden").slideDown();
	return true;
}
function resetResults() {
	clearResults();
	$("#searchResults").hide('fast');
	$("#searchQA input").val('');
	$(".question_answer li.match").removeClass('match');
}
function clearResults() {
	$("#searchResults ul li").each(function () {
		$(this).remove();
	});
}
function prepCQLis() {
	$(".question_answer").each(function () {
		$(this).find('> li').each(function () {
			$(this).addClass('normal');
			var Qhtml = $('p.question',this).html();
			var newQ = document.createElement('a');
			newQ.href = '';
			$(newQ).append(Qhtml);
			$(newQ).bind("click", function () {
				//alert($(this).parent());
				toggleContent($(this).parents("li"));
				return false;
			});
			$('p.question',this).html('');
			$('p.question',this).append(newQ);
			//$('> *:not(p.question)',this).addClass('hidden_child');
			//$('p.question',this).removeClass('hidden_child');
			if (this.id && (location.search.match('show='+this.id))) {
				$(this).addClass('match');
				toggleContent(this);
				// scroll the window to the question
				var coords = getXY(this);
				window.scrollTo(0,coords[1]);
			}
		});
	});
}

function toggleContent(elem) {
	//alert(elem);
	elem.toggleClass("normal");
	elem.toggleClass("display");
	//if (elem.className.match('normal')) elem.className = elem.className.replace('normal','display');
	//else elem.className = elem.className.replace('display','normal');
}
// borrowed from yui
function getXY(el) {
  var ua = navigator.userAgent.toLowerCase();
  var isOpera = (ua.indexOf('opera') > -1);
  var isSafari = (ua.indexOf('safari') > -1);
  var isIE = (window.ActiveXObject);
 	// has to be part of document to have pageXY
	if (el.parentNode === null || el.style.display == 'none') {
	   logger.log('getXY failed: element not available', 'error', 'Dom');
	   return false;
	}	
	var parentNode = null;
	var pos = [];
	var box;	
	if (el.getBoundingClientRect) { // IE
	   box = el.getBoundingClientRect();
	   var doc = document;
	   //if ( !this.inDocument(el) ) {// causes problems in IE
		 // var doc = parent.document;
		 // while ( doc && !this.isAncestor(doc.documentElement, el) ) {
		 //  doc = parent.document;
		 // }
	   //}
	   var scrollTop = Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
	   var scrollLeft = Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);	   
	   return [box.left + scrollLeft, box.top + scrollTop];
	}
	else { // safari, opera, & gecko
	   pos = [el.offsetLeft, el.offsetTop];
	   parentNode = el.offsetParent;
	   if (parentNode != el) {
		  while (parentNode) {
			 pos[0] += parentNode.offsetLeft;
			 pos[1] += parentNode.offsetTop;
			 parentNode = parentNode.offsetParent;
		  }
	   }
	   if (isSafari && el.style.position == 'absolute' ) { // safari doubles in some cases
		  pos[0] -= document.body.offsetLeft;
		  pos[1] -= document.body.offsetTop;
	   } 
	}	
	if (el.parentNode) { parentNode = el.parentNode; }
	else { parentNode = null; }
	while (parentNode && parentNode.tagName.toUpperCase() != 'BODY' && parentNode.tagName.toUpperCase() != 'HTML') 
	{ // account for any scrolled ancestors
	   pos[0] -= parentNode.scrollLeft;
	   pos[1] -= parentNode.scrollTop;

	   if (parentNode.parentNode) { parentNode = parentNode.parentNode; } 
	   else { parentNode = null; }
	}	
	return pos;
}