/**
 * Script		: nmProjectSlider
 * Version	: 0.2dev
 * Authors	: Pierre Geyer
 * Desc			: ProjectSlider 
 *
 * 0.2
 * - Übersichtsseite
 * - Quellenkommentare
 *
 * 0.1 
 * - Queue
 * - durchschalten Projekt
 */

(function($) {	
    var nmProjectSliderOpts = {};
    var debug = false;
    var preloadList = [];
    var	preLoadActive = false;
    var preLoadCnt = 0;
    var overviewLoad = false;
    var overviewVisible = false;
  
    /**
	 CONSTRUCTOR
	 **/
    $.fn.nmProjectSlider = function (settings) {

        // Options zusammenstellen
        nmProjectSliderOpts = $.extend({}, $.fn.nmProjectSlider.defaults, settings);
        nmProjectSliderOpts.count = $('.'+nmProjectSliderOpts.projectClass).length-1; // Übersicht abziehen

        // Verknüpfe alle Slider-Links mit dem Mouse-Events
        $(nmProjectSliderOpts.directButtonClass).bind('click',$.fn.nmProjectSlider.slideToByClick);
        $('#'+nmProjectSliderOpts.nextButtonId).bind('click',$.fn.nmProjectSlider.nextClick);
        $('#'+nmProjectSliderOpts.nextButtonId).bind('dblclick',$.fn.nmProjectSlider.nextDoubleClick);
        $('#'+nmProjectSliderOpts.prevButtonId).bind('click',$.fn.nmProjectSlider.prevClick);
        $('#'+nmProjectSliderOpts.prevButtonId).bind('dblclick',$.fn.nmProjectSlider.prevDoubleClick);
        $('#'+nmProjectSliderOpts.overviewButtonId).bind('click',$.fn.nmProjectSlider.overviewClick);
     //   $('#nm-project-overview-list a').bind('click',$.fn.nmProjectSlider.slideToByClick);

        // Gleich zum ersten Projekt springen
        $.fn.nmProjectSlider.Preload(0,
            function() {
                $.fn.nmProjectSlider.getProjectByIndex(0).fadeIn();
            },
            $.fn.nmProjectSlider.showLoadingProgressBar(),
            $.fn.nmProjectSlider.preLoadSlides
            );
    }; // function


    $.fn.nmProjectSlider.preLoadSlides = function () {
        $.fn.nmProjectSlider.hideLoadingProgressBar();
        // Autoslider starten
        if (nmProjectSliderOpts.autoSlide) {
            setTimeout("$.fn.nmProjectSlider.autoSlide();", nmProjectSliderOpts.autoSlideSpeed);
        }
        // Jetzt anweisen alle anderen Slides zu laden
        $.fn.nmProjectSlider.preLoadAllSlides($.browser.msie ? 2 : 1);
    }
    /**
     * preLoadAllSlides - Lädt alle Slides und Cached deren Inhalt dabei
     */
    $.fn.nmProjectSlider.preLoadAllSlides = function (preLoadIndex) {
        if (debug) console.log('preLoadAllSlides('+preLoadIndex+')');
        var nextPreLoadIndex = preLoadIndex+1;
        $.fn.nmProjectSlider.Preload(preLoadIndex, function(){
            if (preLoadIndex < nmProjectSliderOpts.count) {
                $.fn.nmProjectSlider.preLoadAllSlides(nextPreLoadIndex);
            }
        });
    }

    /**
	 * Liefert zurück, ob alle Images preloaded sind
	 */
    $.fn.nmProjectSlider.isPreloaded = function (index) {
        var result = $('.nm-preload',$.fn.nmProjectSlider.getProjectByIndex(index)).length == 0;
        if (debug) console.log('isPreloaded('+index+') '+ result);
        return result;
    };

    /**
	 * Lädt alle Images mit der Klasse ".nm-preload" nach, und führt danach den "callback" aus.
	 */
    $.fn.nmProjectSlider.Preload = function (index, callback, loadingCallback, finishCallback) {
        if (debug) console.log('preloaded('+index+') ');
		
        // Projekt holen
        var project = $.fn.nmProjectSlider.getProjectByIndex(index);
			
        // Alle ungecached Elements ermitteln
        var cacheElements = $('.nm-preload', project).not('.nm-preload-done');
		
        if (cacheElements.length == 0) {

            // Wenn nichts zum Cachen ist, dann Callback gleich ausführen
            callback();

        } else {

            cacheElements = cacheElements.not('.nm-preload-queued');
            // Alle Elemente und den Callback in die Queue legen
            //console.log(loadingCallback);
            if (loadingCallback) loadingCallback();
            if (loadingCallback) preloadList.push(loadingCallback);
            cacheElements.each(function() {
                $(this).addClass('nm-preload-queued');
                //removeClass('nm-preload');
                preloadList.push(this);
            });
            if (finishCallback) preloadList.push(finishCallback);
            preloadList.push(callback);
        }
		
        // den eigentlichen Ladevorgang starten
        $.fn.nmProjectSlider.ProcessPreloadQueue(false);
    };

    /**
	 * Arbeitet die Warteschlange ab.
	 */
    $.fn.nmProjectSlider.ProcessPreloadQueue = function(ignoreActive) {
		
        // Wenn gerade etwas geladen wird, dann nicht noch einen Preload ausführen
        if (preLoadActive && !ignoreActive) return false;
        preLoadActive = true;

        // Wenn nichts zum Preloaden da ist, abrechen
        if (preloadList.length == 0) {
            preLoadActive = false;
            return false;
        }
		
        // Nächstes Element ermitteln, was gepreloaded werden soll
        preloadElement = preloadList.shift();
	
			
        if (typeof preloadElement == 'function') {

            // Run callbacks
            if (debug) console.log('run: ('+preloadElement+')');
            preloadElement();
            $.fn.nmProjectSlider.ProcessPreloadQueue(true);

        } else {
			
            // Lädt das Element
            $.fn.nmProjectSlider.PreloadElement(preloadElement);

        }
    };
	
    /**
	* Ermittelt aus dem übergebenen Element das benötigte Bild
	* und lädt es. Erst nach Laden des Bildes stößt er die Queue wieder an.
	*/
    $.fn.nmProjectSlider.PreloadElement = function (preloadElement) {

        // Versuchen ob es sich um ein Bild handelt
        imageSrc = $(preloadElement).attr('src');
        if (!imageSrc) {
            // Versuchen ob es sich um ein Hintergrundbild handelt
            imageSrc = $(preloadElement).css('background-image');
            if (imageSrc) {
                imageSrc = imageSrc.match(/[^\(\"]+\.(gif|jpg|jpeg|png)/g);
                if(imageSrc != null && imageSrc.length>0 && imageSrc != ''){
                    var arr = jQuery.makeArray(imageSrc);
                    jQuery(arr).each(function(){
                        imageSrc.src = (this[0] == '/' || this.match('http://')) ? this : '/' + this;
                    });
                }
            }
        }
			
        // Wenn keine Bildangaben gefunden wurden sind, dann nächstes Queue-Element nehmen
        if (imageSrc) {
            if (debug) console.log('loadElement: ('+imageSrc+')');

            // Bild endlich erzeugen und laden
            var img = new Image();
            $(img)
            // Wenn es erfolgreich geladen wurde, dann das nächste laden
            .load(function () {
                $(preloadElement).addClass('nm-preload-done');
                if (debug) console.log('loaded: ('+imageSrc+')');
                $.fn.nmProjectSlider.ProcessPreloadQueue(true);
            })
            // Auch wenn es nicht erfolgreich geladen wurde, dann das nächste laden
            .error(function () {
                $(preloadElement).addClass('nm-preload-done');
                if (debug) console.log('loaded fail: ('+imageSrc+')');
                $.fn.nmProjectSlider.ProcessPreloadQueue(true);
            })
            .attr('src', imageSrc);
        } else {
            $.fn.nmProjectSlider.ProcessPreloadQueue(true);
            return false;
        }

    };




	
    $.fn.nmProjectSlider.getProjectByIndex = function (index) {
        return $('.'+nmProjectSliderOpts.projectClass+':eq('+(index+1)+')');
    };

    $.fn.nmProjectSlider.overviewClick = function () {
        if (overviewLoad) {
            return false;
        }
        overviewLoad = true;
		
        if (overviewVisible) {
            $.fn.nmProjectSlider.fadeOutOverview($.fn.nmProjectSlider.getProjectByIndex(-1));
            return false;
        }
	  
        nmProjectSliderOpts.autoSlide = false;
        $.fn.nmProjectSlider.Preload(-1,
            function() {
                $.fn.nmProjectSlider.fadeInOverview($.fn.nmProjectSlider.getProjectByIndex(-1));
            },
            $.fn.nmProjectSlider.showLoadingProgressBar,
            $.fn.nmProjectSlider.hideLoadingProgressBar
            );
        return false;
    };

    $.fn.nmProjectSlider.nextClick = function () {
        nmProjectSliderOpts.autoSlide = false;
        $.fn.nmProjectSlider.slideTo($.fn.nmProjectSlider.getCurrentSlide() + 1);
        return false;
    };

    $.fn.nmProjectSlider.nextDoubleClick = function () {
        nmProjectSliderOpts.autoSlide = false;
        $.fn.nmProjectSlider.slideTo($.fn.nmProjectSlider.getCurrentSlide() );
        return false;
    };

    $.fn.nmProjectSlider.prevClick = function () {
        nmProjectSliderOpts.autoSlide = false;
        $.fn.nmProjectSlider.slideTo($.fn.nmProjectSlider.getCurrentSlide() - 1);
        return false;
    };

    $.fn.nmProjectSlider.prevDoubleClick = function () {
        nmProjectSliderOpts.autoSlide = false;
        $.fn.nmProjectSlider.slideTo($.fn.nmProjectSlider.getCurrentSlide());
        return false;
    };


    $.fn.nmProjectSlider.slideToByClick = function () {
        nmProjectSliderOpts.autoSlide = false;
	  
        var currentButton = $(this);
        var index = currentButton.attr('rel');
        $.fn.nmProjectSlider.slideTo(index-1);
        return false;
    };

    $.fn.nmProjectSlider.getCurrentSlide = function() {
        return (nmProjectSliderOpts.nextSlide != null) ? nmProjectSliderOpts.nextSlide : nmProjectSliderOpts.currentSlide;
    };
	
    /**
	 * Setzt den Navigationsdot
	 */
    $.fn.nmProjectSlider.setNavDot = function (index) {
        var xleft = (12* (index % 4));
        var ytop  = index < 4 ? 0 : 10;
		
        $('#nm-project-nav-dots span').css({
            left: xleft,
            top: ytop
        }).show();
    }
	 
    /**
	 * Startet den Slide zu einem bestimmten Element
	 */
    $.fn.nmProjectSlider.slideTo = function (index) {
		
        if (debug) console.log('slideTo('+index+')');
        if (overviewVisible) $.fn.nmProjectSlider.fadeOutOverview($.fn.nmProjectSlider.getProjectByIndex(-1));
		
        var direction = 'down';
		
        // Slided zu dem jeweiligen Projekt
        if (index > nmProjectSliderOpts.currentSlide) {
            direction = 'up';
        }

        // Running
        if (nmProjectSliderOpts.running) {

            nmProjectSliderOpts.nextSlide = index;

            var i2 = index;
			
            if (index > nmProjectSliderOpts.count-1) index = index % nmProjectSliderOpts.count;
            if (index < 0) index = nmProjectSliderOpts.count - 1 - Math.abs((index + 1) % nmProjectSliderOpts.count);

            $.fn.nmProjectSlider.setNavDot(index);
		
            return false;
        }

        if (index > nmProjectSliderOpts.count-1) index = index % nmProjectSliderOpts.count;
        if (index < 0) index = nmProjectSliderOpts.count - 1 - Math.abs((index + 1) % nmProjectSliderOpts.count);
		
        $.fn.nmProjectSlider.setNavDot(index);

        // stop, wenn schon aktiv
        if (nmProjectSliderOpts.currentSlide == index) return false;
		
        nmProjectSliderOpts.running = true;
		
        // speichern wenn geslided werden soll
        lastSlide = nmProjectSliderOpts.currentSlide;
        nmProjectSliderOpts.currentSlide = index;
		
	  
        if (direction == 'down') {
            $.fn.nmProjectSlider.Preload(index,
                function() {
                    $.fn.nmProjectSlider.fadeInDown($.fn.nmProjectSlider.getProjectByIndex(index));
                },
                $.fn.nmProjectSlider.showLoadingProgressBar,
                $.fn.nmProjectSlider.hideLoadingProgressBar
                );
            $.fn.nmProjectSlider.fadeOutDown($.fn.nmProjectSlider.getProjectByIndex(lastSlide));
        } else if (direction == 'up') {
            $.fn.nmProjectSlider.Preload(index,
                function() {
                    $.fn.nmProjectSlider.fadeInUp($.fn.nmProjectSlider.getProjectByIndex(index));
                },
                $.fn.nmProjectSlider.showLoadingProgressBar,
                $.fn.nmProjectSlider.hideLoadingProgressBar
                );
            $.fn.nmProjectSlider.fadeOutUp($.fn.nmProjectSlider.getProjectByIndex(lastSlide));
        } else if (direction == 'center') {
            $.fn.nmProjectSlider.Preload(index,
                function() {
                    $.fn.nmProjectSlider.fadeInOverview($.fn.nmProjectSlider.getProjectByIndex(index));
                },
                $.fn.nmProjectSlider.showLoadingProgressBar,
                $.fn.nmProjectSlider.hideLoadingProgressBar
                );
            $.fn.nmProjectSlider.fadeOut($.fn.nmProjectSlider.getProjectByIndex(lastSlide));
        }
        return false;
    };

    $.fn.nmProjectSlider.showLoadingProgressBar = function () {
        if (debug) console.log('showLoadingProgressBar');
        $('#nm-project-loading').fadeIn();
    }

    $.fn.nmProjectSlider.hideLoadingProgressBar = function () {
        $('#nm-project-loading').fadeOut();
    }


    /**
	 * Von unten einfaden 
	 */
    $.fn.nmProjectSlider.fadeInUp = function (project) {
        $.fn.nmProjectSlider.fadeIn(project, 330, 328);
    };

    /**
	 * Von oben einfaden 
	 */
    $.fn.nmProjectSlider.fadeInDown = function (project) {
        $.fn.nmProjectSlider.fadeIn(project, -230, -228);
    };

    /**
	* Faded das Project ein
	*/
    $.fn.nmProjectSlider.fadeIn = function (project, descTop, imageTop) {

        project.hide(); // Bevor es eingeblendet wird, muss es erstmal unsichtbar sein
        $('.nm-project-image-container', project).css('opacity', 0);
        $('.nm-project-image-container', project).animate({
            opacity: 0.99
        }, nmProjectSliderOpts.backgroundFadeSpeed, function () {});
	
        $('.nm-project-desc', project).css({
            top: descTop
        });
        $('.nm-project-desc', project).animate({
            top: 0
        }, nmProjectSliderOpts.speed, function () {});
	
        $('.nm-project-image', project).css('top', imageTop);
        $('.nm-project-image', project).animate({
            top: 68
        },  nmProjectSliderOpts.speed, function () {});
		
        $('.nm-project-comment', project).css('opacity', 0);
        $('.nm-project-comment', project).delay(nmProjectSliderOpts.speed - nmProjectSliderOpts.commentSpeed).animate({
            opacity: 1
        }, nmProjectSliderOpts.commentSpeed, function () {});
        project.show();
    };

	
    /**
	* Faded das Project ein
	*/
    $.fn.nmProjectSlider.fadeInOverview = function (project) {

        project.hide(); // Bevor es eingeblendet wird, muss es erstmal unsichtbar sein
        $('.nm-project-image-container', project).css({
            opacity: 0
        });
        $('#nm-project-overview-list li a',project).css({
            opacity: 1
        });
        $('.nm-project-image-container', project).animate({
            opacity: 0.4
        }, nmProjectSliderOpts.overviewFallDownSpeed, function() {
            overviewLoad = false;
            overviewVisible = true;
            $.fn.nmProjectSlider.markFinished();
        });
		
        var i = 8;
        $('#nm-project-overview-list li',project).each(function() {
            // Außerhalb des Sichtbereiches
            var thumb = $(this);
            i = i - 1;
			
            thumb.css({
                top: -120
            });
            thumb.delay( (nmProjectSliderOpts.overviewFallDownSpeed / 8) * i).animate({
                top: (i > 3 ? 0 : 140)
            }, nmProjectSliderOpts.overviewFallDownSpeed);
        });
	
		
        project.show();
    };

    /**
	* Faded das Project ein
	*/
    $.fn.nmProjectSlider.fadeOutOverview = function (project) {

        $('.nm-project-image-container', project).animate({
            opacity: 0
        }, nmProjectSliderOpts.overviewFallDownSpeed, function() {
            project.hide();
            overviewLoad = false;
            overviewVisible = false;
            $.fn.nmProjectSlider.markFinished();
        });
        $('#nm-project-overview-list li a',project).animate({
            opacity: 0
        }, nmProjectSliderOpts.overviewFallDownSpeed, function() { });
    };

	
    /**
	 * Markiert die Animation als beendet und startet gegebenfalls die nächste
	 */
    $.fn.nmProjectSlider.markFinished = function () {
        nmProjectSliderOpts.running = false;
        if (nmProjectSliderOpts.nextSlide != null) {
            $.fn.nmProjectSlider.slideTo(nmProjectSliderOpts.nextSlide);
            nmProjectSliderOpts.nextSlide = null;
        }
    }
	
    /**
	 *	Nach unten ausfaden
	 */	
    $.fn.nmProjectSlider.fadeOutDown = function (project) {
        $.fn.nmProjectSlider.fadeOutSlide(project, 330, 330);
    };
	
    /**
	 *	Nach oben ausfaden
	 */	
    $.fn.nmProjectSlider.fadeOutUp = function (project) {
        $.fn.nmProjectSlider.fadeOutSlide(project, -230, -228);
    };

    /**
	* Faded das Project aus
	*/
    $.fn.nmProjectSlider.fadeOutSlide = function (project, descTop, imageTop) {

        $('.nm-project-image-container', project).animate({
            opacity: 0
        }, 		 nmProjectSliderOpts.backgroundFadeSpeed, function () {
            project.hide();
            $.fn.nmProjectSlider.markFinished();
        });
        $('.nm-project-desc', 	 				 project).animate({
            top: descTop
        }, nmProjectSliderOpts.speed, 			 function () {});
        $('.nm-project-image', 	         project).animate({
            top: imageTop
        }, nmProjectSliderOpts.speed, 			 function () {});
        $('.nm-project-comment',         project).animate({
            opacity: 0
        }, nmProjectSliderOpts.commentSpeed, function () {});
    };


    /**
	* Faded das Project aus
	*/
    $.fn.nmProjectSlider.fadeOut = function (project) {
    //project.animate({	opacity: 0.5			}).(nmProjectSliderOpts.backgroundFadeSpeed, $.fn.nmProjectSlider.markFinished );
    };

    /**
	 * Weißt das Projekt an immer eine Referenz weiter zu schalten
	 */
    $.fn.nmProjectSlider.autoSlide = function (){
        if (!nmProjectSliderOpts.autoSlide) return;
        $.fn.nmProjectSlider.slideTo($.fn.nmProjectSlider.getCurrentSlide() + 1);
        setTimeout("$.fn.nmProjectSlider.autoSlide();", nmProjectSliderOpts.autoSlideSpeed);
    };

    /**
	 * Standard-Settings
	 */
    $.fn.nmProjectSlider.defaults = {
        projectClass:		"nm-project",
        directButtonClass:		"#nm-project-nav-dots a",
        nextButtonId:					"nm-project-nav-next",
        prevButtonId:	  			"nm-project-nav-prev",
        overviewButtonId:			"nm-project-nav-overview",
        speed:								900,		// 1000
        commentSpeed:					600,		// 600
        backgroundFadeSpeed: 1000,
        overviewFallDownSpeed: 500,
		
        autoSlide:			true,
        autoSlideSpeed:	8000,
		
        // Runtime environment
        currentSlide: 	0,
        nextSlide:			null,
        running: 				false,
        count:					0
    };

})(jQuery);

/****************************************************************/

/**
 * Script		: nmRefSlider
 * Version	: 0.2dev
 * Authors	: Pierre Geyer
 * Desc			: RefSlider
 *
 * 0.2
 * - Übersichtsseite
 * - Quellenkommentare
 *
 * 0.1 
 * - Queue
 * - durchschalten Projekt
 */

(function($) {	
    var nmRefSliderOpts = {};

    var debug = false;
    var currentSlidePage = 0;
    var currentRef = 0;

    /**
    *  CONSTRUCTOR
    **/
    $.fn.nmRefSlider = function (settings) {

        // Options zusammenstellen
        nmRefSliderOpts = $.extend({}, $.fn.nmRefSlider.defaults, settings);
        nmRefSliderOpts.count = $('.'+nmRefSliderOpts.sliderListClass+' li').length-1; // Übersicht abziehen
        nmRefSliderOpts.slidePageCount = $('#nm-refs-slider-dots a').length-1; // Übersicht abziehen

        if (debug) console.log('Anzahl Referenzen: '+nmRefSliderOpts.count);
        if (debug) console.log('Anzahl Seiten: '+nmRefSliderOpts.slidePageCount);

        // Verknüpfe alle Slider-Links mit dem Mouse-Events
        // Overview Links
        $(".nm-refs-overview-toggle").bind('click', function(){$("#nm-refs-overview").slideToggle();$(this).toggleClass('active');return false;});
        $(".nm-refs-nav-previous").bind('click', $.fn.nmRefSlider.slideOverviewPrevClick);
        $(".nm-refs-nav-next").bind('click', $.fn.nmRefSlider.slideOverviewNextClick);
        $("#nm-refs-slider-dots a").bind('click', $.fn.nmRefSlider.slideOverviewDotClick);

        // nm-refs-slider-list
        var i= 0;
        $('.nm-refs-slider-list a').each(function() {
            var j = i;
            $(this).bind('click', function() {$.fn.nmRefSlider.showReference(j);return false;});
            if ($(this).parent().hasClass('active')) {
                currentRef = i;
            }
            i = i +1;
        });
        currentSlidePage = Math.floor(currentRef / 5);
        $.fn.nmRefSlider.addClickTriggersToRef(currentRef);
        $(".nm-ref-sub-image0",$.fn.nmRefSlider.getReference(currentRef)).show();

        // Easy Access
        nmRefSliderOpts.frame = function() {return $("#nm-subcontent-refs-detail");};
        nmRefSliderOpts.currentContainer = function() {return $(".nm-subcontent-refs-detail-container");};
        
        //nmRefSliderOpts.frame().css('overflow','hidden');
        nmRefSliderOpts.frame().height((nmRefSliderOpts.currentContainer().outerHeight()+5)+'px');

    }; // function

    $.fn.nmRefSlider.addClickTriggersToRef = function (index) {
        var i= 0;
        $(".nm-image-list a",$.fn.nmRefSlider.getReference(index)).each(function() {
            var j = i;
            var j2 = index;
            $(this).bind('click', function() {$.fn.nmRefSlider.showSubImage(j2,j);return false;});
            i = i +1;
        });
    }

    $.fn.nmRefSlider.showSubImage = function (index, imageIndex) {
        var ref = $.fn.nmRefSlider.getReference(index);


        $(".nm-image-list a", ref).removeClass('active');
        var contenturl = $(".nm-image-list a:eq("+imageIndex+")", ref).addClass('active').attr("href");
        if (debug) console.log(contenturl);
        $.browser.msie ?
            $(".nm-ref-main-image, .nm-ref-sub-image", ref).hide() :
            $(".nm-ref-main-image, .nm-ref-sub-image", ref).fadeOut();
        if ($(".nm-ref-sub-image"+imageIndex, ref).length > 0) {
            $.browser.msie ? 
                $(".nm-ref-sub-image"+imageIndex, ref).show() : 
                $(".nm-ref-sub-image"+imageIndex, ref).fadeIn();
        } else {
            ref.append('<div class="nm-ref-sub-image nm-ref-sub-image'+imageIndex+'" style="display: none;"><img src="'+contenturl+'" class="nm-preload"/></div>');

            $.browser.msie ? 
                $(".nm-ref-sub-loading", ref).show():
                $(".nm-ref-sub-loading", ref).fadeIn();

            $(".nm-ref-sub-image"+imageIndex, ref).nmPreloader.Preload(
                function(){
                    if ($.browser.msie) {
                        $(".nm-ref-sub-loading", ref).hide();
                        $(".nm-ref-sub-image"+imageIndex, ref).show();
                    } else {
                        $(".nm-ref-sub-loading", ref).fadeOut();
                        $(".nm-ref-sub-image"+imageIndex, ref).fadeIn();
                   }
                },
                function(){}
            );

        }

       
    }

    $.fn.nmRefSlider.getActiveSubImage = function (index, imageIndex) {
        var ref = $.fn.nmRefSlider.getReference(index)
        return $(".nm-ref-sub-image", ref).hasClass("nm-active") ?
               $(".nm-ref-sub-image", ref) : $(".nm-ref-main-image", ref);
    }

    /**
     * ALLE FUNKTIONEN UM DIE LISTE ZU STEUERN
     **/
    $.fn.nmRefSlider.slideOverviewPrevClick = function () {
        $.fn.nmRefSlider.slideOverview(currentSlidePage-1);
        return false;
    }

    $.fn.nmRefSlider.slideOverviewNextClick = function () {
        $.fn.nmRefSlider.slideOverview(currentSlidePage+1);
        return false;
    }

    $.fn.nmRefSlider.slideOverviewDotClick = function () {
        $.fn.nmRefSlider.slideOverview($(this).attr("rel"));
        return false;
    }

    $.fn.nmRefSlider.slideOverview = function (index) {
        // Überlauf & Unterlauf abfangen
        if (index < 0) index = nmRefSliderOpts.slidePageCount;
        if (index > nmRefSliderOpts.slidePageCount) index = 0;

        var position = currentRef - (currentSlidePage * 5);

        // Anzeigen
        currentSlidePage = index;
        $("#nm-refs-slider-dots span").css({left: index*12});
        $(".nm-refs-slider-list").animate({left: index*-840}, nmRefSliderOpts.slideListScrollSpeed);

        //$.fn.nmRefSlider.showReference(position + (currentSlidePage * 5));

    }

    /**
     * Alle Funktionen um die Referenzen zu steuern
     */
    $.fn.nmRefSlider.getReference = function (index) {
        return $('#nm-ref-'+index);
    }

    $.fn.nmRefSlider.showReference = function (index) {

        $('.nm-refs-slider-list li').removeClass('active');
        $('.nm-refs-slider-list li:eq('+index+')').addClass('active');

        $.browser.msie ? 
            $.fn.nmRefSlider.getReference(currentRef).hide() : 
            $.fn.nmRefSlider.getReference(currentRef).fadeOut();


        if (debug) console.log($.fn.nmRefSlider.getReference(index));
        if ($.fn.nmRefSlider.getReference(index).length > 0) {
            $.fn.nmRefSlider.fadeInReference(index)
        } else {
            $.fn.nmRefSlider.loadReference(index)
        }
        currentRef = index;
    }

    $.fn.nmRefSlider.fadeInReference = function(index) {
        if (debug) console.log('Fade in '+index);

        if ($.browser.msie) {
            //
            $.fn.nmRefSlider.getReference(index).show();
            if ($.browser.msie) {
                $(".nm-ref-main-image, .nm-ref-sub-image", $.fn.nmRefSlider.getReference(index)).hide();
                $(".nm-ref-sub-image0",$.fn.nmRefSlider.getReference(index)).show();
            }
            nmRefSliderOpts.frame().attr('height',$.fn.nmRefSlider.getReference(index).outerHeight()+5+'px');
        } else {
            nmRefSliderOpts.frame().animate(
                {height: ($.fn.nmRefSlider.getReference(index).outerHeight()+5)+'px'},
                300,
                function() {
                    $.fn.nmRefSlider.getReference(index).fadeIn();
                }
            );
        }
        
    }

    $.fn.nmRefSlider.loadReference = function (index) {

        contenturl= $('.nm-refs-slider-list li:eq('+index+') a').attr('href')+'?ajax';
        if (debug) console.log("Lade... "+contenturl);
        $.browser.msie ?
            $('#nm-ref-loading').show():
            $('#nm-ref-loading').fadeIn();

        $.ajax({
            type:       'GET',
            url:        contenturl,
            dataType:   'html',
            timeout:    5000,
            success:    function(content,s){
                $('#nm-subcontent-refs-detail').append('<div class="nm-subcontent-refs-detail-container" id="nm-ref-'+index+'" style="display:none"></div>');
                $.fn.nmRefSlider.getReference(index).hide().html(content);
                $.fn.nmRefSlider.addClickTriggersToRef(index);
                
                $.fn.nmRefSlider.getReference(index).nmPreloader.Preload(
                    function(){
                        $.browser.msie ?
                            $('#nm-ref-loading').hide():
                            $('#nm-ref-loading').fadeOut();
                        $.fn.nmRefSlider.fadeInReference(index);
                    }, 
                    function(){}
                );

            },
            error: function(o,s,e){
                        window.location = contenturl;
            }
        });
    }

    /**
	 * Standard-Settings
	 */
    $.fn.nmRefSlider.defaults = {
        // Classes
        sliderListClass:		"nm-refs-slider-list",

        // Speed
        slideListScrollSpeed:           500,

        directButtonClass:		"#nm-project-nav-dots a",
        nextButtonId:					"nm-project-nav-next",
        prevButtonId:	  			"nm-project-nav-prev",
        overviewButtonId:			"nm-project-nav-overview",
        speed:								900,		// 1000
        commentSpeed:					600,		// 600
        backgroundFadeSpeed: 1000,
        overviewFallDownSpeed: 500,
		
        autoSlide:			true,
        autoSlideSpeed:	8000,
		
        // Runtime environment
        currentSlide: 	0,
        nextSlide:			null,
        running: 				false,
        count:					0
    };

})(jQuery);

/****************************************************************/

/**
 * Script		: nmDropDown
 * Version	: 0.2dev
 * Authors	: Pierre Geyer
 * Desc			: ProjectSlider 
 *
 * 0.2
 * - Übersichtsseite
 * - Quellenkommentare
 *
 * 0.1 
 * - Queue
 * - durchschalten Projekt
 */

(function($) {	
    var nmDropDownOpts = {};
    var debug = false;
  
    /**
	 CONSTRUCTOR
	 **/
    $.fn.nmDropDown = function (settings) {

        this.each(function(){
				
            // Options zusammenstellen
            nmDropDownOpts = $.extend({}, $.fn.nmDropDown.defaults, settings);
	
            // Verknüpfe alle Slider-Links mit dem Mouse-Events
            var dropdown = this;
			
            $('.nm-options a', this).bind('click',
                function() {
                    var dropdown = $(this).parent().parent().parent();

                    if ($(this).hasClass('active')) {
            
                        if ($.browser.msie) {
                            $('.nm-dropdown-content',dropdown).hide();
                            $('.nm-dropdown-content ul.nm-active',dropdown).removeClass('nm-active').hide();
                        } else {
                            $('.nm-dropdown-content',dropdown).fadeOut(400, function() {
                                $('.nm-dropdown-content ul.nm-active',dropdown).removeClass('nm-active').hide();
                            });
                        }
                        $(this).removeClass('active');
                        

                    } else {
                        

                        rel = $(this).attr("rel") - 1;
                        $.fn.nmDropDown.showContent(dropdown, rel);

                        dropdown.find('a').removeClass('active');
                        $(this).addClass('active');

                        var lft = $(this).offset().left - $(this).parent().parent().offset().left + 50;
                        dropdown.find('.nm-dropdown-corner').animate({ left: lft+'px' });
                    }
                    return false;
                }
                );
			
        //$(nmDropDownOpts.mainClass).bind('click',$.fn.nmDropDown.slideToByClick);

		
        });
			
    }; // function



    $.fn.nmDropDown.showContent = function (dropdown, index) {
        if (debug) console.log(dropdown+" - "+index);
        if (debug) console.log(dropdown);
        if ($('.nm-dropdown-content ul.nm-active',dropdown).length > 0) {
            if ($.browser.msie) {
                $('.nm-dropdown-content ul.nm-active',dropdown).removeClass('nm-active').hide();
                $.fn.nmDropDown.fadeIn(dropdown, index);
            } else {
                $('.nm-dropdown-content ul.nm-active',dropdown).removeClass('nm-active').fadeOut(400,
                    function() {
                        $.fn.nmDropDown.fadeIn(dropdown, index);
                    }
                );
            }
        } else {
            $.fn.nmDropDown.fadeIn(dropdown, index);
        }

    };

    $.fn.nmDropDown.fadeIn = function (dropdown, index) {
        if ($.browser.msie) {
            $('.nm-dropdown-content',dropdown).show();
            $('.nm-dropdown-content ul:eq('+index+')',dropdown).addClass('nm-active').show();
        } else {
            $('.nm-dropdown-content',dropdown).fadeIn();
            $('.nm-dropdown-content ul:eq('+index+')',dropdown).addClass('nm-active').fadeIn();
        }
    }

/**
	 * Standard-Settings
	 */
    $.fn.nmDropDown.defaults = {
        mainClass:						"nm-dropdown",
        directButtonClass:		"#nm-project-nav-dots a",
        nextButtonId:					"nm-project-nav-next",
        prevButtonId:	  			"nm-project-nav-prev",
        overviewButtonId:			"nm-project-nav-overview",
        speed:								900,		// 1000
        commentSpeed:					600,		// 600
        backgroundFadeSpeed: 1000,
        overviewFallDownSpeed: 500,
		
        autoSlide:			true,
        autoSlideSpeed:	8000,
		
        // Runtime environment
        currentSlide: 	0,
        nextSlide:			null,
        running: 				false,
        count:					0
    };

})(jQuery);

/****************************************************************/

/**
 * Script		: nmPeople
 * Version	: 0.2dev
 * Authors	: Pierre Geyer
 * Desc			: ProjectSlider 
 *
 * 0.2
 * - Übersichtsseite
 * - Quellenkommentare
 *
 * 0.1 
 * - Queue
 * - durchschalten Projekt
 */

(function($) {	
    var nmPeopleOpts = {};
    var debug = false;
  
    /**
	 CONSTRUCTOR
	 **/
    $.fn.nmPeople = function (settings) {

        this.each(function(){

            // Options zusammenstellen
            nmPeopleOpts = $.extend({}, $.fn.nmPeople.defaults, settings);
	
            // Verknüpfe alle Slider-Links mit dem Mouse-Events
            $('a', this).bind('click',
                function() {
                    var rel = $(this).attr("rel");
                    $('.nm-people-list a').removeClass('active');
                    $(this).addClass('active');
                    if ($.browser.msie) {
                        $('.nm-people-info').hide();
                        $('#'+rel).show();
                    } else {
                        $('.nm-people-info').fadeOut();
                        $('#'+rel).delay(400).fadeIn();
                    }
                    return false;
                });
        });
			
    }; // function


    /**
    * Standard-Settings
     */
    $.fn.nmPeople.defaults = {    };

})(jQuery);

/****************************************************************/

/**
 * Script	: nmPreloader
 * Version	: 1.0
 * Authors	: Pierre Geyer
 *
 */

(function($) {	
    var nmPreloaderOpts = {};
    var debug = false;
    var preloadList = [];
    var	preLoadActive = false;
    var preLoadCnt = 0;
  
    /**
	 CONSTRUCTOR
	 **/
    $.fn.nmPreloader = function (settings) {

        // Options zusammenstellen
        nmPreloaderOpts = $.extend({}, $.fn.nmPreloader.defaults, settings);
			
    }; // function

    /**
     * Liefert zurück, ob alle Images preloaded sind
     */
    $.fn.nmPreloader.isPreloaded = function () {
        return $('.nm-preload', this).length == 0;
    };

    /**
	 * Lädt alle Images mit der Klasse ".nm-preload" nach, und führt danach den "callback" aus.
	 */
    $.fn.nmPreloader.Preload = function (callback, loadingCallback, finishCallback) {
			
        // Alle ungecached Elements ermitteln
        var cacheElements = $('.nm-preload', this).not('.nm-preload-done');
		
        if (cacheElements.length == 0) {

            // Wenn nichts zum Cachen ist, dann Callback gleich ausführen
            callback();

        } else {

            cacheElements = cacheElements.not('.nm-preload-queued');
            // Alle Elemente und den Callback in die Queue legen
            //console.log(loadingCallback);
            if (loadingCallback) loadingCallback();
            if (loadingCallback) preloadList.push(loadingCallback);
            cacheElements.each(function() {
                $(this).addClass('nm-preload-queued');
                //removeClass('nm-preload');
                preloadList.push(this);
            });
            if (finishCallback) preloadList.push(finishCallback);
            preloadList.push(callback);
        }
		
        // den eigentlichen Ladevorgang starten
        $.fn.nmPreloader.ProcessPreloadQueue(false);
    };

    /**
	 * Arbeitet die Warteschlange ab.
	 */
    $.fn.nmPreloader.ProcessPreloadQueue = function(ignoreActive) {
		
        // Wenn gerade etwas geladen wird, dann nicht noch einen Preload ausführen
        if (preLoadActive && !ignoreActive) return false;
        preLoadActive = true;

        // Wenn nichts zum Preloaden da ist, abrechen
        if (preloadList.length == 0) {
            preLoadActive = false;
            return false;
        }
		
        // Nächstes Element ermitteln, was gepreloaded werden soll
        preloadElement = preloadList.shift();
			
        if (typeof preloadElement == 'function') {

            // Run callbacks
            if (debug) console.log('run: ('+preloadElement+')');
            preloadElement();
            $.fn.nmPreloader.ProcessPreloadQueue(true);

        } else {
			
            // Lädt das Element
            $.fn.nmPreloader.PreloadElement(preloadElement);

        }
    };
	
    /**
	* Ermittelt aus dem übergebenen Element das benötigte Bild
	* und lädt es. Erst nach Laden des Bildes stößt er die Queue wieder an.
	*/
    $.fn.nmPreloader.PreloadElement = function (preloadElement) {

        // Versuchen ob es sich um ein Bild handelt
        imageSrc = $(preloadElement).attr('src');
        if (!imageSrc) {
            // Versuchen ob es sich um ein Hintergrundbild handelt
            imageSrc = $(preloadElement).css('background-image');
            if (imageSrc) {
                imageSrc = imageSrc.match(/[^\(\"]+\.(gif|jpg|jpeg|png)/g);
                if(imageSrc != null && imageSrc.length>0 && imageSrc != ''){
                    var arr = jQuery.makeArray(imageSrc);
                    jQuery(arr).each(function(){
                        imageSrc.src = (this[0] == '/' || this.match('http://')) ? this : '/' + this;
                    });
                }
            }
        }
			
        // Wenn keine Bildangaben gefunden wurden sind, dann nächstes Queue-Element nehmen
        if (imageSrc) {
            if (debug) console.log('loadElement: ('+imageSrc+')');

            // Bild endlich erzeugen und laden
            var img = new Image();
            $(img)
            // Wenn es erfolgreich geladen wurde, dann das nächste laden
            .load(function () {
                $(preloadElement).addClass('nm-preload-done');
                if (debug) console.log('loaded: ('+imageSrc+')');
                $.fn.nmPreloader.ProcessPreloadQueue(true);
            })
            // Auch wenn es nicht erfolgreich geladen wurde, dann das nächste laden
            .error(function () {
                $(preloadElement).addClass('nm-preload-done');
                if (debug) console.log('loaded fail: ('+imageSrc+')');
                $.fn.nmPreloader.ProcessPreloadQueue(true);
            })
            .attr('src', imageSrc);
        } else {
            $.fn.nmPreloader.ProcessPreloadQueue(true);
            return false;
        }

    };
    /*
     * Standard-Settings
     */
    $.fn.nmPreloader.defaults = {    };

})(jQuery);

/****************************************************************/

/*
 * next.motion OHG 
 *  *
 * http://www.next-motion.de
 * Version: 1.0.0 (13/06/2010)
 * Copyright (c) 2010 next.motion / Pierre Geyer
 * Requires: jQuery v1.4+
*/


$(window).load(function() {
	// Slider auf Startseite initialisieren
	$("#nm-project-outer").nmProjectSlider({});
	// Dropdown auf den Unterseiten: Newmedia, IT-Systeme
	$(".nm-dropdown").nmDropDown({});
	// Referenzseite
	$("#nm-refs-slider-outer").nmRefSlider({});
	// Focus-Fields bei Kontakt
	$(".nm-focus").bind("focusin",function() { $(this).parent().addClass("focused"); });
	$(".nm-focus").bind("focusout",function() { $(this).parent().removeClass("focused"); });
        $(".nm-people-list").nmPeople();
	// Twitter auf der Startseite initialisieren
	$("#nm-twitter-list").each(function() {  
		getTwitters('nm-twitter-list', { 
		  id: 'nextmotion', 
		  count: 3, 
		  enableLinks: true, 
		  ignoreReplies: false, 
		  clearContents: true,
		  template: '%text%<br /><a onclick="window.open(this.href);return false;" class="nm-twitter-list-date" href="http://twitter.com/%user_screen_name%/statuses/%id%/">%time% via %source%</a>'
		});  
	});
	// Validierung für das Kontaktformular initialisieren
	$("#nm-contact-form").validationEngine();
});


