﻿/*
* author: RAJF
* notes: open and close elements
*/

jQuery.fn.collapsable = function(options) {
	var defaults = {
		actionElement:'',
		startOpen: false,
		animate:true
  };
  
	var settings = $.extend({}, defaults, options);

  return this.each(function(){
		var $this = $(this);
		var $actionIcon;

    var $actionElement = $this.find(settings.actionElement);
    $actionElement.attr("class","collapsable-action-element-open");
    
    // create container for open and closing
    var $container = $(document.createElement("div")); 
    $container.attr("class","collapsable-container");
    
    $this.wrapInner($container);
    
    //wrapping loses object reference so get it again!
    $container = $this.find(".collapsable-container");
    
    // move action element outside of container
    $this.prepend($actionElement);
    
    //set default state
    if(settings.startOpen){
			//jQuery.log("open");
			openIt($container,$actionElement,true);
    }
    else {
			//jQuery.log("close");
			closeIt($container,$actionElement,true);
    }
    
    // set click action
    $actionElement.click(function(){
			if($container.hasClass("collapsable-closed")){
				if(settings.animate){
					openIt($container,$actionElement);
				}
				else {
					openIt($container,$actionElement,true);
				}
			}
			else{
				if(settings.animate){
					closeIt($container,$actionElement);
				}
				else {
					closeIt($container,$actionElement,true);
				}
			}
    });
   
  });
  
  function openIt($container,$actionElement, fast)
	{
		$container.removeClass("collapsable-closed");
		$container.addClass("collapsable-open");
		$actionElement.removeClass("collapsable-action-element-closed");
		$actionElement.addClass("collapsable-action-element-open");
		
		if(fast){
			$container.show();	
		}
		else{
			$container.animate(
			{height: 'show', opacity: 'show'}
			, 'medium'
			,function(){
				
			});
		}
		
	}

	function closeIt($container,$actionElement, fast)
	{
		if(fast){
			$container.hide();
			$container.removeClass("collapsable-open");
			$container.addClass("collapsable-closed");
			$actionElement.removeClass("collapsable-action-element-open");
			$actionElement.addClass("collapsable-action-element-closed");
		}
		else{
			$container.animate({height: 'hide', opacity: 'hide'}
			, 'medium'
			,function(){
				$container.removeClass("collapsable-open");
				$container.addClass("collapsable-closed");
				$actionElement.removeClass("collapsable-action-element-open");
				$actionElement.addClass("collapsable-action-element-closed");
			});
		}
	}
};


