function SlideList( conf ){
	
	//create bindings to our DOM 
	this.$list 		= $(conf.list);
	this.$items		= this.$list.children();
			
	//extend teh default settings
	this.config 	= $.extend( { speed:500, pageSize: 10, change: function(){}, transition: 'slide'}, conf);
	
	//member vars
	this.page		= 1;
	this.length		= Math.ceil(this.$items.length/this.config.pageSize);
	
	//create a ref to this
	var self 		= this;
	
	//setup the list to show only pageSize per 
	this.$list.css( {overflow:'hidden', position:'relative'} );
	
	//hide all other than this page
	this.goto( this.page , 'default');
	
}

SlideList.prototype.getPageItems = function( page ){
	var p = page || this.page;	
	return this.$items.slice( (p-1)*this.config.pageSize, p*this.config.pageSize  );
}

SlideList.prototype.next = function(){
	this.goto( this.page+1 );	
}

SlideList.prototype.previous = function(){
	this.goto( this.page-1 );		
}

SlideList.prototype.isLast = function(){
	return this.page == this.length;	
}

SlideList.prototype.isFirst = function(){
	return this.page == 1;	
}

SlideList.prototype.gotoItem = function( item ){
	
	var index = isNaN(item)? this.$items.index( item ) : item;
	this.goto( Math.ceil((index+1)/this.config.pageSize) );

}
SlideList.prototype.goto = function( page , transition){
	
	transition = transition || this.config.transition;
	
	if( page > this.length) {
		page = this.length;
	}
	if( page < 1 ){
		page = 1;
	}	
	var $page = this.getPageItems( page );
	
	switch( transition ){
		
		case 'slide':
			this.$items.hide(); 
			
			//var $prev = this.getPageItems();
			//$prev.show().css({left:0,position:'relative'}).animate({left:'-100%'},this.config.speed);
			
			var cssFrom = {position:'relative', left:'100%'};
			if( page < this.page ){
				cssFrom.left = '-100%';
			}
			$page.show();
			if( page != this.page ){
				$page.css(cssFrom).animate({left:'0'},this.config.speed);
			}
			break;
		case 'fade':
			this.$items.hide(); 
			$page.fadeIn(this.config.speed);
			break;
		default:
			this.$items.not( $page.show() ).hide();
	}
	
	this.page = page;
	
	this.config.change.apply( this );

}
