function Box (id) {
  this.object = null;
  this.left = 0;
  this.top = 0;
  this.width = 0;
  this.height = 0;
  this.classes=[];
  this.opacity=0;
  this.step = 0;
  this.id = id;
  this.working=false;
}

Box.prototype.getTagObject = function() {
  if (this.object == null)
    this.createTagObject();

  return this.object;
}

Box.prototype.createTagObject = function() {
  this.object = document.createElement('div');
  this.object.setAttribute('id', this.id);
  this.object.object=this;
}

Box.prototype.attachTagObject = function(tag) {
  this.object = tag;
}

Box.prototype.getPosition = function () {
  return {left:this.left,top:this.top};
}

Box.prototype.setDemensions = function (width,height) {
  if (width !== null) {
    this.width = width;
    this.getTagObject().style.width = width + 'px';
  }
  if (height !== null) {
    this.height = height;
    this.getTagObject().style.height = height + 'px';
  }
}

Box.prototype.getDemensions = function () {
  return {height:this.height,width:this.width};
}

Box.prototype.setBackground = function (color) {
  this.getTagObject().style.backgroundColor = color;
}

Box.prototype.addClass = function(className) {
  this.classes[className] = true;
  this.updateClasses();
}

Box.prototype.delClass = function(className) {
  delete(this.classes[className]);
  this.updateClasses();
}

Box.prototype.updateClasses = function() {
  var classes = '';
  for (var i in this.classes)
    classes += i+' ';
  this.getTagObject().className=classes;
}

Box.prototype.setVisibility = function(num) {
  this.opacity = num;
  this.object.style.opacity = this.opacity/10;
  this.object.style.display = this.opacity?'block':'none';
  window.status = this.opacity;
}

Box.prototype.switchVisibility = function(force, N) {
  if (force === true || (force === N && this.step <= 0)) {
    this.step = 1;
  } else {
    this.step = -1;
  }
  if (!this.A) {
    this.A = new Animator(this.frame, null, this);
  }
  this.A.run(20);
}

Box.prototype.getVisibility = function() {
  return this.opacity;
}

Box.prototype.frame = function () {
  if (this.step>0?this.opacity >= 10:this.opacity <= 0)
    return false;

  this.setVisibility(this.opacity+this.step);
}

Box.prototype.switchWorking = function(force) {
  if (this.working == false) {
    this.addClass('working');
  } else {
    this.delClass('working');
  }
  var childs = this.object.childNodes;

  for(var a in childs)
    if (childs[a].nodeName == "INPUT")
      childs[a].disabled=(this.working == false?"true":"");

  this.working = !this.working;
}

Box.prototype.isWorking = function() {
  return this.working;
}

Box.prototype.clone = function () {
  var obj = new this.constructor();
  return obj;
}
