/**
 * @projectDescription: jQuery plugin for show/hidding content with a trigger.
 * @author: Mike Nelson <michael.nelson@heathwallace.com>
 * @version: 1.0
 */
 
(function($){
	$.fn.showHide = function(opts) {
		opts = $.extend({
			activeClass: 	'open',
			duration: 		'normal',
			event: 			'click',
			trigger: 		'.showHideTrigger',
			anytime: 		'.showHideAnytime',
			content: 		'.showHideContent'
		}, opts);

		return this.each(function(i) {
			var $this = $(this),
				$trigger = $this.find(opts.trigger),
				$anytime = $this.find(opts.anytime),
				$content = $this.find(opts.content);

			if (i>0)
				$content.hide();
				
			$anytime.bind(opts.event, function(e) {
				e.preventDefault();
			});
			
			$trigger.bind(opts.event, function(e) {
				e.preventDefault();
				toggle();
			});
			
			$this.bind('toggleshowhide', function(){
				toggle();
			});
			
			/**
			 * Toggles the content node and adds/removes relevant classes
			 * 
			 * @param: {Boolean} slide - slide $content or not
			 */
			function toggle(slide){
				if(!slide){
					$content.slideToggle(opts.duration, function(){
						setTriggers();
					});
				}
				else{
					$content.toggle();
					setTriggers();
				}
				$trigger.toggleClass(opts.activeClass);
			}
									
			/**
			 * Sets onopen and onclose triggers
			 */
			function setTriggers(){
				if($trigger.hasClass(opts.activeClass)){
					$this.trigger('onopenshowhide');
				}
				else{
					$this.trigger('oncloseshowhide');
				}
			}
			
		});
		
	};
})(jQuery);

