/* 
 * creaGalery
 * Crea-eigene Lightbox zur Bildergalerie
 *
 * Vom Request wird ein Objekt erwartet, mit creaGalery als Key, und den Bildern als Wert
 * jedes Bild hat folgenden Aufbau: {'title','hid','picturefile','thumbfile','height','width','twidth','wheight','url'}
 * An den Request übergeben wird eine ID per GET. Diese ID ist entweder ein Name oder eine Nummer, anhand dessen das Script die nötigen Informationen ausliefert
 *
 */

/**
 * creaGalery-Klasse
 */
function _creaGalery() {
   $cG = this;
}
_creaGalery.prototype.options = {
   /*  Slideshow-Optionen */
   slideshow:{
      autostart : false,
      /* in sec. */
      delay: 5
   },
   /*  Spalt zwischen den Buttons nach links und nach rechts */
   slitButtons:30,
   /* Pfad zum Script, welches das JSON-Objekt mit allen Bildern liefert (z.B. Dateinamen oder IDs etc.) */
   request : '',
   /* Pfad zum Script, welches bei jedem Bildwechsel/aufruf das HTML für den Funktionsbereich liefert */
   funcrequest : '',
   /* DOM-Optionen  */
   dom : {
      /* ID des Objekts, in dem der creaGalery-Baum gespeichert werden soll (sonst am Ende von body) */
      store : '',
      /* Präfix für alle IDs (CSS-Eigenschaften haben alle das Präfix 'creaGalery'); dieses Präfix sollte nirgend sonst mehr verwendet werden */
      prefix : 'creaGalery',
      /* jQuery DOM-Objekt */
      dataobj : {}
   },
   /* Animaitonen */
   animation : {
      /* Sliden zwischen den Bildern */
      changePicture:0,
      /* Einblenden der prev/next-Buttons */
      buttons: 10
   },

   thumb : {
      /* Höhe der Thumbnails in der Leiste */
      height : 80,
      /* Abstände der Thumbnails vom Leistenrand nach oben und unten */
      padding: 8,
      /* Um wie viel % der Bildschirmbreite soll die Thumbleiste gescrollt werden? */
      navScroll_click:0.3,
      /* Mit welcher Geschwindigkeit soll die Thumbleiste (bei Hover) gescrollt werden? (Angabe in ms für Dauer des Scrollens) */
      navScroll_hover:1500
   },
   /* Funktions-Leiste */
   functions : {
      controlls : {
         slideshow :{
            show:true
         }
      }
   },
   /* Abstände zwischen den Leisten */
   linePadding:3
};
_creaGalery.prototype.status = {
   /* Alle Alben */
   alben : {},
   /*  Aktives Album   */
   cAlbum :
   {
      title: false,
      /* Hier wird das jQuery-objekt des aktiven Albums gespeichert */
      jQobj : {},
      /*  Hier wird das aus dem Request übergebene JSON-Objekt aller Bilder  gespeichert   */
      pictures : {},
      /* Hier wird das aus dem Request übergebene JSON-Objekt des aktiven Bildes gespeichert */
      cPicture :  {},
      /* Hier werden die IDs der Bilder in Reihefolge von 0 indexiert gespeichert */
      counted : [],
      /* Index des aktiven Bildes */
      cCount : false,
      /* Index des zentrierten Thumbs */
      cThumbCount : false,
      /* Slideshow aktiv? */
      slideshow:false,
      /* Läuft die Slideshow? */
      slideshow_started:false
   },
   intervalls : {},
   /* Galerie eingefroren (z.B. für FB-Funktionen etc.) */
   frozen:false,
   /*   Zwischenspeicher für style:position des body    */
   bodyposition : false,
   /*   ID für die Error-Message    */
   errormessage : '',
   /*   XHR-Objekte für Functionarea   */
   fareaXHR : {}
};

/**
 * creaGalery einfrieren
 */
_creaGalery.prototype.froze = function()
{
   $cG.status.frozen = true;
   $cG.status.cAlbum.jQobj.find('.creaGalery-interactive').hide();
   $cG.status.cAlbum.jQobj.find('.creaGalery-thumbcontainer, .creaGalery-functions-slideshow-play, .creaGalery-functions-slideshow-prev, .creaGalery-functions-slideshow-next').css('cursor','auto');
};
/**
 * creaGalery wieder aktivieren
 */
