/**
 * Global
 */
if (!IS_DEV) {
  var IS_DEV = false;
  var LOG = {};
  LOG.info = function() { return; };
  LOG.error = function() { return; };
}
 
if (IS_DEV) {
  var LOG = {};
  if ("console" in window) {
    LOG.info = function(info) { console.info(info); };
    LOG.error = function(err) { console.error(err); };
  } else {
    LOG.info = function() { return; };
    LOG.error = function() { return; };
  }
}

if (typeof(Dmb) == 'undefined') { Dmb = {}; }



/**
 * Expando
 */
Dmb.Expando = (function() {
  var loaded = false, options = {};

  var defaults = {
    toggleClass : "expando",
    callback    : null,
    innerElms   : false
  };

  var init = function(id, opts) {
    loaded = true;
    var o = opts || {};

    if (!options[id]) {
      options[id] = {};
      options[id].toggleClass = o.toggleClass || defaults.toggleClass;
      options[id].innerElms = o.innerElms || defaults.innerElms;
      if (o && o.callback) {
        var c = o.callback;
        register(id,c);
      }
    }

    jQuery('#'+id).live("click", toggle);
  };

  var toggle = function(e) {
    e.preventDefault();
    LOG.info('***Clicked');

    var fromClass, toClass, expandStyle,
        lenMatch = this.className.match(/.*?expand_to_(\w+)/),
        parentId = this.id,
        open;

    if (lenMatch && lenMatch[1]) {
      var el = jQuery('#'+lenMatch[1]);
      if (options[parentId].innerElms) {
        open = true;
        var elmsToToggle = el.find('.'+options[parentId].toggleClass),
            length = elmsToToggle.length,
            i = 0;
        for (i; i < length; i++) {
          if (jQuery(elmsToToggle[i]).hasClass('jsStartHidden')) {
            jQuery(elmsToToggle[i]).removeClass('jsStartHidden');
            jQuery(this).removeClass('more').addClass('collapse', 1000).text('LESS');
          }
          else {
            jQuery(elmsToToggle[i]).addClass('jsStartHidden');
            jQuery(this).removeClass('collapse').addClass('more', 1000).text('MORE');
          }
        }
      }
      else {
        open = el.hasClass(options[parentId].toggleClass);
        if (open) {
          LOG.info("is open");
          el.removeClass(options[parentId].toggleClass);
        }
        else {
          LOG.info("is closed");
          el.addClass(options[parentId].toggleClass);
        }
      }

      if(options[parentId].callback) {
        runCallBack(lenMatch[1],open,parentId,this);
      }
    }
  };

  var register = function(id, fn) {
    if (loaded) {
      options[id].callback = fn;
    }
    else {
      LOG.error("Meetup.Expando must be loaded first");
    }
    return;
  };

  var runCallBack = function(cls,open,id,elm) {
    options[id].callback.call(this, cls, open, elm);
  };

  return {
    init:init
  };
})();

