
function KrebsLocalBaseRubrik() {
  // initialisierung

  var __default  = '';
  var __selected = '';

  var cands = $('ntl_top_content').immediateDescendants();
   
  for (var i = 0; i < cands.length; i++){
    var rubrik = cands[i];

    if (rubrik.hasClassName('rubrik')){
      var rid = rubrik['id'];

      if (rubrik.hasClassName('rubrik_sel')){
        __default  = rid;
        __selected = rid;
      }
    }
  }

  // called as KrebsLocalBase.rubrik.select();

  this.select = function(elem){
    elem = elem.parentNode;
 
    var rubrik_new = elem['id'];
    var rubrik_old = __selected;

    // schneller abgang, wenn sich nichts aendert
    if (rubrik_old == rubrik_new) return;

    // layout aendern 
    turnOff(rubrik_old);
    turnOn (rubrik_new);

    // mouse beobachten, wenn alternative rubrik ausgeklappt
    if (rubrik_new != __default){  
      document.onmousemove = mouseMoved; 
    }

    // und natuerlich merken, was wir gerade anzeigen
    __selected = rubrik_new;
  };

  this.restore = function() {
    // ueberwachung wieder abschalten
    document.onmousemove = '';

    // layout zueruecksetzen
    turnOff(__selected);
    turnOn (__default);

    __selected = __default;
  };

  var turnOn = function(id) {
    if (!id){ return };

    // rubrik tab farblich verändern
    if ($(id)){
      $(id).addClassName('rubrik_sel');
      $(id).addClassName('bl_red');
    }

    // rubrik links anzeigen
    if ($(id+'_links')){  $(id+'_links').show();  }

    // grauschleier setzen wenn nötig
    if (id != __default){
      $('ntl_filter').setStyle({opacity: 0.5});
      $('ntl_filter').show();
    }
  };

  var turnOff = function(id){
    if (!id){ return };

    if ($(id)){
      $(id).removeClassName('rubrik_sel');
      $(id).removeClassName('bl_red');
    }

    if ($(id+'_links')){ $(id+'_links').hide(); }

    $('ntl_filter').hide();
  };

  // ------------------------------------------------------------------
  // mouse listener
  // ------------------------------------------------------------------

  var mouseMoved = function(event){
    // this is my own evil explorer hack
    if (!event){ event = window.event; }

    var mleft = Event.pointerX(event);
    var mtop  = Event.pointerY(event);

    var p1 = Position.page($('ntl_top_content'));
    var p2 = Position.page($('ntl_bot_content'));

    var dim = $('ntl_top_content').getDimensions();

    var x1 = p1[0] - 10;
    var y1 = p1[1] - 10;

    var x2 = p2[0] + dim.width + 10;
    var y2 = p2[1] + dim.height + 10;

    if ((mleft < x1) || (mleft > x2) ||
        (mtop  < y1) || (mtop  > y2)){

      KrebsLocalBase.rubrik.restore();
    }
  };
};

// --------------------------------------------------------------------
// --------------------------------------------------------------------
// --------------------------------------------------------------------

function KrebsLocalBaseSearchInput() {
  var changed = new Array;

  this.focus = function(ident) {
    if (changed[ident]){ return; }

    $(ident).value = '';
    $(ident).removeClassName('grey');

    changed[ident] = 1;
  };

  this.unfocus = function(ident, value) {
    if ($(ident).value){ return; }

    $(ident).addClassName('grey');
    $(ident).value = value;

    changed[ident] = 0;
  };
};

// --------------------------------------------------------------------
// --------------------------------------------------------------------
// --------------------------------------------------------------------

function KrebsLocalBase() {
  // ------------------------------------------------------------------
  // __variablen und __CONSTANTEN
  // ------------------------------------------------------------------

  var __impressum_moved = 0;

  // ------------------------------------------------------------------
  // externe und _intern methoden
  // ------------------------------------------------------------------

  this.onLoad = function() {
    this.moveImpressum();

    this.rubrik = new KrebsLocalBaseRubrik;
    this.search = new KrebsLocalBaseSearchInput;
  };

  this.onUnload = function() {
  };

  // ------------------------------------------------------------------
  // layout-funktionen
  // ------------------------------------------------------------------

  this.moveImpressum = function(force) {
    if (__impressum_moved && !force) return;

    var o_impr = document.getElementById('impressum');

    if (!o_impr){ return; };

    // erstmal ausblenden, aber hoehe erhalten
    o_impr.style.visibility = 'hidden';

    var o_col1 = document.getElementById('col1');
    var o_col2 = document.getElementById('col2');

    var c1h = _simple_get_height(o_col1);
    var c2h = _simple_get_height(o_col2);

    c1h += 5;

    if (c1h > c2h){
      o_col2.style.height = c1h+'px';
      o_impr.style.bottom = (c2h - c1h) + 'px';
    }

    // und jetzt wieder sichtbar machen
    o_impr.style.visibility = 'visible'; 

    __impressum_moved = 1;
  };

  var _simple_get_height = function(element) {   // reduced copy from protoype.js
    var display = element.style.display;

    if (display != 'none' && display != null) // Safari bug
      return element.offsetHeight;

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily

    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;

    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';

    var originalHeight = element.clientHeight;

    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;

    return originalHeight;
  };

  // ------------------------------------------------------------------

  /* this.makeWide = function() {
    var link = document.createElement('link');

    link.setAttribute('href', '/.files/ntp/css/wide.css');
    link.setAttribute('rel', 'stylesheet');
    link.setAttribute('type', 'text/css');

    document.getElementsByTagName('head')[0].appendChild(link);
  }; */
};

// object unter contruktor-namen global bereitstellen
var KrebsLocalBase = new KrebsLocalBase();

// sobald die DOM-Struktur steht, koennen wir drinrumschreiben,
// bilder und css werden parallel geladen
Event.observe(document, "dom:loaded", function(){ KrebsLocalBase.onLoad(); } );

// unload, nur einbinden wenn auch wirklich was aufgerufen wird
/* Event.observe(window, "unload", function(){ KrebsLocalBase.onUnload(); } ); */
