

/*
* Orginal: http://adomas.org/javascript-mouse-wheel/
* prototype extension by "Frank Monnerjahn" themonnie @gmail.com
*/
Object.extend(Event, {
        wheel:function (event){
                var delta = 0;
                if (!event) event = window.event;
                if (event.wheelDelta) {
                        delta = event.wheelDelta/120;
                        if (window.opera) delta = -delta;
                } else if (event.detail) { delta = -event.detail/3;     }
                return Math.round(delta); //Safari Round
        }
});
/*
* end of extension
*/
 
 
function handleMouseScroll(e) {
  
  if (Event.wheel(e) > 0)
    BasicScrollbarHandler.scrollUp();
  else
    BasicScrollbarHandler.scrollDown();
}
 
 
 




/**
 * A wrapper for the screen resolution.
 * The method "getAvailableHeight" returns the available height,
 * that is not covered by the header, the navigation or the footer.
 *
 * @author Florian Herlings <florian.herlings@gmail.com>
 */
var CurrentScreen = {
  
  /**
   * Returns the width of the viewport (= available width)
   */
  'getWidth': function() {
    return document.viewport.getDimensions().width;
  },
  
  
  /**
   * Returns the height of the viewport (= available width)
   */
  'getHeight': function() {
    return document.viewport.getDimensions().height;
  },
  
  
  /**
   * Returns the part of the available height, that is not
   * covered by the header oder footer navigation containers.
   */
  'getAvailableHeight': function() {
    
    var lostHeight = 0;
    lostHeight += $$('#header')[0].getHeight();
    lostHeight += $$('#navigation')[0].getHeight();
    lostHeight += $$('.footer_navigation')[0].getHeight();
    
    return this.getHeight() - lostHeight;
    
  }//getAvailableHeight()
  
  
}//CurrentScreen





/**
 * Stellt die Funktionalität der Scrolleiste zur Verfügung.
 * 
 * @author Florian Herlings <florian.herlings@gmail.com>
 */
var BasicScrollbarHandler = {
  
  /**
   * In dieser Variable wird der Slider abgelegt,
   * da man in den scroll*() und der slide()-Methode
   * eine Referenz darauf benötigt.
   * @var Control.Slider
   */
  'slider': false,

  /**
   * Konstruktor
   */
  'init': function(box_id) {
    
    BasicScrollbarHandler.scroll_box_id = box_id;
    
    this.init_scrollbar();
    this.init_scrollbar_buttons();
    
  },//init()

  /**
   * Initialisiert die "Script.aculo.us"-Slider-Klasse.
   */
  'init_scrollbar': function() {
    
    
    var TrackHoehe = $(BasicScrollbarHandler.scroll_box_id).getHeight() - 20;
    var InhaltsHoehe = $(BasicScrollbarHandler.scroll_box_id).down('.scroll_content').getHeight();
    
    try {
        console.log("INIT_SCROLLBAR: TRACK:"+TrackHoehe+" INHALT:"+InhaltsHoehe );
    } catch(e) {}
    
    if (InhaltsHoehe > TrackHoehe) {
      
        $('zoom_slider').show();
      
          
        try {
          BasicScrollbarHandler.slider.setDisabled();
        }catch(e) {}
        
        BasicScrollbarHandler.slider = new Control.Slider(
          $('zoom_slider').down('.handle'),
          $('zoom_slider'),
          {
            axis: 'vertical',
            onSlide: BasicScrollbarHandler.slide,
            onChange: BasicScrollbarHandler.slide
          });
    
        $(BasicScrollbarHandler.scroll_box_id).down('.scroll_content').style.top = "0px";
          
    } else {
      
      BasicScrollbarHandler.slider = false;
      $('zoom_slider').hide();
      
        $(BasicScrollbarHandler.scroll_box_id).down('.scroll_content').style.top = "0px";
      
      
    }
        

  },//init_scrollbar()
  
  
  /**
   * Die Scorlleiste soll oben und unten so Buttons
   * haben. Wenn man auf diese klickt, soll der Scroller
   * entsprechend scrollen.
   */
  'init_scrollbar_buttons': function() {
    
    $('scroll_up_button').observe('click', BasicScrollbarHandler.scrollUp);
    $('scroll_down_button').observe('click', BasicScrollbarHandler.scrollDown);
    
  },//init_scrollbar_buttons()
  
  
  /**
   * Sorgt dafür, dass die Leiste um 10% nach oben gescrollt wird
   * und dass die Leiste nicht "zu weit" nach oben scrollt.
   */
  'scrollUp': function() {
    
    var newValue = BasicScrollbarHandler.slider.value - 0.1;
    if (newValue < 0) newValue = 0;
    try {
      BasicScrollbarHandler.slider.setValue( newValue );
    } catch(e) {}
    
  },//scrollUp
  
  
  /**
   * Sorgt dafür, dass die Leiste um 10% nach unten gescrollt wird
   * und dass die Leiste nicht "zu weit" nach unten scrollt.
   */
  'scrollDown': function() {
  
    var newValue = BasicScrollbarHandler.slider.value + 0.1;
    if (newValue > 1) newValue = 1;
    try {
      BasicScrollbarHandler.slider.setValue( newValue );
    } catch(e) {}
    
  },//scrollDown()
  
  
  /**
   * Wird aufgeruften, wenn der Wert der Leiste sich ändert
   * (durch direktes Verschieben des Sliders oder durch Anklicken
   * eines Buttons). Die Methode ermittelt, um wieviel insgesamt
   * gescrollt werden muss (= wieviel passt denn da nicht mehr
   * in die Box rein) und verschiebt den Inhalt der Box dem-
   * entsprechend
   * Wichtig zu wissen ist, dass der "value" immer einen Wert
   * zwischen 0 und 1 angibt: Hat man den Slider 1/4 herunter
   * gescrollt, ist der übergebene Wert "value" = 0.25!
   */
  'slide': function(value) {
    
    var box = $(BasicScrollbarHandler.scroll_box_id);
    
    var box_content = box.down('.scroll_content');
    
    var hidden_pixels = box_content.getHeight() - box.getHeight() + 40;
    
    box_content.style.top = (-1*hidden_pixels*value)+"px";
    
  }//slide()
  
  
}//ScrollbarHandler








