(function( $ ){
  	$.fn.pagination = function( options ) {
  		var settings = {
  			'itemsPerPage': 10,
  			'itemsTotal': 0,
  			'pagesShown': 2,
  			'currentPage': 1,
  			'additionalSteps': [ 10, 50, 100 ],
  			'onClick': null
  		};	
  		var rebuildPaging = function( parentNode ){
  			
  			// calculate basic information
  			var linkCount = settings.pagesShown;
  			var currentPage = settings.currentPage;
  			var pagesTotal = Math.ceil( settings.itemsTotal / settings.itemsPerPage );
			
			if( currentPage < 1 ) currentPage = 1;
			if( currentPage > pagesTotal ) currentPage = pagesTotal;
			
			var startPage = currentPage - linkCount;
			var endPage = currentPage + linkCount ;
			
			if( startPage < 1 ) {
				endPage += 1-startPage;
				startPage = 1;
			}
			if( endPage > pagesTotal ) {
				startPage -= ( endPage - pagesTotal );
				endPage = pagesTotal ;
				if( startPage < 1 ) 
					startPage = 1;
			}
			
			
			// build html
			
			var str = '';
			
			if( startPage > 1 ) {
				str += '<div class="pagelink pagenr_1 videoButton" > &lt;&lt; </div>';
			}
			if( startPage < currentPage ) {
				str += '<div class="pagelink pagenr_' + ( currentPage - 1 ) + ' videoButton" > &lt; </div>';
			}
			
			for( var i = settings.additionalSteps.length-1; i >= 0; i-- ) {
				var addition = settings.additionalSteps[ i ];
				if( currentPage - addition > 1  ) {
					str += '<div class="pagelink pagenr_'+ (currentPage-addition) +' videoButton">'+ (currentPage-addition) +'</div>';
				}
			}
			
			for( x=startPage; x<=endPage; x++ ) {
				if( x != startPage ) 
					str += ' ';
				start = ( x - 1 ) * settings.itemsPerPage + 1;
				end = settings.itemsPerPage + ( x - 1 ) * settings.itemsPerPage ;
				
				if( end > settings.itemsTotal ) end = settings.itemsTotal;
				
				if( x != currentPage ) {
					str += '<div class="pagelink pagenr_'+ x +' videoButton">';
				}
				else {
					str += '<div class="pagelink pagenr_'+ x +' videoButtonActive">';
				}
				
				str += ( x );
					 
				if( x != currentPage ) {
					str += '</div>';	
				}
				else {
					str += '</div>';
				}
			}
			
			for( var i = 0; i < settings.additionalSteps.length; i++ ) {
				var addition = settings.additionalSteps[ i ];
				if( currentPage + addition < pagesTotal  ) {
					str += '<div class="pagelink pagenr_'+ (currentPage+addition) +' videoButton">'+ (currentPage+addition) +'</div>';
				}
			}
			
			if( currentPage < endPage  ) {
				str += '<div class="pagelink pagenr_'+ (currentPage+1) +' videoButton"> &gt; </div>';
			}
			if( endPage < pagesTotal ) {
				str += '<div class="pagelink pagenr_'+ pagesTotal +' videoButton" > &gt;&gt; </div>';
			}
			
			
			$( parentNode ).html( str );
			$( parentNode ).find( ".pagelink" ).click( function() {
				var m = this.className.match( /pagenr_(\d+)/ );
				if( m != null && m.length == 2 ) {
					var currentPage = parseInt( m[ 1 ] );
					settings.currentPage = currentPage;
					rebuildPaging( this.parentNode );
					
					if( settings.onClick ) {
						settings.onClick( this, currentPage-1 );
					}	
				}
			});
  		}
  		
    	return this.each(function(){  
	      	// Tooltip plugin code here
		    if ( options ) { 
		        $.extend( settings, options );
		    }
		    rebuildPaging( this );
		});
  	};

})( jQuery );


		    
