/**
 * In dieser Datei geht es ausschließlich um das "Pinnen" von Menü und Heldeninfo
 *
 * Benötigt mootools
 */


/**
 * Funktion setzt Cookie und veranlasst, dass das Menü/Heldeninfo ein- bzw. ausgeblendet wird
 * @param String type : 'menu' oder 'heldeninfo'
 * @param int val     : val==0 bedeutet: anzeigen
 *                      val==1 bedeutet: ausblenden
 */
function my_pin(type, val) {
  if(type != 'menu' && type != 'heldeninfo') {
    alert('Pintyp ist unbekannt!');
    return;
  }
  // Cookie setzen
  try {
    // http://mootools.net/docs/core/Utilities/Cookie
    Cookie.write("pin_"+type, val, {duration: 365});
  } catch (e) {
    alert('Cookie konnte nicht gesetzt werden. Bitte Browsereinstellungen überprüfen.');
  }
  // ein-/ausblenden
  toggle_boxes(type, val);
}

/**
 * Funktion kümmert sich um das Ein- und Ausblenden der Elemente
 * @param String type : 'menu' oder 'heldeninfo'
 * @param int val     : val==0 bedeutet: anzeigen
 *                      val==1 bedeutet: ausblenden
 */
function toggle_boxes(type, val) {
  // benötige Elemente
  if(type == 'heldeninfo') {
    var is_already_pinned = $('is_heldeninfo_pinned');
    var menu_box          = $('heldeninfoBox');
    var menu_short        = $('heldeninfoShort');
    var menu_full         = $('heldeninfo');
    var buttons_box       = $('heldeninfo_pin_buttons');
    var button_fixieren   = $('heldeninfo_not_pinned');
    var button_ausblenden = $('heldeninfo_pinned');
  } else if(type == 'menu') {
    var is_already_pinned = $('is_menu_pinned');
    var menu_box          = $('menuBox');
    var menu_short        = $('menuShort');
    var menu_full         = $('menu');
    var buttons_box       = $('menu_pin_buttons');
    var button_fixieren   = $('menu_not_pinned');
    var button_ausblenden = $('menu_pinned');
  }

  if(is_already_pinned && menu_full && menu_short && menu_box && button_fixieren
    && button_ausblenden && buttons_box) {
    if(val == 1) {
      // ausblenden
      menu_full.setStyle('display', 'none');
      menu_short.setStyle('display', 'block');
      buttons_box.setStyle('display', 'none');
    } else {
      // anzeigen
      menu_box.setStyle('display', 'block');
      menu_full.setStyles({
        display: 'block',
        position: '', // entfernt ggf. das 'fixed'
        top: '',
        left: '',
        right: ''
      });
      menu_short.setStyle('display', 'none');
      buttons_box.setStyles({ display: 'block', position: 'absolute' });
      button_fixieren.setStyle('display', 'block');
      button_ausblenden.setStyle('display', 'none');
    }
    is_already_pinned.set('html', val);
  } else {
    alert('Fehler: Eines der benötigten Elemente wurde nicht gefunden!');
  }
}

/**
 * Funktion blendet das Menü/Heldeninfo ein, solange wie mit der Maus darüber gefahren wird.
 * Bei einer Mausbewegung wird eine Unterfunktion (versteckeMenuEvtlWieder() bzw.
 * versteckeHeldeninfoEvtlWieder()) aufgerufen, die prüft, ob das Menü/Heldeninfo wieder aus-
 * geblendet werden soll.
 * Die Funktion wird durch den Eventhandler onmouseover über das gepinnte Element aufgerufen
 * @see http://mootools.net/docs/core/Element/Element.Event
 *
 * @param String type : 'menu' oder 'heldeninfo'
 */
