(function($) { 
   $.fn.tabSlideShow = function(options) {
    	var options = options || {};
		options = $.extend($.fn.tabSlideShow.defaults, options);
		var objHeight = 0;		
		var first = 0;
		var openTab = 0;
		options.before = options.before ? [options.before] : [];
        options.after = options.after ? [options.after] : [];
        options.after.unshift(function(){ options.busy=0; });
		options.busy = 0;
		if(options.imageHolder){
		
			var $iHolder = $(options.imageHolder); 
			var $images =  $iHolder.children();
			var ielm = $images.get();
			
			$iHolder.width(options.imageWidth).height(options.imageHeight).css({'position':'relative','overflow':'hidden'})
					
		
		
        	$images.css({position: 'absolute', top:0, left:0}).hide().each(function(i) { 
            	$(this).css('z-index', ielm.length-i) 
        	});
        	
            $(ielm[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case
        	if ($.browser.msie) ielm[first].style.removeAttribute('filter');
        	options.before = [];
			options.before.push(function(){ $(this).show(); })
        	$.fn.tabSlideShow.transitions.fade($iHolder, $images, options);
			//$.fn.tabSlideShow.custom(ielm[0], ielm[1],options);
			
			
		}
		
		return this.each(function() {
        	if (this.cycleTimeout) clearTimeout(this.cycleTimeout);
        	this.cycleTimeout = 0;
        	this.cyclePause = 0;
		
		
		
			var $obj = $(this);
			var $tabs = $obj.children();
			$tabs.each(function(i){
				var l = $(this);
				options.after.push(function(){ 
					l.css({'cursor':'pointer'})
				})
				
			 	l.click(function(){
			 		options.auto = 0;
			 		if(options.busy == 0){
			 		var l = $(this);
			 		//alert(openTab.attr('id') + l.attr('id'))
			 			
			 		if(options.openTab.attr('id') != l.attr('id')){
			 			$("#sliderTabs").css("padding-left","599px");
						$("#sliderImages #imageHolder").css("width","639px");
						options.openTab.children().animate({width: '38px'})
			 			options.openTab.removeClass('on');
			 			l.children().animate({width: '176px'});
			 			l.addClass('on');
			 			scrollImageNow(first,i,options);
			 			options.openTab = l;
			 		}
			 		}
			 		
			 		
			 	});
			 	
			 	l.hover(function(){
			 		if(options.busy == 1){
			 			$(this).css({'cursor':'wait'})
			 		} 
			 	},function(){
			 			$(this).css({'cursor':'pointer'})
			 		}
			 	
			 	)
			 //	alert(i)
			 	if(i ==0){
			 	options.openTab = l;
			 	}
			 	if(options.auto)
			 		this.cycleTimeout = setTimeout(function() {
						nextTab($tabs,options)
            		},options.autodelay );
			
			});
			
			
		});
		
		function nextTab($tabs,options){
			 if (options.busy) return;
			  if(options.auto == 0) return;
			 options.busy = 1;
			 var n = first+1;
			 if(n > 5){
			 	n= 0;
			 }
			var l = $tabs.eq(n);
			
			 if(n == 0){
				$("#sliderTabs").css("padding-left","640px");
				$("#sliderImages #imageHolder").css("width","777px");
				options.openTab.children().animate({width: '38px'})
				options.openTab.removeClass('on');
				options.openTab = l;
				l.children().animate({width: '134px'});
				l.addClass('on');
			} else {
				$("#sliderTabs").css("padding-left","599px");
				$("#sliderImages #imageHolder").css("width","639px");
				options.openTab.children().animate({width: '38px'})
				options.openTab.removeClass('on');
				options.openTab = l;
				l.children().animate({width: '176px'});
				l.addClass('on');
			}
			

			scrollImageNow(first,n,options)
			first = n;
			var t =  $tabs.parent().get(0);
			 if(options.auto)
			 		t.cycleTimeout = setTimeout(function() {
						nextTab($tabs,options)
            		},options.autodelay);

			 
		
		}
		
		function scrollImageNow(f,i,options){
			//alert(f+" "+i+" "+options)
			$.fn.tabSlideShow.custom(ielm[f], ielm[i],options);
			first = i;
		}
		
		
	};//End createTabController
	$.fn.tabSlideShow.transitions = {
    fade: function($cont, $slides, opts) {
		$slides.not(':eq(0)').css('opacity',0);
		opts.before.push(function(curr,next,opts) {
			opts.cssBefore.opacity = 0;
		});
		opts.animIn	   = { opacity: 1 };
		opts.animOut   = { opacity: 0 };
		opts.cssBefore = { top: 0, left: 0 };
	}

};
	
	$.fn.tabSlideShow.transitions.scrollLeft = function($cont, $slides, opts) {
		$cont.css('overflow','hidden');
		var w = $cont.width()+ 1;
		opts.cssFirst = { left: 0 };
		opts.cssBefore= { left: w, top: 0};
		opts.animIn	  = { left: 0 };
		opts.animOut  = { left: 0-w };
	};
	
	$.fn.tabSlideShow.custom = function(curr, next, opts, cb) {
	     if (opts.before.length)
            $.each(opts.before, function(i,o) { o.apply(next, [curr, next, opts]); });
	    
	    var $l = $(curr), $n = $(next);
	    opts.busy = 1;
	    var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
	   	$n.css(opts.cssBefore);
	    var fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb);};
		$l.animate(opts.animOut, speedOut, easeOut, function() {
			if (opts.cssAfter) $l.css(opts.cssAfter);
			if (!opts.sync) fn();
			$.each(opts.after, function(i,o) { o.apply(next, [curr, next, opts]); });
		});
		if (opts.sync) fn();
	};
	
	$.fn.tabSlideShow.defaults = {
			imageHolder:null,
			imageHeight:null,
			imageWidth:null,
			speedIn: 1000,
			speedOut: 1000,
			easeIn: null,
			easeOut: null,
			sync:1,
			before:null,
			after:null,
			auto:1,
			autodelay: 4000
				
		};

	
	
	
	
		 
})(jQuery);

