Base = {
  popup: function(url, name, params, focus){
    var myWin;
    name   = (name || 'popupwindow');
    params = Object.extend({
      width:600, height:400, resizable:'yes', status:'no', directories:'no', hotkeys:'yes', location:'no', menubar:'no', scrollbars:'yes', toolbar:'no'
      }, (params || {})
    );

    paramString = $H(params).map(function(pair){return pair.join('=')}).join(',');
    
    if ((myWin = window.open(url,name,paramString))){
      if(focus) myWin.focus();
      return myWin;  
    }
    return null;
  },

  initRolloverImgs: function(){
    var img, loader, lowSrc, highSrc;
    var re = /(.*)\.(.*)\?ro/;
    
    $('img').each(function(){
      var img = this;
      if (re.exec(img.src)){
        img.lowSrc  = img.src;
        img.highSrc = RegExp.$1+'-a.'+RegExp.$2;
        loader      = new Image(); 
        loader.src  = img.highSrc;
        
        $(img).hover(
          function(){ this.src = this.highSrc;},
          function(){ if (!this.high) this.src = this.lowSrc; }
        );
        img.setHigh = function(){ img.high = true;  $(img).mouseover(); };
        img.setLow  = function(){ img.high = false; $(img).mouseout();  };
      }
    });
  },

  translate: function(lang){
    $('.locale').each(function(){
      var el = this;
      $.get('texte/'+el.id+"-"+lang+".txt", function(data){
        $(el).html(data);
      })
    });

    try{
      $('#translate_'+lang)[0].setHigh();
      if (Base.translate.current != lang) $('#translate_'+Base.translate.current)[0].setLow();
    } catch (e) {}

    Base.translate.current = lang;
  }
}

var Translator = function(lang){
  $(function(){ Base.translate(lang); });
}

var popup = function(which, on){
  el = $('#'+which);
  if (popup.active) popup.active.hide();
  el[on ? 'show' : 'hide']();
  popup.active = on ? el : null;
}

var StackManager = function(stacks, options) {
  var myself = this;
  var currentPos    = 0;
  var preloads      = {};
  var cLeft, cRight, lastClickedImage;
  var stacksCount = 0;
  for (o in stacks) {stacksCount++};

  options = $.extend({
    suffix: 'jpg',
    first:  ''
  }, arguments[1] || {});

  $(function(){
    cLeft   = $("#stapel_links");
    cRight  = $("#stapel_rechts");

    var next = function(){ 
      currentPos ++;
      if (currentPos == stacks[currentTopic]) currentPos = 0;
      showPic(currentTopic, currentPos);
    }
  
    var last = function(){
      currentPos --;
      if (currentPos==-1) currentPos = stacks[currentTopic]-1;
      showPic(currentTopic,currentPos);
    }

    cRight.click(next);
    cLeft.click(last);
    $('img[name=bildgross]').click(next);
    

    $.each(stacks, function(name, height){
      var stapel;
      
      preloads[name] = {pics: [], texts: [], icons: []};
  
      // preloading
      var i;
      for (i=0; i<height; i++){
        var img = new Image();
        img.src = "img/"+name+(i+1)+"."+options.suffix; 
        preloads[name].pics.push(img);
        var jmg = new Image();
        jmg.src = "img/"+name+"-t.gif";  
        preloads[name].texts.push(jmg);
        var kmg = new Image();
        kmg.src = "img/"+name+"-i.gif";  
        preloads[name].icons.push(kmg);
      }
      
      if ((stacksCount == 1) || (name == options.first)) myself.clik(name, (height>1));

      $('#stapel_'+name).click(function(event){ myself.clik(name, (height>1), event || window.event) });
    });
  });

  this.clik = function (topic, showArrows, event){
    if (options.hide) $('#'+options.hide).fadeOut();
    if (event) {
      var clickedImage = event.target || event.srcElement;
      if (lastClickedImage) {
        if (clickedImage == lastClickedImage) return;
        else {
          $(lastClickedImage).siblings('span').first().removeClass('active');
          if (lastClickedImage.setLow) lastClickedImage.setLow();
        }
      }
      $(clickedImage).siblings('span').first().addClass('active');
      if (clickedImage.setHigh) clickedImage.setHigh();
      lastClickedImage = clickedImage;
    }

    cLeft.css({
      visibility: (showArrows ? "visible" : "hidden")
    });

    cRight.css({
      visibility: (showArrows ? "visible" : "hidden")
    });

    currentTopic  = topic;
    currentPos    = 0;
    
    showPic(currentTopic, currentPos);
  }

  var showPic = function(topic,num){
    var img, legendeText;
    legendeText = $('#legendeText');
    if (legendeText.size() > 0){
      var tryText =  'texte/'+topic+"_"+num+".txt";
      if (showPic.currentText != tryText) {
        $.ajax({
          url: tryText,
          success:  function(data){ legendeText.html(data); Base.initRolloverImgs(); showPic.currentText = tryText; },
          error:    function(){
            tryText = 'texte/'+topic+".txt";
            if (showPic.currentText != tryText) {
              $.ajax({
                url: tryText,
                success:  function(data){ legendeText.html(data); Base.initRolloverImgs(); showPic.currentText = tryText;},
                error:    function(){ legendeText.html('');}
              });
            }
          }
        });
      }
    } else {
      $('img[name=legende]').attr('src', preloads[topic].texts[num].src); 
    }
    $('img[name=bildgross]').attr('src', preloads[topic].pics[num].src);
    $('img[name=minibild]').attr('src',  preloads[topic].icons[num].src); 
  }
};

var BufferedLoader = function(images){
  buffer = [];
  
  $(function(){
    $.each(images, function(i, id){
      buffer[i]     = new Image();
      buffer[i].img = id;
      $(buffer[i]).load(function(){
        $('#'+this.img).attr("src", this.src);
      });
      buffer[i].src = id+".gif"; 
    });
  });
}

$(function(){
  Base.initRolloverImgs();
});

