jQuery(document).ready(function()
{
	buildLeftSideFilters();
});


function refilter(ref)
{
	jQuery.blockUI({message:'<h4 id="blocker">Loading Search Results...</h4><img src="/global/images/ajax-loader-loadingBar.gif" border="0">'});
	thisOrder=jQuery(ref).val();
	jQuery("#filter").val(thisOrder);
	jQuery("#page").val(1);
	ajaxCenter();
}

function ajaxCenter()
{
	var init = jQuery("#init").val();
	var thisCat = jQuery("#cat").val();
	var allFilteringInodes = buildInodesOnToURL();
	var activeOrdering = jQuery("#filter").val();
	var thisPage = parseInt(jQuery("#page").val());
// 	ajaxLeftSide();
	var recsPerPage = 15;
	var pagination = "";
	var urlStringArgs = "&srch="+jQuery("#keywords").val();
	var thisPage = parseInt(jQuery("#page").val());
	var url=(thisCat)?"ajax.dot?action=center&cat="+thisCat+"&recspage="+recsPerPage+"&page="+thisPage:"ajax.dot?action=center&orderBy="+activeOrdering+"&recspage="+recsPerPage+"&page="+thisPage+urlStringArgs+allFilteringInodes;
	orderingVals = new Array(["","Please select a sort order"],["az","A-Z"],["za","Z-A"]);	
	var out=pluraler="";
// 	alert("url = "+url);
	jQuery.get(url,function(data)
	{
		totalRecs = jQuery(data).find('result').attr('totalRecs');
		var returnRecs = parseInt(jQuery(data).find('result').attr('returnRecs'));
		if(totalRecs>0)
		{
			var recStart=(thisPage==1)?1:((thisPage-1)*recsPerPage)+1;
			var recEnd = (thisPage==1)?returnRecs:((thisPage-1)*recsPerPage)+returnRecs;
			
			pluraler=(totalRecs==1)?"":"s";
			var totalPages = Math.ceil(totalRecs/recsPerPage);
			if(totalPages<=1||totalPages==1){recEnd = totalRecs;}
			
			var recordsetDescr = "<div id=\"returnDescr\">Showing record"+pluraler+" "+recStart+"-"+recEnd+" of "+totalRecs+"</div>";
			if(totalPages<=1){recordsetDescr = recordsetDescr.replace('of 1','');}
			
			for(i=1;i<=totalPages;i++)
			{
				cssPagination=(i==thisPage)?"class=\"selectedPage\"":"";
				pagination += "<a href=\"javascript: paginate('"+i+"')\" "+cssPagination+">"+i+"</a> ";
			}
			linkPrevious=(thisPage==1)?"":"<a href=\"javascript: paginate('"+(thisPage-1)+"')\">«Previous</a>";
			linkNext=(thisPage==totalPages)?"":"<a href=\"javascript: paginate('"+(parseInt(thisPage)+1)+"')\">Next »</a>";
			pagination=(totalPages==1)?"":"<div id=\"hdrPagination\"><div id=\"paginationWrapper\">"+linkPrevious+pagination+linkNext;
			pagination+="</div>";
			orderingDropDown = "<div id=\"orderer\"><select onChange=\"refilter(this);\">";
			jQuery(orderingVals).each(function(i)
			{
				isSelected=(activeOrdering==orderingVals[i][0])?"selected":"";
				orderingDropDown +="<option value=\""+orderingVals[i][0]+"\" "+isSelected+">"+orderingVals[i][1]+"</option>";
			});
			orderingDropDown +="</select></div>";
			stageHDR = recordsetDescr.toString()+orderingDropDown.toString()+pagination.toString();
			jQuery("#stage").empty();
			jQuery(data).find('result').find('record').each(function(i)
			{
				thisInode = jQuery(this).attr('INODE');
				thisTitle = jQuery(this).find('title').text();
				thisOverview = jQuery(this).find('overview').text();
				out = "<div class=\"content\"><h4><a href=\"javascript:visitPage('"+thisInode+"')\">"+thisTitle+"</a></h4><p>"+thisOverview+"</p><p><a href=\"javascript:visitPage('"+thisInode+"')\">Read more</a></p></div>";
				if(i==0)
				{
// 					alert("appending "+recordsetDescr+orderingDropDown+pagination);
					jQuery("#stage").append(out);
				} else {
					jQuery("#stage").append(out);
				}
			});
// 			alert("out = "+out);
			
			jQuery("#stage").fadeIn('fast',function()
			{
				jQuery("#stage").prepend(stageHDR);
				jQuery.unblockUI();
			});
		} else {
			out="<h2>No Records Found</h2>";
			jQuery("#stage").hide().empty().html(out).fadeIn('fast',function()
			{
				jQuery.unblockUI();
			});
		}
		jQuery.unblockUI();
	});
}

