function boxPreload() {
  preload('top_left');
  preload('top_right');
  preload('bottom_left');
  preload('bottom_right');
  var colors = ['333333','336699','339900'];
  var types = ['box_highlight','box_shadow','line','bottom_left','bottom_right','top_left','top_right'];
  for (var i=0; i<types.length; i++) {
    for (var j=0; j<colors.length; j++) {
      preload(types[i]+'_'+colors[j]);
    }
  }
}

function Box(parent) {
  this.o = parent;
  this.corners = [];
  this.classNames = ['topLeftFOO','topRight','bottomLeft','bottomRight'];
  this.cornerNames = ['top_left','top_right','bottom_left','bottom_right'];
  this.cornerData = [];
  this.content = this.o.getElementsByTagName('div')[0];
  this.shadow = document.createElement('div');
  this.shadow.className = 'shadow';
  this.o.appendChild(this.shadow);
  this.boxColor = 'ffffff';
  this.regExp=/ /g;
  this.reflow = function() {
    // workaround for redraw bug when dynamically writing content
    this.o.style.height = (this.o.style.height?'':'auto');
  }
  this.resizeHandler = function() {
    this.corners[1].style.right = this.corners[3].style.right = ((this.content.offsetWidth+1)%2==0?-1:0)+'px';
    this.corners[2].style.bottom = this.corners[3].style.bottom = ((this.content.offsetHeight+1)%2==0?-1:0)+'px';
  }
  this.setBGImage = function(bgImage) {
    this.bgImage = bgImage;
    this.o.style.backgroundImage = 'url(image/box_highlight_'+this.bgImage+'.gif)';
    this.shadow.style.backgroundImage = 'url(image/box_shadow_'+this.bgImage+'.gif)';
    this.setColor(bgImage);
  }
  this.setColor = function(color) {
    this.color = color;
    for (var i=0; i<this.corners.length; i++) {
      this.corners[i].style.backgroundImage = 'url(image/'+this.cornerNames[i]+'_'+color+'.gif)';
    }
  }
  for (var i=0; i<4; i++) {
    this.corners[i] = document.createElement('div');
    with (this.corners[i]) {
      className = 'corner ' + this.classNames[i];
      style.width = '7px';
      style.height = '7px';
    }
    parent.appendChild(this.corners[i]);
  }
  if (isIE) this.resizeHandler();
}

boxPreload();