/***
 * Project: Accordion
 * Author: Brian DiChiara
 * Website: http://www.briandichiara.com/
 * Version: 1.0
 * Description: Simple Accordion Menus
 */
 
var Accordion = {
	
	selector: '.accordionButton',
	slide_speed : 'normal',
	content_selector : '.accordionContent:first',
	active_class : 'on',
	hover_class : 'over',
	parent_selectors: '#first,#second',
	
	open_all_btn : '.expand-accordions',
	close_all_btn : '.collapse-accordions',
	
	$els : {},
	
	init : function(selector){
		selector = selector ? selector : Accordion.selector;
		Accordion.selector = selector;
	
		Accordion.$els = $(Accordion.selector);
		
		$.each(Accordion.$els, function(i, el){
			var $el = $(el);
			var $content = $el.next(Accordion.content_selector);
			
			Accordion.close($el, true); // closed by default
			
			$el.click(function(e){
				var url = $.param.fragment();
				if(url != $el.attr('id')){
					window.location.hash = $el.attr('id');
				} else {
					Accordion.toggle($el, true);
				}
				return false;
			});
			
			$el.hover(function(over){
				$el.addClass(Accordion.hover_class);
			}, function(out){
				$el.removeClass(Accordion.hover_class);
			});
			
			$(Accordion.open_all_btn).click(function(e){
				Accordion.open(Accordion.$els);
				return false;
			});
			$(Accordion.close_all_btn).click(function(e){
				Accordion.close(Accordion.$els);
				return false;
			});
		});
	 
	},
	
	toggle: function($el, toggle_others){
		toggle_others ? toggle_others : false;
		var $content = $el.next(Accordion.content_selector);
		if($content.is(':visible')){
			Accordion.close($el);
		} else {
			Accordion.open($el, false, toggle_others);
		}
	},
	
	open : function($el, init, toggle_others){
		init = init ? init : false;
		toggle_others = toggle_others ? toggle_others : false;
		
		if($el.length > 1){
			$.each($el, function(i, el){
				Accordion.open($(el), init);
			});
			return;
		}
		
		var $parent = $el.parents(Accordion.parent_selectors);
		
		if(!$el.is(':visible') || !$parent.is(':visible')){
			return false;
		}
		
		$el.addClass(Accordion.active_class);
		var $content = $el.next(Accordion.content_selector);
		
		if($content.is(':visible')){
			// it's already open!
			return false;
		}
		
		if(init){
			$content.show();
		} else {
			$content.slideDown(Accordion.slide_speed);
			if(toggle_others){
				Accordion.close($(Accordion.selector+'.'+Accordion.active_class, $parent).not($el));
			}
		}
	},
	
	close : function($el, init){
		init = init ? init : false;
		
		if($el.length > 1){
			$.each($el, function(i, el){
				Accordion.close($(el), init);
			});
			return;
		}
		
		if(!$el.is(':visible')){
			return false;
		}
		
		$el.removeClass(Accordion.active_class);
		var $content = $el.next(Accordion.content_selector);
		
		if(!$content.is(':visible')){
			// it's already closed!
			return false;
		}
		if(init){
			$content.hide();
		} else {
			$content.slideUp(Accordion.slide_speed);
		}
	}
	
}
