/*  Utility function for the Ancestry card catalog
 *
 * */
if(typeof TGN == 'undefined') 
{
	var TGN = {};
}
TGN.CC = {};

TGN.CC.FType = new Array();
TGN.CC.FType[0] = 'Collection';
TGN.CC.FType[1] = 'Location';
TGN.CC.FType[2] = 'Date';
TGN.CC.FType[3] = 'Language';

//used for composing the qstring for this request
TGN.CC.Request = {};

TGN.CC.SearchOnEnter = function(event, title, keyword) {
	//This is Execute a search based on the title 
	//onclick event handler
	var keyNum;
	if(window.event) keyNum = event.keyCode;
	else if (event.which) keyNum = event.which;

	if(keyNum == 13) { //enter pressed
		TGN.CC.Request.title = title.value;
		TGN.CC.Request.keyword = keyword.value;

		TGN.CC.ClearPagingTools();
		TGN.CC.SearchingUI(true);
		TGN.CC.DoSearch();
	}
};

TGN.CC.SearchTitles = function() {
	var title = document.getElementById("iTitle");	
	var keyword = document.getElementById("iKeyword");	
	if(title != null) TGN.CC.Request.title = title.value;
	if(keyword != null) TGN.CC.Request.keyword = keyword.value;

	TGN.CC.ClearPagingTools();
	TGN.CC.SearchingUI(true);
	TGN.CC.DoSearch();
};
TGN.CC.SearchBtnText = null;
TGN.CC.SearchingUI = function(searchOn) {
	var srchBtn = document.getElementById("cardCatSearchTxt");
	if(srchBtn != null){
		if (searchOn) {
			if(TGN.CC.SearchBtnText == null) {
				TGN.CC.SearchBtnText = srchBtn.innerHTML;
			}
			srchBtn.innerHTML = TGN.CC.Intl.searching;
		}
		else if(TGN.CC.SearchBtnText != null) {
			srchBtn.innerHTML = TGN.CC.SearchBtnText;
		}
	}
};
TGN.CC.Clear = function(){
	delete TGN.CC.Request.title;
	delete TGN.CC.Request.keyword;
	var title = document.getElementById("iTitle");	
	var keyword = document.getElementById("iKeyword");	
	if(title != null) title.value = "";
	if(keyword != null) keyword.value = "";
	for(var i =0; i < TGN.CC.FilterStack.length; i++){
		TGN.CC.FilterStack[i].removeUI();
	}
	TGN.CC.FilterStack = new Array();

	TGN.CC.BlockFilterUI();
	TGN.CC.ClearPagingTools();
	TGN.CC.DoSearch();
};

