/*
 * id ist die ID des Checkboxelements, dass durch ein Bild ersetzt wird
 * hidden ist die ID eines input type="hidden" in den der Status geschrieben wird true/false
 */
function Checkbox(id) {
  var e = document.getElementById(id);
  var textfield = null;
  var value = null;
  var disabled = null;
  var name = null;

  var img;
  var img_checked;
  var img_active;
  var img_unchecked;
  var img_disabled;
  var state;

  this.downHandler = function(e) {
    img.src = img_active.src;
  }

  this.upHandler = function(e) {
    switch (state) {
      case 'checked' :
        img.src = img_unchecked.src;
        state = 'unchecked';
        textfield.value = '';
        break;
      case 'unchecked' :
        img.src = img_checked.src;
        state = 'checked';
        textfield.value = value;
        break;
    }
  }

  this.outHandler = function(e) {
    switch (state) {
      case 'checked':
        img.src = img_checked.src;
        break;
      case 'unchecked':
        img.src = img_unchecked.src;
        break;
    }
  }

  this.preloadImages = function() {
    img_checked = new Image();
    img_checked.src = 'imagepfad/chkbox_chk.gif';
    img_active = new Image();
    img_active.src = 'imagepfad/chkbox_active.gif';
    img_unchecked = new Image();
    img_unchecked.src = 'imagepfad/chkbox_unchk.gif';
    img_unchecked_disabled = new Image();
    img_unchecked_disabled.src = 'imagepfad/chkbox_unchk_dis.gif';
    img_checked_disabled = new Image();
    img_checked_disabled.src = 'imagepfad/chkbox_chk_dis.gif';
    img = new Image();
  }

  this.installEventHandler = function() {
    if (img.addEventListener) {
      img.addEventListener('mousedown', this.downHandler.bindAsEventListener(this), false);
      img.addEventListener('mouseup', this.upHandler.bindAsEventListener(this), false);
      img.addEventListener('mouseout', this.outHandler.bindAsEventListener(this), false);
    } else {
      img.attachEvent('onmousedown', this.downHandler.bindAsEventListener(this));
      img.attachEvent('onmouseup', this.upHandler.bindAsEventListener(this));
      img.attachEvent('onmouseout', this.outHandler.bindAsEventListener(this));
    }
  }

  this.insertNodes = function() {
    textfield = document.createElement('input');
    textfield.setAttribute('type', 'hidden');
    textfield.setAttribute('name', name);
    e.parentNode.insertBefore(textfield, e);
    e.parentNode.replaceChild(img, e);
  }

  this.init = function() {
    value = e.getAttribute('value');
    name = e.getAttribute('name');
    // aw 2008-10-03 wegen IE anders, IE liefert immer etwas für disabled zurück
    // disabled = e.getAttribute('disabled') != null;
    disabled = e.disabled;
    // alert('disabled: ' + disabled);
    // aw 2008-10-03 wegen IE anders, IE liefert immer etwas für checked zurück
    // state = e.getAttribute('checked') != null ? 'checked' : 'unchecked';
    state = e.checked ? 'checked' : 'unchecked';
    // alert('state: ' + state);
    this.preloadImages();
    this.insertNodes();
    if (disabled) {
      switch (state) {
        case 'checked':
          img.src = img_checked_disabled.src;
          textfield.value = value;
          break;
        case 'unchecked':
          img.src = img_unchecked_disabled.src;
          textfield.value = '';
          break;
      }
    } else {
      img.style.cursor = 'pointer';
      this.installEventHandler();
      switch (state) {
        case 'checked':
          img.src = img_checked.src;
          textfield.value = value;
          break;
        case 'unchecked':
          img.src = img_unchecked.src;
          textfield.value = '';
          break;
      }
    }
  }

  if (e) {
    this.init();
  }
}
