/*
* Clean Css Animation für jQuery von pfirsichmelba.de // Alexander Farkas <a.farkas@pfirsichmelba.de>
*
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
* 
* Bei guten Verbesserungen/öffentlichem Einsatz wäre ich für eine kurze Mail mit Link dankbar.
*/
jQuery.fn.CleanCSSAnimation = function(_animetyp,$arg1,$arg2,$arg3,$arg4) {
	var $args = new Array($arg1,$arg2,$arg3,$arg4);
	//Position der Callback-Funktion ist in der Regel der 2. Parameter (1), bei Animate, jedoch der 3. (2)
	//Für Interface-Nutzer weitere Ausnahmeregeln: (_animetyp == "animate" || _animetyp == "Pulsate" || _animetyp == "Fold" || _animetyp == "UnFold" || _animetyp == "UnFold" || _animetyp == "Highlight") ? $fnpos = 2 : $fnpos = 1;
	(_animetyp == "animate") ? $fnpos = 2 : $fnpos = 1;
	var $cbfn = "";
	//Ist eine CallbackFunktion definiert, wird Sie und ihre Position gespeichert (überschreibt also die beiden Zeilen davor)
	//Hier wird lediglich die Position ermittelt
	jQuery.each($args,function(o){
		if(typeof this == "function"){
			//Sichern der eigentlichen Callback-Funktion
			$cbfn = $args[o];
			$fnpos = o;
		}
		return;
	});
	//Eigentliches Ersetzen der Callbackfunktion mit der Cleanerfunktion an der erwarteten bzw. ermittelten Position; die alte wird als Parameter übergeben
	$args.splice($fnpos, 1, function(){_apllyOldCallback(this,$cbfn)});
	return this.each(function(){
	//Verschmutzen des inline-css: vor Animation
	unMakeInlineCSS(this,'pre');
	//Aufruf der jQuery-Animation
	jQuery(this)[ _animetyp ].apply( jQuery(this), $args );
	});
};
//Eigentliche Säuberungsfunktion
function unMakeInlineCSS($elem,$when){
	//Name der css-class die statt display: none/display:block verwendet werden soll.
	var $nodisClass = "displaynone";
	var $disClass = "displayblock";
	if($when == "pre") {
		if(jQuery($elem).is('.'+$nodisClass))
			jQuery($elem).css("display","none").removeClass($nodisClass);
		else if(jQuery($elem).is('.'+$disClass))
			jQuery($elem).css("display","block").removeClass($disClass);
	} else if($when == "post") {
		if(jQuery($elem).css("display") == "none")
			jQuery($elem).addClass($nodisClass).css("display","");
		else if(jQuery($elem).css("display") == "block")
			jQuery($elem).addClass($disClass).css("display","");
	}	
};
// Callbackfunktion startet Säuberung und falls vorhanden die vom Autoren definierte Callbackfunktion
function _apllyOldCallback($elem,$cbfn){
	//Säubern
	unMakeInlineCSS($elem,"post");
	// Einige Plugin-Effekte (z.B. Interface) rufen die Callback-Funktion auf, bevor die Funktion wirklich beendet wurde -> obigen Säuberungsaufruf löschen und durch folgenden ersetzen
	/*
	_glob_cleancssele = $elem;
	window.setTimeout("unMakeInlineCSS(_glob_cleancssele,"post")", 3);
	*/
	//Wenn eine Callback-Funktion definiert wurde, kann sie jetzt ausgeführt werden
	if(typeof $cbfn == "function")
		$cbfn.apply($elem);
};
