/************************************************************
 *		    Author: Neil Preedy (www.npreedy.co.uk)			*
 *		Created on: Thursday 15th February 2007       		*
 *	   Modified on:	Thursday 22nd February 2007				*
 *	   	   Version:	00.05.03	(unreleased)				*
 *					Copyright(C)							*
 *															*
 *		  00.05.04:	Persitant sort order of columns			*
 *					using cookies							*
 *															*
 * 		  00.05.03: Handle History in location search		*
 *					[removed as part of 00.05.04]			*
 *															*
 * 		  00.05.02: Created NPtable object. 				*
 *		  			As a tidy up.							*
 *															*
 ***********************************************************/

// Initialise global variables.

// Used by the image roll over.
var NPprojectsDirectory = "./Projects";	// Directory where the projects are held.
var NPprojectImageName = "Highlight.jpg" // Name of the image in the project directory.
var NPprojectImagesDirectory = "Images"		// Directory where the images are stored in the projects.


var NPtableHeaderId = "ProjectListHead";
var NPtableBodyId = "ProjectListData";
var NPsortedColumn; // Initial value must be different from first column to be sorted.

var NPtable = {};		// Define the table object.
{
	NPtable.Header = {};
	NPtable.Header.Obj = document.getElementById(NPtableHeaderId);
	NPtable.Header.Titles = NPtable.Header.Obj.getElementsByTagName("TD");

	NPtable.Data = {};
	NPtable.Data.Obj = document.getElementById(NPtableBodyId);
 	NPtable.Data.Rows = new Array ();
	NPtable.Data.Index = new Array ();
}

// initialise the table object arrays.
NPnumberOfTableRows = NPtable.Data.Obj.getElementsByTagName("TR").length;

for (var i = 0; i < NPnumberOfTableRows; i++) 
{
	//		Fix the table list as the table items get moved around.
	NPtable.Data.Rows[i] = NPtable.Data.Obj.getElementsByTagName("TR")[i];

	//		Intialise the index.
	NPtable.Data.Index[i] = i;
}



//Check for Cookies
var NPcookies = {};
NPgetCookies();

if (NPcookies.ProjectListSortColumn !== undefined)
{
	if (NPcookies.ProjectListSortDirection == "Ascending")
	{
		NPsortData(NPcookies.ProjectListSortColumn);	
	}	
	NPsortData(NPcookies.ProjectListSortColumn);
}
else // No previous visit to this page stored.
{
	NPsortData(0);
	NPsortData(0);
}



/****************************************
 *				Sort Data				*
 ****************************************/
function NPsortData(NPsortColumnSelected)
{

	if ((typeof NPsortedColumn !== "undefined") && (NPsortColumnSelected == NPsortedColumn))
	{ // Column is already sorted so Reverse direction.

		NPtable.Data.Index.reverse();

		// flip sort column icon
		var NPtitleClassName = NPtable.Header.Titles[NPsortedColumn].className;

		if (NPtitleClassName.indexOf("Ascending") >= 0)
		{
			NPsortedColumnIndicator (NPsortedColumn, "none")			// remove Arrow indicator
			NPsortedColumnIndicator(NPsortedColumn,"descending");
		}
		else if ( NPtitleClassName.indexOf("Descending") >= 0 )
		
		{
			NPsortedColumnIndicator (NPsortedColumn, "none")			// remove Arrow indicator
			NPsortedColumnIndicator(NPsortedColumn,"ascending");
		}
	}
	else
	{ // Unsorted column so Sort.
		if (typeof NPsortedColumn !== "undefined")
		{
			NPsortedColumnIndicator (NPsortedColumn, "none")			// remove Arrow indicator
		}
		NPsortedColumn = NPsortColumnSelected;
		NPtable.Data.Index.sort(NPsortOrder);								// sort column
		NPsortedColumnIndicator (NPsortedColumn, "descending")		// add Arrow inidicator
	}
	NPdisplayData();
}