TGN.CC.DoSearch = function(searchQS, flags) {
	if(flags == null) flags = {}; 
	if(searchQS == null || searchQS == "") {
		searchQS = TGN.CC.ToQS();
		try {
			//YAHOO.util.History.navigate("ccat", searchQS);
			window.location.hash = "ccat="+escape(searchQS);
		}
		catch(e) {}
	}

	searchQS = "?" + searchQS;

	//check to see if obtaining a filter refresh is needed (paging it is not)
	if(flags.noFilt != null) { searchQS += "noFilt=1&"; }
	if(flags.filterInfo != null) { searchQS += "filterInfo=1&"; }

	args = [TGN.CC,searchQS];
	var callback = {
		success:function(o) {
				
			try {
				var searchR = eval('(' + o.responseText + ')');

				TGN.CC.Results = searchR.searchResults;
				
				if(searchR.filters != null) //Need to update the filters
					TGN.CC.UpdateFilterUI(searchR.filters);
				if(searchR.filterInfo != null) {
					for(var i = 0; i < searchR.filterInfo.length; i++) {
						var fil = searchR.filterInfo[i];
						var nFil = new TGN.CC.Filter(fil.fType,fil.fVal,fil.fName);
						TGN.CC.FilterStack.push(nFil);
						nFil.addUI();
					}
				}

				TGN.CC.PopulateSearchResults(searchR);	
				TGN.CC.UpdatePageTools(searchR.searchResults);
			} 
			catch(e) { 
				//do error tracking
				TGN.CC.ShowMessage(TGN.CC.Intl.err, TGN.CC.Intl.zeroPrompt);
			}
			finally { 
				TGN.CC.PagingLock = false; 
				TGN.CC.SearchingUI(false);
			}
		},
		failure:function(o){
			TGN.CC.ShowMessage(TGN.CC.Intl.err, TGN.CC.Intl.zeroPrompt);
			TGN.CC.PagingLock = false;
		},
		argument: args
	};

	var connection = YAHOO.util.Connect.asyncRequest('GET', '/search/CardCat/CardCatCallback.aspx'+searchQS, callback);
};
TGN.CC.SboClick = function(e){
	var cb = document.getElementById("sbocheck");
	if(cb != null) {
		if(cb.checked) {
			TGN.CC.Request.sbo = 1;
		}
		else {
			delete TGN.CC.Request.sbo;
		}
	}	

	TGN.CC.DoSearch();
};
TGN.CC.FilterStack = new Array();
TGN.CC.Filter = function (t,n,nam){
	this.fType = t;
	this.nodeId = n;
	this.name = nam;
};
TGN.CC.Filter.prototype.addUI = function(){
	var facSec = document.getElementById("Facets-Selected");
	if(facSec != null) {
		var rVal = "<a href=\"javascript:TGN.CC.RemoveFilter(" + this.fType;
		rVal += ",'" + this.nodeId + "');\">" + this.name;
	    if(TGN.CC.Intl != null && TGN.CC.Intl.FType[this.fType] != null)
			rVal += " <small>(" + TGN.CC.Intl.FType[this.fType] + ")</small>";
		rVal += "</a>"

		newFil = document.createElement("h4");
		if(TGN.CC.FilterStack.length <= 1)
			newFil.setAttribute('class', 'first');
		newFil.setAttribute('id', this.fType + '-' + this.nodeId);
		newFil.innerHTML = rVal;
		facSec.appendChild(newFil);
	}
};
TGN.CC.Filter.prototype.removeUI = function(){
	var rFilt = document.getElementById(this.fType + "-" + this.nodeId);	
	if(rFilt != null) {
		rFilt.parentNode.removeChild(rFilt);
	}
};
TGN.CC.FilterBlock = null;
TGN.CC.BlockFilterUI = function(){
	if(TGN.CC.FilterBlock == null) {
		TGN.CC.FilterBlock = new YAHOO.widget.Panel("filterOverlay", 
				{context:["Facets-Group","tl","tl"],width:'228px',height:'1063',zindex:5,close:false,draggable:false,underlay:'none'});		
		TGN.CC.FilterBlock.setBody('<img src="' + TGN.CC.Cache + '/css/search/i/Loading32.gif" />');
		TGN.CC.FilterBlock.render(document.body);
	}

	var fOver = document.getElementById("filterOverlay");
	var ddr= document.getElementById("Facets-Group");
	var nHeight = ddr.offsetHeight || 1063;
	nHeight += 30;
	fOver.style.height = nHeight+'px';

	var fader = new YAHOO.util.ColorAnim(fOver, { opacity:{ from:0.1, to:0.8} }, 2, YAHOO.util.Easing.easeOut);
	
	TGN.CC.FilterBlock.align();
	TGN.CC.FilterBlock.show();
	fader.animate();
};
TGN.CC.UnblockFilterUI = function() {
	if(TGN.CC.FilterBlock != null) {
		TGN.CC.FilterBlock.hide();
	}
};

TGN.CC.AddFilter = function(filterType, nodeId, name)
{
	TGN.CC.BlockFilterUI(filterType);
	var nFil = new TGN.CC.Filter(filterType,nodeId,name);
	TGN.CC.FilterStack.push(nFil);
	//Add the UI here + animation
	nFil.addUI();

	TGN.CC.ClearPagingTools();
	TGN.CC.DoSearch();
};

TGN.CC.RemoveFilter = function(filtertype, nodeId){
	var tArray = new Array();
	while(TGN.CC.FilterStack.length > 0) {
		var tFilter = TGN.CC.FilterStack.pop();
		if(tFilter.fType == filtertype && tFilter.nodeId == nodeId)
		{	tFilter.removeUI();	
			break;
		}	
		else { tArray.push(tFilter); }
	}
	while(tArray.length > 0) {
		var fFilter = tArray.pop();
		if(fFilter.fType == filtertype) {
			fFilter.removeUI();
		}
		else {
			TGN.CC.FilterStack.push(fFilter);
		}
	}
	
	TGN.CC.ClearPagingTools();
	TGN.CC.BlockFilterUI();
	TGN.CC.DoSearch();
};