_creaGalery.prototype.unfroze = function()
{
   $cG.status.frozen = false;
   $cG.status.cAlbum.jQobj.find('.creaGalery-interactive').show();
   $cG.status.cAlbum.jQobj.find('.creaGalery-thumbcontainer, .creaGalery-functions-slideshow-play, .creaGalery-functions-slideshow-prev, .creaGalery-functions-slideshow-next').css('cursor','pointer');
};

/**
 * Ruft die Lightbox auf, braucht id des aufrufenden Bildes und Titel des Albums
 */
_creaGalery.prototype.show = function(pid,albumtitle)
{
   $('body .creaGalery-noconflict').addClass('creaGalery-noconflict-hide').hide();
   var root = ($cG.options.dom.store.length) ? $('#'+$cG.options.dom.store) : $('body');
   if ($cG.options.dom.dataobj.length === undefined)
   {
      if (!root.find('#'+$cG.options.dom.prefix).exists())
      {
         root.append('<div id="'+$cG.options.dom.prefix+'"></div>');
      }
      $cG.options.dom.dataobj = root.find('#'+$cG.options.dom.prefix);
      $cG.createBacks();
   }
   //   $cG.status.bodyposition = $('body').css('position');
   //   $('body').css('position','fixed');
  
   // Wenn die Galerie noch nicht existiert
   if (!$('#'+$cG.options.dom.prefix+'-'+albumtitle).exists())
   {
      $cG.create(pid,albumtitle);
   }
   else
   {
      // Hintergründe zeigen, Album auswählen, Bild auswählen, Album anzeigen, Bereiche einblenden
      $cG.backIn();
      $cG.status.cAlbum = $cG.status.alben[albumtitle];
      $cG.focus(pid);
      $('#'+$cG.options.dom.prefix+'-'+albumtitle).show();
      $cG.status.cAlbum.jQobj.find('.creaGalery-functions').append('<div id="'+$cG.options.dom.prefix+'-funcarea" class="creaGalery-functionarea"></div>');
      $cG.status.cAlbum.jQobj.find('.creaGalery-functions').show();
   }

   // Key-Events anbinden
   $cG.keys();

   // Wenn das Album Slideshow aktiv hat und Slideshow noch nicht läuft, starten
   if($cG.status.cAlbum.slideshow && !$cG.status.cAlbum.slideshow_started)
   {
      $cG.slideStart();
   }
};

_creaGalery.prototype.slideStart = function()
{
   if(!$cG.status.frozen)
   {
      var albumtitle = $cG.status.cAlbum.title;
      $cG.options.dom.dataobj.find('.creaGalery-functions .creaGalery-functions-slideshow-play').attr('status','on');
      $('#'+$cG.options.dom.prefix+'-funcarea').hide();
      $cG.status.cAlbum.slideshow_started = true;
      $cG.next();
      if ($cG.status.intervalls[albumtitle] === undefined) {
         $cG.status.intervalls[albumtitle]={};

      }
      $cG.status.intervalls[albumtitle].slideshow = window.setInterval("$cG.next()",$cG.options.slideshow.delay*1000);
   }
};
_creaGalery.prototype.slideStop = function(noreload)
{
   if (noreload === undefined) {
      noreload=false;
   }
   var albumtitle = $cG.status.cAlbum.title;
   $cG.options.dom.dataobj.find('.creaGalery-functions .creaGalery-functions-slideshow-play').attr('status','off');
   if ($cG.status.intervalls[albumtitle] !== undefined && $cG.status.intervalls[albumtitle].slideshow !== undefined) {
      window.clearInterval($cG.status.intervalls[albumtitle].slideshow);
   }
   $cG.status.cAlbum.slideshow_started = false;
   if (!noreload) {
      $cG.reloadFunc();
   }
   $('#'+$cG.options.dom.prefix+'-funcarea').show();
};

_creaGalery.prototype.functionsOut = function()
{
   $('#'+$cG.options.dom.prefix+'-funcarea').remove();
   $cG.options.dom.dataobj.find('.creaGalery-functions').hide();
};

