	//MBox Class.. 
	//
	//
	// aOptions.. are controls for this object
	// modOptions. These can be found at http://livepipe.net/control/window
	//
	function MyrsolBox(aOptions)
	{
		var m_thisobject = this;
		var m_Windows = [];

		//Options for this Object
		var m_fid = aOptions.fid || 1;
		var m_targetId = aOptions.eid || false;
		
		//modOptions are passed to the primary modual
		
		MB_Init();

		//-----------------------------------------
		//Access Functions
		//-----------------------------------------
		//MB_FindById
		//////////////////////////////	
		this.MB_FindById = MB_FindById;
		function MB_FindById(locateId)
		{
			for (i=0;i<m_Windows.length;i++)
			{
				if (m_Windows[i].fid == locateId && m_Windows[i].oWindow)
					return i;
			}
				
			return -1;	
		} //End MB_FindById()

		//MB_Update
		//////////////////////////////	
		this.MB_Update = MB_Update;
		function MB_Update(fid,szContent)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0)
				m_Windows[lvid].oWindow.WB_Update(szContent);				
		} //End MB_Update()


		//-----------------------------------------
		//Methods
		//-----------------------------------------
		
		//Init
		//////////////////////////////	
		this.MB_Init = MB_Init;
		function MB_Init()
		{
				
		} //End MB_Init()


		//MB_CloseAll
		//////////////////////////////	
		this.MB_CloseAll = MB_CloseAll;
		function MB_CloseAll()
		{
			for (i=0;i<m_Windows.length;i++)
			{
				if (m_Windows[i].oWindow){
					m_Windows[i].oWindow.WB_Close();
				}
				
			}
		} //End MB_Update()

		//Show
		//////////////////////////////	
		this.MB_Show = MB_Show;
		function MB_Show(fid)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				m_Windows[lvid].oWindow.WB_Show();				
				return true;
			}
			else
				return false;
				
		} //End MB_Show()

		//MB_ShowAtElem
		//////////////////////////////	
		this.MB_ShowAtElem = MB_ShowAtElem;
		function MB_ShowAtElem(fid,oEl,content,title,iTime)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				m_Windows[lvid].oWindow.WB_ShowAtElem(oEl,content,title,iTime);				
				return true;
			}
			else
				return false;
				
		} //End MB_ShowAtElem()
		
		//MB_ShowAtPos
		//////////////////////////////	
		this.MB_ShowAtPos = MB_ShowAtPos;
		function MB_ShowAtPos(fid,oPos,content,title,iTime)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				m_Windows[lvid].oWindow.WB_ShowAtPos(oPos,content,title,iTime);				
				return true;
			}
			else
				return false;
				
		} //End MB_ShowAtPos()

		//MB_Open
		//////////////////////////////	
		this.MB_Open = MB_Open;
		function MB_Open(fid,szContent)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				//We need to delay the open just a few because of the onclick trap.
				setTimeout(function(){m_Windows[lvid].oWindow.WB_Open(szContent);}.bind(this),50);
				//m_Windows[lvid].oWindow.WB_Open(szContent);
			}
		
			return true;
		} //End MB_Open()
	
		//MB_Close
		//////////////////////////////	
		this.MB_Close = MB_Close;
		function MB_Close(fid)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				setTimeout(function(){m_Windows[lvid].oWindow.WB_Close();}.bind(this),100);
			}

			return true;
		} //End MB_Close()	

		//MB_Hide
		//////////////////////////////	
		this.MB_Hide = MB_Hide;
		function MB_Hide(fid)
		{
			var lvid = MB_FindById(fid);
			if (lvid >= 0){
				m_Windows[lvid].oWindow.WB_Hide();				
				return true;
			}
			else
				return false;
				
		} //End MB_Hide()
		
		//MB_Add
		//////////////////////////////	
		this.MB_Add = MB_Add;
		function MB_Add(aOptions,winOptions)
		{
			var fid = aOptions.fid || m_Windows.length;
			var targetId = aOptions.targetId || false;
			var openOnCreate = aOptions.openOnCreate || false;
			var autoCloseAfter = aOptions.autoCloseAfter || false;
			
			//Lets see if we have already created this box.
			var lvid = MB_FindById(fid);
			if (lvid == -1){
				oData = new Object;
				oData.fid = fid;
				oData.targetId = targetId;
				oData.aOptions = aOptions;
				oData.winOptions = winOptions; 
				
				oData.oWindow = new Window_Box(aOptions,winOptions);
				m_Windows.push(oData);
				
				if (openOnCreate)
					setTimeout(function(){oData.oWindow.WB_Open();}.bind(this),50);
			}
			else
			{
				var m_content = aOptions.content || '';
				
				if (openOnCreate && m_content != '')
					setTimeout(function(){m_Windows[lvid].oWindow.WB_Open(m_content);}.bind(this),50);
					//m_Windows[lvid].oWindow.WB_Open(m_content);
				else
					setTimeout(function(){m_Windows[lvid].oWindow.WB_Open();}.bind(this),50);
					//m_Windows[lvid].oWindow.WB_Open();
			}
		} //MB_Add
		
		

	} //End MM_Validation
	
	
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
//----					Window Box Object										-----		
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------

	function Window_Box(aOptions,winOptions)
	{
		var m_thisobject = this;
		var m_window = null;
		var m_winOptions = winOptions;
		var m_content = '';
		var m_ocontainer = null;
		var m_timer = null;
		
		//Options for this Object
		var m_fid = aOptions.fid || false;
		var m_eid = aOptions.eid || false;
		var m_targetId = aOptions.targetId || false;
		var m_titlecontent = aOptions.titlecontent || '';
		var m_content = aOptions.content || '';
		var m_autoCloseAfter = parseInt(aOptions.autoCloseAfter) || parseInt(-1);
		var m_classNamePrefix = aOptions.classNamePrefix || 'window';
		var m_triggerOnCloseByID = aOptions.triggerOnCloseByID || '';
		var m_openOnCreate = aOptions.openOnCreate || false;
		var m_posid	= aOptions.posid || 'searchtypes';

		var m_header= aOptions.header || false;
		var m_title = aOptions.title || false;
		var m_close = aOptions.hclose || false;
		var m_modal = aOptions.modal || false;

		var mbox_header = null;
		var mbox_title = null;
		var mbox_close = null;

		WB_Init();

		//-----------------------------------------
		//Access Functions
		//-----------------------------------------

		//WB_Update
		//////////////////////////////	
		this.WB_Update = WB_Update;
		function WB_Update(szContent)
		{
			//Allow for overide of content. If no content then display origional message
			if (typeof(szContent) != 'undefined' && szContent != ''){
				m_content = szContent;
			}

			return true;
		} //End WB_Update()

		//-----------------------------------------
		//Methods
		//-----------------------------------------
		
		//WB_Init
		//////////////////////////////	
		this.WB_Init = WB_Init;
		function WB_Init()
		{
			m_window  = WB_BuildBox();

			return true;
		} //End MB_Init()

		//WB_Show
		//////////////////////////////	
		this.WB_Hide = WB_Hide;
		function WB_Hide()
		{
			if (m_window)
				m_window.close();

			return true;
		} //End WB_Show()


		//WB_Show
		//////////////////////////////	
		this.WB_Show = WB_Show;
		function WB_Show()
		{
			if (m_window)
				WB_Open('');

			return true;
		} //End WB_Show()

		//WB_RestAndOpen
		//////////////////////////////	
		this.WB_RestAndOpen = WB_RestAndOpen;
		function WB_RestAndOpen(aOptions)
		{
			//Options for this Object
			m_fid = aOptions.fid || 'Info_1';
			m_eid = aOptions.eid || false;
			m_targetId = aOptions.targetId || false;
			m_titlecontent = aOptions.titlecontent || '';
			m_content = aOptions.content || '';
			m_autoCloseAfter = parseInt(aOptions.autoCloseAfter) || parseInt(-1);
			m_classNamePrefix = aOptions.classNamePrefix || 'window';
			m_triggerOnCloseByID = aOptions.triggerOnCloseByID || '';

			m_header= aOptions.header || false;
			m_title = aOptions.title || false;
			m_close = aOptions.hclose || false;
			m_modal = aOptions.modal || false;

			m_handleclose = true;
	
			WB_Open(m_content);
			
			return true;
			
		} //End WB_RestAndOpen


		//WB_Close
		//////////////////////////////	
		this.WB_Close = WB_Close;
		function WB_Close()
		{
			if (m_window){
				
				//if (m_handleclose == true)
				m_window.close();
					
				if (m_timer)
					clearTimeout(m_timer);
				
				if (typeof('m_triggerOnCloseByID') != 'undefined' && m_triggerOnCloseByID != ''){
					gInfoBoxes.MB_Show(m_triggerOnCloseByID);	
				}
				return true;
			}
			
			return false;
		} //End MM_Close()


		//WB_ShowAtElem
		//////////////////////////////	
		this.WB_ShowAtElem = WB_ShowAtElem;
		function WB_ShowAtElem(oEl,content,title,iTime)
		{
			if (m_window && oEl){
				//Make sure Dialog is closed first.
				WB_Hide();
				
				//var relpos = oEl.viewportOffset();
				//var relpos = oEl.cumulativeOffset();
				var relpos = oEl.positionedOffset();
				
				//m_winOptions['position'] = [relpos[0],relpos[1]];
				m_window.options.position = relpos;
				m_window.open();
				m_ocontainer.update(content);
				
				//update title
				if (mbox_title != null){
					mbox_title.update(title);
				}
				
				//Set the timer
				if (iTime && iTime > 0)
				{
					m_timer = setTimeout(function(){m_window.close();}.bind(this),iTime);	
				}				
				return true;
			}
			
			return false;
		} //End WB_ShowAtElem()

		//WB_ShowAtPos
		//////////////////////////////	
		this.WB_ShowAtPos = WB_ShowAtPos;
		function WB_ShowAtPos(aPos,content,title,iTime)
		{
			if (m_window && aPos.length){
				//Make sure Dialog is closed first.
				WB_Hide();
				
				//var relpos = oEl.viewportOffset();
				//var relpos = oEl.cumulativeOffset();
				var relpos = aPos;
				
				var oPos = null;
				if ($(m_posid))
					oPos = $(m_posid);

				//Adjust for the view port
				if (oPos)
				{
					relpos[0]+=oPos.cumulativeOffset().left;
					relpos[1]+=oPos.cumulativeOffset().top;
				}
				
				m_window.options.position = relpos;
				m_window.open();
				m_ocontainer.update(content);
				
				//update title
				if (mbox_title != null){
					mbox_title.update(title);
				}
				
				//Set the timer
				if (iTime && iTime > 0)
				{
					m_timer = setTimeout(function(){m_window.close();}.bind(this),iTime);	
				}				
				return true;
			}
			
			return false;
		} //End WB_ShowAtElem()


		//WB_Open
		//////////////////////////////	
		this.WB_Open = WB_Open;
		function WB_Open(szContent)
		{
			//Make sure Dialog is closed first.
			WB_Hide();
			
			m_window.open();
			//Allow for overide of content. If no content then display origional message
			if (typeof(szContent) != 'undefined' && szContent != '' && szContent != ' '){
				m_ocontainer.update(szContent);
			}
			else if (m_content != '' && m_ocontainer)
			{
				m_ocontainer.update(m_content);
			}
			
			//Set the timer
			if (m_autoCloseAfter > 0)
			{
				m_timer = setTimeout(function(){m_window.close();}.bind(this),m_autoCloseAfter);	
			}

			return true;
		} //End MM_Open()

		//WB_BuildBox
		//////////////////////////////	
		this.WB_BuildBox = WB_BuildBox;
		function WB_BuildBox()
		{
			var optPos = '';
			
			
			if (m_targetId != '' && $(m_targetId))
			{
				var leftPos = $(m_targetId).viewportOffset($(m_targetId)).left;
				var topPos = $(m_targetId).viewportOffset($(m_targetId)).top;
				m_winOptions['position'] = [leftPos,topPos];
				//m_winOptions['hover'] = m_targetId;
			}
			else if (m_targetId != '')
			{
				m_winOptions['position'] = m_targetId;
			}
			
			if (m_header){mbox_header = new Element('div',{className: m_classNamePrefix+'_header'});}
			
			if (m_title){mbox_title = new Element('div',{className: m_classNamePrefix+'_title'});}

			if (m_close){mbox_close = new Element('div',{className: m_classNamePrefix+'_close'});}
			
			m_ocontainer = new Element('div',{  
			 className: m_classNamePrefix+'_contents'  
			});  
			 
			 var oExtOpt = [];
			 oExtOpt['className'] = m_classNamePrefix;
			 oExtOpt['insertRemoteContentAt'] = m_ocontainer;
			 
			 if (mbox_close!= null){
	 			 m_winOptions['closeOnClick'] = mbox_close;
			 }

			if (mbox_header!= null)
	 			oExtOpt['draggable'] = mbox_header;

			if (mbox_title!= null)
	 			oExtOpt['afterOpen'] = function(){mbox_title.update(m_titlecontent);};
			 
			 
			 //Some Options Must Exist
			if (m_winOptions['closeOnClick'])
			{
				m_handleclose = true;
			}
			else
			{
				m_handleclose = true;
			}
			 
			m_winOptions['afterClose'] = function(){if (gInfoBoxes){gInfoBoxes.MB_Close(m_fid)} };
			
			 if (m_modal)
			 {
				 var oBox = new Control.Modal(false,Object.extend(oExtOpt,m_winOptions || {}));  
			 }
			 else
			 {
		 		var oBox = new Control.Window(false,Object.extend(oExtOpt,m_winOptions || {}));  
			 }

			if (mbox_header != null)
			 oBox.container.insert(mbox_header);  
			
			if (mbox_header != null && mbox_title != null)
			 mbox_header.insert(mbox_title);  
			
			if (mbox_close != null)
			 oBox.container.insert(mbox_close);  
			 
			 oBox.container.insert(m_ocontainer);  
			 
			 return oBox;  
		 };

		
	} //End MM_Validation