TGN.CC.ToQS = function(){
	if(typeof(TGN.CC.Request) == 'undefined')
		return "";

	var qString = "";
	for(keyname in TGN.CC.Request) {
		qString += keyname + "=" + TGN.CC.Request[keyname] + "&";
	}

	var filterstring = "";
	for(var i = 0; i < TGN.CC.FilterStack.length; i++) {
		var filter = TGN.CC.FilterStack[i];
		if(i > 0) filterstring += "|";
		filterstring += filter.fType + "*" + filter.nodeId;
	}
	if(filterstring.length > 0)
	   	qString += "filter=" + filterstring + "&";

	return qString;
};
TGN.CC.ShowMessage = function(message,clearPrompt){
	var rDiv = document.getElementById("results-main");
	if(rDiv != null) {
		rDiv.innerHTML = "";
		var newText = [];
		newText.push("<div class='threshold'><h3>");
		newText.push(message);
		newText.push("</h3><p><a href='javascript:TGN.CC.Clear()'>");
		newText.push(clearPrompt);
		newText.push("</a></p></div>");
		rDiv.innerHTML = newText.join("");

		var headerDiv = document.getElementById("results-matches");
		if(headerDiv != null){ headerDiv.innerHTML = "0"; }
		var totalD = document.getElementById("results-totals");
		if(totalD != null){ totalD.innerHTML = "0"; }
		totalD = document.getElementById("footerCount");
		if(totalD != null){ totalD.innerHTML = ""; }

		TGN.CC.HidePageTools(); 
	}
}
TGN.CC.PopulateSearchResults = function(ajaxR){
	var SR = ajaxR.searchResults;
	if(parseInt(SR.totalHits) == 0) {
		TGN.CC.ShowMessage(TGN.CC.Intl.zeroM, TGN.CC.Intl.zeroPrompt);
		return;
	}
	var rDiv = document.getElementById("results-main");
	if(rDiv != null){
		rDiv.innerHTML = "";

		//detect if category is searched

		var headerDiv = document.getElementById("results-matches");
		if(headerDiv != null){ 
			headerDiv.innerHTML = "";
			headerDiv.innerHTML = SR.matches;
		}
		var totalD = document.getElementById("results-totals");
		if(totalD != null){ 
			totalD.innerHTML = "";
			totalD.innerHTML = SR.totalHitsDisplay;
		}
		totalD = document.getElementById("footerCount");
		if(totalD != null){ 
			totalD.innerHTML = "";
			totalD.innerHTML = SR.matches + ' of <strong>' + SR.totalHitsDisplay + '</strong>';
		}

		var rTable = [];

		var lowestCatFilter = TGN.CC.GetLowestCatFilter();
		var catName = null; //The category name to display, if a cat filter is applied
		if(lowestCatFilter != null) {
			rTable.push("<div id='resultsCatBanner' class='cf' style='text-align: center;'>");
			rTable.push("<h4><a href='/search/default.aspx?cat=" + lowestCatFilter.nodeId);
			rTable.push("'>" + TGN.CC.Intl.searchCat.replace(/\{0\}/,lowestCatFilter.name) + "</a></h4></div>");

			catName = lowestCatFilter.name;
		}

		//table column header
		rTable.push("<table id='resultList' cellspacing=0 cellpadding=0><tr>");
		for(var rH = 0; rH < SR.colOrder.length; rH++){
			rTable.push("<th>" + SR.colOrder[rH] + "</th>");	
		}
		rTable.push("</tr>");


		//results
		for(var i = 0; i < SR.results.length; i++) {
			var dbid = SR.results[i].dbid;
			rTable.push("<tr class='result'><td class='icon" + SR.results[i].dbIcon );//  + "'>");
			rTable.push("' title='"+ TGN.CC.Intl.dbIconD[SR.results[i].dbIcon-1] +"'>");
			rTable.push("</td>");
			rTable.push("<td class='title' id='hAnchor" + dbid + "'>");
			rTable.push("<a href='/search/db.aspx?dbid=" + SR.results[i].dbid);
		    rTable.push("' onmouseover='TGN.CC.HoverOn(this,"+dbid+")' onmouseout='TGN.CC.HoverOff(this,"+dbid+")'>");
		    rTable.push(SR.results[i].Title+"</a></td><td class='info'>");
			if(catName == null) { rTable.push(SR.results[i].Collection); }
			else { rTable.push(catName); }
			rTable.push("</td><td class='rec-count'>"+SR.results[i].Size+"</td><td class='activity");
			if(SR.results[i].Activity == 'updated') rTable.push(" rec-updated");
			else if (SR.results[i].Activity == 'new') rTable.push(" rec-new");
			rTable.push("'>"+SR.results[i].ActivityTitle+"</td></tr>");
		}
		rDiv.innerHTML = rTable.join("");
	}
};
TGN.CC.GetLowestCatFilter = function() {
	var lowestCatFilter = null;
	if(TGN.CC.FilterStack != null) {
		for(var i = 0; i < TGN.CC.FilterStack.length; i++) {
			if(TGN.CC.FilterStack[i].fType == 0) {
				lowestCatFilter = TGN.CC.FilterStack[i];
			}
		}	
	}
	return lowestCatFilter;
};
TGN.CC.UpdateFilterUI = function(filterR) {
	for(var i = 0; i < filterR.length; i++) {
		switch(filterR[i].fType){
			case 0:
				if(filterR[i].fValue == 35) {
					TGN.CC.UpdateCensusCat(filterR[i]);
				}
				else TGN.CC.UpdateSection(filterR[i]);
				break;
			case 2: // Dates
				TGN.CC.UpdateDateSection(filterR[i]);
				break;
			default:
				TGN.CC.UpdateSection(filterR[i]);
				break;
		}
	}
	TGN.CC.UnblockFilterUI();
};
TGN.CC.CensusCats = new Array();
TGN.CC.CensusCats[0] = new Array(204,117,119,120,121,122,166,167,168,169,170);
TGN.CC.CensusCats[1] = new Array(205,171,172,173,173,175,176,177,178,179,180);
TGN.CC.CensusCats[2] = new Array(206,181,182,183,184,185,186,187,-1,-1,-1);
TGN.CC.CenDoLink = function(enabled, x, y){
	//calculate the years name based on array index
	var yPos = (y==0) ? 0 : y-1///the zero element is the header so even number in 0 and 1 array index;
	var year = 1700 + (x*100) + (yPos*10);

	var link = (y==0) ? "<th>":"<td>";
	if(enabled) {
		link += "<a href=\"javascript:TGN.CC.AddFilter(0,'" + TGN.CC.CensusCats[x][y];
		link += "','"+year+"s')\">" + year + "s</a>"
	}
	else link += year;
	link += (y==0) ? "</th>":"</td>";
	return link;
};
TGN.CC.UpdateCensusCat = function(filter){
	var catSec = document.getElementById("Facets-"+TGN.CC.FType[filter.fType]);
	if(catSec != null) {
		if(filter.results.length > 0) {
			var nodeAdded = {};
			nodeAdded.enabled = function(k) { return this[k] != null; };
			for(var i=0; i < filter.results.length; i++){
				nodeAdded[filter.results[i].nodeId] = true;
			}

			var newString = "<h5>"+filter.fTitle+"</h5>";
			newString += "<table class='grid' cellspacing='0' cellpadding='0' border='0'>";
			for(var y=0; y < TGN.CC.CensusCats[0].length; y++){
				newString += "<tr>";
				for(var x=0; x < TGN.CC.CensusCats.length; x++) {
					newString += TGN.CC.CenDoLink(nodeAdded.enabled(TGN.CC.CensusCats[x][y]),x,y);
				}		
				newString += "</tr>";
			}
			catSec.innerHTML = newString;
		}
		else catSec.innerHTML = "";
	}
};
TGN.CC.UpdateSection = function(filter){
	var catSec = document.getElementById("Facets-"+TGN.CC.FType[filter.fType]);
	if(catSec != null) {
		if(filter.results.length > 0) {
			var newString = "<h5>"+filter.fTitle+"</h5>";
			if(filter.results.length > 8 && filter.fType == 1) newString += "<dl id=\"locn_dl\"";
			else newString +="<dl>";

			for(var i = 0; i < filter.results.length; i++){
				newString += "<dd><a href=\"javascript:TGN.CC.AddFilter(" + filter.fType;
				newString += ", '" + filter.results[i].nodeId + "','"+filter.results[i].name;
				newString += "');\">" + filter.results[i].name;
				newString += "<small>";
				newString += (filter.results[i].count > 1000) ? '1000+' : filter.results[i].count;
			    newString += "</small></a></dd>";
			}
			newString += "</dl>";
			catSec.innerHTML = newString;
		}
		else catSec.innerHTML = "";
	}
};
TGN.CC.DateSectionNodes = null;
TGN.CC.UpdateDateSection = function(filter){
	var catSec = document.getElementById("Facets-"+TGN.CC.FType[filter.fType]);
	if(catSec != null){
		if(filter.results.length > 0) {
			catSec.style.display = "block";
			var nodeAdded = {};
			for(var i = 0; i < filter.results.length; i++){
				var delem = document.getElementById("date-"+filter.results[i].nodeId);
				if(delem != null) {
					if(filter.results[i].count > 0) {
						var name = filter.results[i].name;
						switch(filter.results[i].nodeId) {
							case 193: name = "1600s"; break;
							case 207: name = "1700s"; break;
							case 218: name = "1800s"; break;
							case 229: name = "1900s"; break;
						}
						delem.innerHTML = "<a href=\"javascript:TGN.CC.AddFilter(" + filter.results[i].fType 
							+ ", '" + filter.results[i].nodeId + "','"+name+"');\">" + name + "</a>";	
						nodeAdded["date-"+filter.results[i].nodeId] = true;
					}	
					else {
						delem.innerHTML = filter.results[i].name;	
					}
				}
			}
			//now iterate the table elements to disable those nodes that are not present 
			var fFunc = function(e) { return (e.id != null && e.id.indexOf('date-') >= 0);}
			if(TGN.CC.DateSectionNodes == null)
			{
				TGN.CC.DateSectionNodes = YAHOO.util.Dom.getElementsBy(fFunc, null, catSec);
			}
			for(var i = 0; i < TGN.CC.DateSectionNodes.length; i++){
				if(nodeAdded[TGN.CC.DateSectionNodes[i].id] == null) {
					if(TGN.CC.DateSectionNodes[i].firstChild.innerHTML != null) {
						TGN.CC.DateSectionNodes[i].innerHTML = 
							TGN.CC.DateSectionNodes[i].firstChild.innerHTML;
					}
				}
			}
		}
		else { 
			catSec.style.display = "none";
		}
	}
}

