﻿
// These namespaces are declared in Core.js
if (!KSLaw || !KSLaw.Internet || !KSLaw.Internet.Core)
	throw new Error("Some of the expected KSLaw namespaces were not registered");

KSLaw.Internet.Menu = { Client: {} };

KSLaw.Internet.Menu.Client.Item = function(a, c, d, e, f, g, h)
{
	this.id = a;
	this.url = c;
	this.image = d;
	this.roll = e;
	this.text = f;
	this.items = g;
};
KSLaw.Internet.Menu.Client.Child = function(a, b)
{
	this.text = a;
	this.url = b;
};
KSLaw.Internet.Menu.Client.Settings = function(a, r, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
{
	this.container = a;
	this.rollContainerId = r;
	this.selectedId = b;
	this.arrowImageUrl = c;
	this.arrowImageClass = d;
	this.parentLastIdleClass = e;
	this.parentLastRollClass = f;
	this.parentLastSelectedClass = g;
	this.parentLastEmptyIdleClass = h;
	this.parentLastEmptyRollClass = i;
	this.parentIdleClass = j;
	this.parentRollClass = k;
	this.parentSelectedClass = l;
	this.parentEmptyIdleClass = m;
	this.parentEmptyRollClass = n;
	this.emptyCellClass = o;
	this.contentCellClass = p;
	this.items = q;
};
KSLaw.Internet.Menu.Client.Control = function(settings)
{
	var divContent, popups;

	this.init = function()
	{
		preload();
		divContent = document.createElement("DIV");
		divContent.id = settings.container.id + "_cont";
		divContent.style.display = "none";
		document.body.appendChild(divContent);
		popups = [];
		var cell = null, par = null, s = null, k = null;
		for (var i = 0; i < settings.container.rows[0].cells.length; i++)
		{
			cell = settings.container.rows[0].cells[i];
			par = getItem(cell.id);
			if (par.items.length == 0)
			{
				setIdleClass(cell, true);
				cell.onmouseover = function(e)
				{
					if(settings.selectedId && settings.selectedId.length > 0 && this.id == settings.selectedId)
						getClasses(this).selected;
					else this.className = getClasses(this).emptyRoll;
					roll(this);
				};
				cell.onmouseout = function(e)
				{
					if(settings.selectedId && settings.selectedId.length > 0 && this.id == settings.selectedId)
						getClasses(this).selected;
					else setIdleClass(this, true);
					idle(this);
				};
			}
			else
			{
				setIdleClass(cell, false);
				s = new KSLaw.Internet.PopUp.Settings(
					false,
					getClasses(cell).roll,
					settings.contentCellClass,
					settings.emptyCellClass,
					settings.arrowImageUrl,
					settings.arrowImageClass);
				k  = new KSLaw.Internet.PopUp.Control(s);
				popups.push(k);
				k.init(par.id, cell.id, getContent, par.roll, par.text, par.url, settings.rollContainerId);
			}
		}
	};
	this.onRoll = function(delegate)
	{
		for(var i in popups)
			popups[i].onBuilt(delegate);
	};

	var getContent = function(id)
	{
		divContent.innerHTML = "";
		var par = getItem(id);
		var ul = document.createElement("UL"), li, a;
		for (var j in par.items)
		{
			li = document.createElement("LI");
			a = document.createElement("A");
			a.innerHTML = par.items[j].text;
			a.href = par.items[j].url;
			li.appendChild(a);
			ul.appendChild(li);
		}
		divContent.appendChild(ul);
		return divContent.innerHTML;
	};
	var setIdleClass = function(el, empty)
	{
		el.className = settings.selectedId && settings.selectedId.length > 0 && el.id == settings.selectedId ?
			getClasses(el).selected : (empty ? getClasses(el).emptyIdle : getClasses(el).idle);
	};
	var getClasses = function(el)
	{
		if (isLast(el))
			return {
				idle: settings.parentLastIdleClass,
				roll: settings.parentLastRollClass,
				selected: settings.parentLastSelectedClass,
				emptyIdle: settings.parentLastEmptyIdleClass,
				emptyRoll: settings.parentLastEmptyRollClass
			};
		else return {
			idle: settings.parentIdleClass,
			roll: settings.parentRollClass,
			selected: settings.parentSelectedClass,
			emptyIdle: settings.parentEmptyIdleClass,
			emptyRoll: settings.parentEmptyRollClass
		};
	};
	var preload = function()
	{
		var img = null;
		for (var i in settings.items)
		{
			if (KSLaw.Internet.Core.defined(settings.items[i].roll))
			{
				img = document.createElement("IMG");
				img.src = settings.items[i].roll;
			}
		}
	};
	var roll = function(el)
	{
		var p = getItem(el.id);
		if (KSLaw.Internet.Core.defined(p.roll))
			el.getElementsByTagName("IMG")[0].src = p.roll;
	};
	var idle = function(el)
	{
		var p = getItem(el.id);
		if (KSLaw.Internet.Core.defined(p.image))
			el.getElementsByTagName("IMG")[0].src = p.image;
	};
	var isLast = function(el)
	{
		for (var i in settings.items)
			if (settings.items[i].id == el.id) return i >= settings.items.length - 1;
		throw new Error("Could not locate an expected navigation element.");
	};
	var getItem = function(id)
	{
		for (var i in settings.items)
			if (settings.items[i].id == id)
			return settings.items[i];
		throw new Error("Could not find an expected item.");
	};
};
