﻿/*
* author: IP
* notes: 
*/

jQuery.fn.fsAccordian = function(options) {
  var defaults = {
    actionElement: 'h2',
    containerElement: 'div',
    objectArray: null,
    animate: true
  };

  var settings = $.extend({}, defaults, options);
  var internalObjectArray = new Array();

  return this.each(function() {

    var $this = $(this);
    internalObjectArray.push($this);

    settings.objectArray.each(function() {
      internalObjectArray.push($(this));
    });

    for (var i in internalObjectArray) {
      internalObjectArray[i].find(settings.actionElement).wrapInner("<span>").addClass("state-closed");

      internalObjectArray[i].find(settings.actionElement).data("state", { active: false });
      internalObjectArray[i].find("ul").hide();

      if (i == 0) {
        internalObjectArray[i].find(settings.actionElement).removeClass("state-closed");
        internalObjectArray[i].find(settings.actionElement).addClass("state-open");
        internalObjectArray[i].find(settings.actionElement).data("state", { active: true });
        internalObjectArray[i].find("ul").show();
      }

      internalObjectArray[i].find(settings.actionElement).click(function() {

        for (var j in internalObjectArray) {
          internalObjectArray[j].find(settings.actionElement).data("state", { active: false });
        };

        $(this).data("state", { active: true });
        setClose(settings.animate);
      });
    }
  });

  function setClose(animate) {
    for (var i in internalObjectArray) {
      var state = internalObjectArray[i].find(settings.actionElement).data("state").active
      if (!state) {
        internalObjectArray[i].find(settings.actionElement).removeClass("state-open").addClass("state-closed");
        if (!animate) {
          internalObjectArray[i].find(settings.containerElement).hide();
          setOpen(animate)
        } else {
          internalObjectArray[i].find(settings.containerElement).animate({ height: 'hide', opacity: 'hide' }, 'medium', function() {
            setOpen(animate)
          });
        }
      }
    }
  }

  function setOpen(animate) {
    for (var i in internalObjectArray) {
      var state = internalObjectArray[i].find(settings.actionElement).data("state").active
      if (state) {
        internalObjectArray[i].find(settings.actionElement).removeClass("state-closed").addClass("state-open");
        if (!animate) {
          internalObjectArray[i].find(settings.containerElement).show();
        } else {
          internalObjectArray[i].find(settings.containerElement).animate({ height: 'show', opacity: 'show' }, 'medium');
        }
      }
    }
  }
};
