var BoxInfo = new Object();
var TotalHeight = 0;
var ResultsCount;
var ResultsCountDrop;
var People = new Array();
var Filters = new Object();
var Filtered = false;
var FilterDrop;
var Names = new Array();
$(document).ready(function() {
	//Get all people items
	var Main = $("#main_content .centreContent .contentText");
	var PeopleNodes = $(".PeopleSection", Main);
	jQuery.each(PeopleNodes, function (index, value) {
		var Person = new Object();
		Person.Name = $("p.PeopleName", this).text();
		Person.Element = this;
		Person.BoxHeight = $(this).height();
		TotalHeight += Person.BoxHeight;
		Person.Table = $("table", this);
		var Table = Person.Table;
		Person.Region = $("tr td:contains('Region') ~ td", Table).text();
		Person.Track = $("tr td:contains('Ministry Track') ~ td", Table).text();
		People.push(Person);
	});
	//Set up list of filters
	var Tracks = new Array("Church Ministry", "Marketplace Ministry", "Support Ministry", "Compassion Ministry");
	Filters.Tracks = new Array();
	jQuery.each(Tracks, function (index, value) {
		var Track = new Object();
		Track.Name = this;
		Track.Active = false;
		Filters.Tracks.push(Track);
	});

	var Regions = new Array("Silk Road", "Caribbean Sun", "Desert Sand", "Asian Spice");
	Filters.Regions = new Array();
	jQuery.each(Regions, function (index, value) {
		var Region = new Object();
		Region.Name = this;
		Region.Active = false;
		Filters.Regions.push(Region);
	});
	//Mod HTML
	//Change titles
	var Titles = $("div.PeopleFilter p", Main);
	jQuery.each(Titles, function (index, value) {
		var t = $(this).text();
		t = "Filter by " + t;
		if (t.substring(t.length - 1, t.length) == "s") {
			t = t.substring(0, t.length -1);
		}
		$(this).text(t);
	});	
	//Add Filter dropzone
	var FilterDropParent = $("p#PeopleResults", Main);
	FilterDropParent.prepend("<span id=\"ResultsCount\"></span> ");	
	ResultsCountDrop = $("span#ResultsCount", FilterDropParent);
	FilterDropParent.append("<span id=\"AppliedFilters\"></span>");
	FilterDrop = $("span#AppliedFilters", FilterDropParent);
	//Add clear filter
	FilterDropParent.after("<p class=\"PeopleResults\"><a href=\"javascript:void(0);\" onclick=\"Filter_ClearAll();\">Clear all filters and show all people</a></p>");
	//Find uppermost box
	BoxInfo.StartingPoint = -1;	
	jQuery.each(People, function (index, value) {
		var position = $(People[index].Element).position().top;
		if (position < BoxInfo.StartingPoint || BoxInfo.StartingPoint == -1)
		{
			BoxInfo.StartingPoint = position;
		}
	});
	BoxInfo.StartingPoint += 30;
	var Box = $(People[0].Element)
	BoxInfo.Left = Box.position().left;
	BoxInfo.Width = Box.width(); //Assuming constant width for all boxes
	BoxInfo.Spacing = $(People[1].Element).position().top - (People[0].BoxHeight + Box.position().top);
	//Add & size placeholder box
	$("p#PeopleResults ~ p", Main).after("<p id=\"PeopleResultsSizeHolder\"></p>");
	TotalHeight += (People.length - 1) * BoxInfo.Spacing;
	$("p#PeopleResultsSizeHolder").height(TotalHeight);
	//Put in Alphabetical order	
	Names = new Array();
	jQuery.each(People, function (index, value) {
		Names.push(People[index].Name);
	});	
	Names.sort();
	Reposition();	
});

function Filter_Add (FilterName, Type) {
	Filter_Change(FilterName, Type, true);
}

function Filter_Remove(FilterName, Type) {
	Filter_Change(FilterName, Type, false);
}

function Filter_Change(FilterName, Type, SetValue)
{
	var ToFilter = new Array();
	var ToFilterOther = new Array();
	var FilterHtml = new String();
	var HasFilter = false;
	if (Type == "Region") {
		ToFilter = Filters.Regions;
		ToFilterOther = Filters.Tracks;
	} else if (Type == "Track") {
		ToFilter = Filters.Tracks;
		ToFilterOther = Filters.Regions;
	}
	jQuery.each(ToFilter, function (index, value) {
		if (this.Name == FilterName) {
			this.Active = SetValue;
		}
		if (this.Active) {
			HasFilter = true;
		}
	});
	jQuery.each(ToFilterOther, function (index, value) {
		if (this.Active) {
			HasFilter = true;
		}
	});
	filtered = HasFilter;
	UpdateFilterHtml();
	UpdateDisplay();
	Reposition();
}

