var INCLUDES_PATH = "/tale/components/includes/";

/**
 *
 */
$(function(){

	// User Preference: Text size.
	$.getJSON(INCLUDES_PATH + "getUserPreference.html", { optionName: "global_textSize" }, function(data) {
		if (data.optionValue != null)
		{
			$("body").addClass(data.optionValue);
		}
	});
	
	// User Preference: Preferred MyTaLe tab.
	if ($(".my_info").length > 0)
	{
		$.getJSON(INCLUDES_PATH + "getUserPreference.html", { optionName: "mySavedItems_defaultTab" }, function(data) {
			var $target = $("a[href='" + data.optionValue + "']").trigger("click");
		});
	}
	
	// Set User preference actions.
	$("a[href='#myResources'], a[href='#myLists'], a[href='#mySearches']").live("click", function() {
		$.post(INCLUDES_PATH + "setUserPreference.html", { optionName: "mySavedItems_defaultTab", optionValue: $(this).attr("href") });
	});
	
	// Load the tag clouds.
	$("#inFocus ul.tabs a").click(function(e) {
		var current = $(e.target).attr("href"),
				cloud = $("#inFocus").find(current).find("div.left div"),
				url = "/tale/components/includes/focusedTagCloud.html";
				
		switch (cloud.attr("rel"))
		{
			case "creative_arts":
				url += "?learningArea=Creative+Arts";
				break;
		
			case "cross_curriculum":
				break;
				
			case "english":
				url += "?learningArea=English";
				break;
				
			case "hsie":
				url += "?learningArea=HSIE";
				break;
				
			case "languages":
				url += "?learningArea=Languages";
				break;
				
			case "mathematics":
				url += "?learningArea=Mathematics";
				break;
				
			case "pdhpe":
				url += "?learningArea=PDHPE";
				break;
				
			case "science":
				url += "?learningArea=Science+%26+Technology";
				break;
				
			case "tas":
				url += "?learningArea=Technology";
				break;
		}
		
		cloud.load(url);
	});
	$("#inFocus ul.tabs li.current a").click();
	
	// Add email validation to the emailResources popup.
	$("#email").live("blur", function() { return DET.tale.validation.validateEmails($(this).val()); });
	
	// Jargon Buster.
	if ($("#searchJB").length > 0)
	{
		new DET.tale.ui.AjaxLookup("searchJB", "/tale/components/includes/jargonBusterSearch.html");
		
		$("#searchJB").focus().parent("form").bind("submit", function(e) {
			var value = $("#searchJB").val();
			if ($.trim(value) != "")
			{
				var lop = (new String(window.location.href).indexOf("/preview/") != -1) ? "preview" : "live",
						anchor = value.toLowerCase()
								.replace(/[^a-zA-Z\d]/g,"_")
								.replace(/_+/g,"_")
								.replace(/_+$/g,""),
						loc = "/tale/" + lop + "/global/jargon_buster/" + 
								value.substring(0, 1).toLowerCase() + "_jargonbuster.jsp?" + 
								"muid=" + $("#muid").val() + "&taleUserId=" + $("#taleUserId").val() + "#" + anchor;
				e.preventDefault();
				window.location.href = loc;
			}
		});
	}
	
	$(".trap #copyUrl").click(function(e) {
		e.preventDefault();
		if(window.clipboardData)  
		{  
			window.clipboardData.setData("text", $("#trapUrl").val());  
		}  
	});
});

/**
 * Search page functionality
 */
addSearchFilter = function(name, value)
{
	var filters = jQuery("#filters").val();
	if (filters.indexOf(name + "=") != -1)
	{
		var start = filters.indexOf(name + "=") + name.length + 1;
		var end = filters.indexOf(";", start);
		var values = filters.substr(start, end - start);
		values += "," + value;
		filters = filters.substr(0, start) + values + filters.substr(end);
	}
	else
	{
		filters += name + "=" + value + ";";
	}
	jQuery("#filters").val(filters);
	
	var postData = { action: "refine", filters: filters };
	getSearchResults(postData);
};

