﻿var data = null;
var start=0;    /// start from
var count=0;    /// Total Count
var limit=20;    /// Page Size
var webServiceUrl = "../webservices/noticeboardservice2.aspx";
var categoryCount;
var subcategoryCount;
var maxCategories = 20;
var maxSubcategories = 50;


function sendNoticeboardRequest(query, username)
{
	if(query.indexOf("google") != -1)
		window.open("http://globalgossip.com/search/");
	var postData = "q=" + escape(query) + "&o=" + (-(new Date().getTimezoneOffset() / 60.0)) + "&u=" + username;
	$get("imgWait").style.display="inline";
	ajaxpack.getAjaxRequest(webServiceUrl, postData, processGetPost, "json");	
}

function processGetPost()
{
	var myajax;
	var myajax=ajaxpack.ajaxobj;
	var myfiletype=ajaxpack.filetype;
	if (myajax.readyState == 4)
	{ //if request of file completed
		if (myajax.status==200 || window.location.href.indexOf("http")==-1)
		{ //if request was successful or running script locally	
	    
			if (myfiletype=="json")
			{		
				data = eval('(' + myajax.responseText + ')');
				
				// get category counts
				categoryCount = new Object;
				subcategoryCount = new Object;
				categoryCount[0] = 0;
				for (var i=0; i < data.notices.length; i++)
				{
					categoryCount[0]++;
					if(!categoryCount[data.notices[i].c])
						categoryCount[data.notices[i].c] = 0;
					categoryCount[data.notices[i].c]++;
					
					if(data.notices[i].sc)
					{
						if(!subcategoryCount[data.notices[i].sc])
							subcategoryCount[data.notices[i].sc] = 0;
						subcategoryCount[data.notices[i].sc]++;
					}
				}
				
				
				// update legend
				var link;
				var cell;
				var countSpan;
				
				updateCategoryCounts();
				updateSubCategoryCounts();
				setCategoryStyles();
				setSubcategoryStyles();
				
				// update searched for
				var searchedAll = true;
				var searchedCategory = $get('searchedCategory');
				var searchedLocation = $get('searchedLocation');
				var searchedKeywords = $get('searchedKeywords');
				var searchedUsername = $get('searchedUsername');

				if(data.searchedCategory != '')
				{
					searchedCategory.innerHTML = " <strong>" + data.searchedCategory + "</strong> ";
					searchedAll = false;
				}
				else
				{
					searchedCategory.innerHTML = " <strong>all notices</strong> ";
				}
				
				if(data.searchedLocation != '')
				{
					searchedLocation.innerHTML = ' in <strong>' + data.searchedLocation + '</strong>';
					searchedAll = false;
				}
				else
				{
					searchedLocation.innerHTML = ' from <strong>everywhere</strong>';
				}
				
				if(data.searchedKeywords != '')
				{
					searchedKeywords.innerHTML = ' containing the words <strong>' + data.searchedKeywords + '</strong>';
					searchedAll = false;
				}
				else
				{
					searchedKeywords.innerHTML = '';	
				}
					
				if(data.searchedUsername != '')
				{
					searchedUsername.innerHTML = ' by <strong>' + data.searchedUsername + '</strong>';
					searchedAll = false;
				}
				else
				{
					searchedUsername.innerHTML = '';
				}
				
				if(searchedAll)
				{
					$get('showAllLink').style.display = 'none';
				}
				else
				{
					$get('showAllLink').style.display = 'inline';
				}
				
					
				// show unfiltered results
				if(!data.subcategoryID)
				{
					filterCategory(data.categoryID);
				}
				else
				{
					highlightCategory(data.categoryID);
					showSubcategories(data.categoryID);
					filterSubcategory(data.subcategoryID);					
				}
				
				$get('imgWait').style.display = 'none';
				$get('headerText').style.display = 'inline';

			}	
			else if (myfiletype=="xml")
			{		
				var xmlDocument = myajax.responseXML;												
			}	
		}
	}
}


