//common pluck search functions
//requries: Pluck SiteLife objects returned here as searchResult
var skyplayerSearch = function() {

	//private functions
	//set and write individual forums post from DAAPI search result - discussions XHTML
	function _writeForumsSearchResult(searchResult) {
		var searchResultHTML = "";
		if(searchResult) {
			searchResultHTML += "<div class='postContainer'><div class='postTitleTable'><img src='" + pluckUtils.IMAGEPATH + "/comment.gif' alt='' /><div class='titleInfo'><span class='postTitle'>" + searchResult.PostTitle + "<\/span><span class='postInfo'>posted at " + pluckUtils.formatDateStamp(searchResult.LastUpdated) + "<\/span><\/div><\/div>";
			searchResultHTML += "<div class='postUser'><a href='" + searchResult.LiteUser.PersonaUrl + "' title='" + searchResult.LiteUser.DisplayName + "'><img src='" + searchResult.LiteUser.ImageUrl + "' alt='' \/><\/a><a class='postUserTitle' href='" + searchResult.LiteUser.PersonaUrl + "' title='" + searchResult.LiteUser.DisplayName + "'>" + searchResult.LiteUser.DisplayName + "<\/a><div class='postUserInfo'><span>First post: " + pluckUtils.formatDateStamp(searchResult.UserFirstPostDate) + "<\/span><span>Last post: " + pluckUtils.formatDateStamp(searchResult.UserLastPostDate) + "<\/span><span>Total posts: " + searchResult.UserTotalPosts + "<\/span><\/div><\/div>";
			searchResultHTML += "<div class='postBody'><p>" + searchResult.PostBody + "<\/p><\/div>";
			searchResultHTML += "<\/div>";
			searchResultHTML += "<div class='postLink'><img src='" + pluckUtils.IMAGEPATH + "/reply_to_post.gif' alt='' /\/><a href='" + searchResult.PostUrl + "'>Go to post<\/a><\/div>";
			return searchResultHTML;
		}
	};
	
	//writes blog post DAAPI search results
	function _writeBlogPostsSearchResults(searchResult, searchType , textFieldValue) {		
		var numOfResultsRequested = "10";
		var searchResultsObj = searchResult.Responses[0].SearchResult;
		var numberOfResults = searchResultsObj.NumberOfSearchResults;
		var numberPerPage = searchResultsObj.NumberPerPage;
		var blogPostsContainer = document.getElementById('blogpostContainer');
		var paginationResultsHTML = "";
		var paginationResults = "";
		var searchResultsHTML = "";
		
		if(parseInt(numberOfResults) != 0) {
			
			for (var i = 0; i < searchResultsObj.SearchResults.length; i++) {
				var searchResult = searchResultsObj.SearchResults[i];
				searchResultsHTML += _writeBlogPostsSearchResult(searchResult);
			}
			
			if (parseInt(numberOfResults) > parseInt(numberPerPage)) {
				paginationResults = _paginate(searchResultsObj, searchType, textFieldValue, numOfResultsRequested);
				paginationResultsHTML = "<div class='hr'><\/div><div id='paging'>" + paginationResults + "<\/div>";
				searchResultsHTML += paginationResultsHTML;
			}
			
			blogPostsContainer.innerHTML = searchResultsHTML;
			if(document.getElementById('paging')) {
				document.getElementById('paging').style.display = "block";
			}
			var pageTitle = document.getElementById('pageTitle');
			var pageTitleHTML = "Search results:";
			pageTitle.innerHTML = pageTitleHTML;
			var breadCrumbContainer = document.getElementById('breadcrumbContainer');
			var breadCrumbHTML = "<p class='breadcrumb bold'><a href='" + pluckUtils.SITE_URL + "home' title='Sky Player Blog home'>Sky Player Blog<\/a><\/p><img src='" + pluckUtils.IMAGEPATH + "/breadcrumb_icon.jpg' alt='' \/><p class='breadcrumb'>Search results for '" + textFieldValue + "'<\/p>";
			breadCrumbContainer.innerHTML = breadCrumbHTML;
		} else {
			alert("There are no results found for your search.");
		}		
	};
	
	//set and write individual blog post from DAAPI search result - discussions XHTML
	function _writeBlogPostsSearchResult(searchResult) {
		var searchResultHTML = "";
		if(searchResult) {
			var postBody = pluckUtils.adjustVidWidth(searchResult.PostBody, 427);
			searchResultHTML += "<div class='hr'><\/div><div class='blogPost'>";
			searchResultHTML += "<h2><a title='" + searchResult.PostTitle + "' href='" + searchResult.Url + "'>" + searchResult.PostTitle + "<\/a><\/h2>";
			searchResultHTML += "<p class='blogInfo'><span>" + pluckUtils.formatDateStamp(searchResult.PostDate) + "<\/span> - Written by <span class='blogPostAuthor'><a title='profile for " + searchResult.PostAuthor.DisplayName + "' href='" + searchResult.PostAuthor.PersonaUrl + "'>" + searchResult.PostAuthor.DisplayName + "<\/a><\/span><\/p>";
			searchResultHTML +=	postBody;
			searchResultHTML += "<\/div>";
			return searchResultHTML;
		}
	};
	
	//add pagination if required - any searchAction search type (blogs, forums, etc))
	function _paginate(searchResult, searchType, textFieldValue, numOfResultsRequested) {
		currentPage = parseInt(searchResult.OnPage);
		var pages = Math.ceil(searchResult.NumberOfSearchResults / searchResult.NumberPerPage);
		var prevPage = (currentPage > 1) ? currentPage-1 : currentPage;
	 	var nextPage = (currentPage < pages) ? currentPage+1 : currentPage;
		var pageNumbers = '';
		var pageNumber = '';
		if (pages !=1) {	
			var x = "";
			var y = "";
			var z = "";
			maxPagesShown = pages - 7;
			if(pages>8) {
				pagesShown = currentPage + 7;
			} else {
				pagesShown = pages;
			}
		
			if(currentPage<=maxPagesShown || maxPagesShown<0) {
				for (x=searchResult.OnPage; x<=pagesShown; x++) {
					if(x==searchResult.OnPage) {
						pageNumbers += '<strong>' + x + ' </strong>';
					} else {
						pageNumbers += '<a href=\"#searchresult\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', ' + x + ', \'' + textFieldValue + '\');\">' + x + '</a> ';
					}
				}
			}
				
			if(currentPage>maxPagesShown) {
				for (y=searchResult.OnPage; y>=maxPagesShown; y--) {
					if(y==searchResult.OnPage) {
						pageCurrent = '<strong>' + y + ' </strong>';
					} else {
						if(y>0) {
							pageNumber = '<a href=\"#searchresult\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', ' + y + ', \'' + textFieldValue + '\');\">' + y + '</a> ';
							pageNumber += pageNumbers;
						}
					}
					pageNumbers = pageNumber;
				}
				pageNumbers += pageCurrent;
				for (z=searchResult.OnPage; z<=pages; z++) {
					if(z==searchResult.OnPage) {
						pageNumbers = pageNumbers;
					} else {
						pageNumbers += '<a href=\"#searchresult\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', ' + z + ', \'' + textFieldValue + '\');\">' + z + '</a> ';
					}
				}
			}		
		}
		var firstComments = (currentPage > 1) ? '<a class=\"paginationPrevious\" href=\"#previous\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', 1, \'' + textFieldValue + '\');\">First</a>' : '';
		var prevComments = (currentPage > 1) ? '<a class=\"paginationPrevious\" href=\"#previous\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', '+ prevPage+', \'' + textFieldValue + '\');\">&lt;&lt;</a>' : '';
		var nextComments = (currentPage < pages) ? '<a href=\"#next\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', '+ nextPage +', \'' + textFieldValue + '\');\">&gt;&gt;</a>' : '';
		var lastComments = (currentPage < pages) ? '<a class=\"paginationLast\" href=\"#last\" onclick=\"pluckSearch.searchPluck(arguments[0], \'' + searchType + '\', ' + numOfResultsRequested + ', '+ pages +', \'' + textFieldValue + '\');\">Last</a>' : '';
		var paginationHTML = firstComments + pageNumbers + lastComments + "<div class='hr'><\/div>";
		return paginationHTML;
	}
	
	return {
	
		//writes forum DAAPI search results
		writeForumsSearchResults : function(searchResult) {
			var numOfResultsRequested = "10";
			var searchResultsObj = searchResult.Responses[0].SearchResult;
			var searchType = searchResultsObj.SearchType; 
			var textFieldValue = searchResultsObj.SearchString;
			var numberOfResults = searchResultsObj.NumberOfSearchResults;
			var numberPerPage = searchResultsObj.NumberPerPage;
			var forumContainer = document.getElementById('forumContainer');
			var paginationResultsHTML = "";
			var paginationResults = "";
			var whichPage = 0;
			
			if(parseInt(numberOfResults) != 0) {
				var searchResultsHTML = "<div class='Forums_Breadcrumbs'><h2><a href='" + pluckUtils.ROOT + "forums' title='Categories'>Categories<\/a> » Forum posts search results<\/h2><\/div>";
				
				if (parseInt(numberOfResults) > parseInt(numberPerPage)) {
					paginationResults = _paginate(searchResultsObj, searchType, textFieldValue, numOfResultsRequested);
					paginationResultsHTML = "<div class='searchPagination '><div class='Forums_Paginator'>" + paginationResults + "<\/div><\/div>";
					searchResultsHTML += paginationResultsHTML;
				}
				
				for (var i = 0; i < searchResultsObj.SearchResults.length; i++) {
					var searchResult = searchResultsObj.SearchResults[i];
					searchResultsHTML += _writeForumsSearchResult(searchResult);
				}
				
				if (parseInt(numberOfResults) > parseInt(numberPerPage)) {
					searchResultsHTML += paginationResultsHTML;
				}
				
				forumContainer.innerHTML = searchResultsHTML;
				whichPage = parseInt(searchResultsObj.OnPage);
			} else {
				alert("There are no results found for your search.");
				textFieldValue = "No Results Found/" + textFieldValue;
			}
			//save the search view
			pluckUtils.recordForumSearchView(textFieldValue, whichPage);		
		},
		//if Enter key pressed in blog search box, initiate search
		checkEnterBlogs : function(e) {
			if(e && e.which) { //if which property of event object is supported (NN4)
				e = e;
				characterCode = e.which; //character code is contained in NN4's which property
			} else {
				e = event;
				characterCode = e.keyCode; //character code is contained in IE's keyCode property
			}
			if(characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
				pluckSearch.getSearchURL('searchBlogsText', 'blogs');
				return false;
			} else {
				return true;
			}
		},
		//if Enter key pressed in forums search box, initiate search
		checkEnterForums : function(e) {
			if(e && e.which) { //if which property of event object is supported (NN4)
				e = e;
				characterCode = e.which; //character code is contained in NN4's which property
			} else {
				e = event;
				characterCode = e.keyCode; //character code is contained in IE's keyCode property
			}
			if(characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
				pluckSearch.getSearchString('ForumPost', 10, 1, 'searchForumsText');
				return false;
			} else {
				return true;
			}
		},
		//checks text field onblur - and populates it appropriately
		checkTextField : function(textEle) {
			if(textEle.value === "") {
				textEle.value = "Enter text here";
			}
		}
	}
}();