function paginate(thisPage)
{
	jQuery.blockUI({message:'<h4 id="blocker">Loading Search Results...</h4><img src="/global/images/ajax-loader-loadingBar.gif" border="0">'});
	jQuery("#page").val(thisPage);
	ajaxCenter();
}

function buildLeftSideFilters()
{
	thisKeyWord = jQuery("#keywords").val();
	thisCat = jQuery("#cat").val();
	var allFilteringInodes = buildInodesOnToURL();
	if(thisKeyWord)
	{
		leftSideUrl= "ajax.dot?action=left&srch="+thisKeyWord+allFilteringInodes;
	} else {
		leftSideUrl= "ajax.dot?action=left&cat="+thisCat+allFilteringInodes;
	}
	// block
	jQuery.blockUI({message:'<h4 id="blocker">Loading Search Results...</h4><img src="/global/images/ajax-loader-loadingBar.gif" border="0">'});
	jQuery.get(leftSideUrl,function(data)
	{
		availFilters = activeFilters = "";
		jQuery(data).find('result').find('record').each(function(i)
		{
			
			thisParent = jQuery(this).attr('PARENT_INODE');
			thisCategoryName = jQuery(this).attr('CATEGORY_NAME');
			isFiltered = false;
			if(allFilteringInodes!="")
			{
				jQuery("#helpFiltersApplied ul li").each(function()
				{
					thisCSS = jQuery(this).css('display');
					if(thisCSS=="block")
					{
						thisFilteredInode = jQuery(this).attr('id');
						isFiltered=true;
					}
				});
			}
			toAddToAvailFilters =(isFiltered)?"":"<li id=\""+thisParent+"\"><a href=\"javascript: addFilter("+thisParent+", "+i+")\">"+thisCategoryName+"</a></li>";
			availFilters += toAddToAvailFilters;
			activeFilters += "<li id=\""+thisParent+"\">"+thisCategoryName+" <a href=\"javascript: removeFilter("+thisParent+", "+i+")\">remove</a></li>";
		});
		if(thisKeyWord)
		{
			if(allFilteringInodes=="")
			{
				jQuery("#helpFiltersAvailable ul").hide().html(availFilters).slideDown();
				jQuery("#helpFiltersApplied ul").hide().html(activeFilters).slideDown('fast',function()
				{
					ajaxCenter();
				});
			} else {
				jQuery("#helpFiltersAvailable ul").slideUp().html(availFilters).slideDown('fast',function()
				{
					ajaxCenter();
				});
			}
		} else {
			ajaxCenter();
		}
	});
}
/*
function ajaxLeftSide()
{
	var allFilteringInodes = buildInodesOnToURL();
	leftSideUrl = "ajax.dot?action=left";
	
}
*/
function buildInodesOnToURL()
{
	var out="";
// 	alert("buildinodes "+jQuery("#helpFiltersApplied ul li").length);
	if(jQuery("#helpFiltersApplied ul li").length>0)
	{
		jQuery("#helpFiltersApplied ul li").each(function()
		{
			thisCSS = jQuery(this).css('display');
			if(thisCSS=="block")
			{
				out+="&inodes="+jQuery(this).attr('id');
			}
		});
		return out;
	} else {
		return "";
	}
}


function addFilter(thisInode, indx)
{
	addToFilters(thisInode);
	jQuery("#helpFiltersAvailable ul li").eq(indx).slideUp('fast',function()
	{
		jQuery("#helpFiltersApplied ul li").eq(indx).slideDown('fast',function()
		{
			jQuery("#page").val(1);
			buildLeftSideFilters();
		});
	});
}

function removeFilter(thisInode, indx)
{
	removeFromFilters(thisInode);
// 	alert("removeFilter(thisInode["+thisInode+"], indx["+indx+"])");
	jQuery("#helpFiltersApplied ul li").eq(indx).slideUp('fast',function()
	{
		if(jQuery("#helpFiltersAvailable ul li").length==0)
		{
			buildLeftSideFilters();
		} else {
			jQuery("#helpFiltersAvailable ul li").eq(indx).slideDown('fast',function()
			{
				jQuery("#page").val(1);
				buildLeftSideFilters();
			});
		}
	});
}

// These hidden values track the existence of the active filters on the page.
function addToFilters(inode)
{
	jQuery("<input type=\"hidden\" class=\"addToFilters\" value=\""+inode+"\">").appendTo("#helpFiltersApplied");
}

// this is the one that handles the removal of the hidden value from the DOM.
function removeFromFilters(inode)
{
	jQuery(".addToFilters").each(function()
	{
		if(jQuery(this).val()==inode)
		{
// 			alert("removing "+inode);
			jQuery(this).remove();
		}
	});
}