/**
 * Versteckt die Lightbox wieder
 */
_creaGalery.prototype.hide = function(albumtitle)
{
   $('#'+$cG.options.dom.prefix+'-'+albumtitle).hide();
   $cG.status.alben[albumtitle] = $cG.status.cAlbum;
   $cG.slideStop(true);
   if ($cG.status.intervalls[albumtitle] !== undefined && $cG.status.intervalls[albumtitle].tlinescrollleft !== undefined) {
      window.clearInterval($cG.status.intervalls[albumtitle].tlinescrollleft);
   }
   if ($cG.status.intervalls[albumtitle] !== undefined && $cG.status.intervalls[albumtitle].tlinescrollright !== undefined) {
      window.clearInterval($cG.status.intervalls[albumtitle].tlinescrollright);
   }
   $cG.unfroze();
   $cG.status.cAlbum = {};
   $cG.functionsOut();
   $(document).unbind('keypress');
   $('body').css('position',$cG.status.bodyposition);
   $cG.backOut();
   $('body .creaGalery-noconflict-hide').removeClass('creaGalery-noconflict-hide').show();
};



_creaGalery.prototype.keys = function()
{
   
   $(document).bind('keypress',function(k) {
      if (!$cG.status.frozen)
      {
         // Schließen
         if (k.keyCode == '27') {
            k.preventDefault();
            $cG.hide($cG.status.cAlbum.title);
         }
         // rechts
         if (k.keyCode == '39') {
            k.preventDefault();
            $cG.next();
         }
         // links
         if (k.keyCode == '37') {
            k.preventDefault();
            $cG.prev();
         }
         // unten - Thumbs nach rechts
         if (k.keyCode == '40') {
            k.preventDefault();
            $cG.tlineScroll(false);
         }
         // oben - Thumbs nach links
         if (k.keyCode == '38') {
            k.preventDefault();
            $cG.tlineScroll(true);
         }

         // Enter - Slideshow Play/Pause
         if (k.keyCode == '13') {
            k.preventDefault();
            if (!$cG.status.cAlbum.slideshow_started)
            {
               $cG.slideStart();
            }
            else
            {
               $cG.slideStop();
            }
         }
      }
   });

};

_creaGalery.prototype.createBacks = function()
{
   var galeries = $cG.options.dom.dataobj;
   // ggf. Backgrounds erzeugen (beim ersten Aufruf)
   if (!$('#'+$cG.options.dom.prefix+'-back').exists())
   {
      galeries.append('<div id="'+$cG.options.dom.prefix+'-back" class="creaGalery-back" style="display:none;"></div>');
   }
   if (!$('#'+$cG.options.dom.prefix+'-backscreen').exists())
   {
      galeries.append('<div id="'+$cG.options.dom.prefix+'-backscreen" class="creaGalery-backscreen" style="display:none;"></div>');
      $('#'+$cG.options.dom.prefix+'-backscreen').click(function(){
         $cG.hide($cG.status.cAlbum.title);
      });
   }
   // Close
   if (!$cG.options.dom.dataobj.find('.creaGalery-close').exists())
   {
      $cG.options.dom.dataobj.append('<div class="creaGalery-close creaGalery-closeevent" style="display:none;" title="Schließen (Esc)"></div>');
   }
};


/**
 * Stattet die Galerie mit Buttons aus
 */
