// gibt nützliche kleine hilfestellungen für das design der seite
// created by zber@webcenter@IAS@ZHAW 04.11.2010

// nur aktuelles content-Element (ce_) mixen

// ===> beim Starten ausführen
// diese funktion findet selbständig die nötigen funktionen und ruft sie aus
// diese funktion muss auf "ready" ausgeführt werden
$(document).ready( function () {
	// return; // debug ruhe
	aa2_shuffle();
	aa2_showonly();
	aa2_firstlast();
	aa2_oddeven();
	aa2_again();
	aa2_slideshow();
	aa2_gallery();
	// css durchsuchen nach trigger "aa2_"
		// funktionsnamen eruieren
		// funktion aufrufen
});

// ===> Wenn einige ausgeblendet werden müssen
// function aa2_showonly - 04.11.2010
// blendet alle überzähligen elemente aus
// das element aa2_showonly_count soll den Funktionsnamen und Timeout in Sekunden im rel enthalten
function aa2_showonly(nrOfElem) {
	if (typeof(nrOfElem) == "undefined") {
		nrOfElem = 0;
		$(".aa2_showonly").each(function () {
			aa2_showonly( nrOfElem );
			nrOfElem++;
		});
	} else {
		$('.aa2_showonly:eq('+nrOfElem+')').each(function (index) {
			var elems = $(this).children();
			for (var i=0; i<elems.length; i++) {
				$(elems[i]).show();
				if ( i >= $(this).parent().parent().find(".aa2_showonly_count").attr("rel") ) {
					$(elems[i]).hide();
				}
			}
		});
		if ( $('.aa2_showonly:eq('+nrOfElem+')').is('aa2_shuffle') ) {
			aa2_shuffle(nrOfElem);
		}
	}
}

function aa2_gallery(which,action) {
	// ===> Gallery
	// function aa2_gallery - 15.06.2011
	// lässt die bilder als galerie darstellen
	// Grösse der Bilder wird über das CSS definiert
	if (typeof(which) == "undefined") {
		$(".aa2_gallery").each(function() {
			// debug
				// $(this).css("background-color","blue");
			// zuerst die links verbergen
				$(this).find("ul").addClass("hidden");
			// die grössen der kleinen bilder rausfinden
			// dafür zuerst ein bild erstellen
				$(this).append('<div class="itemWrap aa2_gallery_vermassung"><div class="itemWrapInner"></div></div>');
			// und es dann vermessen
				var smallwidth = parseInt($(".aa2_gallery_vermassung").outerWidth(true)); // vielleicht müssten die proportionen berücksichtigt werden (a la /3*4)
				/*
				var smallpadding = 2*$(".aa2_gallery_vermassung").css("padding");
				var smallmargin = 2*$(".aa2_gallery_vermassung").css("margin");
				smallwidth = smallwidth + smallpadding + smallmargin;
				*/
			// und entfernen
				$(".aa2_gallery_vermassung").remove();
			// jetzt ein gefäss bauen für die bilder
				$(this).append('<div class="aa2_gallery_content"><span class="aa2_gallery_innercontent"></span><div class="clearer"></div></div><div class="clearer"></div>'); // 
			// jetzt durch all li loopen und die bilderdivs erstellen
				$(this).find("ul li").each(function() {
					// html generieren
					var titlehtml = '';
					if ($(this).children("a").attr("data-title") != "") {
						titlehtml = '<div class="pictitle">' + $(this).children("a").attr("data-title") + '</div>';	
					}
					var divhtml = '<span data-smallurl="' + $(this).children("a").attr("href") + '&width=' + parseInt(smallwidth/3*4) + '" class="itemWrap hidden"><a class="itemWrapInner nyroModal" href="' + $(this).children("a").attr("href") + '" rel="' + $(this).parent().parent().attr("id") + '[]" title="' + $(this).children("a").attr("data-title") + '"></a>' + titlehtml + '<div class="clearer"></div></span>';
					// und anhängen
					$(this).parent().parent().find(".aa2_gallery_innercontent").append(divhtml);
				});
				$(this).parent().parent().find(".aa2_gallery_innercontent").append('<div class="clearer"></div>');
			// alle nyroModal-Links nyroModalenn
				$(this).find("a.nyroModal").nyroModal();
			// die grösse des elements eruieren
				var galwidth = parseInt($(this).innerWidth());
			// variablen rechenn und speichern
				$(this).attr("data-cols",Math.floor(galwidth/smallwidth));
				$(this).attr("data-picsperview",parseInt($(this).attr("data-cols"))*parseInt($(this).attr("data-lines")));
				$(this).attr("data-current",0);
				$(this).attr("data-totalcount",$(this).find("ul li").length);
				$(this).attr("data-totalviews",Math.ceil(parseInt($(this).attr("data-totalcount"))/parseInt($(this).attr("data-picsperview"))));
				
				$(this).find(".itemWrap:nth-child("+$(this).attr("data-cols")+"n+1)").addClass("endofrow");
				
			if(parseInt($(this).attr("data-totalviews")) > 1) {
				// navi mechen
					$(this).append('<div class="easygallery_navi_wrapper"><span class="easygallery_navi"><span class="prev">&lt;</span><span class="numbers"></span><span class="next">&gt;</span></span></div>');
					for (var i=1; i<=$(this).attr("data-totalviews"); i++) {
						$(this).find(".numbers").append('<span data-view="' + i + '" class="number">' + i + '</span>');
					}
					$(this).find(".easygallery_navi .prev").click(function() {
						aa2_gallery($(this).parent().parent().parent().attr("id"),"prev");
					});
					$(this).find(".easygallery_navi .next").click(function() {
						aa2_gallery($(this).parent().parent().parent().attr("id"),"next")	
					});
					$(this).find(".easygallery_navi .numbers .number").click(function() {
						aa2_gallery($(this).parent().parent().parent().parent().attr("id"),$(this).attr("data-view"))	
					});
			}
			// und starten
				aa2_gallery($(this).attr("id"),"init");
		});
	} else if(typeof(action) != "undefined") {
		var thisgallery = $(".aa2_gallery[id='"+which+"']");
		var currentview = parseInt($(thisgallery).attr("data-current"));
		var totalpics = parseInt($(thisgallery).attr("data-totalcount"));
		var picsperview = parseInt($(thisgallery).attr("data-picsperview"));
		var totalviews = parseInt($(thisgallery).attr("data-totalviews"));
		switch(action) {
			case "init":
				nextview = 1; // am init mit dem ersten bild anfangen
			break;
			case "next":
				var nextview = currentview+1; // eine seite dazuzählen
				if (nextview > totalviews) { // wenn wir die anzahl bilder überschritten haben
					nextview = 1; // wieder vorne beginnen
				}
			break;
			case "prev":
				var nextview = currentview-1; // eine seite abzählen
				if (nextview <= 0) { // wenn wir unter null sind
					nextview = totalviews; // auf das erste bild der letzten seite schalten
				}
			break;
			default:
				var nextview = parseInt(action);
			break;
		}
		$(thisgallery).attr("data-current",nextview);
		var nextpic = (parseInt(nextview)-1)*parseInt(picsperview);
		var maxpic = parseInt(nextpic)+parseInt(picsperview);
		// jetzt die bilder anzeigen
		$(thisgallery).find(".aa2_gallery_innercontent .itemWrap").addClass("hidden");
		$(thisgallery).find(".number").removeClass("active");
		$(thisgallery).find(".aa2_gallery_innercontent .itemWrap").slice(nextpic,maxpic).each(function() {
			$(this).find(".itemWrapInner").css("background-image","url(" + $(this).attr("data-smallurl")  + ")");
		});
		$(thisgallery).find(".aa2_gallery_innercontent .itemWrap").slice(nextpic,maxpic).removeClass("hidden");
		$(thisgallery).find(".number[data-view=" + nextview + "]").addClass("active");
		if (action == "init") {
			// nun nachdem alles gemacht ist, die höhe fixieren. das führt dazu, dass auch die letzte seite ihre grösse hält
			// $(thisgallery).css("height",$(thisgallery).height());
		}
	}
}