getSearchResults = function(postData)
{
	pageTracker._trackPageview(INCLUDES_PATH + "searchResults.html");
	// TODO: Check for errors.
	$("#searchResults").html("<br/><img alt=\"Loading\" height=\"52\" src=\"/tale/live/media/images/loading_white.gif\" width=\"52\"/>")
			.load(INCLUDES_PATH + "searchResults.html", postData, function(responseText, status, request) {
				if (status == "success" || status == "notmodified")
				{
					var tagFilter = $(".refineTags"),
							li = tagFilter.find("li");
					li.each(function(i) {
						if (i > 9)
						{
							$(this).hide();
						}
					});
					if (li.length > 10)
					{
						$("<a href=\"#moreTags\">See more...</a>").click(function(e) {
							$(this).hide().remove();
							tagFilter.find("li:hidden").show();	
							e.preventDefault();
						}).appendTo(tagFilter);
					}
					collapseRefineHeadings();
				}
				else
				{
					$("#searchResults").html("<br/><h1>TaLe Search is currently unavailable - please try again later</h1>");
				}
			});
};

refreshResource = function(uid)
{
	var postData = { uid: uid };
	
	// Refresh the Resource.
	jQuery.getJSON(INCLUDES_PATH + "getResourceInfo.html", postData,
			function(data)
			{
				if (typeof data != "undefined")
				{
					var index = parseInt(jQuery("[value=" + uid + "]").attr("id")
							.replace("resource", "").replace("_uid", ""));
					
					// Tags.
					var tags = "";
					for (var i = 0; i < data.myTags.length; i++)
					{
						tags += ((tags == "") ? "" : " ") + "<span class=\"myTag\">" + 
								data.myTags[i] + "</span>";
					}
					for (var i = 0; i < data.otherTags.length; i++)
					{
						tags += ((tags == "") ? "" : " ") + data.otherTags[i];
					}
					if (tags == "")
					{
						tags = "No tags";
					}
					jQuery("#resource" + index + "_tags").html("Tags: " + tags);
				
					// Actions.
					var actions = (data.isBookmarkedByUser) ? 
							"<a href=\"/tale/components/editResourcePopup.html?uid=" + 
									postData.uid + "\" rel=\"modal\" class=\"save\">Edit</a>" : 
							"<a href=\"/tale/components/saveResourcePopup.html?uid=" + 
									postData.uid + "\" rel=\"modal\" class=\"save\">Add to my saved items</a>";
					jQuery("#resource" + index + "_actions").html(actions);
				
					// Popularity.
					jQuery("#resource" + index + "_popularity").html(data.popularity);
					
					// Notes.
					jQuery("#resource" + index + "_notes").remove();
					var notes = "<strong>My notes</strong> <span>" + 
							((data.notesPublic) ? "(public)" : "(private)") + 
							"</span> <em>" + data.notes + "</em>";
					var $notes = jQuery(document.createElement("p"));
					$notes.attr("id", "resource" + index + "_notes");
					$notes.addClass("my_notes");
					$notes.html(notes);
					jQuery("#resource" + index).after($notes);
				}
			});
};


	
removeSearchFilter = function(name, value)
{		
	var filters = jQuery("#filters").val();	
	var start = filters.indexOf(name + "=") + name.length + 1;
	var end = filters.indexOf(";", start);
	var values = filters.substr(start, end - start);
	
	if (values.indexOf(",") != -1)
	{
		if (values.indexOf(value) == 0)
		{
			values = values.replace(value + ",", "");
		}
		else
		{
			values = values.replace("," + value, "");
		}
		filters = filters.substr(0, start) + values + filters.substr(end);
	}
	else
	{
		filters = filters.replace(name + "=" + value + ";", "");
	}
	
	var postData = { action: "refine", filters: filters };
	getSearchResults(postData);
	
	jQuery("#filters").val(filters);
};

setResultsPage = function(pageNumber)
{
	var postData = { action: "navigate", pageNumber: pageNumber };
	getSearchResults(postData);
};

setResultsPerPage = function(resultsPerPage)
{
	var postData = 
			{ 
				action: "navigate", 
				resultsPerPage: resultsPerPage,
				pageNumber: 1
			};
	jQuery("#resultsPerPage").val(resultsPerPage);
	getSearchResults(postData);
};

sortResults = function(sortValue)
{
	var postData = { action: "navigate", sortRequest: sortValue };
	getSearchResults(postData);
};


/**
 * My Resources functionality.
 */
var orderBy = "";
var filterBy = "";
var pageNo = 1;
var noResults = 10;

