(function($){
$.fn.pager = function(clas, options) {

    var settings = {
		doSlideshow: false,
		slideshowTimeout: 3000,
        navId: 'nav',
        navClass: 'pagination',
        navAttach: 'append',
        highlightClass: 'highlight',
		prevId: '',
        prevText: '&laquo;',
		nextId: '',
        nextText: '&raquo;',
        linkText: null,
        linkWrap: null,
        height: null,
        pageSize: 1,
		pageWrap: false,
		transitionType: 'fade',
		transitionSpeed: 'normal',
		showPageNumbers: true
    }
    if (options) $.extend(settings, options);


    return this.each(function() {

        var me = $(this);
        var size;
        var i = 0;
        var j = 0;
        var navid = '#' + settings.navId;
		var t;
		var direction;

        function init() {
            size = $(clas, me).not(navid).size();
            if (settings.height == null) {
                settings.height = getHighest();
            }
			if (settings.transitionType == 'slide')
			{
				$(me).css('overflow', 'hidden');
				$(clas, me).children('.feature-content-wrapper').each(function() {
					$(this).css('width', $(this).outerWidth() + 'px');
				});
			}
            if (size > 1) {
				makeNav();
				show();
				updateNav();
				if (settings.doSlideshow) {
					t = setInterval(function() { slideshow() }, settings.slideshowTimeout);
				}
            }
            sizePanel();
            if (settings.linkWrap != null) {
                linkWrap();
            }
        }
        function makeNav() {
            var str = '<div id="' + settings.navId + '" class="' + settings.navClass + '">';
            str += '<a href="#"' + (settings.prevId != '' ? ' id="' + settings.prevId + '"' : '') + ' rel="prev">' + settings.prevText + '</a>';
			if (settings.showPageNumbers)
			{
				for (var i = 0; i < size; i++) {
					j = i + 1;
					str += '<a href="#" rel="' + j + '">';
					str += (settings.linkText == null) ? j : settings.linkText[j - 1];
					str += '</a>';
				}
			}
            str += '<a href="#"' + (settings.nextId != '' ? ' id="' + settings.nextId + '"' : '') + ' rel="next">' + 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() {
            switch (settings.transitionType) {
				case 'slide':
					$(me).find(clas).not(navid).hide();
					break;
				case 'fade':
				default:
					$(me).find(clas).not(navid).hide().css('opacity', 0);
					break;
			}
            var $show = $($(me).find(clas).not(navid).get(i));
            switch (settings.transitionType) {
				case 'slide':
					switch(direction) {
						case 'right':
							$show.css('marginLeft', -1*$show.outerWidth());
							$show.show().animate({
								marginLeft: 0
							});
							break;
						case 'left':
						default:
							$show.css('marginLeft', $show.outerWidth());
							$show.show().animate({
								marginLeft: 0
							});
							break;
					}
					break;
				case 'fade':
				default:
					$show.show().fadeTo(settings.transitionSpeed, 1);
					break;
			}
        }
        function updateNav() {
			if (!settings.pageWrap)
			{
				if (i != 0) {
					$(me).find(navid).find("a[rel='prev']").show();
				} else {
					$(me).find(navid).find("a[rel='prev']").hide();
				}
			}

            $(me).find(navid).find('a').removeClass(settings.highlightClass);
            var show = $(me).find(navid).find("a[rel='" + (i + 1) + "']");
            $(show).addClass(settings.highlightClass);
            
			if (!settings.pageWrap)
			{
				if (i == size-1) {
					$(me).find(navid).find("a[rel='next']").hide();
				} else {
					$(me).find(navid).find("a[rel='next']").show();
				}
			}
        }

        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);
        }
		function slideshow() {
			// update i index
			if (i + 1 < size) {
				i = i + 1;
			} else {
				if (settings.pageWrap)
					i = 0;
				else
					clearInterval(t);
			}
			show();
			updateNav();
		}
        init();
        $(this).find(navid).find("a").click(function() {
			clearInterval(t);
            if ($(this).attr('rel') == 'next') {
				direction = 'left';
                if (i + 1 < size) {
                    i = i + 1;
                } else {
					if (settings.pageWrap)
						i = 0;
				}
            } else if ($(this).attr('rel') == 'prev') {
				direction = 'right';
                if (i > 0) {
                    i = i - 1;
                } else {
					if (settings.pageWrap)
						i = size - 1;
				}
            } else {
                var j = $(this).attr('rel');
				direction = (j > i) ? 'left' : 'right';
                i = j - 1;
            }
            show();
            updateNav();
            return false;
        });
    });
}
})(jQuery);