function getPagingHtml(count, limit, currentPage, scrollToTop, categoryID, subcategoryID)
{
	var p;
	var maxDisplayedPages = 10;
	//var n = 1;
	
	var strPaging = "";
	var doneDots = false;
	var lastPage = Math.ceil(count / limit);
	var firstDisplayedPage = Math.min(
		lastPage - (maxDisplayedPages - 2), 
		Math.max(currentPage - (maxDisplayedPages / 2) + 1, 1)
		);
	var lastDisplayedPage;
	if(firstDisplayedPage == 1)
		lastDisplayedPage = Math.min(maxDisplayedPages - 1, lastPage);
	else
		lastDisplayedPage = Math.min(firstDisplayedPage + maxDisplayedPages - 2, lastPage);
	
	if (currentPage > 1)
	{
		strPaging += "<a class='link-button' href='#' onclick='generateResultTable("
		 + (currentPage - 1) + ", " + categoryID + ", " + subcategoryID + "); "
		if(!scrollToTop)
			strPaging += "return false;"
		strPaging += "'>&lt; Back</a> "; 
	}
	else
	{
		strPaging+="<span class='link-button-disabled'>&lt; Back</span> ";
	}

	for(p = 1; p <= lastPage; p++)
	{
		if (currentPage == p)
		{
			strPaging+= "<span class='link-button-active'>" + p + "</span> ";
		}
		else
		{
			if(p == 1 || p == lastPage || (p >= firstDisplayedPage && p <= lastDisplayedPage))
			{
				strPaging+= "<a href='#' onclick='generateResultTable(" + p + ", " + categoryID + ", " + subcategoryID + ");";
				if(!scrollToTop)
					strPaging += "return false;"
				strPaging+= "' class='page'>" + p + "</a> ";
				doneDots = false;
			}
			else if(!doneDots)
			{
				strPaging += "... ";
				doneDots = true;
			}
		}
	}	
	
	if (currentPage < (count / limit))
	{ 
		strPaging += "<a class='link-button' href='#' onclick='generateResultTable("
			+ (currentPage + 1) + ", " + categoryID + ", " + subcategoryID + ");"
		if(!scrollToTop)
			strPaging += "return false;"
		strPaging += "'>Next &gt;</a>"; 
	}
	else
	{
		strPaging += "<span class='link-button-disabled'>Next &gt;</span> ";
	}
	return strPaging;
}