_creaGalery.prototype.buttons = function()
{
   var album = $cG.status.cAlbum.jQobj;

   // Weiter/zurück
   var bw = 600/2 - $cG.options.slitButtons/2;
   var iw = 600;
   var ih = 500;
   album.append('<div class="creaGalery-interactive" style="width:'+iw+'px;height:'+ih+'px;"><div class="creaGalery-interactive-press" style="width:'+bw+'px;left:0;"><div class="creaGalery-interactive-arrow creaGalery-interactive-left"></div></div><div class="creaGalery-interactive-press" style="width:'+bw+'px;right:0;"><div class="creaGalery-interactive-arrow creaGalery-interactive-right"></div></div></div>');

   album.find('.creaGalery-interactive').click(function(){
      if (!$cG.status.frozen)
      {
         $cG.next();
      }
   });

   // Hovern der Pfeile
   album.find('.creaGalery-interactive-press').hover(
      function(){
         if (!$cG.status.frozen)
         {
            $(this).find('.creaGalery-interactive-arrow').fadeIn($cG.options.animation.buttons);
         }
         else
         {
            $(this).find('.creaGalery-interactive').hide();
         }
      },
      function(){
         $(this).find('.creaGalery-interactive-arrow').fadeOut($cG.options.animation.buttons);
      }
      );

   // Navigations-Funktion
   album.find('.creaGalery-interactive-press').click(function(evt){
      evt.stopPropagation();
      if (!$cG.status.frozen)
      {
         if ($(this).find('.creaGalery-interactive-arrow').hasClass('creaGalery-interactive-right'))
         {
            $cG.next();
         }

         if ($(this).find('.creaGalery-interactive-arrow').hasClass('creaGalery-interactive-left'))
         {
            $cG.prev();
         }
      }
      else
      {
         $(this).find('.creaGalery-interactive').hide();
      }
   });

   
   album.append('<div class="creaGalery-thumbline-sLeft"></div><div class="creaGalery-thumbline-sRight"></div>');

   album.find('.creaGalery-thumbline-sLeft, .creaGalery-thumbline-sRight').click(function(){
      var counting = $cG.status.cAlbum.counted;
      var this_i = $cG.status.cAlbum.cThumbCount;
      var next_i, pid;
      if ($(this).hasClass('creaGalery-thumbline-sLeft'))
      {
         next_i = (parseInt(this_i-6,10) >= 0) ? parseInt(this_i-6,10) : 0;
         pid = counting[next_i];
         $cG.status.cAlbum.cThumbCount = next_i;
         $cG.thumbCenter(pid);
      }
      else
      {

         next_i = (parseInt(this_i+6,10) < counting.length) ? parseInt(this_i+6,10) : counting.length-1;
         pid = counting[next_i];
         $cG.status.cAlbum.cThumbCount = next_i;
         $cG.thumbCenter(pid);
      }
   });
  

};

/**
 * Lädt den Funktionsbereich neu
 */
_creaGalery.prototype.reloadFunc = function()
{
   var jetzt = new Date();
   $('#'+$cG.options.dom.prefix+'-funcarea').empty();
   if ($cG.status.fareaXHR.status !== undefined)
      {
      $cG.status.fareaXHR.abort();
      }
   $cG.status.fareaXHR = $.getJSON($cG.options.funcrequest,{
      id:$cG.status.cAlbum.cPicture.pid,
      uncache:jetzt.getTime()
   },
   function (html){
         $('#'+$cG.options.dom.prefix+'-funcarea #functionarea_bg').remove(); // Hintergrund vorher löschen
         $('#'+$cG.options.dom.prefix+'-funcarea').append(html);
         if (FB !== undefined)
            {
            FB.XFBML.parse(document.getElementById('#'+$cG.options.dom.prefix+'-funcarea'));
            }

         while ($cG.status.cAlbum.jQobj.find('.creaGalery-picture').parent().attr('id') == 'tag-wrapper')
            {
            $cG.status.cAlbum.jQobj.find('.creaGalery-picture').unwrap();
            }
         $cG.status.cAlbum.jQobj.find('.creaGalery-picture').wrap('<div id="tag-wrapper"></div>');
         fb_hover();

         $cG.status.cAlbum.jQobj.find('#taggen').click(function() {
            $cG.froze();
            taggen($cG.status.cAlbum.jQobj);
         });
   });
};

/**
 * Funktionsbereich
 */
