//=============================================================================
// www.erlenwiese.de         (c) Martin Schmidt, Alsfeld
//-----------------------------------------------------------------------------
//
// $Id: galerie.js 214 2010-06-12 07:03:16Z Martin Schmidt $
//=============================================================================

var CookieOptionen = new CCookieOptionen,
    CookieFavoriten = new CCookieFavoriten;

//-----------------------------------------------------------------------------
$(document).ready(function()
//-----------------------------------------------------------------------------
{
  var id,
      duration = { duration: $(".GalerieZeile").size() * 100 };

  // Eventhandler zum Wechseln des Favoritenstatus
  $(".FavoritenBox").click( function () {
    FavoritToggeln($(this));
  });

  $("#LinkSortieren").attr("href", "javascript:DialogAnzeigen()");
  $("#Loeschen").attr("href", "javascript:FavoritenLoeschen()");

  $(".Dialog a:eq(0)").attr("href", "javascript:DialogVerstecken()");
  $(".Dialog a:eq(1)").attr("href", "javascript:GalerieSortieren(DatumAuf)");
  $(".Dialog a:eq(2)").attr("href", "javascript:GalerieSortieren(DatumAb)");
  $(".Dialog a:eq(3)").attr("href", "javascript:GalerieSortieren(ZaehlerAuf)");
  $(".Dialog a:eq(4)").attr("href", "javascript:GalerieSortieren(ZaehlerAb)");
  $(".Dialog a:eq(5)").attr("href", "javascript:GalerieSortieren(Vorgabe)");

  // Sortieren Dialog kann mit ESC beendet werden
  $(document).keypress( function(e) { return Taste(e); });

  // Verschieben des Sortieren Dialogs
  if ($(".Dialog > div"))
  {
    var dlg = new DragDrop();

    $(".Dialog > div").mousedown( function() { return dlg.Drag(this); });
    $(document).mousemove( function(e) { dlg.Move(e); });
    $(document).mouseup( function() { dlg.Drop(); });
  }

  // Beim Klicken auf den abgedunkelten Bildschirm wird der Sortieren Dialog beendet und die Seite wieder aufgehellt
  $("#Abdunkeln").click( function () { DialogVerstecken(); });

  // Nach oben scrollen
  $("#NachOben").localScroll (duration);

  // Zum aktuellen Foto scrollen
  $.localScroll.hash( {offset: (0, -205), duration: 0} );
});

//-----------------------------------------------------------------------------
function DialogAnzeigen()
//-----------------------------------------------------------------------------
{
  var dlgLeft = parseInt($(".Dialog > div").css("left"), 10),
      dlgWidth = parseInt($(".Dialog > div").css("width"), 10) + 22,
      dlgTop = parseInt($(".Dialog > div").css("top"), 10),
      windowWidth = window.innerWidth,
      windowHeight = window.innerHeight;

  // IE macht natürlich wieder alles anders
  if (document.documentElement) {
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  }

  // Sicherstellen, dass der Sortieren Dialog im sichtbaren Bereich ist
  if (typeof windowWidth != "undefined")
  {
    if (dlgLeft < -windowWidth / 2) {
      $(".Dialog > div").css("left", -windowWidth / 2 + 10);
    }
    if (dlgLeft > windowWidth / 2 - dlgWidth) {
      $(".Dialog > div").css("left", windowWidth / 2 - dlgWidth);
    }
    if (dlgTop < -189) {
      // 189 ist der Abstand zwischen dem oberen Rand und der Normalposition des Dialogs
      $(".Dialog > div").css("top", -189);
    }
    if (dlgTop > windowHeight - 189 - 131) {
      // 131 ist die Höhe des Dialogs, da dieser dynamisch aufgebaut wird, funktioniert css height nicht
      $(".Dialog > div").css("top", windowHeight - 189 - 131);
    }
  }

  if ($(".Dialog").is(":hidden"))
  {
    $(".Dialog").fadeIn("fast");
    if (document.all) {
      $("#Abdunkeln").show();
    } else {
      $("#Abdunkeln").fadeIn("fast");
    }
  }
}

//-----------------------------------------------------------------------------
function DialogVerstecken()
//-----------------------------------------------------------------------------
{
  // Der Dialog wird unmittelbar ohne Ausblenden versteckt
  $(".Dialog").hide();
  $("#Abdunkeln").hide();
}

