  function cSplitter(oSplitter, oObject1, oCointainer, Type, oObject2){
    this.m_oSplitter = oSplitter;  // graphic object
    this.m_oObject1 = oObject1;
    this.m_oCointainer = oCointainer;        
    this.m_oObject2    = typeof(oObject2)   == 'undefined' ? null : oObject2;
    this.m_Type        = typeof(Type)       == 'undefined' ? 'H'  : Type;
    this.m_Type        = this.m_Type != 'H' || this.m_Type != 'V' ? 'H' : this.m_Type;
    this.m_oObjects    = new Array();   // to put any object for the caller
    
    this.m_oEvent = new cEvent();
    
    this.m_onmousedown = false;
    this.m_sizeMin = 0;
    this.m_clientX = 0;
    this.m_clientY = 0;
    this.m_sizeObject1 = 0;
    this.m_sizeObject2 = 0;
    this.m_callback_onmousemove = null;
    
    
    
    // -------------------------------------------------------------------        
    this.setProperties = function(sizeMin){
      this.m_sizeMin = sizeMin < 0 ? 0 : sizeMin;
    }

    // -------------------------------------------------------------------
    this._unit = function(value){
      return value + 'px';  
    };
    // -------------------------------------------------------------------        
    this._onmousedown = function(event){
      var evt = window.event || event;   
      this.  m_onmousedown = true;
      this.m_clientX = null;
      this.m_clientY = null;
      with(this.m_oCointainer){ // it's more performant to make these actions on the container and not directly on the splitter
        onmousemove = this.m_oEvent.bindEvent(this._onmousemove,this);  
        onmouseout  = this.m_oEvent.bindEvent(this._onmouseout, this);          
        onmouseup   = this.m_oEvent.bindEvent(this._onmouseup,  this);
      }
    };
    // -------------------------------------------------------------------        
    this._onmousemove= function(event){
      var evt = window.event || event;  
      if(this.  m_onmousedown == true){
        this.m_clientX = this.m_clientX == null ? evt.clientX : this.m_clientX;
        this.m_clientY = this.m_clientY == null ? evt.clientY : this.m_clientY;
        
        with(this.m_oObject1){
          if(this.m_Type == 'H'){
            this.m_sizeObject1 = (evt.clientX - this.m_clientX) + offsetWidth;
          }
          else{
            this.m_sizeObject1 = (evt.clientY - this.m_clientY) + offsetHeight;
          }
          this.m_sizeObject1 = this.m_sizeObject1 < this.m_sizeMin ? this.m_sizeMin  : this.m_sizeObject1;          
        }
        
        if(this.m_oObject2 != null){
          with(this.m_oObject2){
            if(this.m_Type == 'H'){
              this.m_sizeObject2 = (this.m_clientX - evt.clientX) + offsetWidth;
            }
            else{
              this.m_sizeObject2 = (this.m_clientY - evt.clientY) + offsetHeight;
            }
          }
          this.m_sizeObject2 = this.m_sizeObject2  < this.m_sizeMin ? this.m_sizeMin  : this.m_sizeObject2;                                
        }

        if(this.m_Type == 'H'){
          var widthMax =  this.m_oCointainer.offsetWidth -(parseInt(this.m_oCointainer.style.borderLeftWidth) + parseInt(this.m_oCointainer.style.borderRightWidth));          
          var sizeMaxX = this.m_sizeObject1 + this.m_sizeObject2 + this.m_oSplitter.offsetWidth;
          if(sizeMaxX > widthMax){
            if(this.m_sizeObject1 == this.m_sizeMin && this.m_oObject2 != null){
              this.m_sizeObject2 = widthMax - this.m_sizeObject1 - this.m_oSplitter.offsetWidth;
            }  
            if(this.m_sizeObject2 == this.m_sizeMin && this.m_oObject2 != null){
              this.m_sizeObject1 = widthMax - this.m_sizeObject2 - this.m_oSplitter.offsetWidth;
            }              
          }   
        }
        else{
          var heightMax =  this.m_oCointainer.offsetHeight -(parseInt(this.m_oCointainer.style.borderTopWidth) + parseInt(this.m_oCointainer.style.borderBottomWidth));          
          var sizeMaxY = this.m_sizeObject1 + this.m_sizeObject2 + this.m_oSplitter.offsetHeight;
          if(sizeMaxY >  this.m_oCointainer.offsetHeight){
            if(this.m_sizeObject1 == this.m_sizeMin && this.m_oObject2 != null){
              this.m_sizeObject2 = heightMax - this.m_sizeObject1 - this.m_oSplitter.offsetHeight;
            }  
            if(this.m_sizeObject2 == this.m_sizeMin && this.m_oObject2 != null){
              this.m_sizeObject1 = heightMax - this.m_sizeObject2 - this.m_oSplitter.offsetHeight;
            }              
          }   
        }
        
        with(this.m_oObject1){          
          if(this.m_Type == 'H'){
            style.width = this._unit(this.m_sizeObject1);
          }
          else{
            style.height = this._unit(this.m_sizeObject1);  
          }
        }
        if(this.m_oObject2 != null){
          with(this.m_oObject2){
            if(this.m_Type == 'H'){
              style.width = this._unit(this.m_sizeObject2);
            }
            else{
              style.height = this._unit(this.m_sizeObject2);  
            }
          }
        }

        this.m_clientX = evt.clientX;        
        this.m_clientY = evt.clientY;     
        if(this.m_callback_onmousemove != null) this.m_callback_onmousemove();
      }
    };
    // -------------------------------------------------------------------        
    this._onmouseout= function(event){
      var evt = window.event || event;        
    };
    // -------------------------------------------------------------------        
    this._onmouseover = function(event){
      var evt = window.event || event;  
    };
    // -------------------------------------------------------------------        
    this._onmouseup = function(event){
      var evt = window.event || event;  
      this.m_onmousedown = false;
      with(this.m_oCointainer){
        onmousemove = null;  
        onmouseout  = null;
        onmouseup   = null;
      }
    };

    // -------------------------------------------------------------------        
    this.onmousedown = this.m_oEvent.bindEvent(this._onmousedown, this);
    this.onmouseover = this.m_oEvent.bindEvent(this._onmouseover, this);
  }