$.fn.pager = function(clas, options) {

	/* Variablen */
	var settings = {
		navId: 'top',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		prevClass: 'pager_prev',
		nextText: '&raquo;',
		nextClass: 'pager_next',
		linkText: null,
		linkWrap: null,
		height: null,
		anchor: 'top',
		hideClass: 'pager_hide'
	}
	if(options) {
		$.extend(settings, options);
	}

	/* geht alle Abschnitte durch */
	return this.each( function () {

		var me = $(this);
		var size;
		var navid = '#'+settings.navId;
		if ($(location).attr("hash") != "") {
			var i = $(location).attr("hash").replace("#", "");
			var i = i - 1;
		} else {
			var i = 0;
		}

		function init () {

			size = $(clas, me).not(navid).size();
			if(settings.height == null) {
				settings.height = getHighest();
			}
			if(size > 1) {
				makeNav();
				show();
				highlight();
				prev();
				next();
			}
			sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}

		}

		function makeNav () {

			var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';

			str += '<a href="#" rel="prev" class="'+settings.prevClass+'">'+settings.prevText+'</a>';

			for(var i = 0; i < size; i++) {
				var j = i+1;
				str += '<a href="#'+j+'" rel="'+j+'">';
				str += (settings.linkText == null) ? j : settings.linkText[j-1];
				str += '</a>';
			}
			str += '<a href="#" rel="next" class="'+settings.nextClass+'">'+settings.nextText+'</a>';
			str += '</div>';
			switch (settings.navAttach) {
				case 'before':
					$(me).before(str);
					break;
				case 'after':
					$(me).after(str);
					break;
				case 'prepend':
					$(me).prepend(str);
					break;
				default:
					$(me).append(str);
					break;
			}
		}

		function show () {

			$(me).find(clas).not(navid).animate({
				opacity: 0,
				height: 'hide'
			},200);
			var show = $(me).find(clas).not(navid).get(i);
			$(show).animate({
				opacity: 1,
				height: 'show'
			},200);

		}

		function highlight () {
			$(me).find(navid).find('a').removeClass(settings.highlightClass);
			var show = $(me).find(navid).find('a').get(i+1);
			$(show).addClass(settings.highlightClass);
		}

		function prev () {
			$('a[rel="prev"]').removeClass(settings.hideClass);
			if (i == 0) {
				$('a[rel="prev"]').addClass(settings.hideClass);
			}
		}

		function next () {
			$('a[rel="next"]').removeClass(settings.hideClass);
			if (i == size-1) {
				$('a[rel="next"]').addClass(settings.hideClass);
			}
		}

		function sizePanel () {
			if($.browser.msie) {
				$(me).find(clas).not(navid).css( {
					height: settings.height
				});
			} else {
				$(me).find(clas).not(navid).css( {
					minHeight: settings.height
				});
			}
		}

		function getHighest () {
			var highest = 0;
			$(me).find(clas).not(navid).each( function () {

				if(this.offsetHeight > highest) {
					highest = this.offsetHeight;
				}
			});
			highest = highest + "px";
			return highest;
		}

		function getNavHeight () {
			var nav = $(navid).get(0);
			return nav.offsetHeight;
		}

		function linkWrap () {
			$(me).find(navid).find("a").wrap(settings.linkWrap);
		}

		/* Ausführen */
		init();
		$(this).find(navid).find("a").click( function () {

			if($(this).attr('rel') == 'next') {
				if(i + 1 < size) {
					i = i+1;
				}
			} else if($(this).attr('rel') == 'prev') {
				if(i > 0) {
					i = i-1;
				}
			} else {
				var j = $(this).attr('rel');
				i = j-1;
			}
			show();
			highlight();
			prev();
			next();
			$.smoothScroll({
				scrollTarget: '#top'
			});
			window.location.hash = i+1;
			return false;
		});
	});
}

