function GuiItem(domNode,
                 initialData,
                 initialState)
{
  this.getState =
  function()
  {
    return _guiItemBase.getState();
  };

  this.setState =
  function(state)
  {
    _guiItemBase.setState(state);
  };

  this.getData =
  function()
  {
    return _guiItemBase.getData();
  };

  this.setData =
  function(data)
  {
    _guiItemBase.setData(data);
  };

  this.getDomNode =
  function()
  {
    return _guiItemBase.getDomNode();
  };

  this.getMouseOver =
  function()
  {
    return _guiItemBase.getMouseOver();
  };

  this.getMouseDown =
  function()
  {
    return _guiItemBase.getMouseDown();
  };

  this.addStateChangeCBF =
  function(cbf)
  {
    _guiItemBase.addStateChangeCBF(cbf);  
  };

  this.addMouseClickCBF =
  function(cbf)
  {
    _guiItemBase.addMouseClickCBF(cbf);  
  };

  this.addMouseEnterCBF =
  function(cbf)
  {
    _guiItemBase.addMouseEnterCBF(cbf);
  };

  this.addMouseLeaveCBF =
  function(cbf)
  {
    _guiItemBase.addMouseLeaveCBF(cbf);
  };

  this.addMousePressCBF =
  function(cbf)
  {
    _guiItemBase.addMousePressCBF(cbf);
  };

  this.addMouseReleaseCBF =
  function(cbf)
  {
    _guiItemBase.addMouseReleaseCBF(cbf);
  };

  this.addMouseDownCBF =
  function(cbf, interval)  
  {
    _guiItemBase.addMouseDownCBF(cbf, interval);
  };

  this.getGuiItem = 
  function()
  {
    return _guiItemBase;
  };

  /* Private part below! */	
 
  var _initGuiItem =
  function(domNode, initialData, initialState, cbo)
  {
    var stateInfos = new Array();
    stateInfos.push(new GuiItemBase.StateInfo(GuiItem.STATE_ENABLED, GuiItemBase.StateInfo.STATE_TYPE_ACTIVE));
    stateInfos.push(new GuiItemBase.StateInfo(GuiItem.STATE_DISABLED, GuiItemBase.StateInfo.STATE_TYPE_PASSIVE));
    stateInfos.push(new GuiItemBase.StateInfo(GuiItem.STATE_INVISIBLE, GuiItemBase.StateInfo.STATE_TYPE_PASSIVE));
 
    return new GuiItemBase(domNode, initialData, stateInfos, initialState, cbo);
  }
 
  var _this = this;
  var _guiItemBase = _initGuiItem(domNode, initialData, initialState, _this);
};

GuiItem.STATE_ENABLED = 1;
GuiItem.STATE_DISABLED = 2;
GuiItem.STATE_INVISIBLE = 3;

GuiItem.StyleManager =
function(styles)
{
  this.addGuiItem =
  function(guiItem)
  {  
    _guiItemBaseStyleManager.addGuiItem(guiItem);  
  };

  var _initGuiItemBaseStyleManager =
  function(styles)
  {
    var styleArray = new Array();  
    
    styleArray[GuiItem.STATE_ENABLED] = new Array();
    styleArray[GuiItem.STATE_ENABLED][GuiItemBase.MOUSE_STATE_NO_MOUSE] = styles['enabled']['noMouse'];
    styleArray[GuiItem.STATE_ENABLED][GuiItemBase.MOUSE_STATE_MOUSE_OVER] = styles['enabled']['mouseOver'];
    styleArray[GuiItem.STATE_ENABLED][GuiItemBase.MOUSE_STATE_MOUSE_DOWN] = styles['enabled']['mouseDown'];
 
    styleArray[GuiItem.STATE_DISABLED] = new Array();
    styleArray[GuiItem.STATE_DISABLED][GuiItemBase.MOUSE_STATE_NO_MOUSE] = styles['disabled']['noMouse'];
    styleArray[GuiItem.STATE_DISABLED][GuiItemBase.MOUSE_STATE_MOUSE_OVER] = styles['disabled']['mouseOver'];
    styleArray[GuiItem.STATE_DISABLED][GuiItemBase.MOUSE_STATE_MOUSE_DOWN] = styles['disabled']['mouseDown'];
 
    styleArray[GuiItem.STATE_INVISIBLE] = new Array();
    styleArray[GuiItem.STATE_INVISIBLE][GuiItemBase.MOUSE_STATE_NO_MOUSE] = styles['invisible']['noMouse'];
    styleArray[GuiItem.STATE_INVISIBLE][GuiItemBase.MOUSE_STATE_MOUSE_OVER] = styles['invisible']['mouseOver'];
    styleArray[GuiItem.STATE_INVISIBLE][GuiItemBase.MOUSE_STATE_MOUSE_DOWN] = styles['invisible']['mouseDown'];

    return new GuiItemBase.StyleManager(styleArray);
  };

  var _guiItemBaseStyleManager = _initGuiItemBaseStyleManager(styles);    
};
