jQuery(function(){
	initAcc();
});
// accordion init
function initAcc() {
	jQuery('.accordion').Accordion({
		activeClass:'active',
		elements:'>li',
		opener:'>a.opener',
		slider:'>div.slide',
		slideSpeed: 400
	});
}

// open-close plugin
jQuery.fn.Accordion = function(_options){
	// default options
	var _options = jQuery.extend({
		activeClass:'active',
		elements:'.element',
		opener:'.opener',
		slider:'.slide',
		slideSpeed: 400,
		collapsable:true,
		animStart:false,
		animEnd:false,
		fixedHeight:0,
		event:'click'
	},_options);

	return this.each(function(){
		// options
		var _holder = jQuery(this);
		var _slideSpeed = _options.slideSpeed;
		var _activeClass = _options.activeClass;
		var _elements = jQuery(_options.elements, _holder);
		var _animStart = _options.animStart;
		var _animEnd = _options.animEnd;
		var _event = _options.event;
		var _collapsable = _options.collapsable;
		var _fixedHeight = _options.fixedHeight;
		_elements.each(function(){
			var _hold = jQuery(this);
			var _slider = _hold.find(_options.slider);
			var _opener = _hold.find(_options.opener);
			_opener.bind(_event,function(){
				if(_fixedHeight!=0){
					if(typeof _animStart === 'function') _animStart();
					if(_hold.hasClass(_activeClass)) {
						if(_collapsable){
							_slider.animate(
								{height:0},
								{duration: _slideSpeed,
								queue:false,
								complete: function(){
									if(typeof _animEnd === 'function') _animEnd();
								}
							});
							_hold.removeClass(_activeClass);
						} else {return false;}
					} else {
						var _closerParent = _holder.find("li." + _activeClass);
						var _closer = _closerParent.find(_options.slider);
						if(!_slider.is(':animated')&&!_closer.is(':animated')){
							if(_closerParent.length){
								_closerParent.removeClass(_activeClass);
								_closer.animate(
									{height:0},
									{duration: _slideSpeed,
									queue:false,
									complete: function(){
										$(this).hide();
										if(typeof _animEnd === 'function') _animEnd();
									}
								});
							}
							_hold.addClass(_activeClass);
							_slider.css({display:'block'});
							_slider.animate(
								{height:_fixedHeight},
								{duration: _slideSpeed,
								queue:false,
								complete: function(){
									if(typeof _animEnd === 'function') _animEnd();
								}
							});
						}
					}
				}
				else if(!_slider.is(':animated')) {
					if(typeof _animStart === 'function') _animStart();
					if(_hold.hasClass(_activeClass)) {
						_slider.slideUp(_slideSpeed,function(){
							if(typeof _animEnd === 'function') _animEnd();
						});
						_hold.removeClass(_activeClass);
					} else {
						_hold.addClass(_activeClass);
						_slider.slideDown(_slideSpeed,function(){
							if(typeof _animEnd === 'function') _animEnd();
						});
					}
				}
				return false;
			});
			if(_hold.hasClass(_activeClass)) _slider.show();
			else _slider.hide();
		});
	});
}

