(function($){
	// jQuery wird um das Plugin erweitert
$.fn.extend({		
	virtualPages:function(params){
		// die möglichen Konfigurationsoptionen
		var conf = {
			height			: 260, //integer Wert!
			boxElem			: 'div', // HTML Elementtyp
			pageClass		: 'virtual_pages', // HTML Klasse
			linkText		: '&raquo;Seite %', // der Link, % ist Platzhalter für die Nummer
			withResize		: false 
		};
		// Konfiguration mit Parametern verschmelzen
		$.extend(conf, params);
		return $(this).each(function(){
			var $this = $(this), page, visPage, pageNum = 0, pages = [];
/*			
			if (conf.withResize)
				$(window).resize(function(){ $this.virtualPages(conf); });
*/			
			// Hilfsmethode die neue Seiten-Elemente generiert
			function createPage(){				
				// der laufende Index wird aus der Anzahl der Seiten-Blöcke berechnet
				// Element wird erstellt und direkt mit dem jQuery Context versehen
				var elem = $('<%></%>'.replace('%', conf.boxElem)).addClass(conf.pageClass).data('pageNr',++pageNum);
				if (typeof(page) == 'undefined') {
					visPage = elem.prependTo($this).show();
				} else elem.insertAfter(page).hide();
				page = elem;
				pages.push(elem);
			}

			function createPageLinks(){
				if (pages.length < 2) return;
				var box = $('<div class="virtual_pages_links"></div>');
				$(pages).each(function(){
					var elem = $(this);
					var text = conf.linkText.replace('%', elem.data("pageNr"));
					$('<a>' + text + '</a>').attr('href', document.location.href).click(function(e){
						if (elem.is(':hidden')){
							visPage.slideUp();
							visPage = elem.slideDown();
						}
						e.preventDefault(); // Link soll nicht geöffnet werden
					}).appendTo(box).after(' &nbsp;');
				});
				
				return box;
			}
/*
			// für den Fall dass die Methode bereits angewandt wurde
			if ($this.find('.' + conf.pageClass).length > 0) {
				var pages = $this.find('.' + conf.pageClass);
				var children = pages.children();
				pages.add(".virtual_pages_links").remove();
				$this.append(children);
			}
*/			
		   $this.children().each(function(){
				// wenn [virtuelle] Seitenhöhe + Element Höhe größer als konfigurierte Größe
				if (!page || ($(page).height() + $(this).height() > conf.height)) 					
					createPage(); // erstelle Seite
				$(page).append(this); // Füge Element zur virtuellen Seite hinzu.
			}).end().prepend(createPageLinks());
		}); 
	}
});
})(jQuery);
