var MENU_DEFAULT_POPUP_LAYER_CLASS_NAME = 'menuDropdown';
var MENU_BLANK_IMAGE = '../images/blank.gif';

function MenuItem(label, url)
{
	this.setLabel = MenuItem_setLabel;
	this.getLabel = MenuItem_getLabel;
	this.setLabel(label);
	
	this.setUrl = MenuItem_setUrl;
	this.getUrl = MenuItem_getUrl;
	this.setUrl(url);

	this.setClassName = MenuItem_setClassName;
	this.getClassName = MenuItem_getClassName;
	if (arguments.length == 3)
	{
		this.setClassName(arguments[2]);
	}
	else
	{
		this.setClassName(null);
	}
		
	return this;
}

function MenuItem_setLabel(label)
{
	this.label = label;
}

function MenuItem_getLabel()
{
	return this.label;
}

function MenuItem_setUrl(url)
{
	this.url = url;
}

function MenuItem_getClassName()
{
	return this.className;
}

function MenuItem_setClassName(className)
{
	this.className = className;
}

function MenuItem_getUrl()
{
	return this.url;
}

function Menu(id)
{
	this.setId = Menu_setId;
	this.getId = Menu_getId;
	this.setId(id);

	this.setItems = Menu_setItems;
	this.getItems = Menu_getItems;
	this.setItems(new Array());
	
	this.addItem = Menu_addItem;
	
	this.setImageClassName = Menu_setImageClassName;
	this.getImageClassName = Menu_getImageClassName;
	this.setImageClassName(POPUP_LAYER_DEFAULT_IMAGE_CLASS_NAME);
	
	this.setPopupLayerClassName = Menu_setPopupLayerClassName;
	this.getPopupLayerClassName = Menu_getPopupLayerClassName;
	this.setPopupLayerClassName(MENU_DEFAULT_POPUP_LAYER_CLASS_NAME);
	
	/*
	this.setInnerHtml = Menu_setInnerHtml;
	this.getInnerHtml = Menu_getInnerHtml;
	this.setInnerHtml(' ');
	*/

	this.setXOffset = Menu_setXOffset;
	this.getXOffset = Menu_getXOffset;
	this.setXOffset(POPUP_LAYER_DEFAULT_X_OFFSET);
	
	this.setYOffset = Menu_setYOffset;
	this.getYOffset = Menu_getYOffset;
	this.setYOffset(POPUP_LAYER_DEFAULT_Y_OFFSET);

	this.setBlankImage = Menu_setBlankImage;
	this.getBlankImage = Menu_getBlankImage;
	this.setBlankImage(MENU_BLANK_IMAGE);

	this.generateHtml = Menu_generateHtml;
	
	this.setHtml = Menu_setHtml;
	this.getHtml = Menu_getHtml;
	
	this.writeHtml = Menu_writeHtml;

	return this;
}

function Menu_setId(id)
{
	this.id = id;
}

function Menu_getId()
{
	return this.id;
}

function Menu_setItems(items)
{
	this.items = items;
}

function Menu_getItems()
{
	return this.items;
}

function Menu_addItem(label, url)
{
	var items = this.getItems();
	
	if (arguments.length == 3)
	{
		items[items.length] = new MenuItem(label, url, arguments[2]);
	}
	else
	{
		items[items.length] = new MenuItem(label, url);
	}
	
	this.setItems(items);
}

function Menu_setXOffset(xoffset)
{
	this.xoffset = xoffset;
}

function Menu_getXOffset()
{
	return this.xoffset;
}

function Menu_setYOffset(yoffset)
{
	this.yoffset = yoffset;
}

function Menu_getYOffset()
{
	return this.yoffset;
}

function Menu_setImageClassName(imageClassName)
{
	this.imageClassName = imageClassName;
}

function Menu_getImageClassName()
{
	return this.imageClassName;
}

function Menu_setBlankImage(blankImage)
{
	this.blankImage = blankImage;
}

function Menu_getBlankImage()
{
	return this.blankImage;
}

function Menu_setPopupLayerClassName(popupLayerClassName)
{
	this.popupLayerClassName = popupLayerClassName;
}

function Menu_getPopupLayerClassName()
{
	return this.popupLayerClassName;
}

function Menu_generateHtml()
{
	var popupLayer = new PopupLayer(this.getId());

	var items = this.getItems();
	var html = '<ul>';
	for (var i = 0; i < items.length; i++)
	{
		if (items[i].getClassName() == null)
		{
			html += '<li>';
		}
		else
		{
			html += '<li class="' + items[i].getClassName() + '">';
		}
		html += '<a href="' + items[i].getUrl() + '">' + items[i].getLabel() + '</a></li>';
	}
	html += '</ul>';
	popupLayer.setInnerHtml(html);

	popupLayer.setPopupLayerClassName(this.getPopupLayerClassName());
	popupLayer.setImageClassName(this.getImageClassName());
	popupLayer.setXOffset(this.getXOffset());
	popupLayer.setBlankImage(this.getBlankImage());

	return popupLayer.getHtml();
}

function Menu_setHtml(html)
{
	this.html = html;
}

function Menu_getHtml()
{
	if (this.html == null)
	{
		this.setHtml(this.generateHtml());
	}
	
	return this.html;
}

function Menu_writeHtml()
{
	document.write(this.getHtml());
}
