function alertManager()
{
	var alertManager = this;
	var alertContainer = new Object();
	var alertContainerCount = 0;
	var panelsCreated = false;


	this.alertExists = function(alertName)
	{
		if (alertContainer[alertName])
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	this.createAlertContainer = function(alertName, width, visible, closeable, modal)
	{
		for (var key in alertContainer)
		{
			if (key == alertName)
			{
				alert("Alert (" + alertName + ") has already been used.");
				return false;
			}
		}

		if (width == null)
		{
			alert("Missing argument \'width\'");
		}
		else
		{
			if (visible == null)
			{
				visible = false;
			}

			if (closeable == null)
			{
				closeable = true;	
			}

			if (modal == null)
			{
				modal = true;	
			}

			alertContainer[alertName] = new Object();
			alertContainer[alertName].width = width;
			alertContainer[alertName].visible = visible;
			alertContainer[alertName].closeable = closeable;
			alertContainer[alertName].modal = modal;
			alertContainer[alertName].onHide = new YAHOO.util.CustomEvent("onHide");
			alertContainer[alertName].onShow = new YAHOO.util.CustomEvent("onShow");

			alertContainerCount++;
		}
	}

	this.createPanels = function()
	{
		if (!panelsCreated)
		{
			panelsCreated = true;
			
			for (var key in alertContainer)
			{
				if (alertContainer[key].visible)
				{
					YAHOO.util.Dom.get(key).style.display = "block";
				}

				alertContainer[key].obj = new YAHOO.widget.Panel(key, 	{ 
																 			width: alertContainer[key].width + "px", 
																			visible: alertContainer[key].visible, 
																			constraintoviewport: true, 
																			appendtodocumentbody: true, 
																			zIndex: 10,
																			fixedcenter: true,
																			modal: alertContainer[key].modal
																		} );
				alertContainer[key].obj.render(document.body);

				var newX = Math.floor(YAHOO.util.Dom.getViewportWidth() / 2) - Math.floor(alertContainer[key].width / 2);
				
				alertContainer[key].obj.cfg.setProperty("x", newX);

				var ypc = YAHOO.util.Dom.getAncestorByClassName(key, "yui-panel-container");
				ypc.style.width = alertContainer[key].width + "px";

				var elementArray = YAHOO.util.Dom.getElementsByClassName("alertTitle", "div", key);
				var alertTitle = elementArray[0];
				
				elementArray = YAHOO.util.Dom.getElementsByClassName("alertMessage", "div", key);
				var alertMessage = elementArray[0];

				alertContainer[key].title = alertTitle;
				alertContainer[key].message = alertMessage;
			}
		}
	}

	this.getAlert = function(alertName)
	{
		return alertContainer[alertName];
	}

	this.getAlertContainer = function(alertName)
	{
		return alertContainer[alertName].obj;
	}

	this.getMessage = function(alertName)
	{
		return alertContainer[alertName].message.innerHTML;
	}

	this.getTitle = function(alertName)
	{
		return alertContainer[alertName].title.innerHTML;
	}

	this.hide = function(alertName)
	{
		if (alertContainer[alertName].closeable)
		{
			alertContainer[alertName].obj.hide();
			alertContainer[alertName].onHide.fire();
		}
	}

	this.openAlert = function(alertName, title, message)
	{
		alertManager.setTitle(alertName, title);
		alertManager.setMessage(alertName, message);
		alertManager.show(alertName);
	}

	this.setMessage = function(alertName, message)
	{
		alertContainer[alertName].message.innerHTML = message;

		if (message.length > 0)
		{
			YAHOO.util.Dom.removeClass(alertContainer[alertName].message, "empty");
		}
		else
		{
			YAHOO.util.Dom.addClass(alertContainer[alertName].message, "empty");
		}
	}

	this.setTitle = function(alertName, title)
	{
		alertContainer[alertName].title.innerHTML = title;
	}

	this.show = function(alertName)
	{
		if (YAHOO.util.Dom.get(alertName).style.display == "none")
		{
			YAHOO.util.Dom.get(alertName).style.display = "block";
		}
		
		alertContainer[alertName].obj.show();
		alertContainer[alertName].onShow.fire();
	}

	YAHOO.util.Event.addListener(window, "load", alertManager.createPanels);
}

alertContainerManager = new alertManager();