function generateResultTable(startTo, categoryID, subcategoryID)
{
	var pagingHtml = "";
	var notFound = $get('notFound');
	var rootElement = $get('noticeboard');
	var headerText = $get('headerText');
	var headerPaging = $get('headerPaging');
	var footerPaging = $get('footerPaging');
	var legend = $get('noticeboardLegend');
	
	rootElement.innerHTML = "";	
	if(categoryID != null && categoryID >= 0)
	{
		count = categoryCount[categoryID] ? categoryCount[categoryID] : 0;
	}
	else
	{
		count = subcategoryCount[subcategoryID] ? subcategoryCount[subcategoryID] : 0;
	}
	
	if(count <= limit)
	{
		headerPaging.innerHTML = "";
		footerPaging.innerHTML = "";
	}
			
	legend.style.display = 'block';
	if(count == 0)
	{
		notFound.style.display = 'block';
		legend.style.display = 'none';
	}
	else
	{
		notFound.style.display = 'none';	
		legend.style.display = 'block';
		
		var tableElement = document.createElement('table');
		tableElement.className = "data-table noticeboard-table";
		var theadElement = document.createElement('thead');
		tableElement.appendChild(theadElement);
		
		// header row
		var tableRow = document.createElement('tr');
		var tdElement = document.createElement('th');							
		tableRow.appendChild(tdElement);
		
		tdElement = document.createElement('th');	
		tdElement.appendChild(document.createTextNode("What"));					
		tableRow.appendChild(tdElement);
		
		tdElement = document.createElement('th');	
		tdElement.appendChild(document.createTextNode("Where"));					
		tableRow.appendChild(tdElement);
		
		tdElement = document.createElement('th');	
		tdElement.appendChild(document.createTextNode("Description"));					
		tableRow.appendChild(tdElement);
				
		tdElement = document.createElement('th');	
		tableRow.appendChild(tdElement);

		tdElement = document.createElement('th');	
		tableRow.appendChild(tdElement);
		
		theadElement.appendChild(tableRow);
		
		var tbodyElement = document.createElement('tbody');
		tableElement.appendChild(theadElement);
		
		start = limit*(startTo-1);
		var writtenCount = 0;
		var toSkip = start;
		for (var i=0; i<data.notices.length && writtenCount < limit && writtenCount < count; i++)
		{
			if( ((categoryID == 0 || (data.notices[i].c == categoryID)) && !subcategoryID)
				|| ((data.notices[i].sc && data.notices[i].sc == subcategoryID) && !categoryID))
			{
				if(toSkip > 0)
				{
					toSkip--;
				}
				else
				{
					beginLink = "<a href='viewnotice.aspx?n=" + data.notices[i].id + "' onclick='return false;'>"
					endLink = "</a>"
					iconCellClassName = "notice-" + data.notices[i].c + (writtenCount%2 == 1 ? "-alt" : "");
					rowClassName = "row" + (writtenCount%2 == 1 ? "-alt" : "");

					// row
					var tableRow;
					if(!isCrappyIE())
					{
						tableRow = document.createElement("tr");
						tableRow.setAttribute("onmouseout", "this.className='" + rowClassName + "'");
						tableRow.setAttribute("onmouseover", "this.className='fake-link " + iconCellClassName + "'");
						tableRow.setAttribute("onclick", "viewNotice(" + data.notices[i].id + ", '" + escape(data.notices[i].s) + "')");
					}
					else
					{
						// ie doesn't support setAttribute
						tableRow = document.createElement("<tr onmouseout=\"this.className='" + rowClassName 
							+ "'\" onmouseover=\"this.className='fake-link " + iconCellClassName 
							+ "'\" onclick=\"viewNotice(" + data.notices[i].id + ", '" + escape(data.notices[i].s) + "')\">");
					}
					tableRow.className = rowClassName;
		
					// icon cell
					var tdElement = document.createElement('td');
					tdElement.className = 'icon-cell ' + iconCellClassName;
					var iconElement = document.createElement('img');
					iconElement.className = "icon notice-category-icon-" + data.notices[i].c;
					iconElement.src = "../common/images/trans.gif";
					tdElement.appendChild(iconElement);
					tableRow.appendChild(tdElement);
					
					// subject cell
					tdElement = document.createElement('td');
					tdElement.className = 'subject-cell';
					var subjectElement = document.createElement("div");
					subjectElement.className = "notice-subject";
					subjectElement.innerHTML += " " + beginLink + data.notices[i].s + endLink;
					tdElement.appendChild(subjectElement);
					var elapsedElement = document.createElement("div");
					elapsedElement.className = "elapsed";
					elapsedElement.innerHTML = data.notices[i].a;
					tdElement.appendChild(elapsedElement);
					tableRow.appendChild(tdElement);
					
					// location cell
					tdElement = document.createElement('td');
					tdElement.className = 'where-cell';	
					locationParts = data.notices[i].l.split(', ');
					tdElement.innerHTML += "<span class='notice-location'>" + beginLink + locationParts[0] + endLink + "</span>";
					tdElement.appendChild(document.createElement('br'));
					if(locationParts[1])
						tdElement.innerHTML += beginLink + locationParts[1] + endLink;
					tableRow.appendChild(tdElement);
					
					// description cell
					tdElement = document.createElement('td');						
					tdElement.innerHTML += beginLink + data.notices[i].d + endLink;
					tableRow.appendChild(tdElement);
								
					// new cell
					tdElement = document.createElement('td');
					tdElement.className = 'new-cell';
					if(data.notices[i].n)
					{
						var newElement = document.createElement('span');
						newElement.className = 'new';
						newElement.innerHTML = 'NEW';
						tdElement.appendChild(newElement);
					}			
					tableRow.appendChild(tdElement);
					
					// image cell
						tdElement = document.createElement('td');
					tdElement.className = 'image-cell';
					if(data.notices[i].i != '')
					{
						var newElement = document.createElement('img');
						newElement.src = data.notices[i].i.replace('~', '..');
						tdElement.appendChild(newElement);
					}			
					tableRow.appendChild(tdElement);
					
					tbodyElement.appendChild(tableRow);						
					writtenCount++;
				}
			}
		}
		tableElement.appendChild(tbodyElement);
		rootElement.appendChild(tableElement);
		
		// paging
		if(count > limit)
		{
			headerPaging.innerHTML = getPagingHtml(count, limit, startTo, false, categoryID, subcategoryID);
			footerPaging.innerHTML = getPagingHtml(count, limit, startTo, true, categoryID, subcategoryID);
		}
		
		// highlight
		highlightSearchTerms(data.highlightTerms, false, rootElement);
	}
	
	if(onEndNoticeboardRequest)
		onEndNoticeboardRequest();
}


function filterCategory(categoryID)
{
	highlightCategory(categoryID);
	showSubcategories(categoryID);
	generateResultTable(1, categoryID, null);
	
}


