(function($){
	$.fn.ejb_slide = function(options) {
		var defaults = {
		pause: 10,
		start: 0,
		autoPlay:true,
		loop:true,
		autosize:true,
		height:null,
		controls:null,
		controlsClass:"button",
		controlsSelectedClass:"selected",
		nextBtn:null,
		prevBtn:null,
		playBtn:null,
		pauseBtn:null,
		endOfLoopClass:"endOfLoop",
		trans:'fade',
		transSpeed:500
		};
		
		var options = $.extend(defaults, options);
	
		return this.each(function() {
			var parent=this;
			var obj = $(this).children('li');
			var current=options.start;
			var prev=null;
			var playStatus=true;
			$(this).append("<div class='ejb_timer'></div>")
			var timer=$(this).children('.ejb_timer');
			
			if(options.playBtn){
				$(options.playBtn).click(function(){
					$(timer).stop();
					options.autoPlay=true;
					$(timer).fadeTo(500,100,function (){
						current++;
						if (current>=obj.length){
							current=(options.loop)?0:obj.length-1;
							loadSlide(current);
						}else{
							loadSlide(current);
						}
					});
				});
			}
			if(options.pauseBtn){
				$(options.pauseBtn).click(function(){
					options.autoPlay=false;
					$(timer).stop();
				});
			}
			
			if (options.trans.toLowerCase()=='slide'){
				$(obj).wrapAll('<div class="ejb"></div>');
				var wi=0;
				var i=0;
				for(i=0;i!=obj.length;i++){
					if (i==0){
						$(obj[i]).attr('name',0);
					}else{
						wi=$(obj[i-1]).outerWidth()+wi
						$(obj[i]).attr('name',wi);
						
					}
				}
				wi=wi+$(obj[obj.length-1]).outerWidth();
				$(obj).parent('.ejb').attr('name',wi)
				//$(obj).css({'position':'absolute'});	
			}
			
			// Autosize code
			
			if (options.autosize==true){
				var liHeight=($(obj[0]).outerHeight());
				var liWidth =($(obj[0]).outerWidth());
				if (options.height) liHeight=options.height;
				$(this).css({
					'overflow':'hidden', 'height':liHeight, 'width':liWidth
				});
				
				$(this).find('.ejb').css({
					'overflow':'hidden', 'height':liHeight, 'width':liWidth
				});
				if (options.trans.toLowerCase()=='slide'){
					$(this).find('.ejb').css({
				'height':liHeight, 'width':50000
				});
					/*for (i=0;i!=obj.length;i++){
						if (i>0){
						$(obj[i]).css({'left':$(obj[i-1]).width()+$(obj[i-1]).position().left});
						}else{
							$(obj[i]).css({'left':0, });
						}
					}*/
					
				}
			}else{
				if (options.trans.toLowerCase()=='slide'){
					$(this).find('.ejb').css({
				 'width':50000
					});
					var wi=$(parent).width();
					$(obj).parent('.ejb').attr('name',wi)
					var count=1;
					$(obj[0]).addClass('marker');
					for (i=1;i!=obj.length;i++){
						var far=count*wi;
						var myWidth=parseInt($(obj[i]).outerWidth());
						var myName=parseInt($(obj[i]).attr('name'));
						if (myWidth+myName>=far){
							$(obj[i]).addClass('marker');
							count++;
							far=count*wi;
						}
					}
					obj=$(parent).find('.marker');
				}
			}
			
			/*if (options.loop){
				$(parent).find('.ejb').append($(obj).clone());
			}*/
			// end autosize
			
			if (options.controls){
				for (i=0;i!=obj.length;i++){
					$(options.controls).append("<div class='"+options.controlsClass+"' name='"+i+"'></div>");
				}
				var controls=$('.'+options.controlsClass);
				$(controls).click(function(){
					if ($(this).attr('name')!=current){
						current=$(this).attr('name');
						$(timer).stop(true);
						loadSlide(current);
					}
				});
			}
			if (options.nextBtn){
				var next=$(options.nextBtn);
				next.click(function(){
					current++;
					$(timer).stop(true);
					if (current>obj.length-1) {
						current=(options.loop)?0:obj.length-1;
						if (options.loop) loadSlide(current);
					}else{
						loadSlide(current);
					};
				});
			}
			if (options.prevBtn){
				var prev=$(options.prevBtn);
				prev.click(function(){
					current--;
					$(timer).stop(true);
					if (current<0) {
						current=(options.loop)?obj.length-1:0;
						if (options.loop) loadSlide(current);
					}else{
						loadSlide(current);
					};
				});
			}
			if (options.trans.toLowerCase()=='fade'){
				$(obj).css({
					'display':'none','position':'absolute'
				});
			}
			if (options.trans.toLowerCase()=='slide'){
				$(parent).css({'overflow':'hidden'});
				$(obj).css({
					'float':'left'
				});
			}
			function loopStatus(cur){
				if (cur<=0) {
					$(options.prevBtn).addClass(options.endOfLoopClass);
				}else{
					$(options.prevBtn).removeClass(options.endOfLoopClass);
				}
				
				if (cur>=obj.length-1) {
					$(options.nextBtn).addClass(options.endOfLoopClass);
				}else{
					$(options.nextBtn).removeClass(options.endOfLoopClass);
				}
			}
			
			function animateOut(who){
				switch(options.trans.toLowerCase()){
					case 'fade':$(who).fadeOut(options.transSpeed);break;
				}
			};
			function animateIn(who){
				switch(options.trans.toLowerCase()){
					case 'fade':$(who).fadeIn(options.transSpeed);break;
					case 'slide':
					
					/*for (i=0;i!=obj.length;i++){
						$(obj[i]).animate({left:liWidth*(i-current)},options.transSpeed);
					}*/
					
					$(who).parent('.ejb').animate({marginLeft:-($(who).attr('name'))},options.transSpeed);
					;break;
				}
			};
			
			function loadSlide(which){
				animateOut(obj);
				animateIn(obj[which]);
				if (!options.loop) loopStatus(which);
				if (options.controls){
					$(controls).removeClass(options.controlsSelectedClass);
					$(controls[which]).addClass(options.controlsSelectedClass);
				}
				
			
				if (options.autoPlay){
						$(timer).fadeTo(options.pause*1000,100,function (){
							current++;
							if (current>=obj.length){
								current=(options.loop)?0:obj.length-1;
								loadSlide(current);
							}else{
								loadSlide(current);
							}
						});
					
				};
			}
		
			loadSlide(current);
		
		});
	};
})(jQuery);

