var favourites = new Array();
var recentlyViewed = new Array();
var recentlyViewedLimit = 7;
var recentlyViewedTitleDOMElementSelector = ".favLink";
var widgetDOMElement;

jQuery(document).ready(function(){
	
	widgetDOMElement = jQuery('#favs');
	if (widgetDOMElement!=null)
	{
		renderUI();
	}
	
	loadCSS();
	
	loadFavouritesFromCookie();
	loadRecentlyViewedFromCookie();
	
	if (jQuery(recentlyViewedTitleDOMElementSelector).length>0)
	{
		var newRecentlyViewedTitle = jQuery(recentlyViewedTitleDOMElementSelector).html();
		var newRecentlyViewedUrl = document.location.href;
		addToRecentlyViewed(newRecentlyViewedTitle, newRecentlyViewedUrl);
	}
	
	
});


function loadCSS()
{
	jQuery("head").append("<link>");
	    css = jQuery("head").children(":last");
	    css.attr({
	      rel:  "stylesheet",
	      type: "text/css",
	      href: "http://ws3.netescape.co.uk/busExpress/ClientWidgets/favourites/favourites.css"
	    });
}



/*********************** FAVOURITES *************************/

function getFavouritesAsString()
{
	var outputString = "";
	for (var i=0; i<favourites.length; i++)
	{
		if (favourites[i]!=null)
		{
			outputString += favourites[i] + "|";
		}
	}
	return outputString;
}


function loadFavouritesFromString(str)
{
	favourites = null;
	favourites = new Array();
	
	var splitString = str.split('|');
	
	for (var i=0; i<splitString.length; i++)
	{
		var currentfav = splitString[i].split("@@");
		if (currentfav.length==2)
		addToFavourites(currentfav[0], currentfav[1]);
	}
}


function addToFavourites(title, url)
{
	var idx = favourites.indexOf(title + "@@" + url);
	if (idx < 0)
	{
		favourites.push(title + "@@" + url);
		saveFavouritesToCookie();
	}
	renderUI();
}

function removeFromFavourites(title, url)
{
	var idx = favourites.indexOf(title + "@@" + url); 
	if(idx!=-1) favourites.splice(idx, 1); 
	saveFavouritesToCookie();
	renderUI();

}


function saveFavouritesToCookie()
{
	var favString = getFavouritesAsString();
	jQuery.cookie('_busexpress_favourites', favString, {expires: 365, path: '/'});
}

function loadFavouritesFromCookie()
{
 	var favString = jQuery.cookie('_busexpress_favourites');
 	if (favString!=null)
 	{
 		loadFavouritesFromString(favString);
 	}
 
}


function addCurrentAsFavourite()
{
	addToFavourites(document.title, document.location.href);
}



/*********************** RECENTLY VIEWED *************************/

function getRecentlyViewedAsString()
{
	var outputString = "";
	for (var i=0; i<recentlyViewed.length; i++)
	{
		if (recentlyViewed[i]!=null)
		{
			outputString += recentlyViewed[i] + "|";
		}
	}
	return outputString;
}


function loadRecentlyViewedFromString(str)
{
	recentlyViewed = null;
	recentlyViewed = new Array();
	
	var splitString = str.split('|');
	
	for (var i=0; i<splitString.length; i++)
	{
		var currentfav = splitString[i].split("@@");
		if (currentfav.length==2)
		addToRecentlyViewed(currentfav[0], currentfav[1]);
	}
}


