$.fn.pager = function(clas, options) {
	
	var settings = {		
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,		
		height: null,
		ignoreId:null,
		ignoreClass:null
	}
	if(options) $.extend(settings, options);
	
		
	return this.each( function () {
		var me = $(this);
		var size;
	  	var i = 0;		
		var navid = '#'+settings.navId;
		
		function init () {
			if(settings.navAttach == 'before'){
/*				alert("'#" + me.attr("id") + " " + clas.toString() + ":first-child" + "'");
				size = $("'#" + me.attr("id") + " " + clas.toString() + ":first-child" + "'" ).not(navid).size();*/
				size = $( "#" + me.attr("id") + ' > ' + clas).not(navid).size();
				if(settings.height == null) {			
					settings.height = getHighest();
				}
				if(size > 1) {
					makeNav();
					show();
					highlight();
				}			
				sizePanel();
				if(settings.linkWrap != null) {
					linkWrap();
				}
			}else{
				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 href="#" rel="prev">'+settings.prevText+'</a>';
			for(var i = 0; i < size; i++) {
				var j = i+1;
				str += '<a href="#" rel="'+j+'">';
				str += (settings.linkText == null) ? j : settings.linkText[j-1];				
				str += '</a>';
			}
			str += '<a href="#" 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 () {	
  			var show = "$( '#' + me.attr('id') + ' > ' + clas ).not(navid).hide(); var s = $( '#' + me.attr('id') + ' > ' + clas )";
			var ignoreIds     = [];
			var ignoreClasses = [];
			if( settings.ignoreClass != null && settings.ignoreId != null){	
				ignoreIds     = settings.ignoreId.split(",");
				ignoreClasses = settings.ingoreClass.split(",");
				for( var p = 0; p < ignoreIds.length;     p++ ){show += ".not('"  + ignoreIds[ p ] + "')"; } 
   			    for( var q = 0; q < ignoreClasses.length; q++ ){show += ".not('." + ignoreClassess[ q ] + "')"; }
    			show += ".get(i); $(s).show(); ";
			}
			else if( settings.ignoreId    != null ){
				ignoreIds     = settings.ignoreId.split(",");
				for( var p = 0; p < ignoreIds.length;     p++ ){show += ".not('" + ignoreIds[ p ] + "')"; } 
     			show += ".get(i); $(s).show(); ";
		    }
			else if( settings.ignoreClass != null ){
				ignoreClasses = settings.ingoreClass.split(",");
   			    for( var q = 0; q < ignoreClasses.length; q++ ){show += ".not('." + ignoreClassess[ q ] + "')"; }
     			show += ".get(i); $(s).show(); ";
		    }
			else{ show = "$( '#' + me.attr('id') + ' > ' + clas ).not( navid ).hide();var show = $( '#' + me.attr('id') + ' > ' + clas ).not(navid).get(i);$(show).show();"; }						
			
			eval(show);

			/*$(me).find(clas).not(navid).hide();
    		var show = $(me).find(clas).not(navid).get(i);
			$(show).show();*/			
		}		
		function highlight () {
			if(settings.navAttach == 'before'){
			$(me).parent().find(navid).find('a').removeClass(settings.highlightClass);
			var show = $(me).parent().find(navid).find('a').get(i+1);			
			$(show).addClass(settings.highlightClass);				
			}
			else{
			$(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 () {
			var obj;
			if(settings.navAttach == 'before'){obj = me.parent();}			
			$(obj).find(navid).find("a").wrap(settings.linkWrap);
		}
		init();
		if(settings.navAttach == 'before'){
		$(this).parent().find(navid).find("a").click(function () {
			var tempi = i;
			var ti = 0;															   
			var reltemp;
			var vrel = $(this).attr('rel');			
			if( vrel.indexOf('disabled') != -1 ){ /*ignore do nothing*/ return false;}			
			else if( vrel == 'next' ) {
				//if next is not disabled, if it is disabled go to the next first not disabled
				tempi = i;
				ti = 0;
				if( i + 1 < size ) { 		
					i  = i + 1;
					ti = i + 2;
					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );
					while( true ){
						if( reltemp == null || reltemp.indexOf( 'disabled' ) == -1 || i > size ){
							break;
						}												
						if( i + 1 <= size){
							i  = i + 1;
							ti = i + 2;
	     					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );						
						}
					}					
					if( i >= size ){ i = tempi; }
				}
			} 
			else if( $(this).attr('rel') == 'prev' ) { 
				//if also prev is not disabled, if it is disabled go to the prev first not disabled
				//if next is not disabled, if it is disabled go to the next first not disabled
				tempi = i;
				ti = 0;
				if( i - 1 < size ) { 		
					ti = i + 1;
					i  = i - 1;
					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );
					while( true ){
						if( reltemp == null || reltemp.indexOf( 'disabled' ) == -1 || i < -1 ){						
							break;
						}			
						if( i + 1 <= size){
							ti = i + 1;
							i  = i - 1;							
	     					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );						
						}						
					}					
					if( i == -1 ){ i = tempi; }
				}
			/*	tempi = i;
				ti = 0;
				var flagg = 0;
				if( i - 1 >= 0 ) { 		
					ti = i + 1;
					i  = i - 1;
					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );
					if( reltemp.indexOf( 'disabled' ) != -1 )//if disabled next element then				
					while( true ){
						if( i - 1 >= -1 ){
							ti = i + 1;							
							i  = i - 1;							
	     					reltemp = $( navid ).find( "a:nth-child(" + ti + ")" ).attr( "rel" );						
						}
						if( reltemp.indexOf( 'disabled' ) == -1 || i <= -1  ){
							i++;
							flagg=1;
							break;
						}						
					}					
					if( i < 0 || flagg == 1){ i = tempi; }
				}				*/
			} 
			else { var j = vrel; i = j-1; }
			show();
			highlight();
			return false;
		});			
			
	    }
		else{
		$( this ).find( navid ).find( "a" ).click( function () {
			var vrel = $( this ).attr( 'rel' );
			if( vrel.indexOf( 'disabled' ) != -1 ){ /*ignore do nothing*/ return false;}			
			else if( vrel == 'next' ) {
				if( i + 1 < size ) {
					i = i + 1;
				}
			} else if( vrel == 'prev') { 
				if( i > 0 ) {	
					i = i - 1;
				}
			} else {		
				var j = $( this ).attr( 'rel' );	
				i = j-1;		
			}
			show( );
			highlight( );
			return false;
		});
		}
	});	
}