// ===> Slideshow
// function aa2_slideshow - 10.05.2011
// lässt die bilder nacheinander faden
// welche bilder, wie lange der übergang, wie lange die pause - alles mit data-
// data-images, data-thumbs, data-links, data-wait, data-slide
function aa2_slideshow(which) {
	if (typeof(which) == "undefined") {
		timearrgh = [];
		$('.aa2_slideshow').each(function () {
			$(this).append('<div class="boexlis"></div>');
			for (var i=0; i<$(this).attr("data-images").split(",").length; i++) {
				$(this).find(".boexlis").append('<div class="slideboexli"></div>');
			}
			$(this).prepend('<div class="slidePic"></div>');
			$(this).attr("data-currpic",0);
			$(this).find(".slidePic").css("background-image","url(" + $(this).attr("data-images").split(",")[$(this).attr("data-currpic")] + ")");
			which = $(this).attr("data-slidename");
			eval("timearrgh['" + which + "'] = 0"); // die variable muss "global" definiert sein
			aa2_slideshow(which);
		});
	} else {
		// aktiven slide finden
		var thisslide = $(".aa2_slideshow[data-slidename='"+which+"']");
		// aktives bild hochzählen
		$(thisslide).attr("data-currpic",parseInt($(thisslide).attr("data-currpic"))+1);
		// wenn das aktive bild höher wäre als das höchste bild, auf null setzen
		if ($(thisslide).attr("data-currpic")>$(thisslide).attr("data-images").split(",").length) $(thisslide).attr("data-currpic",1);
		// tmpdiv einfügen & aktives bild setzen
		$(thisslide).prepend('<div class="slidePicTMP"></div>');
		$(thisslide).find(".slidePicTMP").hide();
		$(thisslide).find(".slidePicTMP").css("background-image","url(" + $(thisslide).attr("data-images").split(",")[$(thisslide).attr("data-currpic")-1] + ")");
		$(thisslide).find(".slidePicTMP").attr("onclick","window.location.href='" + $(thisslide).attr("data-links").split(",")[$(thisslide).attr("data-currpic")-1] + "'");
		$(thisslide).find(".slidePicTMP").fadeIn( // einfaden
			parseInt($(thisslide).attr("data-slide")*1000), // gemäss html-data-definition
			function() { // wenn fertig:
				// alle boexlis (sic!) auf inaktiv setzen
				$(thisslide).find(".slideboexli_aktiv").removeClass("slideboexli_aktiv");
				// aktives boexli auszeichnen
				$(thisslide).find(".slideboexli:nth-child(" + $(thisslide).attr("data-currpic") + ")").addClass("slideboexli_aktiv");
				$(thisslide).find(".slidePic").remove();
				$(thisslide).find(".slidePicTMP").addClass("slidePic");
				$(thisslide).find(".slidePicTMP").removeClass("slidePicTMP");
				// slideshow wieder aufrufen
				reeval = "timearrgh['" + which + "'] = window.setTimeout(\"aa2_slideshow('" + which + "')\"," + $(thisslide).attr("data-wait")*1000 + ")";
				eval(reeval);
			}
		);
	}
}

