/**
 * Реализация переключаемых вкладок
 *
 * @author Pavel Alexandrov <pavel@vmt.ru>
 * @copyright Copyright (c) 2010, Pavel Alexandrov
 * @license http://opensource.org/licenses/gpl-2.0.php The GNU Public License (GPL) Version 2, June 1991
 * @package
 * @subpackage
 * @category JavaScript
 * @version 0.1
 */
(function($){
	$.fn.tab=function(o){
		/**
		 * tab - селектор элемента загладки в найденном блоке
		 * active - индекс активной вкладки по-умолчанию. Нумерация с 0. Если -1, то нет вкладки по-умолчанию
		 * block - селектор объекта где находятся блоки отображаемые при выборе вкладки
		 * showDisabled - показывать ли неактивные вкладки
		 * note - селектор блока примечаний.
		 * 		  Если блок есть, при загрузке показывается он, а вкладка по-умолчанию игнорируется
		 * 		  При нажатии на активную вкладку показывается этот блок, а блок вкладки скрывается.
		 */
		var options=$.extend({tab:'li',active:0,block:'body',showDisabled:true,note:'.note',callback:emptycallback},o)
		// Текущий блок с вкладками
		var tab=this
		// Активная вкладка
		var current=null
		// Количество вкладок
		var count=0;
		// Первая вкладка
		var first
		// Блок примечания
		var note
		function emptycallback(){}
		$(options.tab,this).each(function(){
			// Проверяем, есть ли страница примечания. Если есть, то делаем без вкладки по-умолчанию.
			note=$(options.note,options.block)
			if( note.length!=0 ){
				options.active=-1
			}
			if( $('a',this).length!=0 ){
				// Работаем только если есть ссылки, которые отвечают за переход по вкладкам
				var lnk=$('a',this).attr('href')
				if( lnk.substr(0,7)=='http://' ){
					lnk=lnk.substr(lnk.indexOf('#'),lnk.length)
				}
				var localLnk=(lnk.substr(0,1)=='#'), disabled=false;
				if( (localLnk && $(lnk,options.block).length==0) || $(this).hasClass('disable') ){
					disabled=true
					// Не найден блок с id из адреса ссылки или вкладка указана как неактивная
					$(this).addClass('disable')
					if( !options.showDisabled ){
						// Скрываем неактивные загладки если не показывать
						$(this).css('display','none')
					}
					// Блокируем функцию нажатия
					$(this).click(function(){return false})
				}else{
					if( count==options.active ){
						// Найдена активная вкладка по-умолчанию
						current=this
					}
					if(localLnk){
						// Скрываем блок который должен быть показан при выборе вкладки
						$(lnk,options.block).css('display','none')
					}
					// Первая доступная вкладка
					if( !first )first=this
					// Действия только с активными вкладками
					$(this).hover(
						function(){if(!$(this).hasClass('active'))$(this).addClass('over')},
						function(){$(this).removeClass('over')}
					).click(function(){
						if( !$(this).hasClass('active') ){
							if( !localLnk ){
								// Загрузка через AJAX
								id='tb'+String(Math.random()).substr(3)
								var loader='<div id="'+id+'" class="loader" style="display:none">&nbsp;</div>'
								if( options.block=='body' ){
									$(tab).after(loader)
								}else{
									$(options.block).append(loader)
								}
								id='#'+id
								$(id).load(lnk,function(){$(this).removeClass('loader')})
								$('a',this).attr('href',id)
								lnk=id
								localLnk=true
							}
							if( current ){
								// Если есть текущая, скрываем ее и показываем новую
								var lnk1=$('a',current).attr('href')
								if( lnk1.substr(0,7)=='http://' ){
									lnk1=lnk1.substr(lnk1.indexOf('#'),lnk1.length)
								}
								$(lnk1).fadeOut('fast',function(){$(lnk).fadeIn('fast',options.callback($(lnk)))})
							}else{
								if( note.length!=0 ){
									// Есть блок примечания. Скрываем его, показываем вкладку
									$(note).fadeOut('fast',function(){$(lnk).fadeIn('fast',options.callback($(lnk)))})
								}else{
									//
									$(lnk).fadeIn('fast',options.callback($(lnk)))
								}
							}
							$(current).removeClass('active')
							current=$(this).removeClass('over').addClass('active')
						}else{
							// Нажали на активную вкладку
							if(note.length!=0){
								// Есть блок примечания, показываем его, а вкладку убираем
								$(current).removeClass('active').addClass('over')
								var lnk1=$('a',current).attr('href')
								if( lnk1.substr(0,7)=='http://' ){
									lnk1=lnk1.substr(lnk1.indexOf('#'),lnk1.length)
								}
								$(lnk1).fadeOut('fast',function(){note.fadeIn('fast')})
								current=null
							}
						}
						return false
					})
				}
				count++
			}
		})
		if( count>0 && options.active!=-1 ){
			// Есть вкладки
			if( !current ){
				// Не нашли активной вкладки. Берем первую
				current=first
			}
			$(current).trigger('click')
		}
	}
})(jQuery)