function menu_einblenden(type) {
  if(type != 'menu' && type != 'heldeninfo') {
    alert('Fehler: Dieser Typ ist nicht erlaubt!');
    return;
  }
 
  // benötige Elemente
  if(type == 'heldeninfo') {
    var is_already_pinned = $('is_heldeninfo_pinned');
    var menu_full         = $('heldeninfo');
    var menu_short        = $('heldeninfoShort');
    var buttons_box       = $('heldeninfo_pin_buttons');
    var button_fixieren   = $('heldeninfo_not_pinned');
    var button_ausblenden = $('heldeninfo_pinned');
  } else if(type == 'menu') {
    var is_already_pinned = $('is_menu_pinned');
    var menu_full         = $('menu');
    var menu_short        = $('menuShort');
    var buttons_box       = $('menu_pin_buttons');
    var button_fixieren   = $('menu_not_pinned');
    var button_ausblenden = $('menu_pinned');
  }
  
  menu_full.setStyles({ display: 'block', position: 'fixed' });
  button_ausblenden.setStyle('display', 'block');
  button_fixieren.setStyle('display', 'none');
  buttons_box.setStyles({ display: 'block', position: 'fixed' });
  
  if(type == 'menu') {
    menu_full.setStyles({ top: '155px', left: '10px' });
    menu_full.addEvent('mousemove', versteckeMenuEvtlWieder);
  } else if(type == 'heldeninfo') {
    menu_full.setStyles({ top: '155px', right: '10px' });
    menu_full.addEvent('mousemove', versteckeHeldeninfoEvtlWieder);
  }
}

/**
 * Funktion blendet ggf. das Menü wieder aus, wenn sich der Mauszeiger nicht
 * mehr im entsprechenden Bereich befindet (Koordinaten siehe Code)
 */
function versteckeMenuEvtlWieder(event) {
  // benötige Elemente
  var is_already_pinned = $('is_menu_pinned');
  var menu_full         = $('menu');
  var menu_short        = $('menuShort');
  var buttons_box       = $('menu_pin_buttons');
  var button_fixieren   = $('menu_not_pinned');
  var button_ausblenden = $('menu_pinned');

  if(is_already_pinned && is_already_pinned.innerHTML == 1) {
    // Mauszeigerposition bestimmen
    var mouse_x = event.client.x;
    var mouse_y = event.client.y;
    // ggf. wieder ausblenden
    if(mouse_x > 215 || mouse_y < 120 || mouse_y > 700) {
      menu_full.setStyle('display', 'none');
      buttons_box.setStyle('display', 'none');
    } else {
      document.addEvent('mousemove', versteckeMenuEvtlWieder);
    }
  }
}

/**
 * Funktion blendet ggf. die Heldeninfo wieder aus, wenn sich der Mauszeiger
 * nicht mehr im entsprechenden Bereich befindet (Koordinaten siehe Code)
 */
function versteckeHeldeninfoEvtlWieder(event) {
  // benötigte Elemente
  var is_already_pinned = $('is_heldeninfo_pinned');
  var menu_full         = $('heldeninfo');
  var menu_short        = $('heldeninfoShort');
  var buttons_box       = $('heldeninfo_pin_buttons');
  var button_fixieren   = $('heldeninfo_not_pinned');
  var button_ausblenden = $('heldeninfo_pinned');

  if(is_already_pinned && is_already_pinned.innerHTML == 1) {
    // Mauszeigerposition bestimmen
    var mouse_x = event.client.x;
    var mouse_y = event.client.y;
    var size = window.getSize();
    var breite = size.x;
    if(breite == 0) {
      alert('Bildschirmbreite konnte nicht ermittelt werden!');
      return;
    }
    var diff_x = breite - mouse_x;
    // ggf. wieder ausblenden
    if(diff_x > 260 || mouse_y < 120 || mouse_y > 900) {
      menu_full.setStyle('display', 'none');
      buttons_box.setStyle('display', 'none');
    } else {
      document.addEvent('mousemove', versteckeHeldeninfoEvtlWieder);
    }
  }
}
