$.fn.pager = function(clas, options) {
	
	var settings = {		
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
//		prevText: '&laquo;',
//		nextText: '&raquo;',
		prevText: '<img src="templates/default/images/prev_page.png" border="0" />',
		nextText: '<img src="templates/default/images/next_page.png" border="0" />',
		linkText: null,
		linkWrap: null,
		height: null,
		offset: 3
	}
	if(options) $.extend(settings, options);
	
		
	return this.each( function () {
		
		var me = $(this);
		var nav = null;
		var size;
		var page = 1;
		var navid = '#'+settings.navId;
		
		function init () {
			size = $(clas, me).not(navid).size();//count .clas divs
			if(settings.height == null) {			
				settings.height = getHighest();
			}
			
			if(size > 0) {
				nav = $('<div id="'+navid+'" class="'+settings.navClass+'"></div>');
				switch (settings.navAttach) {		
					case 'before':
						$(me).before(nav);
						break;
					case 'after':		
						$(me).after(nav);
						break;
					case 'prepend':
						$(me).prepend(nav);
						break;
					default:
						$(me).append(nav);
						break;
				}
				
				show();								
				Pagination(settings.offset,size,page);// 5 , 3 , 1
			}
			
			//sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}
		}
		function Pagination(offset, numOfPage, currentPage){
			var pageStart = parseFloat(currentPage) - parseFloat(offset);// -4
			var pageEnd = parseFloat(currentPage) + parseFloat(offset);// 6
			var numPage = new String();
			var cl = 'class="'+settings.highlightClass+'"';
			numPage += 'Page ';
 
			//first page check on range 	
			if(currentPage > (offset + 1)){ 
				numPage += '<a href="javascript:;" rel="1" '+((currentPage == 1)?cl:'')+'>';
				numPage += (settings.linkText == null) ? 1 : settings.linkText[0];
				numPage += '</a><span class="spacing-dot"> ... </span>';
			}else{
				numPage += '<a href="javascript:;" rel="1" '+((currentPage == 1)?cl:'')+'>';
				numPage += (settings.linkText == null) ? 1 : settings.linkText[0];
				numPage += '</a>';
			}	
			//main loop in range (pageStart,pageEnd) links	
			for(var n = 2; n < numOfPage; n++){
				if(pageStart <= n && pageEnd >= n){
					numPage += '<a href="javascript:;" rel="'+n+'" '+((currentPage == n)?cl:'')+'>';
					numPage += (settings.linkText == null) ? n : settings.linkText[n-1];
					numPage += '</a>';
				}
			}
			//last page check on range
			if(numOfPage > pageEnd){
				numPage += '<span class="spacing-dot"> ... </span><a href="javascript:;" rel="'+numOfPage+'" '+((currentPage == numOfPage)?cl:'')+'>';
				numPage += (settings.linkText == null) ? numOfPage : settings.linkText[numOfPage-1];
				numPage += '</a>';
			}else if(numOfPage > 1){
				numPage += '<a href="javascript:;" rel="'+numOfPage+'" '+((currentPage == numOfPage)?cl:'')+'>';
				numPage += (settings.linkText == null) ? numOfPage : settings.linkText[numOfPage-1];
				numPage += '</a>';
			}	
			
			// prev link
			if(currentPage > 1) 
				numPage += '<a href="javascript:;" rel="prev">'+settings.prevText+'</a>';
			else 
				numPage += '<span class="previous-off">'+settings.prevText+'</span>';
								
			//next link	
			if(currentPage < numOfPage) 
				numPage += '<a href="#" rel="next">'+settings.nextText+'</a>';
			else 
				numPage += '<span class="next-off">'+settings.nextText+'</span>';
				
			nav.html(numPage);	
			
			nav.find("a").click(function () {
				if($(this).attr('rel') == 'next') {
					if(page < size) {
						page = page + 1;
					}
				} else if($(this).attr('rel') == 'prev') { 
					if(page > 1) {	
						page = page - 1;
					}
				} else {		
					page = $(this).attr('rel');		
				}
				
				//show page
				show();
				//nav pages panel				
				Pagination(settings.offset,size,page);
				
				return false;
			});
			
		}

		function show () {
			me.find(clas).not(navid).hide();
			var div = me.find(clas).not(navid).get(page-1);
			$(div).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;
				}
			});
			
			return highest + "px";
		}
		function getNavHeight () {
			return nav.offsetHeight;
		}
		function linkWrap () {
			nav.find("a").wrap(settings.linkWrap);
		}
		//start pagination		
		init();
	});	
}