//-----------------------------------------------------------------------------
function GalerieSortieren(Suchfunktion)
//-----------------------------------------------------------------------------
{
  var a = new Array(),
      i = 0,
      dlgLeft = parseInt($(".Dialog > div").css("left"), 10),
      dlgWidth = parseInt($(".Dialog > div").css("width"), 10) + 22,
      zaehler = (Suchfunktion == ZaehlerAuf || Suchfunktion == ZaehlerAb);

  // Dialog verstecken, außer er ist über dem Rand
  if (dlgLeft > - 480 - dlgWidth/2 && dlgLeft < 480 - dlgWidth/2) {
    DialogVerstecken();
  }

  // Eventhandler löschen (gehen durch Sortierung verloren)
  $(".FavoritenBox").unbind("click");

  // Sortieren
  for (i = 0; i < $(".GalerieFoto").length; i++)
  {
    a[i] = {
      PfadVorschau: $(".GalerieFoto").eq(i).attr("src"),
      HrefFoto: $(".GalerieFoto").eq(i).parent().attr("href"),
      Inhalt: $(".GalerieText").eq(i).html(),

      Zaehler: $("[name='Zaehler']").eq(i).val(),
      Datum: $("[name='Datum']").eq(i).val(),
      SortID: $("[name='SortID']").eq(i).val()
    };
  }

  a.sort(Suchfunktion);

  for (i = 0; i < $(".GalerieFoto").length; i++)
  {
    $(".GalerieFoto").eq(i).attr("src", a[i]["PfadVorschau"]);
    $(".GalerieFoto").eq(i).parent().attr("href", a[i]["HrefFoto"]);
    $(".GalerieText").eq(i).html(a[i]["Inhalt"]);
    $(".GalerieText .Zaehler").eq(i).css("display", zaehler ? "block" : "none");
    $(".GalerieText .Datum").eq(i).css("display", zaehler ? "none" : "block");
  }

  // Eventhandler zum Wechseln des Favoritenstatus wieder setzen
  $(".FavoritenBox").click( function () {
    FavoritToggeln($(this));
  });
}

// Vergleichsfunktionen
function ZaehlerAuf(a, b) {
  return b["Zaehler"] - a["Zaehler"];
}

function ZaehlerAb(a, b) {
  return a["Zaehler"] - b["Zaehler"];
}

function DatumAuf(a, b) {
  return b["Datum"] - a["Datum"];
}

function DatumAb(a, b) {
  return a["Datum"] - b["Datum"];
}

function Vorgabe(a, b) {
  return a["SortID"] - b["SortID"];
}

//-----------------------------------------------------------------------------
function FavoritToggeln($Foto)
//-----------------------------------------------------------------------------
{
  id = $Foto.attr("id").substring(7);    // Überspringe "FavBox-"

  if ($Foto.hasClass("Markiert")) {
    $Foto.removeClass("Markiert");
    if (id > 0) {
      CookieFavoriten.remove(id);
    }
  } else {
    $Foto.addClass("Markiert");
    if (id > 0) {
      CookieFavoriten.add(id);
    }
  }
}

//-----------------------------------------------------------------------------
function FavoritenLoeschen()
//-----------------------------------------------------------------------------
{
  $(".FavoritenBox").each( function()
  {
    var id = $(this).attr("id").substring(7);    // Überspringe "FavBox-"
    if (id > 0 && $(this).hasClass("Markiert")) {
      $(this).removeClass("Markiert");
      CookieFavoriten.remove(id);
    }
  });
}

//-----------------------------------------------------------------------------
function Taste(e)
//-----------------------------------------------------------------------------
{
  var taste;

  if (!e) e = window.event;

  if (e.which) {
    taste = e.which;
  } else if (e.keyCode) {
    taste = e.keyCode;
  }

  switch (taste) 
  {
    case 27: 
      DialogVerstecken();
      $("#Abdunkeln").hide();
      return false;
      break;
    
    default: 
      break;
  }
  
  return true;
}

//-----------------------------------------------------------------------------
function DragDrop()
//-----------------------------------------------------------------------------
{
  var self = this,

      Objekt = null,           // Zu verschiebendes Objekt
      MausAktuellX = 0,        // Aktuelle Mauposition
      MausAktuellY = 0,
      MausStartX = 0,          // Mausposition zu Beginn des Verschiebens
      MausStartY = 0;

  this.Verschoben = false;     // Hinweis, dass Verschieben gestartet wurde

  //-----------------------------------
  this.Drag = function(e)
  //-----------------------------------
  {
    Objekt = e;
    e.style.cursor = "move";

    MausStartX = MausAktuellX - e.offsetLeft;
    MausStartY = MausAktuellY - e.offsetTop;

    return false;
  };

  //-----------------------------------
  this.Drop = function()
  //-----------------------------------
  {
    $("#Abdunkeln").hide();

    if (Objekt !== null)
    {
      // Neue Position im Cookie speichern
      CookieOptionen.Data.SortDlg.left = parseInt(Objekt.style.left, 10);
      CookieOptionen.Data.SortDlg.top = parseInt(Objekt.style.top, 10);
      CookieOptionen.write();

      // Mauszeiger zurücksetzen
      Objekt.style.cursor = "pointer";
      Objekt = null;
    }
  };

  //-----------------------------------
  this.Move = function (e)
  //-----------------------------------
  {
    var distanz = 0;

    MausAktuellX = document.all ? window.event.clientX : e.pageX;
    MausAktuellY = document.all ? window.event.clientY : e.pageY;

    if(Objekt !== null)
    {
      Objekt.style.left = (MausAktuellX - MausStartX) + "px";
      Objekt.style.top = (MausAktuellY - MausStartY) + "px";
    }
  };
}