function NPsortOrder(NPa, NPb)
{
	// Get the text of the first element.
	var NPelement_A = NPtable.Data.Rows[NPa].getElementsByTagName("TD")[NPsortedColumn].firstChild;

	if (NPelement_A.nodeType == 1)		// Look out for Links within the Table data.
	{
		NPelement_A = NPelement_A.firstChild;
	}
	var NPvalue_A = NPelement_A.nodeValue;		// Text of the Table data from Element A
	
	
	// Get the text of the second element.
	var NPelement_B = NPtable.Data.Rows[NPb].getElementsByTagName("TD")[NPsortedColumn].firstChild

	if (NPelement_B.nodeType == 1)		// Look out for Links within the Table data.
	{
		NPelement_B = NPelement_B.firstChild;
	}
	var NPvalue_B = NPelement_B.nodeValue;		// Text of the Table data from Element B
	

	// Determine the sort order.
	if (NPvalue_A < NPvalue_B)
	{
		return -1;
	}
	else if (NPvalue_A > NPvalue_B)
	{
		return 1;
	}
	else
	{
		return 0; // Values are equal
	}

}


/****************************************
 *		  Sorted Column Indicator		*
 ****************************************/
function NPsortedColumnIndicator (NPcolumn, NPdirection)
{
	var itemId = NPtable.Header.Titles[NPcolumn].id;

	switch (NPdirection)
	{
		case "ascending":
		{
			NPaddClassNameToId(itemId, "Ascending");
			NPcookies.ProjectListSortColumn = NPcolumn;
			NPcookies.ProjectListSortDirection = "Ascending";
			NPupdateCookies();
			break;
		}
		case "descending":
		{
			NPaddClassNameToId(itemId, "Descending");
			NPcookies.ProjectListSortColumn = NPcolumn;
			NPcookies.ProjectListSortDirection = "Descending";
			NPupdateCookies();
			break;
		}
		case "none":
		{
			NPremoveClassNameFromId(itemId, "Ascending");
			NPremoveClassNameFromId(itemId, "Descending");
			break;
		}
	}
	
				
}


/****************************************
 *			Display the Data			*
 ****************************************/
function NPdisplayData()
{
	for (var y = 0; y < NPtable.Data.Rows.length ; y++)
	{
		if ( (y % 2) != 0 ) // Highlight Odd and Even rows.
		{
			NPtable.Data.Rows[NPtable.Data.Index[y]].className = "Even";
		}
		else
		{
			NPtable.Data.Rows[NPtable.Data.Index[y]].className = "Odd";			
		}

		NPtable.Data.Obj.appendChild(NPtable.Data.Rows[NPtable.Data.Index[y]]);
	}
}


/****************************************
 *			Mouse Over					*
 ****************************************/
function NPhighlight(NPitemId)
{
	NPaddClassNameToId(NPitemId,"Highlighted");
}


/****************************************
 *			Mouse Out					*
 ****************************************/
function NPunHighlight(NPitemId)
{
	NPremoveClassNameFromId(NPitemId,"Highlighted");
}

function NPaddClassNameToId(NPitemId, NPitemClassName)
{
	NPitemObject = document.getElementById(NPitemId);
	NPitemObject.className += " " + NPitemClassName;
}

function NPremoveClassNameFromId(NPitemId, NPitemClassName)
{
	NPitemObject = document.getElementById(NPitemId);
	NPoldClassName = NPitemObject.className;
	NPitemObject.className = NPoldClassName.replace(" "+ NPitemClassName, "");
	/*
			The above statement may need to be altered to include if the NPitemClassName
			does not include a space before hand i.e. its the first class in the list.
			N.P. 2007-02-25
	*/
}


/****************************************
 *			Roll Over for Projects		*
 ****************************************/
function NPProjectImageChange(NPprojectName, NPprojectDescription)
{
	document.images.ProjectImage.src = NPprojectsDirectory + "/" + NPprojectName + "/" + NPprojectImagesDirectory + "/" + NPprojectImageName;
	document.images.ProjectImage.alt = NPprojectDescription;
}


function NPgetCookies()
{
//	NPcookies.ProjectListSortColumn = 3;
//	NPcookies.ProjectListSortDirection = "Ascending";

	if (document.cookie)
	{
		// grab those cookies
		var NPcurrentCookies = document.cookie
		var NPcookieArray = NPcurrentCookies.split("; ");
		for (var i=0; i<NPcookieArray.length; i++)
		{
			var NPsingleCookie = NPcookieArray[i].split("=");
			NPcookies[NPsingleCookie[0]] = NPsingleCookie[1];
		}
		
		var listofcookies
		for (var cookieName in NPcookies)
		{
			listofcookies += cookieName + " ";
		}
	}

	var	NPallCookies = document.cookie;
}

function NPupdateCookies()
{
	for (var cookieName in NPcookies)
	{
		document.cookie = cookieName + "=" + NPcookies[cookieName] + ";"
		
	}	
}