/**
 * Utility for converting simple {code}<h2>Title</h2><div>entry</div>{code}
 * @author Rytis Alekna
 */
( function ($) {
	
	/**
	 * 
	 * @param {Object} target
	 * @param {Object} options
	 */
	$.fn.raTabbedPanel = function ( target, options ) {
		
		var defaults = {
			
			/**
			 * original title tag
			 */
			originalTitleTag	: 'h2',
			
			/**
			 * Original content tag
			 */
			originalContentTag	: 'div',
			
			/**
			 * Original content class
			 */
			originalContentClass: 'tabContent',
			
			/**
			 * Original active class
			 */
			originalActiveClass	: 'active',
			
			/**
			 * class for DIV
			 */
			tabPanelClass 		: 'raTabPanel',
			
			/**
			 * class for UL
			 */
			tabMenuClass 	: 'raTabMenu',
			
			/**
			 * class for currently visible tab and content
			 */
			visibleTabClass	: 'raVisibleTab',
			
			/**
			 * Tab content class
			 */
			tabContentClass	: 'raTabContent'
			
		}
		
		if ( !options ) {
			options = defaults;
		}
		
		/**
		 * Generate HTML structure
		 */
		function generate ( value ) {
			
			var retVal = $( '<div class=\'' + options.tabPanelClass + '\'><ul class=\'' + options.tabMenuClass + '\'></ul></div>' );
			
			var tabs = [];
			
			$( options.originalTitleTag, value ).each(
				function () {
					tabs.push( '<li ' + ( $(this).hasClass( options.originalActiveClass ) ? 'class=\'' + options.visibleTabClass + '\' ' : '' ) + '><a href=\'#\' >' + $(this).html() + '</a></li>' );
				}
			);
			
			$( '.' + options.tabMenuClass, retVal).append( tabs.join('') );
			
			var content = [];
			
			$( '.' + options.originalContentClass, value ).each( 
				function () {
					content.push( '<div class=\'' + options.tabContentClass + ( $(this).hasClass( options.originalActiveClass ) ? ( ' ' + options.visibleTabClass ) : '' ) + '\'>' + 
					$(this).html() + '</div>\n' );
				}
			);
			
			retVal.append( content.join('') );
			
			return retVal;
			// return $('<div>').append( $(retVal).clone()).remove().html();
			
			
		}
		
		/**
		 * Add interactivity
		 */
		function addFunctionality ( value ) {
			
			
			
			$( '.' + options.tabMenuClass + ' li' ).click(
				function () {
					$( '.' + options.visibleTabClass ).each( 
						function () {
							$( this ).removeClass( options.visibleTabClass );
						}
					)
					$( this ).addClass( options.visibleTabClass );
					
					var index = $('.' + options.tabMenuClass + ' li').index( this );
					
					$( $( '.' + options.tabContentClass ).get( index ) ).addClass( options.visibleTabClass );
					
					return false;
				}
			);
			
			
			
		}
		
		$( target ).each(
			function () {
				$(this).html( generate( this ) );
			}
		)
		
		$( '.' + options.tabPanelClass ).each(
			function () {
				
				$(this).html( addFunctionality( this ) );
			}
		)
		
		return this;
		
	}
	
})(jQuery);