// ===> Durcheinanderrühren
// function aa2_shuffle - 04.11.2010
// mischelt mit css markierte elemente durcheinander
// äusseres element mit klasse aa2_schuffle markieren
function aa2_shuffle(nrOfElem) {
	if (typeof(nrOfElem) == "undefined") {
		nrOfElem = 0;
		$(".aa2_shuffle").each(function () {
			aa2_shuffle( nrOfElem );
			nrOfElem++;
		});
	} else {
		$('.aa2_shuffle:eq('+nrOfElem+')').each(function () {
			var elems = $(this).children();
			elems.sort( function() { return ( Math.round(Math.random() )-0.5); } );
			$(this).empty();
			for (var i=0; i<elems.length; i++) {
				$(this).append(elems[i]);
			}
			if ( $(this).is(".aa2_firstlast") ) {
				aa2_firstlast(nrOfElem); // neu geschüttelte elemente wieder richtig beklassen
			}
			if ( $(this).is(".aa2_oddeven") ) {
				aa2_oddeven(nrOfElem); // neu geschüttelte elemente wieder richtig beklassen
			}
		});
	}
}

// ===> erste und letzte markieren
// function aa2_firstlast - 04.11.2010
// kennzeichnet mit css markierte elemente als first/last
// äusseres element mit klasse aa2_firstlast markieren
function aa2_firstlast(nrOfElem) {
	if (typeof(nrOfElem) == "undefined") {
		nrOfElem = 0;
		$(".aa2_firstlast").each(function () {
			aa2_firstlast( nrOfElem );
			nrOfElem++;
		});
	} else {
		$('.aa2_firstlast:eq('+nrOfElem+')').each( function() {
			// firstlast entfernen
			$(this).children(".first").removeClass("first");
			$(this).children(".last").removeClass("last");
			// firstlast neu setzen
			$(this).children().filter(":visible:first").addClass("first");
			$(this).children().filter(":visible:last").addClass("last");
		});
	}
}

// ===> gerade und ungerade markieren
// function aa2_oddeven - 04.11.2010
// kennzeichnet mit css markierte elemente als odd/even
// äusseres element mit klasse aa2_oddeven markieren
function aa2_oddeven(nrOfElem) {
	if (typeof(nrOfElem) == "undefined") {
		nrOfElem = 0;
		$(".aa2_oddeven").each(function () {
			aa2_oddeven( nrOfElem );
			nrOfElem++;
		});
	} else {
		$('.aa2_oddeven:eq('+nrOfElem+')').each( function() {
			// oddeven entfernen
			$('.aa2_oddeven:eq('+nrOfElem+') .odd').removeClass("odd");
			$('.aa2_oddeven:eq('+nrOfElem+') .even').removeClass("even");
			// oddeven neu setzen
			$('.aa2_oddeven:eq('+nrOfElem+')').children().filter(":visible:odd").addClass("odd");
			$('.aa2_oddeven:eq('+nrOfElem+')').children().filter(":visible:even").addClass("even");
		});
	}
}

// ==> interval setzen
// function aa2_again - 04.11.2010
// wiederholt eine bestimmte aktion nach x sekunden
// das element aa2_again soll den Funktionsnamen und Timeout in Sekunden im rel enthalten
function aa2_again() {
	nrOfElem = 0;
	$(".aa2_again").each( function() {
		var aa2_content = $(this).attr('rel').split(",");
		var befehlname = aa2_content[0];
		var befehl = befehlname+"(" + nrOfElem + ")"
		var zeit = parseInt(aa2_content[1]*1000);
		eval("aa2_interval_" + befehlname + "_" + nrOfElem + " = window.setInterval(\"window[" + befehl + "]\", zeit)");
		nrOfElem++;
	});
}
