(function($) {
	 $.fn.extend({ 
        simpleTabs: function(params) {
			
			
			this.params = {
				selectedClassName : 'selected',
				tabContentSelector: 'div.tabContent',
				tabSelector: 'ul li',
				animation: false,
				animationSpeed: 1000,
				autoPlay: false,
				timeout: 5000
			}
					
			this.params = jQuery.extend(true, this.params, params);
			
			var simpleTabs = this;
			var element = $(this);
			this.tabElements = element.find(this.params.tabSelector);
			if(this.params.tabContentContainer) {
				this.contentElements = element.find(this.params.tabContentContainer).children();
			} else {
				this.contentElements = element.find(this.params.tabContentSelector);
			}
			
			this.timeoutId = null;
			
			this.actualIndex = 0;
			
			this.setActualIndex = function(index) {
				this.actualIndex = index;
			}
			
			this.getActualIndex = function() {
				return this.actualIndex;
			}
			
			this.getTabsNum = function() {
				return this.tabElements.length;
			}
			

			
			this.isOnAnimate = function() {
				return element.find(':animated').length > 0? true : false;
			}
			
			this.isAnyTabSelected = function() {
				var selected = false;
				simpleTabs.tabElements.each(function(){
					if($(this).hasClass(simpleTabs.params.selectedClassName)) {
						selected = true;
					}
				});
				return selected;
			}
			
			/**
			* select tab by index
			*/
			this.selectTab = function(index) {
				this.changeContentTo(index);
				this.unselectAllTabs();
				this.getTab(index).addClass(simpleTabs.params.selectedClassName);
				this.setActualIndex(index);
			}
			
			this.hideAllTabContent = function() {
				element.find(simpleTabs.params.tabContentSelector).hide();
			}
			
			this.changeContentTo = function (index) {
				switch(this.params.animation) {
					case false:
						this.getActualContent().hide();
						this.getContent(index).show();
						break;
					case 'fade':
					default:
						this.getActualContent().fadeOut(simpleTabs.params.animationSpeed);
						this.getContent(index).fadeIn(simpleTabs.params.animationSpeed);
						break;
					
				}
			}
			
			this.showTabContent = function(index) {
				this.hideAllTabContent();
				var content = element.find(simpleTabs.params.tabContentSelector).eq(index).show();
			}
			
			/**
			* unselect all tabs
			*/
			this.unselectAllTabs = function() {
				this.tabElements.removeClass(simpleTabs.params.selectedClassName);
			}
			
			/**
			* returns tab element object by index
			*/
			this.getTab = function(index) {
				return simpleTabs.tabElements.eq(index);
			}
			
			this.getSelectedTab = function() {
				return this.tabElements.filter('.' + this.params.selectedClassName);
			}
			
			this.getContent = function(index) {
				return simpleTabs.contentElements.eq(index);
			}
			
			this.getActualContent = function() {
				var actualIndex = this.getActualIndex();
				return this.getContent(actualIndex);
			}
			
			this.stepToNext = function() {
				var index = this.getActualIndex();
				index++;
				if(index >= this.getTabsNum()) {
					index = 0;
				}
				this.selectTab(index);
			}
			
			this.autoPlay = function() {
				if(simpleTabs.params.autoPlay) {
					simpleTabs.timeoutId = setTimeout(function() { 
						simpleTabs.stepToNext(); 
						simpleTabs.autoPlay(); 
					}, simpleTabs.params.timeout);
				}
			}
			
			this.stopAutoPlay = function() {
				clearTimeout(simpleTabs.timeoutId);
			}
			
			/**
			 * START PLUGIN *
			 */
			
			element.css({ position: 'relative' });
			this.contentElements.css({ position: 'absolute' });
			this.contentElements.first().siblings().hide();
			
			/**
			* Select first tab if no tab is selected 
			*/
			if(!this.isAnyTabSelected()) {
				this.selectTab(0);
			}
				
			
			/**
			* bind click on tab elements
			*/
			simpleTabs.tabElements.click(function(){
				var actualElement = $(this);
				if(actualElement.hasClass(simpleTabs.params.selectedClassName)) {
					return false;
				}
				if (simpleTabs.isOnAnimate()) {
					$(simpleTabs.contentElements.stop(true, true));
				}
				simpleTabs.stopAutoPlay();
				simpleTabs.selectTab(simpleTabs.tabElements.index(this));
				simpleTabs.autoPlay();
				return false;
			});
			
			
			/**
			* autoplay
			*/
			this.autoPlay();
			

			
		}
	})
})(jQuery);