_creaGalery.prototype.functions = function()
{
   // Social-Media Fläche
   $cG.status.cAlbum.jQobj.append('<div class="creaGalery-functions"><div id="'+$cG.options.dom.prefix+'-funcarea" class="creaGalery-functionarea"></div></div>');
   // Objekt der rechten grauen Funktionsfläche
   var func = $cG.status.cAlbum.jQobj.find('.creaGalery-functions');

   // Kontroll-Buttons für Weiter/Zurück und Slideshow
   if (func.find('.creaGalery-functions-slideshow').length <1)
   {
      func.append('<div class="creaGalery-functions-slideshow"><div class="creaGalery-functions-slideshow-play" title="Slideshow (Enter)"></div><div class="creaGalery-functions-slideshow-prev" title="Zurück (←)"></div><div class="creaGalery-functions-slideshow-next" title="Weiter (→)"></div><!--<div class="creaGalery-functions-slideshow-alert" title="Dieses Foto melden"></div>--></div>');
   }
   func.find('.creaGalery-functions-slideshow-prev').click(function(){
      if (!$cG.status.frozen)
      {
         $cG.prev();
      }
   });
   func.find('.creaGalery-functions-slideshow-next').click(function(){
      if (!$cG.status.frozen)
      {
         $cG.next();
      }
   });
   if ($cG.options.functions.controlls.slideshow.show)
   {
      func.find('.creaGalery-functions-slideshow-play').click(function(){
         if (!$cG.status.frozen)
         {
            // Start
            if (!$cG.status.cAlbum.slideshow)
            {
               $cG.status.cAlbum.slideshow = true;
               $cG.slideStart();

            }
            else
            {
               $cG.status.cAlbum.slideshow = false;
               $cG.slideStop();
            }
         }
      });
   }
};


/**
 * Erzeugt erstmals eine Galerie-Ansicht für dieses Album. Braucht die picture-ID und den Albumtitel
 */
_creaGalery.prototype.create = function(pid,albumtitle)
{
   $cG.backIn();
   var galeries = $cG.options.dom.dataobj;

   // Album an Galerien anfügen
   galeries.append('<div class="creaGalery" id="'+$cG.options.dom.prefix+'-'+albumtitle+'"><div class="creaGalery-picture"></div><div class="creaGalery-thumbline"></div><div class="creaGalery-thumbbottom"></div></div>');
   var thisgalery = galeries.find('#'+$cG.options.dom.prefix+'-'+albumtitle).hide();

   // Objekt holen
   $.getJSON($cG.options.request,{
      id:pid
   },
   function(data)
   {
      var offset=0;
      var tpid;
      for (tpid in data.creaGalery)
      {
         if (tpid !== 'thumbsrc')
            {
            // Bildgrößen anpassen
            var picture = data.creaGalery[tpid];
            // Größe an Fenstergröße anpassen
            var size = $cG.pictureSize(picture.width,picture.height);
            picture.width = size.width;
            picture.height = size.height;
            picture.pid = tpid;

            // Container für Thumb erzeugen
            var m_top = 50/2;
            var vpos = (picture.theight/2 - 50/2);
            var hpos = offset + (picture.twidth/2 - 50/2);
            thisgalery.find('.creaGalery-thumbline').append('<div class="creaGalery-thumbcontainer" pid="'+tpid+'" title="'+picture.title+'" id="'+picture.hid+'-thumb" style="top:50%;margin:'+$cG.options.thumb.padding+'px;margin-top:-'+m_top+'px;width:50px;height:50px;background-image:url('+data.creaGalery.thumbsrc+');background-position:-'+hpos+'px -'+vpos+'px;"></div>');


            // thumbs mit Klick-Navigation ausstatten
            thisgalery.find('.creaGalery-thumbline #'+picture.hid+'-thumb').click(function(){
               if (!$cG.status.frozen)
               {
                  $cG.focus(parseInt($(this).attr('pid'),10));
               }
            });
            offset += picture.twidth;
            }
      }

      // Album zeigen und aktuelle Werte speichern
      thisgalery.show();
      $cG.status.cAlbum.title = albumtitle;
      $cG.status.cAlbum.jQobj = thisgalery;
      $cG.status.cAlbum.pictures = data.creaGalery;

      $cG.status.cAlbum.cPicture = data.creaGalery[pid];
      // IDs in Array, zum Zählen
      var counting = [];
      var i = 0;
      var bid;
      for (bid in data.creaGalery)
      {
         counting[i] = parseInt(bid,10);
         if (bid == pid) {
            var cCount = parseInt(i,10);
         }
         i++;
      }
      $cG.status.cAlbum.counted = counting;
      $cG.status.cAlbum.cCount = cCount;
      $cG.status.cAlbum.cThumbCount = cCount;

      // aktuelles Bild laden und fokussieren
      $cG.focus(pid,function(){
         // Buttons laden
         $cG.buttons();
         // Funktionsbereich für Galerie erzeugen
         $cG.functions();

         // ggf. Slideshow starten
         if($cG.options.slideshow.autostart && !$cG.status.cAlbum.slideshow_started)
         {
            $cG.status.cAlbum.slideshow = true;
            $cG.slideStart();
         }
      });

      
   }
   );
   
};