TGN.CC.ChangeSort = function(selector) {
	TGN.CC.ClearPagingTools();
	TGN.CC.Request.dbSort=selector.value;
	TGN.CC.DoSearch(null, {"noFilt":1} );
};
TGN.CC.PagingLock = false;
TGN.CC.JumpPage = function(direction) {
	if(TGN.CC.PagingLock) return;
	TGN.CC.PagingLock = true;

	if(direction < 0) {
		if(TGN.CC.Page > 10) {
			TGN.CC.DoPage(-10);
		}
		else {
			TGN.CC.DoPage(1 - TGN.CC.Page);
		}
	}
	else if (direction > 0) {
		TGN.CC.DoPage(10);
	}
};
TGN.CC.DoPage = function(pOffset) {
	if(TGN.CC.PagingLock) return;
	TGN.CC.PagingLock = true;

	if(pOffset < 0 && (Math.abs(pOffset) >= TGN.CC.Page) ) {
		pOffset = 1 - TGN.CC.Page;
	}

	if(TGN.CC.Results != 'undefined') {
		TGN.CC.Page += pOffset;
		if(pOffset > 1 || pOffset < -1)
			TGN.CC.Request.pgOff = Math.abs(pOffset);

		if(pOffset > 0) {
			delete TGN.CC.Request.bsk;
			TGN.CC.Request.fsk = TGN.CC.Results.fsk;
			TGN.CC.Request.fh = TGN.CC.Request.hc * TGN.CC.Page;
		}
		else {
			delete TGN.CC.Request.fsk;
			TGN.CC.Request.bsk = TGN.CC.Results.bsk;			
			TGN.CC.Request.fh = TGN.CC.Request.hc * TGN.CC.Page;
		}
	}
	TGN.CC.DoSearch(null, {"noFilt":1});
};
TGN.CC.PageTools = null;
TGN.CC.PageTool = function(divId) {
	this.TDiv = document.getElementById(divId);
	this.BDiv = document.getElementById(divId+"B");
};
TGN.CC.PageTool.prototype.On = function() {
	this.TDiv.style.display = "inline";
	this.BDiv.style.display = "inline";
};	
TGN.CC.PageTool.prototype.Off = function() {
	this.TDiv.style.display = "none";
	this.BDiv.style.display = "none";
};
TGN.CC.PageTool.prototype.Set = function(theValue) {
	this.TDiv.innerHTML = ""+theValue;
	this.BDiv.innerHTML = ""+theValue;
	this.On();
};
TGN.CC.GetPageToolsUI = function(){
	var PT = null;
	if(TGN.CC.PageTools == null) {
		PT = {};
		//init all the page elements
		PT.Prev = new TGN.CC.PageTool("paging-prev");
		PT.Prev10 = new TGN.CC.PageTool("paging-prev10");
		PT.PrevElp = new TGN.CC.PageTool("prevElp");
		PT.PrevN = new TGN.CC.PageTool("paging-prevN");
		PT.NextN = new TGN.CC.PageTool("paging-nextN");
		PT.NextElp = new TGN.CC.PageTool("nextElp");
		PT.Next10 = new TGN.CC.PageTool("paging-next10");
		PT.Next = new TGN.CC.PageTool("paging-next");
		PT.PCurrent = new TGN.CC.PageTool("paging-current");
		TGN.CC.PageTools = PT;
	}
	else PT = TGN.CC.PageTools;

	return PT;
};
TGN.CC.UpdatePageTools = function(sResults) {
	delete TGN.CC.Request.pgOff;
	var PT = TGN.CC.GetPageToolsUI();

	if(TGN.CC.Page != sResults.page) { 
		TGN.CC.Page = sResults.page || 1;
	}
	PT.PCurrent.Set(TGN.CC.Page);

	if(sResults != null) { 
		var tHits = parseInt(sResults.totalHits);
		if(tHits > 0) {
			var totalPages = Math.ceil(tHits / TGN.CC.Request.hc);
			//calc prev links 
			if(TGN.CC.Page > 1) {
				PT.Prev.On();
				PT.PrevN.Set(TGN.CC.Page - 1);
				//PT.PrevN.On();
				if(TGN.CC.Page > 2) {
					if(TGN.CC.Page > 10) { PT.Prev10.Set(TGN.CC.Page - 10); }
					else { PT.Prev10.Set(1); }
					//PT.Prev10.On();
				}
				else { PT.Prev10.Off(); }

				if(TGN.CC.Page >= 4){
					PT.PrevElp.On();
				}	
				else PT.PrevElp.Off();
			}
			else {
				PT.Prev.Off();
				PT.PrevN.Off();
				PT.Prev10.Off();
				PT.PrevElp.Off();
			}

			if(totalPages > 1) {
				if(TGN.CC.Page < totalPages) {
					PT.Next.On();
					PT.NextN.Set(TGN.CC.Page + 1);
					//PT.NextN.On();

					if(totalPages - TGN.CC.Page > 10) {
						PT.Next10.Set(TGN.CC.Page + 10);
						//PT.Next10.On();
						PT.NextElp.On();
					}
					else { 
						PT.Next10.Off(); 
						PT.NextElp.Off();	
					}
				}
				else {
					PT.Next.Off();
					PT.NextN.Off();
					PT.NextElp.Off();
					PT.Next10.Off(); 
				}
			}
			else {
					PT.Next.Off();
					PT.NextN.Off();
					PT.NextElp.Off();
					PT.Next10.Off(); 
			}
		}
	}
};
TGN.CC.HidePageTools = function() {
	var PT = TGN.CC.GetPageToolsUI();
	for(fUI in PT) {
		PT[fUI].Off();
	}
};
TGN.CC.ClearPagingTools = function(){
	delete TGN.CC.Request.bsk;
	delete TGN.CC.Request.fsk;
	delete TGN.CC.Request.fh;
	delete TGN.CC.Request.pgOff;
	TGN.CC.Page = 1;
	TGN.CC.Request.hc = 25;
};

