/*
 * jQuery accordion v1.0.0
 */

jQuery.fn.accordion = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		opener: 'a.opener',
		slide: 'div.slide',
		activeItemClass: 'ui-state-active',
		accordionLavel:'ul',
		accordionItem:'li',
		duration:400
	},_options);

	return this.each(function(){
		var _this = jQuery(this);
		
		var _lavel = jQuery(_options.accordionLavel, this), _close;
		
		$.each([_this,_lavel], function(j,_lv){
			for (var i=0; i<_lv.length; i++) {
				(function(){
					var _items = $('> '+_options.accordionItem,_lv.get(i));
					_items.activeItem = false;
					_items.each(function(k,item){
						item.slide = $('> '+_options.slide,item);
						item.slide.show();
					});
					_items.each(function(k,item){
						var _timer = false;
						item.opener = $('> '+_options.opener,item);
						item.slide.find(_options.slide,item).hide();
						item.h = item.slide.innerHeight();
						if ($(item).hasClass(_options.activeItemClass)) {
							_items.activeItem = item;
							//_items.activeItem.h = _items.activeItem.slide.innerHeight();
							item.opener.addClass(_options.activeItemClass);
							item.slide.show();
						}
						item.opener.mouseenter(function(){
							_timer = setTimeout(function(){
								if(item.slide.length){
									if (!$(item).hasClass(_options.activeItemClass)) {
										_close = false;
										_items.each(function(z,item_temp){
											if (item_temp == item) _close = true;
										});
										showItem(item);
									} 
									return false;
								}
							}, 250)
						}).mouseout(function(){
							if (_timer) clearTimeout(_timer);
						});
						
					});
					
					
					function showItem(_item){
						_items.activeItem.h = $(_items.activeItem.slide).innerHeight();
						
						$(_item.slide).show().css('position','absolute');
						_item.h = $(_item.slide).innerHeight();
						
						$(_item).addClass(_options.activeItemClass);
						_item.slide.css({'height':0, 'opacity':0, 'position':'static'});
						_item.slide.animate({'height': _item.h, 'opacity':1}, {duration:_options.duration, queue:false, complete:function(){
							if (_items.activeItem) {
								$(_items.activeItem).removeClass(_options.activeItemClass);
								_items.activeItem.slide.hide();
								_items.activeItem.slide.css('height','auto');
							}
							_items.activeItem = _item;
							_items.activeItem.slide.css('height','auto');
						}, step: function(i,j){
							var _p = j.now/j.end;
							if (_items.activeItem != _item && _items.activeItem != false && _close) {
								var _thisValue = 0;
								if (j.prop == 'height') {
									_thisValue = _items.activeItem.h - (_items.activeItem.h * _p);
								} else {
									_thisValue = j.end - j.now;
								}
								eval('_items.activeItem.slide.css({'+j.prop+':'+_thisValue+'})');
							}	
						}});
					};
					function hideItem(_item){
						_item.h = _item.slide.innerHeight();
						_item.slide.animate({'height': 0, 'opacity':0}, {duration:_options.duration, queue:false, complete:function(){
							_item.slide.hide();
							_item.slide.css('height','auto');
							$(_item).removeClass(_options.activeItemClass);
							_items.activeItem = false;
						}})
					};
					
					
				})(i);
			}
		});
		$.each([_this,_lavel], function(j,_lv){
			for (var i=0; i<_lv.length; i++) {
				(function(){
					var _items = $('> '+_options.accordionItem,_lv.get(i));
					_items.each(function(k,item){
						var _slide = $('> '+_options.slide,item);
						_slide.hide();
						if ($(item).hasClass(_options.activeItemClass)) {
							_slide.show();
						}
					});
				})(i);
			}
		});
	});
}

$(document).ready(function(){
	$('div.sub-nav > ul.accordion').accordion({
		opener: 'a.opener',
		slide: 'div.slide',
		activeItemClass: 'active',
		accordionLavel:'ul',
		accordionItem:'li',
		duration:300
	});
});