/**
* The ResizeDetector object checks the window sizes
* every second to detect if the window has been resized.
* If this is the case, it calls the "correct_position"
* function on the MultiContainerHandler, which pushes
* all the containers to their new positions.
*
* @author Florian Herlings <florian.herlings@gmail.com>
*/
var ResizeDetector = {

  /**
   * Constructor
   */
  'init': function() {
  
    ResizeDetector.buffer = document.viewport.getDimensions();
    new PeriodicalExecuter(ResizeDetector.check, 0.25);
    
  },//init()
  
  /**
   * Tries to find out, if the window has been resized. This method
   * has to be called periodically, but not __too__ often, because
   * that may slow the browser engine down significantly.
   */
  'check': function() {
        
    if ((CurrentScreen.getWidth() != ResizeDetector.buffer.width)
        || (CurrentScreen.getHeight() != ResizeDetector.buffer.height)) {
      
      ResizeDetector.buffer = document.viewport.getDimensions();
      ResizeDetector.hasUpdated();
      
    }//if
    
  },//check()


  /**
   * This method is called, whenever the windows has been resized.
   */
  'hasUpdated': function() {
    
      if ($$('body.default').length != 0)
        SchauspielerBoxenContainer.update();
        
        
      if ($$('body.fotografen').length != 0)
        BasicScrollbarHandler.init_scrollbar();
        
      if ($$('body.news_page').length != 0)
        BasicScrollbarHandler.init_scrollbar();
      
      if ($$('body.schauspieler_detail').length != 0)
        BasicScrollbarHandler.init_scrollbar();
        
      
      
  }//hasUpdated()


}//ResizeDetector





/**
 * Nimmt allen Links, die die Klasse "blur_me" haben, nach
 * dem Klicken den Focus.
 *
 * Achtung:
 * Das nimmt denen auch jede Möglichkeit den Button zu benutzen!
 * Für alle Buttons mit Funktion, muss das separat in der
 * jeweiligen Funktion gemacht werden.
 */
function blur_me() {
  
  $$('a.blur_me').each(function(link) {
  
    link.observe('click', function() { this.blur(); return false; });  
    
  });
  
}//blur_me()
