$.fn.pager = function(clas, options) {
	
	var settings = {		
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,
		linkClass: 'pager',
		height: null,
		greedy: false,
		target: $(this)
	}
	if(options) $.extend(settings, options);
	
	return this.each( function () {
		
		var me = $(this);
		var size;
	  var i = 0;		
		var navid = '#'+settings.navId;
		var links;
		
		function init () {
			size = $(clas, me).not(navid).size();
			if(settings.height == null) {			
				settings.height = getHighest();
			}
			if(size > 1) {
				makeNav();
				show();
				highlight();
			}			
			sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}
		}
		function makeNav () {		
			var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
			str += '<a class="'+settings.linkClass+'" href="#" rel="prev">'+settings.prevText[1]+'</a>';
			str += '<a class="'+settings.linkClass+'" href="#" rel="next">'+settings.nextText[0]+'</a>';
			str += '</div>';
			switch (settings.navAttach) {		
				case 'before':
					settings.target.before(str);
					break;
				case 'after':		
					settings.target.after(str);
					break;
				case 'prepend':
					settings.target.prepend(str);
					break;
				default:
					settings.target.append(str);
					break;
			}
		}
		function show () {
			if (settings.greedy) {
				var els = [];
				all = $(me).find(clas);
				el = all.eq(i);
				els.push(el[0]);
				while((el = el.next()) && el.size() > 0 && !el.is(clas)) els.push(el[0]);
				all.siblings().hide();
				$(els).show();
	  	}else{
	 		 	$(me).find(clas).not(navid).hide();
	 		 	var show = $(me).find(clas).not(navid).get(i);
	  		$(show).show();
	  	}
		}
				
		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 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 () {
			settings.target.find(navid).find("a").wrap(settings.linkWrap);
		}
		
		function arrows(i, size){
			first = links.eq(0);
			last = links.eq(1);
		  if(i>0) first.html(settings.prevText[0]).end();
			else first.html(settings.prevText[1]).end();
			if(i==size-1) last.html(settings.nextText[1]).end();
			else last.html(settings.nextText[0]).end();
		}
		
		init();


		if(settings.navAttach == 'after')
			links = settings.target.next().find('a.pager');
		else if(settings.navAttach == 'before')
			links = settings.target.find('a.pager');
		else
			links = settings.target.find('a.pager');
		links.click(function () {

			if($(this).attr('rel') == 'next') {
				if (i + 1 < size) {
					i = i + 1;
					$(this).html(settings.nextText[0]);
					arrows(i, size);
		  	}
			} else if($(this).attr('rel') == 'prev') { 
				if(i > 0) {	
					i = i-1;
          arrows(i, size);
	   		}		
			}
			show();
			if (i == 0) 
	  	  $('#promo:hidden').show().next().css('margin-right', '270px');
	    else
	  	  $('#promo:visible').hide().next().css('margin-right', '0px');

			//highlight();
			return false;
		});
	});	
}