/*
 * jQuery Plugin: gruppenGalerie (Slideshow)
 * Author: Michael Jugl
 * Copyright 2011, simplic GbR
 * http://simplic.de
 *
 * * Browser zoom erkennung: http://stackoverflow.com/questions/1713771/how-to-detect-page-zoom-level-in-all-modern-browsers
 */
(function($){
	jQuery.fn.extend({
		gruppenGalerie: function(options){
			var defaults = {
				slideSpeed: 900,
				easing: 'easeInOutCubic',
				currentPosition: 1
			}
			
			var options = jQuery.extend(defaults, options); 
	
			// jedes Element auf das mein Plugin angewendet wird erhält folgende funktion
			// damit man das Plugin mehrmals auf einer seite eingebunden werden kann
			return this.each(function(){
	
				var breite_gruppe = jQuery(".inhalt-galerie-gruppen > div:first", this.parentNode.parentNode).css("width");
				var anzahl_gruppen= jQuery(".inhalt-galerie-gruppen > div.inhalt-galerie-gruppe", this.parentNode.parentNode).length;

				var i = 0;
				$(".inhalt-galerie-gruppe", this).each(function(){
					$(this).css("left", i+"%");
					i+=100;
				})
				
				if (jQuery(".inhalt-galerie-gruppe-vor:first", this).length > 0) {
					var html_vor_button = "<div class='inhalt-galerie-gruppe-vor'>"+jQuery(".inhalt-galerie-gruppe-vor:first", this).html()+"</div>";
					jQuery(".inhalt-galerie-gruppe-vor", this).remove();
					jQuery(this).append(html_vor_button);
					jQuery(".inhalt-galerie-gruppe-vor:first", this).css("padding-top", "0em");
	
					jQuery(".inhalt-galerie-gruppe-vor > a", this).click(function(){
						if (options.currentPosition >= anzahl_gruppen) {
							// fuehre den klick nicht weiter aus, da die galerie ueber das ziel hinaus sliden wuerde
							return false;
						}


						var ist_position = options.currentPosition;
						//breite_gruppe = $(this.parentNode.parentNode).css("width");
						breite_gruppe = $(this.parentNode.parentNode).width();

						// notwendig fuer KHTML-Browser - korrigiere die ausgangspotition um den zoomfaktor um den sprung-effekt zu vermeiden
						if (navigator.userAgent.search(/\(KHTML, like Gecko\)/) > -1) {
							var zoom  = document.width / $(document).width();
							jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).css("left", breite_gruppe*-1*(options.currentPosition-1)/zoom+"px"); 
						}

						// console.log("Start ausgangswert CSS: "+jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).css("left"));
						// console.log("Animiere um: "+breite_gruppe);
						jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).animate({left:'-='+breite_gruppe}, options.slideSpeed, options.easing, function(){

								//console.log("Neues left CSS: "+jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).css("left"));
								// der FF 1.5 und FF 2 darf folgende aktion nicht machen, da der feft-wert nach der zuweisung doppeöt so hoch ist wie er sollte
	
								if (navigator.userAgent.search(/Firefox\/(1|2)\./) == -1) {
									$(this).css("left", (options.currentPosition-1)*-100+"%");
								}
								//console.log("Neues left CSS: "+jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).css("left"));
							});
						if (ist_position >= 1) {
							jQuery(".inhalt-galerie-gruppe-zurueck a:first", this.parentNode.parentNode).fadeIn();
						}
						if (ist_position > anzahl_gruppen-2) {
							jQuery(".inhalt-galerie-gruppe-vor a:first", this.parentNode.parentNode).fadeOut();
						}
						options.currentPosition++;
						return false; // Deaktiviere die Klickfunktionalitaet der Anker-Pfeile
					});
	
				}
				
				if (jQuery(".inhalt-galerie-gruppe-zurueck:first", this).length > 0) {
					var html_zurueck_button = "<div class='inhalt-galerie-gruppe-zurueck'>"+jQuery(".inhalt-galerie-gruppe-zurueck:first", this).html()+"</div>";
					jQuery(".inhalt-galerie-gruppe-zurueck", this).remove();
					jQuery(this).append(html_zurueck_button);
					jQuery(".inhalt-galerie-gruppe-zurueck a:first", this).css({"padding-top": "0em"}).hide();
	
					jQuery(".inhalt-galerie-gruppe-zurueck > a", this).click(function(){
						if (options.currentPosition <= 1) {
							// fuehre den klick nicht weiter aus, da die galerie ueber das ziel hinaus sliden wuerde
							return false;
						}

						var ist_position = options.currentPosition;

						breite_gruppe = $(this.parentNode.parentNode).width();
						if (navigator.userAgent.search(/\(KHTML, like Gecko\)/) > -1) {
							var zoom  = document.width / $(document).width();
							jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).css("left", breite_gruppe*-1*(options.currentPosition-1)/zoom+"px"); // notwendig fuer chrome - korrigiere die ausgangspotition um den zoomfaktor um den sprung-effekt zu vermeiden
						}


						jQuery(".inhalt-galerie-gruppen:first", this.parentNode.parentNode).animate({left:'+='+breite_gruppe}, options.slideSpeed, options.easing, function(){
							if (navigator.userAgent.search(/Firefox\/(1|2)\./) == -1) {
								$(this).css("left", (options.currentPosition-1)*-100+"%");
							}
						});
						
						if (ist_position-1 == 1) {
							jQuery(".inhalt-galerie-gruppe-zurueck a:first", this.parentNode.parentNode).fadeOut();
						}
						if (ist_position <= anzahl_gruppen) {
							jQuery(".inhalt-galerie-gruppe-vor a:first", this.parentNode.parentNode).fadeIn();
						}
						options.currentPosition--;
						return false; // Deaktiviere die Klickfunktionalitaet der Anker-Pfeile
					});
				}

				// Wenn ein Anker gesetzt wurde und die Pfeile möglicherweise ausserhalb
				// des sichtbaren Bereiches sind: setze den Anker auf die erste Gruppe von Bildern
				var idFirstGroup =$(".inhalt-galerie-gruppe:first", this).attr("id");
				var tempLocation = location.href;
				tempLocation = tempLocation.split("#");
				if (tempLocation.length > 1) {
					var tempElementNr = tempLocation[1].split("-");
					var elementNr = tempElementNr[2];
					var gruppeNr = parseInt(tempElementNr[3]);
					if (gruppeNr > 1) {
						var regexp = new RegExp("galerie-bild-"+elementNr+"-\\d", "i");
						if (regexp.test(idFirstGroup)) {
							location.href = "#"+idFirstGroup;
						}
					}
				}
				
			}); // return this.each(function(){
		}
	
	});

})(jQuery);