function UpdateDisplay() {
	jQuery.each(People, function (pi, pv) {
		var Display = false;
		if (filtered) {
			jQuery.each(Filters.Regions, function (ri, rv) {
				if (! Display && People[pi].Region == Filters.Regions[ri].Name &&
						Filters.Regions[ri].Active) {
					Display = true;
				}
			});
			if (! Display) {
				jQuery.each(Filters.Tracks, function (ti, tv) {
					if (! Display && People[pi].Track == Filters.Tracks[ti].Name &&
							Filters.Tracks[ti].Active) {
						Display = true;
					}
				});
			}
		}
		else {
			Display = true;
		}
		if (Display) {
			People[pi].Element.style.visibility = "visible";
		}
		else {
			People[pi].Element.style.visibility = "hidden";
		}
	});
}

function Reposition() {
	var HeightOffset = 0;
	ResultsCount = 0;
	jQuery.each(Names, function (ni, nv) {			
		jQuery.each(People, function (pi, pv) {
			if ($(People[pi].Element).is(":visible") && People[pi].Name == Names[ni]) {
				People[pi].Element.style.width = BoxInfo.Width + "px";
				People[pi].Element.style.left = BoxInfo.Left + "px";
				People[pi].Element.style.top = BoxInfo.StartingPoint + HeightOffset + "px";
				People[pi].Element.style.position = "absolute";
				/*$(People[pi].Element).animate({
					top: BoxInfo.StartingPoint + HeightOffset + "px"
				}, "slow");
				*/
				ResultsCount++;
				HeightOffset += People[pi].BoxHeight + BoxInfo.Spacing;
			}
		});
	});
	ResultsCountDrop.text(ResultsCount.toString() + " ");
}

function UpdateFilterHtml() {
	//reconstruct filter line & activity
	var RegionsOnCount = 0;
	var RegionsHtml = new String();
	jQuery.each(Filters.Regions, function (index, value) {
		if (this.Active) {
			if (RegionsOnCount == 3) {
				RegionsHtml += "<br />";
			}
			if (RegionsOnCount > 0) {
				RegionsHtml +=" or ";
			}
			RegionsHtml += "<span class=\"Filter\"><a href=\"javascript:void(0);\" onclick=\"Filter_Remove('" + this.Name + "', 'Region');\">" + this.Name +
				"</a></span>";
			RegionsOnCount++;
		}
	});	
	var WidthVal = RegionsOnCount * 3;
	var TracksOnCount = 0;
	var TracksHtml = new String();
	jQuery.each(Filters.Tracks, function (index, value) {
		if (this.Active) {
			if (TracksOnCount == 3) {
				TracksHtml += "<br />";
			}
			if (TracksOnCount > 0) {
				TracksHtml += " or ";
			}
			TracksHtml += "<span class=\"Filter\"><a href=\"javascript:void(0);\" onclick=\"Filter_Remove('" + this.Name + "', 'Track');\">" + this.Name +
				"</a></span>";
			TracksOnCount++;
		}
	});
	if (RegionsOnCount > 0) {
		RegionsHtml = " working in " + RegionsHtml;
		if(TracksOnCount > 0) {
			RegionsHtml += "<br /> or doing ";
		}
	}
	//Fix IE problem where Asian Spice hangs on the end without an "x"	
	/*
	if (RegionsOnCount == 4) {
		RegionsHtml = RegionsHtml.replace(
			"<span class=\"Filter\"><a href=\"javascript:void(0);\" onclick=\"Filter_Remove('Asian Spice", 
			"<br /><span class=\"Filter\"><a href=\"javascript:void(0);\" onclick=\"Filter_Remove('Asian Spice"																								  		);
	}
	*/
	FilterHtml = RegionsHtml + TracksHtml;
	FilterDrop.html(FilterHtml);
}

function Filter_ClearAll () {
	jQuery.each(Filters.Tracks, function (index, value) {
		this.Active = false;
	});
	jQuery.each(Filters.Regions, function (index, value) {
		this.Active = false;
	});
	filtered = false;
	UpdateFilterHtml();
	UpdateDisplay();
	Reposition();
}