TGN.CC.Hover = {};
TGN.CC.HoverOn = function(e,dbid) {
	if(TGN.CC.Hover.onTimer != null) {
		clearTimeout(TGN.CC.Hover.onTimer);
	}
	if(TGN.CC.Hover.dbid == dbid) {
		if(TGN.CC.Hover.offTimer != null) {
			clearTimeout(TGN.CC.Hover.offTimer);
		}
	}

	TGN.CC.Hover.dbid = dbid;
	var hoverR = function() {
		if(TGN.CC.Hover.dbid == dbid) {
			TGN.CC.HoverRequest(dbid); 
		}
	};	
	TGN.CC.Hover.onTimer = setTimeout(hoverR, 250);
};
TGN.CC.HoverRequest = function(dbid) 
{
	args = [dbid];
	var callback = {
		success:function(o) {
			if(TGN.CC.Hover.dbid != args[0]) return;

			try {
				var rResults = eval('(' + o.responseText + ')');
				var rArray = [];
				rArray.push("<table>");
				rArray.push("<tr><td>"+rResults.pubYear[0] + "</td><td>" + rResults.pubYear[1] + "</td></tr>"); 
				rArray.push("<tr><td>"+rResults.updateYear[0] + "</td><td>" + rResults.updateYear[1] + "</td></tr>"); 
				rArray.push("</table>");

				if(rResults.miniDesc[1] != "") { rArray.push("<span>" + rResults.miniDesc[1] + "</span>"); }

				TGN.Util.HoverTip.showHoverTip("hAnchor"+dbid,"",rArray.join(""),rResults.title,"tr","tl",300,-1,250);
			} 
			catch(e) { 
				//alert("whoops: " + e);
				//do error tracking
				//TGN.CC.ShowMessage(TGN.CC.Intl.err, TGN.CC.Intl.zeroPrompt);
			}
			finally { }
		},
		failure:function(o){
			//alert("failure! " + o);
		},
		argument: args
	};

	var connection = YAHOO.util.Connect.asyncRequest('GET', '/search/CardCat/CardCatHover.ashx?dbid='+dbid, callback);
};
TGN.CC.HoverOff = function(e,dbid) {
	if(TGN.CC.Hover.onTimer != null) {
		clearTimeout(TGN.CC.Hover.onTimer);
		TGN.CC.Hover.onTimer = null;
	}

	var closer = function() { 
		if(TGN.CC.Hover.dbid == dbid) {
			TGN.Util.HoverTip.close();
			TGN.CC.Hover.dbid = "";
		}
	};
	TGN.CC.Hover.offTimer = setTimeout(closer, 1000);	
};

