/*********************
 * 
 * Handles Search Box Functions
 * 
 * Click Event for Search Box
 */

SearchBox = {
	searchListClass: "SearchList",
	searchFormClass: "searchForm",
	searchForm: undefined,
	tagCloudClass: "TagCloudClass",
	tagCloudData: "tagCloud.cfm",
	tagCloudLinkClass: "tagCloudLink",
	searchPage: "search.cfm",
	tagCloudParam: "?display=list",
	searchEntryClass: "searchEntry",
	elmHideInterval: undefined,
	elmHideTime: 5,
	elmHoverClassName: "SearchListHover",
	baseHref: "",
	appendedParams: "",
	initialize: function()
	{
		var itms = document.getElementsByClassName(this.searchListClass);
		if (itms.length > 0) {
			Event.observe(itms[0], "click", this.tagCloudSearchList.bindAsEventListener(this));
			Event.observe(itms[0], "mouseout", this.HideSoon.bindAsEventListener(this));
			Event.observe(itms[0], "mouseover", this.NoHide.bindAsEventListener(this));
			var children = itms[0].childElements();
			for ( var i = 0; i < children.length; i++)
			{
				Event.observe(children[i], "mouseout", this.hoverOut.bindAsEventListener(this));
				Event.observe(children[i], "mouseover", this.hoverIn.bindAsEventListener(this));
			}		
			Element.hide(itms[0]);
		}
		itms = document.getElementsByClassName(this.searchFormClass);

		if ( itms.length > 0)
		{
			this.searchForm = itms[0];	
			Element.hide($("SearchBtn"));
			Element.show($("SearchBtnImg"));
			Element.show($("SearchFilterText"));
		}	
		itms = document.getElementsByTagName("base");
		if (itms.length > 0) {
			this.baseHref = itms[0].href;
		}
	},
	
	
	hoverIn: function(event)
	{
		var elm = Event.element(event);
		if (! Element.hasClassName(elm, this.elmHoverClassName))
			Element.addClassName(elm, this.elmHoverClassName);
	},
	
	hoverOut: function(event)
	{
		
		var elm = Event.element(event);
		if ( Element.hasClassName(elm, this.elmHoverClassName))
			Element.removeClassName(elm, this.elmHoverClassName);
	},
	
	tagCloudSearchList: function(event)
	{
		var elmClicked = Event.element(event);
		var galAlias = elmClicked.getAttribute("galAlias");
		if ( galAlias == null)
			return;
		this.searchForm.action = this.searchPage + "/" + galAlias + "?" + this.appendedParams;

		var tagCloudURL = this.tagCloudData + "/" + galAlias;
		var itms = document.getElementsByClassName(this.tagCloudLinkClass);
		if ( itms.length > 0 )
			itms[0].href = tagCloudURL + "?" + this.appendedParams;		
		
		tagCloudURL  += this.tagCloudParam + this.appendedParams;
		
		new Ajax.Request(this.baseHref  + tagCloudURL, {method:'get', onSuccess:this.tagCloudDone.bindAsEventListener(this)});
		var itms = document.getElementsByClassName(this.searchEntryClass);
		for (var i = 0; i < itms.length; i++)
			itms[i].update(elmClicked.innerHTML);
			
		this.HideList();
	},
	
	tagCloudDone: function(transport)
	{
		var tagCloudElm = document.getElementsByClassName(this.tagCloudClass);
		if ( tagCloudElm.length > 0)
			tagCloudElm[0].update(transport.responseText);
	},
	
	Search: function()
	{
		this.searchForm.submit();
	},
	
	ShowList: function()
	{
		var itms = document.getElementsByClassName(this.searchListClass);
		
		if (itms.length > 0) {
			if ( Element.visible(itms[0]))
			{
				Element.hide(itms[0]);
				return;
			}
			
			Element.show(itms[0])
			if ( this.listAbsolute == undefined)
			{
				this.listAbsolute = true;
			Element.absolutize(itms[0]);
			itms[0].style.top = parseInt(itms[0].offsetTop) - 20;
			//itms[0].style.top = this.searchForm.style.top;
				
			}
			
		}
		if ( this.elmHideInterval != undefined)
			window.clearInterval(this.elmHideInterval);
		this.elmHideInterval = window.setTimeout(this.HideList.bindAsEventListener(this), this.elmHideTime * 1000);
		
	},
	
	HideList: function(){
		var itms = document.getElementsByClassName(this.searchListClass);
		if (itms.length > 0) {
			Element.hide(itms[0])
		}
		if (this.elmHideInterval != undefined) {
			window.clearInterval(this.elmHideInterval);
			this.elmHideInterval = undefined;
		}
	},
	
	HideSoon: function()
	{
		if ( this.elmHideInterval != undefined)
			window.clearInterval(this.elmHideInterval);
		this.elmHideInterval = window.setTimeout(this.HideList.bindAsEventListener(this), this.elmHideTime * 1000);
		
	},
	
	NoHide: function()
	{
		if ( this.elmHideInterval != undefined)
			window.clearInterval(this.elmHideInterval);
		this.elmHideInterval = undefined;
	}
	
	
}


Event.observe(window, "load", SearchBox.initialize.bindAsEventListener(SearchBox));