function addToRecentlyViewed(title, url)
{

	// hack for B&H to truncated service name
	if (title.indexOf("-")>0)
	{
		var service = title.substring(0, title.indexOf("-"));
		var rest = title.substring(title.indexOf("-")+1);
		var start = rest.substring(0, rest.indexOf("-"));
		var finish = rest.substring(rest.lastIndexOf("-")+1);
		title = service + " - " + start + " - " + finish;
	}

	title = title.replace(/\s+/g, ' ');

	var idx = recentlyViewed.indexOf(title + "@@" + url);
	
	// only add the item if we dont already have it
	if (idx < 0)
	{
		if (recentlyViewed.length == recentlyViewedLimit) // if we are at the limit for the array
		{
			// make space by shifting everything down one and losing the first item
			for (var i=0; i < recentlyViewedLimit-1; i++)
			{
				recentlyViewed[i] = recentlyViewed[i+1];
			}
			// null the last element although we will delete it		
			recentlyViewed[recentlyViewedLimit-1] = null;
			
			// truncate array (to lose current last element - knowing we will push a new one on in a sec)
			recentlyViewed.length = recentlyViewedLimit-1;
			
		}	
	
		recentlyViewed.push(title + "@@" + url);
		saveRecentlyViewedToCookie();
	}
	renderUI();
}

function removeFromRecentlyViewed(title, url)
{
	var idx = recentlyViewed.indexOf(title + "@@" + url); 
	if(idx!=-1) recentlyViewed.splice(idx, 1); 
	saveRecentlyViewedToCookie();
	renderUI();

}


function saveRecentlyViewedToCookie()
{
	var favString = getRecentlyViewedAsString();
	jQuery.cookie('_busexpress_recentlyViewed', favString, {expires: 365, path: '/'});
}

function loadRecentlyViewedFromCookie()
{
 	var favString = jQuery.cookie('_busexpress_recentlyViewed');
 	if (favString!=null)
 	{
 		loadRecentlyViewedFromString(favString);
 	}
 	
}


function addCurrentAsRecentlyViewed()
{
	addToRecentlyViewed(jQuery(document).attr('title'), document.location.href);
}






function renderInitialUI()
{

}


function updateUI()
{

}





function renderUI()
{
	var strHTML = "<div class='busexpress-clientwidgets-favourites'>";
	
	
	strHTML += '<div class="widget-header"><img src="http://ws3.netescape.co.uk/busExpress/ClientWidgets/favourites/UT_small.png" align="left" /><h3>My Brighton &amp; Hove</h3>recently viewed | my account<br style="clear:both;" /></div>';
	strHTML += '<div class="widget-panel" style="display:none;">';
	
	
	// render favourites
	/*
	
	strHTML += '<div class="favourites"><h4>favourites</h4><ul>';
	
	for (var i=0; i<favourites.length; i++)
	{
		var page = favourites[i].split("@@");
		var pageName = page[0];
		var pageUrl = page[1];
		
		
		strHTML += '<li><a href="' + pageUrl + '">' + pageName + '</a>  <a href="javascript:removeFromFavourites(\'' + pageName + '\',\'' + pageUrl + '\');">x</a></li>';
	}
	
	strHTML += '</ul><a href="javascript:addCurrentAsFavourite();">add current page</a></div>';
	*/
	
	
	// render recentlyViewed
		
		strHTML += '<div class="recent"><h4>Recently Viewed</h4><p>Services and stops you have recently viewed.</p><ul>';
		
		for (var i=0; i<recentlyViewed.length; i++)
		{
			var page = recentlyViewed[recentlyViewed.length-1-i].split("@@");  // enumerate in reverse order
			var pageName = page[0];
			var pageUrl = page[1];
			
			
			strHTML += '<li><a href="' + pageUrl + '" title="click to go back to this page">' + pageName + '</a> </li>';
		}
		
	strHTML += '</ul></div>';
	
	// render my account
	
		strHTML += '<div class="account"><h4>My B&amp;H Account</h4><p>Login to manage your Brighton &amp; Hove account and email subscription preferences.</p><p><a href="/myaccount"><img src="/images/login.gif" /></a></p>';
		
		
		
	strHTML += '</div><br style="clear:both;" />';
	
	
	strHTML += '<a href="#"  onclick="jQuery(\'.widget-panel\').toggle();"><img src="/images/close.gif" align="right" /></a></div></div>';
	
	widgetDOMElement.html(strHTML);
	
	jQuery('.widget-header').click(function() {
	  						jQuery('.widget-panel').toggle();
  					});
	
					
}