function filterSubcategory(subCategoryID)
{
	highlightSubcategory(subCategoryID);
	generateResultTable(1, null, subCategoryID);
}


function setCategoryStyles()
{	
	for(var categoryID = 0; categoryID < maxCategories; categoryID++)
	{
		cell = $get('legend' + categoryID);
		categoryLink = $get('legendTitle' + categoryID);
		subcategoryLink = $get('legendSubTitle' + categoryID + '-0');
		
		if(cell)
		{	
			cell.className = 'notice-' + categoryID + ' noticeboard-tab';
			if(categoryCount[categoryID] > 0)
			{
				setElementOnClick(cell, 'filterCategory(' + categoryID + ')');
				if(subcategoryLink)
					setElementOnClick(subcategoryLink, 'filterCategory(' + categoryID + ')');
				categoryLink.className = 'fake-link';
			}
			else
			{
				setElementOnClick(cell, '');
				if(subcategoryLink)
					setElementOnClick(subcategoryLink, '');
				categoryLink.className = '';
			}
					
			
			if(subcategoryLink)
				subcategoryLink.className = categoryLink.className;
		}
	}
}


function setSubcategoryStyles()
{	
	for(var subcategoryID = 1; subcategoryID < maxSubcategories; subcategoryID++)
	{
		subcategoryLink = $get('legendSubTitle' + subcategoryID);		
		if(subcategoryLink)
		{	
			if(subcategoryCount[subcategoryID] > 0)
			{
				subcategoryLink.className = 'fake-link this-legend-title-clickable';
				setElementOnClick(subcategoryLink, 'filterSubcategory(' + subcategoryID + ')')
			}
			else
			{
				subcategoryLink.className = '';
				subcategoryLink.setAttribute('onclick', '');
			}
		}
	}
}



function updateCategoryCounts()
{
	for(var categoryID = 0; categoryID < maxCategories; categoryID++)
	{
		var thisCount = (categoryCount[categoryID] ? categoryCount[categoryID] : 0)
		// update main category count
		countSpan = $get('noticeCount' + categoryID);
		if(countSpan)
			countSpan.innerHTML = thisCount;
			
		// update sub-category "All" count - same as above
		countSpan = $get('noticeSubCount' + categoryID + '-0');	
		if(countSpan)
			countSpan.innerHTML = thisCount;
	}
}


function updateSubCategoryCounts()
{
	for(var subcategoryID = 1; subcategoryID < maxSubcategories; subcategoryID++)
	{
		var countSpan = $get('noticeSubCount' + subcategoryID);
		if(countSpan)
		{
			var count = (subcategoryCount[subcategoryID] ? subcategoryCount[subcategoryID] : 0);
			countSpan.innerHTML = count;
			var subItem = $get('legendSubItem' + subcategoryID);
			subItem.style.display = (count > 0 ? 'inline' : 'none');
		}
	}
}


function highlightCategory(categoryID)
{
	for(var i in categoryCount)
	{
		var cell = $get('legend' + i);
		if(cell)
		{
			if(i == categoryID)
			{
				cell.className = "notice-" + i + " noticeboard-tab noticeboard-tab-active";
				var subLink = $get('legendSubTitle' + i + '-0');
				if(subLink)
					subLink.style.fontWeight = 'bold';
			}
			else
			{
				cell.className = "notice-" + i + " noticeboard-tab";
			}
		}
	}
	
	for(var i = 1; i < maxSubcategories; i++)
	{
		var subcategoryLink = $get('legendSubTitle' + i);
		if(subcategoryLink)
		{
			subcategoryLink.style.fontWeight = 'normal';
		}
	}
}


function highlightSubcategory(subcategoryID)
{
	for(var i in categoryCount)
	{
		var allLink = $get('legendSubTitle' + i + '-0');
		if(allLink)
			allLink.style.fontWeight = 'normal';
	}
	
	for(var i = 1; i < maxSubcategories; i++)
	{
		var subcategoryLink = $get('legendSubTitle' + i);
		if(subcategoryLink)
		{
			if(i == subcategoryID)
			{
				subcategoryLink.style.fontWeight = 'bold';
			}
			else
			{
				subcategoryLink.style.fontWeight = 'normal';
			}
		}
	}
}
	

function showSubcategories(categoryID)
{
	for(var i = 0; i < maxCategories; i++)
	{
		var subcategoryRow = $get('legendSubRow' + i);
		if(subcategoryRow)
			subcategoryRow.style.display = (i == categoryID ? 'block' : 'none');
	}
}