/**
 * auf ein Bild zentrieren und Fokussieren; erwartet die picture-id
 */
_creaGalery.prototype.focus = function(pid,callback)
{
   var picture = $cG.status.cAlbum.pictures[pid];

   var counting = $cG.status.cAlbum.counted;
   var i;
   for (i in counting)
   {
      if (counting[i] == pid) {
         var pid_i = i;
         break;
      }
   }

   $cG.status.cAlbum.cPicture = $cG.status.cAlbum.pictures[pid];
   $cG.status.cAlbum.cCount = parseInt(pid_i,10);
   $cG.status.cAlbum.cThumbCount = parseInt(pid_i,10);

   $cG.addPicture(picture);
   
   pageTracker._trackPageview(picture.url);  // Analytics

   $cG.status.cAlbum.jQobj.find('.creaGalery-thumbline .creaGalery-thumb-active').removeClass('creaGalery-thumb-active');
   $cG.thumbCenter(picture.pid,function(){
      $cG.status.cAlbum.jQobj.find('.creaGalery-thumbline [pid="'+$cG.status.cAlbum.cPicture.pid+'"]').addClass('creaGalery-thumb-active');
      // Funktionsbereich reloaden
      if (!$cG.status.cAlbum.slideshow_started) {
         $cG.reloadFunc();
      }
      if (callback !== undefined){
         callback();
      }
   });

};

_creaGalery.prototype.next = function()
{
   var counting = $cG.status.cAlbum.counted;
   var this_i = $cG.status.cAlbum.cCount;

   var next_i = (parseInt(this_i+1,10) < counting.length) ? parseInt(this_i+1,10) : 0;
   var pid = counting[next_i];

   $cG.focus(pid);
};
_creaGalery.prototype.prev = function()
{
   var counting = $cG.status.cAlbum.counted;
   var this_i = $cG.status.cAlbum.cCount;

   var prev_i = (this_i-1 >= 0) ? this_i-1 : counting.length-1;
   var pid = counting[prev_i];

   $cG.focus(pid);
};


/**
 * Ersetzt das birherige Bild. Erwartet ein JSON-Objekt des Bildes
 */
_creaGalery.prototype.addPicture = function(picture)
{
   var album = $cG.status.cAlbum.jQobj;
   var h = picture.height;
   var w = picture.width;
   var m_top = h/2;
   album.find('.creaGalery-picture').attr('pid',picture.pid).empty().append('<img src="'+picture.picturesrc+'" lowsrc="'+picture.picturelowsrc+'" width="'+w+'" height="'+h+'" alt="" style="position:relative;margin-top:-'+m_top+'px;top:50%;" title="" />');
};

/**
 * Zentriert die Thumbleiste auf den Thumb mit der picture-id pid
 */
_creaGalery.prototype.thumbCenter = function(pid, callback)
{
   var album = this.status.cAlbum.jQobj;
   var position = album.find('.creaGalery-thumbline [pid="'+pid+'"]').position();
   var left = 900/2 - position.left -$cG.status.cAlbum.cPicture.twidth/2-$cG.options.thumb.padding;
   album.find('.creaGalery-thumbline').animate({
      'left':left
   },this.options.animation.changePicture,function(){
      if (callback !== undefined){
         callback();
      }
   });

};


/**
 * Hintergrundfolie ausblenden
 */
_creaGalery.prototype.backOut = function()
{
   $('#'+$cG.options.dom.prefix+'-back, #'+$cG.options.dom.prefix+'-backscreen, #'+$cG.options.dom.prefix+' .creaGalery-close').hide();
};
/**
 * Hintergrundfolie einblenden
 */
