//For version 7.2 or later.
/**
 * The sitemap is pseudo page and is generated by walking all the Areas, Subareas etc
 * recursively. We assign it a pageid of "0".
 * Don't forget to add a url and text property to the json object generated.
 */
YAHOO.si.Sitemap = {
	pageid:"0",
	/**
	 * A bit confused here. Don't forget that we're trying to create a bit of JSON
	 * for the Page class to render.
	 */
	walkTree:function(language,areaid,itemdata)
	{
		try
		{
			var  s = "<ul>";
			for(var a = 0;a<itemdata.length;a++)
			{
				var item = itemdata[a];
				var url = "";
				var pagedata = "";
				switch(item.nodetype)
				{
					//Can't be one because we're looking for levels lower than areas.
					case "2":
						url = item.url + "/default.json";
						pagedata = urllookup[url];
						//This extra zero because in case there is no category
						s += "<h2><a id='" + 
							language + 
							"-" + 
							item.id + 
							"-0-" + 
							pagedata.pageid + 
							"' href='" +
							url + 
							"' >" +   
							item.text + 
							"</a></h2>";	
		                break;
					case "3":
						url = item.url + "/default.json";
						pagedata = urllookup[url];
						//alert(pagedata);
						//Bux fixed 1/17/2009
						//This is wrong. It forces the area to be 0
						//s += "<h3><a id='" + language + "-0-" +  item.id + "-" + pagedata.pageid + "' href='" +url + "'>" +   item.text + "</a></h3>";	
						s += "<h3><a id='" + language + 
								"-" + 
							 	item.id + 
							 	"-" + 
							 	pagedata.pageid + 
							 	"' href='" +
							 	url + 
							 	"'>" +   
							 	item.text + 
							 	"</a></h3>";
						break;
					case "4":
						if(item.url.indexOf("default.json")===-1)
						{
							s += "<li><a id='" + language + "-" +  item.id + "'  href='" +item.url + "' >" +   item.text + "</a></li>";							
						} 
		 				break;	
				}
				if(item.submenu)
				{
					if(item.submenu.itemdata)
					{
						s+= this.walkTree(language,areaid,item.submenu.itemdata);						
					}
				}
			}		
			s += "</ul>";
			return s;
		}
		catch(e)
		{
			YAHOO.si.handleErrors(e);
		}
	},
	getSitemap:function()
	{
		//var debug ="";
					//YAHOO.util.Event.addListener(link,"click",this.reloadPage,state,this);
		try
		{
			var Layouts = new YAHOO.si.Layouts();
			this.layout = Layouts.SIDE_BY_SIDE;
			var textblocks = Layouts.layouts[this.layout].textblocks;
			// testing the error handler:textblocks[3] ="test";
			var json = {};
			json.url = "/sitemap.json";
			json.text = "Sitemap";
			json.pageid = this.pageid;
			json.layout = this.layout;
			var languages = ["jp","en"];
			var tree = "";
			var language = "";
			//There can only be 2 textblocks in the side-by-side layout
			//but it might be safer to loop through the existing languages.
			//Maybe I should throw an error if the number of languages doesn't
			//match the number of textblocks.
			if(languages.length!==textblocks.length)
			{
				throw new Error("The number of languages does not match the number of textblocks available to display them");
			}
			else
			{
				
				for(var i = 0; i < textblocks.length; i++)
				{
					tree = "";
					language = languages[i];
					var langdata = sitemap[language];
					var langname = langdata.name;
					tree += "<h1>" + langname + "</h1>";
					var areas = langdata.areas;
					for(var areaid in areas )
					{
						//tree += "<h1>" + areas[areaid].text + "</h1>";
						//I need the id of the default page, not the area id.
						var url = areas[areaid].url + "/default.json";
						var pagedata = urllookup[url];
						var areaid =areas[areaid].id;
						var pageid = pagedata.pageid;
						var id = areaid + "-0-0-" + pageid;
						tree += "<h1><a id='" +
									 language + 
									 "-" + 
									 id + 
									 "' href='" +
									 areas[areaid].url + 
									 "/default.json' >" +  
									 areas[areaid].text  + 
									 "</a></h1>";
						
						if(areas[areaid].submenu)
						{
							tree += this.walkTree(language, areaid, areas[areaid].submenu.itemdata);											
						}
					}
					json[textblocks[i].id] = tree;		
				}
			}
		    return json; 
		}
		catch(e)
		{
			YAHOO.si.handleErrors(e);
		}
	},
	openPageFromSitemap:function(ev,o)
	{
		YAHOO.util.Event.stopEvent(ev);
		try
		{
			var id =o.id;
			//alert(id);
			var data = id.split("-");
			var language = data[0];
			//No the area is often 0 that's what's wrong.
			var areaid = data[1];
			var pageid = data[data.length -1];
			/*
			var url = o.url;
			alert(url);
			pagedata = urllookup[url];
			var language = pagedata.language;
			var areaid = pagedata.areaid;
			var pageid = pagedata.pageid;
			*/ 
			var state = {"language":language,"areaid":areaid,"pageid":pageid};
			YAHOO.si.HistoryManager.multiNavigate(state);
		}
		catch(e)
		{
			YAHOO.si.handleErrors(e);
		}
	},
	addListeners:function(el)
	{
		//alert("adding listeners to sitemap");
		var links = YAHOO.util.Dom.getElementsBy ( function(){return true;} , "a" , el  ); 
		for(var i = 0; i < links.length; i++)
		{
			var link = links[i];	
			var obj = {"id":link.id,"url":link.href};
			//This is failing because areaid is sometimes 0 
			//e.g. Business Correspondence
			//but also because Page was adding another listener.
			//I've added a conditional clause to prevent Page from
			//adding a listener to the links in Sitemap.
			YAHOO.util.Event.addListener(link,"click",this.openPageFromSitemap,obj);
		}
	}

};