TGN.CC.Init = function(initQS){

	//default values
	TGN.CC.Request.hc = 25;
	TGN.CC.Request.dbSort = 1; //Sort by Popularity by default
	TGN.CC.Page = 1;


	//TODO: check sbo param!
	var flags = {};
	var sVals = initQS.split("&");
	for(var i = 0; i < sVals.length; i++) {
		var kv = sVals[i].split("=");
		if(kv.length == 2) {
			switch(kv[0]) {
				case 'filter': flags.filterInfo = 1;
					break;
				case 'hc': TGN.CC.Request.hc = parseInt(kv[1]);
					break;
				case 'dbSort': 
					TGN.CC.Request.dbSort = parseInt(kv[1]);
					if(TGN.CC.Request.dbSort != 1) {
						var dbSortE = document.getElementById("dbSort");	
						if(dbSortE != null) {
							dbSortE.options[TGN.CC.Request.dbSort-1].selected = true;
						}
					}
					break;
				case 'fsk': TGN.CC.Request.fsk = kv[1];
					break;
				case 'sbo': 
					var cb = document.getElementById("sbocheck");
					if (cb != null) {
					   	cb.checked = true;
						TGN.CC.Request.sbo = 1;
					}
					break;
				case 'bsk': TGN.CC.Request.bsk = kv[1];
					break;
				case 'pgOff': TGN.CC.Request.pgOff = parseInt(kv[1]);
					break;
				case 'fh': TGN.CC.Request.fh = parseInt(kv[1]);
			    		break;
				case 'title':
					var title = document.getElementById("iTitle");	
					if(title != null) title.value = kv[1];
					break;
				case 'keyword':
					var keyword = document.getElementById("iKeyword");	
					if(keyword != null) keyword.value = kv[1];
					break;
			}
		}
	}

	//check for page num variations
	if(TGN.CC.Request.fh > TGN.CC.Request.hc) {
		TGN.CC.Page = TGN.CC.Request.fh / TGN.CC.Request.hc;
	}
	//restore the search parameters
	TGN.CC.DoSearch(initQS, flags);
};
