
var Accordion = Class.create();
Accordion.prototype = {
  initialize: function(container, default_cookie_name, options){
    this.container = $(container);
    this.setOptions(options, default_cookie_name);
    this.togglers = this.container.select(this.options.toggler);
    this.togglees = this.container.select(this.options.togglee);
    this.togglees.invoke("hide");
    this.togglers.each(function(t, idx){
      t.observe('click', this.show.bindAsEventListener(this, idx));
    }.bind(this));
    this.setCurrent();
  },
  show: function(event, index) {
    var element = Event.element(event);
    if (this.open.toggler == element) return;
    var current = this.open;
    var next = {toggler: element, togglee: this.togglees[index]};
    new Effect.Parallel([new Effect.BlindUp(current.togglee), new Effect.BlindDown(next.togglee)], {duration: 0.25});
//    new Effect.BlindDown(next.togglee);
    current.toggler.removeClassName(this.options.activeClassName);
    next.toggler.addClassName(this.options.activeClassName);
    this.open = next;
    // Save current in Cookie
    var accordion_id = next.toggler.id.split("_");
    setCookie(accordion_id[0]+'_'+accordion_id[1], accordion_id[2]);
  },
  setOptions: function(options, default_cookie_name){
    var defaultToggler = getCookie(default_cookie_name);
    if($(default_cookie_name + '_' + defaultToggler) != null)
      defaultToggler = default_cookie_name + '_' + defaultToggler;
    else
      defaultToggler = null;
    this.options = {
      toggler:          '.accordion_toggle', // className of the element you click
      togglee:          '.accordion_content', // className of the element you toggle
      activeClassName:  'accordion_toggle_active', // className to put on the open elements
      defaultToggler:   defaultToggler
    };
    Object.extend(this.options, options || {});
  },
  setCurrent: function(){
    if (this.options.defaultToggler != null) {
      this.togglers.each(function(t, idx){
        if (t.id == this.options.defaultToggler) {
          this.togglees[idx].show();
          this.open = {toggler: this.togglers[idx], togglee: this.togglees[idx]};
          this.togglers[idx].addClassName(this.options.activeClassName);
          return;
        }
      }.bind(this));
    }
    else {
      this.open = {toggler: this.togglers.first(), togglee: this.togglees.first()};
      this.togglers.first().addClassName(this.options.activeClassName);
      this.togglees.first().show();
    }
  }
};

function setCookie(key, value, expire) {
  if (value == null)
    return;
  var v = escape(value);
  document.cookie = escape(key) + "=" + v + (expire ? "; expires=" + expire : "");
}

function getCookie(key) {
  if (document.cookie) {
    var e = document.cookie.split(";");
    var c = null;
    for (var i = 0; i < e.length; i++) {
      c = e[i].split("=");
      if (unescape(c[0].replace(/\s*/gi, "")) == key) {
        return (c.length > 1 ? unescape(c[1]) : "");
      }
    }
  }
  return "";
}
function removeCookie(key) {
  setCookie(key, "-1", "Fri, 31 Dec 1999 23:59:59 GMT;");
}
