(function(){
			
			
	// I should probably have these inherit from a template class.. that way they will ALL have things like setHeader, and	
	// thus be interchangeable.. regardless of if the function does anything or not.. a thought for the future.

	var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	var Lang = YAHOO.lang;

	LIGHTHOUSE.templates = LIGHTHOUSE.templates || {};
	
	LIGHTHOUSE.templates.dialog = function(){
		
		// Its SUPER important that these variables get defined up here.. otherwise, the onDOMReady constructor
		// will be useless as none of the elements will be saved.		
		var hdElement,
			bdElement,
			ftElement,
			container,
			permanentBodyElement,
			dialog;

		var dialogAPI = {
			setHeader : function(data){
				hdElement.innerHTML = data;
			},
			setBody : function(data){
				if(typeof data === "string"){
					bdElement.innerHTML = data;
				}else{
					Event.purgeElement(bdElement, true);
					bdElement.innerHTML = "";
					bdElement.appendChild(data.cloneNode(true));
					permanentBodyElement = data;
				}
			},
			setPermanentBody : function(data){
				if(typeof data === "string"){
					permanentBodyElement.innerHTML = data;
				}else{
					Event.purgeElement(permanentBodyElement, true);
					permanentBodyElement.innerHTML = "";
					permanentBodyElement.appendChild(data.cloneNode(true));
				}
			},
			setFooter : function(data){
				ftElement.innerHTML = data;
			},
			getBodyElement : function(){
				return bdElement;
			},
			reset : function(className){
				Dom.addClass
				this.setHeader("");
				this.setBody("");
				this.setFooter("");
			},
			show : function(){
				Dom.removeClass(container, 'hide');
			},
			hide : function(){
				Dom.addClass(container, 'hide');
			}
		};


		YAHOO.util.Event.onDOMReady(function(){
			container = document.createElement('div');
			Dom.addClass(container, 'dialog-container');
			Dom.addClass(container, 'hide');
			Dom.addClass(container, 'modal');

			dialog = document.createElement('div');
			Dom.addClass(dialog, 'dialog');

			dialog.setAttribute('id', 'main-dialog');
			dialog.appendChild(function(){
				var top = document.createElement('div');
				Dom.addClass(top, 'top');
				top.appendChild(function(){

					var div = document.createElement('div');

					div.appendChild(function(){
						var em = document.createElement('em');
						em.innerHTML = "&nbsp;";
						return em;
					}());
					div.appendChild(function(){
						var span = document.createElement('span');
						span.innerHTML = "&nbsp;";
						return span;
					}());

					return div;
				}());
				return top;
			}());
			dialog.appendChild(function(){
				var div = document.createElement('div');
				Dom.addClass(div, 'content-wrapper');
				div.appendChild(function(){

					var content = document.createElement('div');
					Dom.addClass(content, 'content');
					content.appendChild(function(){
						var hd = document.createElement('div');
						hdElement = document.createElement('div');
						Dom.addClass(hdElement, 'title');
						hd.appendChild(hdElement);
						hd.appendChild(function(){
							var close = document.createElement('img');
							close.src = document.body.getAttribute('data-base')+'/img/1x1.gif';
							Dom.addClass(close, 'close');
							Dom.addClass(close, 'icon');
							close.onclick = dialogAPI.hide;
							return close;
						}());
						Dom.addClass(hd, 'hd');
						return hd;
					}());
					content.appendChild(function(){
						var bd = document.createElement('div');
						Dom.addClass(bd, 'bd');
						bdElement = bd;
						return bd;
					}());
					content.appendChild(function(){
						var ft = document.createElement('div');
						Dom.addClass(ft, 'ft');
						ftElement = ft;
						return ft;
					}());
					return content;
				}());
				return div;
			}());
			dialog.appendChild(function(){
				var bottom = document.createElement('div');
				Dom.addClass(bottom, 'bottom');
				bottom.appendChild(function(){

					var div = document.createElement('div');

					div.appendChild(function(){
						var em = document.createElement('em');
						em.innerHTML = "&nbsp;";
						return em;
					}());
					div.appendChild(function(){
						var span = document.createElement('span');
						span.innerHTML = "&nbsp;";
						return span;
					}());

					return div;
				}());
				return bottom;
			}());
			container.appendChild(dialog);
			document.body.appendChild(container);
		}, null, this);

		return dialogAPI;

	}();

	LIGHTHOUSE.templates.Tooltip = function(){
		
		// Its SUPER important that these variables get defined up here.. otherwise, the onDOMReady constructor
		// will be useless as none of the elements will be saved.
		var container,
			bdElement;
		
		YAHOO.util.Event.onDOMReady(function(){
			container = document.createElement('div');
			Dom.addClass(container, 'tip');
			Dom.addClass(container, 'hide');
			bdElement = document.createElement('div');
			container.appendChild(bdElement);
			Dom.setStyle(container, 'position', 'absolute');
			document.body.appendChild(container);
		}, null, this);
		
		return {

			setBody : function(data){
				if(typeof data === "string"){
					bdElement.innerHTML = data;
				}else{
					Event.purgeElement(bdElement, true);
					bdElement.innerHTML = "";
					bdElement.appendChild(data);
				}
			},
			move : function(newXY){
				Dom.setStyle(container, 'left', newXY[0]+'px');
				Dom.setStyle(container, 'top', newXY[1]+'px');
				var x;
			},
			reset : function(className){
				this.setBody("");
			},
			show : function(){
				Dom.removeClass(container, 'hide');
			},
			hide : function(){
				Dom.addClass(container, 'hide');
			}
		}

	};
	
})();
 
