function SS_FilterCategory(JHObject)
{
	this.ALL_URLS = new Array();
	this.JH = null;
	this.SSU = new SS_Util();

	this.init = initFC;

	this.getAllUrls = getAllUrlsFC;
	this.getLabelsSorted = getLabelsSortedFC;
	this.getLabelInsensitive = getLabelInsensitiveFC;
	this.getLetter = getLetterFC;
	this.getLettersAvailable = getLettersAvailableFC;
	this.getUrlsByCategory = getUrlsByCategoryFC;
	this.getUrlsByLetter = getUrlsByLetterFC;
	this.getCategoryList = getCategoryListFC;
	this.getCategories = getCategoriesFC;
	this.hasCategoryElements = hasCategoryElementsFC;
	
	if (SS_FilterCategory.arguments.length == 1)
	{
		this.init(JHObject);				
	}

}


function initFC(JHObject)
{
	this.JH = JHObject;

	this.getAllUrls();


}



function getAllUrlsFC()
{

	var str 		= "";		
	var categories 	= this.getCategories();
	var urls 		= new Array();

	for (var i in categories)
	{
		if (categories[i])
		{
			var urls = this.getUrlsByCategory(categories[i]);

 			for (var label in urls)
			{		
				 var val = new String(urls[label]);
				if (!val.match(/function/))
				{
					var letter = this.getLetter(label);
					if (!this.ALL_URLS[letter]) { this.ALL_URLS[letter] = new Array(); }
					this.ALL_URLS[letter][label] = urls[label];
				}
			}
		}
	}		
	
	return this.ALL_URLS;

}



function getLabelsSortedFC(linkarray)
{

	var sort = new Array();
	var sorted = new Array();
	var i = j = 0;

	for (var label in linkarray)
	{
		label = this.SSU.capitilizeFirstLetter(label);
		sort[i++] = label;
	}
	
	sort.sort();

	for (var key in sort)
	{
		sorted[j++] = this.getLabelInsensitive(linkarray, sort[key]);
	}

	return sorted;

}


function getLabelInsensitiveFC(linkarray, key)
{
	for (var label in linkarray)
	{
		var RE = new RegExp(key, "i");
		var str = new String(label);
		if (label.match(RE))
		{
			return label;
		}
	}
	
	return "";
}



function getUrlsByCategoryFC(category)
{
	var list = this.getCategoryList(category);

	var urls = new Array();


	for (var i in list)
	{
		if (typeof list[i] == "object" && list[i]["label"] && list[i]["url"])
		{

			var label = list[i]["label"];
			urls[label] = new Array();

			for (var key in list[i])
			{
				urls[label][key] = list[i][key];

			}

		}
	}

	return urls;

}

function getUrlsByLetterFC(letter)
{
	var availletters = this.getLettersAvailable();
	letter = this.getLetter(letter);
	
	if (this.ALL_URLS[letter])
	{
		return this.ALL_URLS[letter];
	}

	return new Array();

}


function getCategoryListFC(category)
{

	var elem = this.JH.getElement("categories");

	for (var i in elem)
	{
		var elem2 = this.JH.getElement("list");
		if (elem[i]["category"] && elem[i]["category"] == category )
		{
			if (elem[i]["list"])
			{
				return elem[i]["list"];
			}
		}
	}

	return "";

}


function getCategoriesFC()
{
	
	var elem = this.JH.getElement("categories");
	var categories = new Array();

	for (var i in elem)
	{
		var elem2 = this.JH.getElement("list");

		if (elem[i]["category"] && this.hasCategoryElements(elem[i]["category"]))
		{
			categories[categories.length] = elem[i]["category"];
		}
	}

	return categories;

}

function hasCategoryElementsFC(category)
{
	var categories =  this.getUrlsByCategory(category);

	
	var totallength = 0;
	var kept = 0;
	var removed = 0;
	var actual = 0;

	str= "";
	for (var label in categories)
	{
		var val = new String(categories[label]);
		if (!val.match(/function/))
		{
			kept++;
		}
		else
		{
			removed++;
		}
		totallength++
	}

	return (kept) ? true  : false;

}


function getLettersAvailableFC(links)
{
	var str = "";		
	var letters = new Array();

	for (var letter in this.ALL_URLS)
	{
		var val = new String(letter);
		if (letter.length == 1)
		{
			letter = (this.SSU.isInteger(letter)) ? "#" : letter;
			letters[letters.length] = letter;
		}
	}			



	letters.sort();
	return letters;
}


function getLetterFC(label)
{
	var str = new String(label);
	var letter = new String(str.substr(0,1));
	letter = (this.SSU.isInteger(letter)) ? "#" : letter;
	letter = (letter != "#") ? letter.toUpperCase() : letter;
	return letter;
}