addToFilter = function(tagName)
{
	if (filterBy.indexOf(tagName) == -1)
	{
		if (filterBy != "")
		{
			filterBy += ",";
		}
		filterBy += tagName;
		pageNo = 1;
		doRefresh();
	}
};

clearFilter = function()
{
	filterBy = "";
	doRefresh();
};

doOrderBy = function(field)
{
	orderBy = field;
	doRefresh();
};

doRefresh = function()
{
	var url = window.location.href;
	var queryString = (url.indexOf("?") != -1) ? url.substring(url.indexOf("?") + 1) : "";
	var params = queryString.split("&");
	var oldParams = new Array();
	for (var i = 0; i < params.length; i++)
	{
		if (!params[i].startsWith("oB") && !params[i].startsWith("fB") && 
				!params[i].startsWith("pN") && !params[i].startsWith("nR"))
		{
			oldParams[oldParams.length] = params[i];
		}
	}
	var qs = "";
	if (orderBy != "")
	{
		qs = "oB=" + orderBy;
	}
	if (filterBy != "")
	{
		qs += ((qs == "") ? "fB=" : "&fB=") + filterBy; 
	}
	if (pageNo != "")
	{
		qs += ((qs == "") ? "pN=" : "&pN=") + pageNo;
	}
	if (noResults != 10)
	{
		qs += ((qs == "") ? "nR=" : "&nR=") + noResults;
	}
	for (var i = 0; i < oldParams.length; i++)
	{
		qs += ((qs == "") ? "" : "&") + oldParams[i];
	}
	var page = url.substring(url.lastIndexOf("/") + 1, (url.indexOf("?") != -1) ? url.indexOf("?") : url.length);
	window.location.href = page + "?" + qs;
};

removeFromFilter = function(tagName)
{
	if (filterBy.indexOf(tagName) == 0 && filterBy.indexOf(",") == -1)
	{
		filterBy = filterBy.replace(tagName, "");
	}
	else if (filterBy.indexOf(tagName) == 0)
	{
		filterBy = filterBy.replace(tagName + ",", "");
	}
	else
	{
		filterBy = filterBy.replace("," + tagName, "");
	}
	doRefresh();
};

setPageNo = function(p)
{
	pageNo = p;
	doRefresh();
};
	
setNoResourcePages = function(nR)
{
	noResults = nR;
	doRefresh();
};

/**
 * My Tags functionality.
 */
addTagFilter = function(filter)
{
	if (filter != "All")
	{
		window.location.href = "myTags.jsp?filter=" + filter;
	}
	else
	{
		window.location.href = "myTags.jsp";
	}
};

/**
	 * TRAP functionality.
	 * This needs to be done before the tabs are built.
	 */
$("#notes_from_other_users").each(function() {
	var otherNotes = $(this),
			pagination = otherNotes.find("ul.pagination"),
			currentPage = 1,
			pageCount = pagination.find("li").length - 
					(pagination.find("li.prev").length) - 
					(pagination.find("li.next").length);
	
	resetPagination = function()
	{
		pagination.find("li").each(function() {
			var li = $(this);
			if (!li.hasClass("prev") && !li.hasClass("next"))
			{
				var no = parseInt(li.find("a, span").html());
				if (no == currentPage)
				{
					li.html("<span>" + no + "</span>");
				}
				else
				{
					li.find("a, span").remove().end().append($("<a href=\"#\">" + no + "</a>"));
					li.find("a").click(function(e) {
						e.preventDefault();
						setPage(no);
					});
				}
			}
		});
		pagination.find(".prev").each(function() {
			if (currentPage == 1)
			{
				$(this).hide();
			}
			else
			{
				$(this).show();
			}
		});
		pagination.find(".next").each(function() {
			if (pageCount <= 1 || pageCount == currentPage) 
			{
				$(this).hide();
			}
			else
			{
				$(this).show();
			}
		});
	};
			
	setPage = function(pageNo)
	{
		currentPage = pageNo;
		otherNotes.find(".notesPage").fadeOut(200).end()
				.find("#notesPage_" + pageNo).stop().fadeIn(200);
		resetPagination();
	};
	
	pagination.find("li.prev").click(function(e) {
		e.preventDefault();
		setPage(currentPage - 1);	
	}).end().find("li.next").click(function(e) {
		e.preventDefault();
		setPage(currentPage + 1);
	});
	setPage(1);
});
