(function($) {
	$.fn.contentscroller = function(params){
    var jQ = jQuery;
		var params = $.extend({}, $.fn.contentscroller.defaults, params);

    return this.each(function(){
			var current_page = 1;
			var container=this;			
			var controller_length = jQ(params['controller']).length;
			var controller_string="";
			var page_count = 0;
			var stopIt = 0;
			var page_width = jQ(this).width();
			var max_height=0;
			jQ(this).css('overflow', 'hidden');
			controller_string = '<ul id="'+params['controller'].replace('#','')+'"><li class="previous"><a href="#" class="previous_button" rel="previous" name="scroll_item_1">&laquo;</a></li>';
			var previous_h = 0;
						
			jQ(this).find(params['pages']).each(function(){
				jQ(this).css('position', 'relative');
				jQ(this).css('left', ((page_count)*page_width) +'px');
				if(previous_h > 0){
					jQ(this).css('top', '-'+previous_h +'px');
				}
				jQ(this).addClass('scroll_item_'+(page_count+1));
				controller_string += '<li class="page"><a href="#" name="scroll_item_'+(page_count+1)+'" class="page" rel="page">'+(page_count+1)+'</a></li>';
				page_count ++;
				if (navigator.appName=="Microsoft Internet Explorer") {
					//previous_h += (jQ(this).outerHeight())-((jQ(this).outerHeight()));
				}
				else {
					previous_h += (jQ(this).outerHeight())+((jQ(this).outerHeight())*0.020);
				}
				if(jQ(this).outerHeight() > max_height) {max_height = jQ(this).outerHeight();}
			});
			jQ(this).css('height', (max_height+20)+'px');
			controller_string += '<li class="next"><a href="#" class="next_button" rel="next" name="scroll_item_2">&raquo;</a></li></ul>';
			if(!jQ(params['controller']).length){ 
				jQ(this).after(controller_string);
			}
			if(page_count <= 1){
				jQ(params['controller']).css('display', 'none');
				jQ(params['controller']+' .next').addClass('disabled');
			}else{
				jQ(params['controller']+' .previous').addClass('disabled');
			}	
			jQ(params['controller'] + ' a').click(function(e){
				if(params && typeof(params['before']) != "undefined"){ eval(params['before']);}
												
				var new_page = parseInt(jQ(this).attr('name').replace('scroll_item_',''));
				if(new_page > 0){
					for(i=1; i<=page_count; i++){
						if (navigator.appName=="Microsoft Internet Explorer") {
							if(i<new_page){
								jQ(container).find('.scroll_item_'+i).hide();
								jQ(container).find('.scroll_item_'+i).css('left','-200px');
							}else if(i == new_page && params['after']){
								jQ(container).find('.scroll_item_'+new_page).show();
								jQ(container).find('.scroll_item_'+i).css('left','0');
							}else if(i == new_page){
								jQ(container).find('.scroll_item_'+new_page).show();
								jQ(container).find('.scroll_item_'+i).css('left','0');
							}else{
								jQ(container).find('.scroll_item_'+i).hide();
								jQ(container).find('.scroll_item_'+i).css('left','-200px');
							}
						}
						else {
							if(i<new_page){
								jQ(container).find('.scroll_item_'+i).animate({
									'left':"-"+((new_page - i)*page_width) +'px'
								},params['trans_speed']);
							}else if(i == new_page && params['after']){
								jQ(container).find('.scroll_item_'+new_page).animate({
									'left':'0'
								},params['trans_speed'],function(e){eval(params['after']);});
							}else if(i == new_page){
								jQ(container).find('.scroll_item_'+new_page).animate({
									'left':'0'
								},params['trans_speed']);
							}else{
								jQ(container).find('.scroll_item_'+i).animate({
									'left':((new_page + i)*page_width) +'px'
								},params['trans_speed']);
							}
						}
					}				
				}
				jQ(params['controller'] + ' li').removeClass('disabled');
				if(new_page+1 <= page_count){var next_a = new_page+1;}
				else{
					var next_a = page_count;
					jQ(params['controller'] + ' li.next').addClass('disabled');
				}
				if(new_page>1){var prev_a = new_page-1;}
				else{
					var prev_a = 1;
					jQ(params['controller'] + ' li.previous').addClass('disabled');
				}
				jQ(params['controller'] + ' li.previous a').attr('name', prev_a);
				jQ(params['controller'] + ' li.next a').attr('name', next_a);
				current_page = new_page;
				/*
				if (navigator.userAgent.indexOf('MSIE 7') != -1 || navigator.userAgent.indexOf('MSIE 6') != -1) {
					$('#focus-list div ul').addClass('delete');
					$('#focus-list div ul:nth-child('+(current_page)+')').removeClass('delete');
				}*/
				
				//alert(current_page + " - " + page_count + " - " + stopIt);
				$('#controls li').removeClass('active');
				$('#controls li:nth-child('+(current_page+1)+')').addClass('active');
				if(current_page >= 3 && current_page <= page_count-2) {
					$('#controls li').css('display','block');
					$('#controls li:nth-child('+(current_page+1)+')').next().next().nextAll().css('display','none');
					$('#controls li:nth-child('+(current_page+1)+')').prev().prev().prevAll().css('display','none');
					$('#controls li:first').css('display','block');
					$('#controls li:last').css('display','block');
				}
				else if(current_page >= page_count-2 && stopIt != 1) {
					$('#controls li').css('display','block');
					$('#controls li:nth-child('+(page_count-3)+')').prevAll().css('display','none');
					$('#controls li:first').css('display','block');
					$('#controls li:last').css('display','block');
				}
				else if(current_page <= 3 && stopIt != 1) {
					$('#controls li').css('display','block');
					$('#controls li:nth-child(6)').nextAll().css('display','none');
					$('#controls li:first').css('display','block');
					$('#controls li:last').css('display','block');
				}
				return false;				
			});			
    });
  }
	$.fn.contentscroller.defaults = {pages: '.page', controller: '#controls', trans_speed: 'slow', before:false, after:false};		
})(jQuery);
