

WindowManager = new function()
{
  try{
	
    	  

	  var _store = new Storage();
		var _paramStore = new Storage();

    return{
		
		  Add: function(WinParams, ID)
			{
			  try{
				
  			  if(_paramStore.GetComponent(ID) == null)
  					_paramStore.AddComponent(WinParams, ID);
	  			
		  		var _win = new Window(WinParams, ID);
				
			  	_store.AddComponent(_win, ID);
					
				}catch(err){Log.Add("WindowManager.Add", err, LogType.Error)}					
			},
			
			CloseWindow: function(ID)
			{
			  try{

  			  var _win = WindowManager.GetWindow(ID);

	  			if(_win != null)
		  		  _win.Close();
					
			  	_store.Remove(ID);
				
				}catch(err){Log.Add("WindowManager.CloseWindow", err, LogType.Error)}				
			},
			
			SendCommand: function(command, ID)
			{
			  try{
				
  			  WindowManager.OpenWindow(ID);
					
					var _win = WindowManager.GetWindow(ID);
  				
  				_win.SendCommand(command);
					
				}catch(err){Log.Add("WindowManager.SendCommand", err, LogType.Error)}
			},
	  
		  OpenWindow: function(ID)
			{
			  try{
				
   			  var _win = WindowManager.GetWindow(ID);
  				
					if(!_win.IsOpen)
					  _win.Open();
					
				}catch(err){Log.Add("WindowManager.OpenWindow", err, LogType.Error)}					
			},
			
			GetWindow: function(ID)
			{

  			  var _win = _store.GetComponent(ID);

   				if(_win == null)
  				{
  				  var params = _paramStore.GetComponent(ID);
  					WindowManager.Add(params, ID);
						_win = _store.GetComponent(ID);
  				}
					
					return _win;
			}
		
		}
	  
	}catch(err){ Log.Add("WindowsManager", err, LogType.Error);}
}


function WindowParam(URL)
{

  this.title = "Untitled";

	this.url = URL;

  this.Options = new function()
	{
  	this.height = 500;
    this.left = 50;
		this.location = 0;
  	this.menubar = 0;
  	this.resizable = 1;
  	this.scrollbars = 0;
		this.status = 0;
  	this.toolbar = 0;	
  	this.top = 50;
  	this.width = 500;
		
    this.toString = function()
    {
    	var str = "";
    
    	jQuery.each(this, function(field, value){ str += field + "=" + value + ","; });
    	
    	return str.substring(0, str.length -1);
    }
				
	}
}



function Window(Params, ID)
{
  try{

	  var _id = ID;
	
	  var _params = Params;

		var _window = null;

    return{
		
			Close: function()
			{
			  try{
				 
				  Log.Add("Window.Close", "ID = " + _id, LogType.Warning);
				
			    _window.close();
					
				}catch(err){Log.Add("Window.Close", err, LogType.Error)}					
			},
		
		  Open: function()
			{
			  try{
				
  			  _window = window.open(_params.url , _params.title, _params.Options.toString());

	  			$(_window.document.body).attr("WindowManagerID", _id);
					
					this.IsOpen = true;
					
					Log.Add("Window.Open", "ID = " + _id, LogType.Warning);
					
				}catch(err){Log.Add("Window.Open", err, LogType.Error)}					
			},
			
			SendCommand: function(command)
			{
			  try{
				
  			  _window.ManagedWindow.ProcessCommand(command);
					
				}catch(err){Log.Add("Window.SendCommand", err, LogType.Error)}					
			},
		
		  
			GetID: function()
			{
			  try{
  			  return _id;
					
				}catch(err){Log.Add("Window.GetID", err, LogType.Error)}					
			},
			
			
			
		  GetParams: function()
			{
			  try{

  			  return _params;
				
				}catch(err){Log.Add("Window.GetParams", err, LogType.Error)}				
			},
			
			SetParams: function(winParams)
			{
			  try{
  			  _params = winParams;
	  		  _window.ManagedWindow.ProcessWindowParams(_params);
				
				}catch(err){Log.Add("Window.SetParams", err, LogType.Error)}				
			},
			
			IsOpen: false
			
    }
		
	
	}catch(err){ Log.Add("Window", err, LogType.Error);}
} 


/*
				$(window).scroll(function(){
				  _scroll = (document.all)?document.body.scrollTop:window.pageYOffset;
					Global.ShowEditModeMessage(_scroll);
				});
				
*/
