
function ListModel(xmlHttpReq) 
{
  var _controller = null;
  var _xmlHttpReq = xmlHttpReq;


  this.setController = setController;
  this.getList = getList;
  
  function setController(controller)
  {
    _controller = controller;
  } 

  function getList(optionString) 
  {
      if (_xmlHttpReq.readyState == 4 || _xmlHttpReq.readyState == 0) 
  		{
  		  if(optionString != 'ServerTest')
          _xmlHttpReq.open("GET", Application_MainURL + 'Feed.asp?Command=' + optionString, true);
        else
          _xmlHttpReq.open("GET", Application_MainURL + 'ServerTests/TestPage.asp?Command=TestResults', true);
        
        _xmlHttpReq.onreadystatechange = function()
        {
      		if (_xmlHttpReq.readyState == 4) 
      		{
            var ob = eval('(' + _xmlHttpReq.responseText + ')');
            _controller.setList(ob, optionString, _xmlHttpReq);      
      		}
      		
        }
         
        xmlHttpReq.send(null);

  		}	
  }

}

function ListController(widgetName, defaultCommand, listModel, isOpen, pageController) 
{
  this._targetControlID = widgetName + 'Content';
  this._defaultCommand = removePars(defaultCommand);
  this._listModel = listModel;
  this.getList = getList;
  this.setList = setList;
  this.disclose = disclose;
  this.pageController = pageController;
  this.AJAXCommand = AJAXCommand;
  this.submit = submit;
  this.addFormProperty = addFormProperty;
  this.updateFormProperty = updateFormProperty;
    
  var _parameters = parseParameters(defaultCommand);
  var _targetIsOpen = isOpen;
  var _widgetName = widgetName;

  function submit()
  {
    var s = '';
    for (var ct in _parameters)
    {
      s += '&' + ct + '=' + _parameters[ct].value + '\n';
    }
    
    this.getList();
    setWaitContent();

  }
  
  function addFormProperty(id, type, value)
  {
    _parameters[id] = 
    {
      'type' : type,
      'value' : value
    }
    
  }
  
  function updateFormProperty(key, value)
  {
    _parameters[key].value = value;
  }
  
  function AJAXCommand(key, value)
  {
    if (_parameters[key] == null)
      _parameters[key] = {};
      
    _parameters[key].value = value;    
    this.getList();
    setWaitContent();
  }
  
  function removePars(stringa)
  {
    var com = stringa.split('&');
    return com[0];
  }
  
  function parseParameters(stringa)
  {
    var retOb = {};
        
    var pars = stringa.split('&');    
    
    for (var i=1;i<pars.length;i++)
    {
        var item = pars[i].split('=');
        retOb[item[0]] = 
        {
          'type' : 'string',
          'value' : item[1]
        }        
    }
    
    return retOb;
  }

  function getList(optionString)
  {	    
    var params = _parameters;
    for (var par in pageController.Parameters)
    {
      if (params[par] == null)
        params[par] = {};

        params[par].value = pageController.Parameters[par];          
    }
    
    
    var paramString = '';
    
    for (var par in params)
    {
      paramString += '&' + par + '=' + escape(params[par].value);    
    }
         
    var destDiv = document.getElementById(this._targetControlID);
    
		if (_targetIsOpen == true)
		{
      this._listModel.getList(this._defaultCommand + paramString);
    }
  }

  function setWaitContent()
  {
    var waitContent = '<div class="WaitImg"></div>';

    var destDiv = document.getElementById(_widgetName + 'Content');             
    destDiv.innerHTML = waitContent;              
  }

  function setList(obj)
  {    
    var destDiv = document.getElementById(this._targetControlID);
    
    if (isValid(obj.Empty) == false && obj.Empty != '@HIDE@')
    {
      var Du = new Dump(destDiv, _widgetName);

      if(isValid(obj.WidgetHeaderText) == true)
      {
          var hd = document.getElementById(_widgetName + 'WidgetHeader');
          
          if (typeof obj.WidgetHeaderText == 'object')
            hd.innerHTML = Du.HTMLdump(obj.WidgetHeaderText);
          else
            hd.innerHTML = obj.WidgetHeaderText;
            
          delete obj.WidgetHeaderText;
      }
                              
      var HTMLString = Du.HTMLdump(obj);
      destDiv.innerHTML = HTMLString;        
    }
    else
      destDiv.parentNode.style.display = 'none';
  }

  function disclose(toggleId, target, metaClassName)
  {
    var ob = document.getElementById(target);        
    ob.style.display = (_targetIsOpen == true) ? 'none' : 'block';		

    _targetIsOpen = !_targetIsOpen;
    var toggleButton = document.getElementById(toggleId);        

    if ( _targetIsOpen == true)
    {
        this.getList(this._defaultCommand);      
        toggleButton.className = 'Open' + metaClassName;
    }
    else
        toggleButton.className = 'Closed' + metaClassName;  
  }

}

