(function($) {
	$.fn.brocadeAccordion = function(options) {
		var defaults = {
			collapseAll: 'a.collapse-all',
			expandAll: 'a.expand-all',
			accordionContent: '.bc-accordion-content',
			accordionToggle: 'h3.head',
			initCloseAll: false,
			nonAccordionToggle: 'h4.head, h5.head',
			nonAccordionExpandAll: 'a.expandAllContent',
			nonAccordionCollapseAll: 'a.collapseAllContent'
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var obj = $(this);
			var btnCollapseAll = $(options.collapseAll, obj);
			var btnExpandAll = $(options.expandAll, obj);
			
			if (btnExpandAll) {
				btnExpandAll.click(function(){
					$(options.accordionContent, obj).show("fast", function(){
						$(options.accordionToggle, obj).addClass('selected');
					});
					return false;
				});
			}
			
			if (btnCollapseAll) {
				btnCollapseAll.click(function(){
					$(options.accordionContent, obj).hide("fast", function(){
						$(options.accordionToggle, obj).removeClass('selected');
					});
					return false;
				});
			}
			
			//set height attributes on ul's and then hide them
			$(options.accordionContent, obj).each(function(){
				var idx = $(options.accordionContent, obj).index(this);
				$(this).attr("height",$(this).height());
				//leave the first accordion pane showing
				if (options.initCloseAll) {
					$(this).css({
						display:"none"
					});
				}
				else {
					if (idx > 0) {
						$(this).css({
							display:"none"
						});
					} else {
						$(this).siblings('h3.head').addClass('selected');
					}
				}
			});
			
			var currentPanel = $(options.accordionContent+":first", obj);
			
			$(options.accordionToggle, obj).each(function(){
				var idx = $(options.accordionToggle, obj).index(this);		
				var tmpHead = $(this);
				if (tmpHead) {
					tmpHead.click(function(){
						var tmpList = $(this).siblings(options.accordionContent);
						if(tmpList.css("display")=="none") {
							tmpList.show("fast", function() {
								$(this).siblings(options.accordionToggle).addClass("selected");
							});
							currentPanel = tmpList;
							$(options.accordionContent, obj).each(function(){
								if(currentPanel[0]!=this && $(this).css("display")!="none"){
									$(this).hide("fast", function(){
										$(this).siblings(options.accordionToggle).removeClass("selected");
									});
								}
							});
						}
						else {
							tmpList.hide("fast", function(){
								$(this).siblings(options.accordionToggle).removeClass("selected");
							});
						}
						return false;
					});
				}
			});
			
			$(options.nonAccordionExpandAll, obj).each(function() {
				var tmpExpandAll = $(this);
				if (tmpExpandAll) {
					var context = tmpExpandAll.parent('.controls').parent('li').get(0);
					tmpExpandAll.click(function() {													
						var tmpList = $(this).parent('.controls').siblings(options.accordionContent);
						if(tmpList.css("display")=="none") {
							tmpList.show("fast", function() {
								$(this).siblings(options.accordionToggle).addClass("selected");
							});
							currentPanel = tmpList;
							$(options.accordionContent, obj).each(function(){
								if(currentPanel[0]!=this && $(this).css("display")!="none"){
									$(this).hide("fast", function(){
										$(this).siblings(options.accordionToggle).removeClass("selected");
									});
								}
							});
						}
						
						$(options.nonAccordionToggle, context).each(function() {
							$(this).next('ul').show('fast', function() {
								$(this).prev().addClass('selected');
							});
						});
						return false;
					});
				}
			});
			
			$(options.nonAccordionCollapseAll, obj).each(function() {
				var tmpCollapseAll = $(this);
				if (tmpCollapseAll) {
					var context = tmpCollapseAll.parent('.controls').parent('li').get(0);
					tmpCollapseAll.click(function() {
						var tmpList = $(this).parent('.controls').siblings(options.accordionContent);
						if(tmpList.css("display")=="none") {
							tmpList.show("fast", function() {
								$(this).siblings(options.accordionToggle).addClass("selected");
							});
							currentPanel = tmpList;
							$(options.accordionContent, obj).each(function(){
								if(currentPanel[0]!=this && $(this).css("display")!="none"){
									$(this).hide("fast", function(){
										$(this).siblings(options.accordionToggle).removeClass("selected");
									});
								}
							});
						}
						
						$(options.nonAccordionToggle, context).each(function() {
							$(this).next('ul').hide('fast', function() {
								$(this).prev().removeClass('selected');
							});
						});
						return false;
					});
				}
			});
			
			// Expand/Collapse the non accordion toggles
			$(options.nonAccordionToggle, obj).each(function() {
				if ($(this)) {																							 
					$(this).next().css('display','none');
					$(this).click(function() {
						var toggleContent = $(this).next();
						if (toggleContent.css('display')=='none') {
							toggleContent.show('fast', function() {
								$(this).prev().addClass('selected');
							});
						}
						else {
							toggleContent.hide('fast', function() {
								$(this).prev().removeClass('selected');
							});
						}
						return false;
					});
				}
			});
		});
	};
})(jQuery);

