/*
	jQuery Accordion (jQuery 1.2.3 - 1.4.1)
	Version: 1.3
	Author:	Serega Tolmachyov (Fuse8 Online)
*/


(function($){
	$.fn.accordion = function(options){

	if ($(this).hasClass('accordion-used') == false)
	{
		var miniAccordion = $(this);

		var defaults = {
			speed: 'normal',
			active: false,
			openOnlyOne: true,
			headerClass: 'a-head',
			headerHoverClass: 'a-head-hover',
			contentClass: 'a-content',
			headerLockClass: 'a-head-locked',
			beforeAction: '',
			afterAction: ''
		};

		miniAccordion.addClass('accordion-used').options = $.extend( {}, defaults, options );

		miniAccordion.headers = miniAccordion.find('div.' + miniAccordion.options.headerClass);
		miniAccordion.contents = miniAccordion.find('div.' + miniAccordion.options.contentClass);

		miniAccordion.headers.each(function(){
			$(this)
				.width($(this).width())
				.hover(function(){
						$(this).addClass(miniAccordion.options.headerHoverClass)
					},function(){
						$(this).removeClass(miniAccordion.options.headerHoverClass)
					}
				);
			this.lock = false
		});
		miniAccordion.contents.each(function(){
			$(this).width($(this).width()).css({position:'relative'})
		});

		miniAccordion.extend({
			beforeAction:function(){
				if (typeof this.options.beforeAction == 'function') this.options.beforeAction()
			},
			afterAction:function(){
				if (typeof this.options.afterAction == 'function') this.options.afterAction()
			},
			getRealItem: function(item){
				var accordion = this;
				if (accordion.headers.length < item) item = accordion.headers.length;
				if (item < 1) item = 1;
				return item
			},
			lockItem: function(item){
				var accordion = this;
				accordion.headers.eq(accordion.getRealItem(item)-1).addClass(accordion.options.headerLockClass)[0].lock = true
			},
			lock: function(item){
				var accordion = this;
				item = accordion.getRealItem(item);

				if (item == undefined)
				{
					accordion.headers.each(function(){
						accordion.lockItem(accordion.headers.index(this) + 1)
					})
				} else {
					accordion.lockItem(item)
				}
			},
			unLockItem: function(item){
				var accordion = this;
				accordion.headers.eq(accordion.getRealItem(item)-1).removeClass(accordion.options.headerLockClass)[0].lock = false
			},
			unLock: function(item){
				var accordion = this;
				item = accordion.getRealItem(item);

				if (item == undefined)
				{
					accordion.headers.each(function(){
						accordion.unLockItem(accordion.headers.index(this) + 1)
					})
				} else {
					accordion.unLockItem(item)
				}
			},
			click: function(item){
				var accordion = this;
				item = accordion.getRealItem(item);

				var el = $(accordion.headers[item-1]);
				
				if (!el[0].lock)
				{
					accordion.beforeAction();
					if (el.hasClass(accordion.options.headerClass + '-active'))
					{
						el.removeClass(accordion.options.headerClass + '-active').next('div').slideUp(accordion.options.speed, function(){accordion.afterAction()})
					}else{
						if (accordion.options.openOnlyOne) accordion.closeAll();
						el.addClass(accordion.options.headerClass + '-active').next('div').slideDown(accordion.options.speed, function(){accordion.afterAction()})
					}
				}
			},
			openAll: function(){
				var accordion = this;
				if (!accordion.options.openOnlyOne)
				{
					for (var i = 0; i < accordion.headers.length; i++)
					if (!accordion.headers[i].lock)
					{
						accordion.contents.eq(i).slideDown(accordion.options.speed);
						accordion.headers.eq(i).addClass(accordion.options.headerClass + '-active')
					}
				}
			},
			closeAll: function(){
				var accordion = this;
				for (var i = 0; i < accordion.headers.length; i++)
				if (!accordion.headers[i].lock)
				{
					accordion.contents.eq(i).slideUp(accordion.options.speed);
					accordion.headers.eq(i).removeClass(accordion.options.headerClass + '-active')
				}
			}
		});

		miniAccordion.contents.hide();
		
		
		if (typeof(miniAccordion.options.active) != 'boolean')
		{
			var activeItem = miniAccordion.getRealItem(miniAccordion.options.active) - 1;
			if (miniAccordion.contents[activeItem])
			{
				$(miniAccordion.contents[activeItem]).show();
				$(miniAccordion.headers[activeItem]).addClass(miniAccordion.options.headerClass + '-active')
			}
		}


		miniAccordion.headers.each(function(){
			this.accordion = miniAccordion;
			$(this).click(function(){
				this.accordion.click( this.accordion.headers.index(this) + 1 )
			})
		});

		$(window).bind('unload', function(){miniAccordion.remove()});

		return miniAccordion
	}

}})(jQuery);