_creaGalery.prototype.backIn = function()
{
   $('#'+$cG.options.dom.prefix+'-back, #'+$cG.options.dom.prefix+'-backscreen, #'+$cG.options.dom.prefix+' .creaGalery-close').show();
};

/**
 * Bestimmt die richtige Größe der Bilder
 */
_creaGalery.prototype.pictureSize = function(width,height)
{
   var w = width;
   var h = height;
   var wwidth = 600;
   var wheight = 500;
   

   var ratio;
   // Wenn höher als erlaubt
   if (h > wheight)
   {
      ratio = wheight / h;
      w = w*ratio;
      h = wheight;
   }
   // Wenn breiter als erlaubt
   if (w > wwidth)
   {
      ratio = wwidth / w;
      h = h*ratio;
      w = wwidth;
   }
   return {
      width:w,
      height:h
   };
};

/**
 * Bestimmt die richtige Größe der Thumbs
 */
_creaGalery.prototype.thumbSize = function(width,height)
{
   var w = width;
   var h = height;
   var wwidth = 900;
   // Höhe des Thumbs
   var wheight = $cG.options.thumb.height;

   var ratio;
   // Wenn höher als erlaubt
   if (h > wheight)
   {
      ratio = wheight / h;
      w = w*ratio;
      h = wheight;
   }
   // Wenn breiter als erlaubt
   if (w > wwidth)
   {
      ratio = wwidth / w;
      h = h*ratio;
      w = wwidth;
   }
   return {
      width:w,
      height:h
   };
};



















// neues Objekt für die Benutzung in jQuery.fn.creaGalery anlegen
var creaGalery = new _creaGalery();
/**
 * creaGalery intialisieren
 * Aufruf: $(selector).creaGalery(optionen);
 */
jQuery.fn.creaGalery = function(custom_options)
{
   // sofern Optionen gesetzt, den Standard überschreiben (durch 3 Ebenen iterieren)
   if (custom_options !== undefined)
   {
      var entry_1;
      for (entry_1 in creaGalery.options)
      {
         if (custom_options[entry_1] !== undefined) {
            if (typeof custom_options[entry_1] == 'object')
            {
               var entry_2;
               for (entry_2 in creaGalery.options[entry_1])
               {
                  if (custom_options[entry_1][entry_2] !== undefined) {
                     if (typeof custom_options[entry_1][entry_2] == 'object')
                     {
                        var entry_3;
                        for (entry_3 in creaGalery.options[entry_1][entry_2])
                        {
                           if (custom_options[entry_1][entry_2][entry_3] !== undefined) {
                              creaGalery.options[entry_1][entry_2][entry_3] = custom_options[entry_1][entry_2][entry_3];
                           }
                        }
                     }
                     else
                     {
                        creaGalery.options[entry_1][entry_2] = custom_options[entry_1][entry_2];
                     }
                  }
               }
            }
            else
            {
               creaGalery.options[entry_1] = custom_options[entry_1];
            }
         }
      }
   }

   // Schließen der Galerie
    $('body').delegate('.creaGalery-closeevent','click',function(){
      creaGalery.hide(creaGalery.status.cAlbum.title);
   });

   // Interaktion bei Klick auf die Galerie-Matrix
   $('body').delegate('.galerie-matrix .creagalery-thumb','click', function()
   {
      // href auslesen
      var href = $(this).attr('href');
      if (href !== undefined)
      {
         // Aufbau der URI:
         // /[..]/index.php/galerie/[eventbilder]/[albumname]/detail/[bild_id]/[bild_alias]

         // URL in Bestandteile zerpflücken
         var uri = parseUri(href);
         var crumbs = uri.path.split('/');

         // Titel der Galerie: Alias des Albums
         var title = crumbs[crumbs.length-4];
         // ID des Bildes
         var id = crumbs[crumbs.length-2];
         creaGalery.show(id,title);
      }
   });

   // Interaktion bei Klick auf die Galerie-Matrix, wenn kein Zugriff
   $('body').delegate('.galerie-matrix .creagalery-error','click', function()
   {
      var messages = '<div class="message-warnung">'+$('.galerie-errormessage').html()+'</div>';
      // animation.js
      messageShow(messages);
   });

};






