$(document).ready(function() {
  var $contentModal, retrieveClassFor, storeClassFor;
  $contentModal = $('#contentModal');
  $contentModal.DEFAULTS;
  storeClassFor = function($elem) {
    return $elem.data('original-class', $elem.attr('class'));
  };
  retrieveClassFor = function($elem) {
    if (typeof $elem.data('original-class') !== 'undefined') {
      return $elem.attr('class', $elem.data('original-class'));
    }
  };
  storeClassFor($contentModal);
  $('#contentModal *').each(function(index) {
    return storeClassFor($(this));
  });
  $contentModal.on('hidden.bs.modal', function() {
    retrieveClassFor($contentModal);
    $('#contentModal *').each(function() {
      return retrieveClassFor($(this));
    });
    $contentModal.find('.modal-content-area').empty();
    return $contentModal.data('open', false);
  });
  return $contentModal.on('show.bs.modal', function() {
    return $contentModal.data('open', true);
  });
});

this.setupContentModal = function(setupFunc) {
  var $contentModal, doSetup, wasOpen;
  $contentModal = $('#contentModal');
  wasOpen = false;
  doSetup = function() {
    if (wasOpen) {
      $contentModal.off('hidden.bs.modal', doSetup);
    }
    return setupFunc($contentModal);
  };
  if ($contentModal.data('open')) {
    wasOpen = true;
    return $contentModal.on('hidden.bs.modal', doSetup);
  } else {
    return doSetup();
  }
};

this.showContentModal = function(options) {
  var $contentModal, showIt, wasOpen;
  if (options.force !== false) {
    options.force = true;
  }
  $contentModal = $('#contentModal');
  wasOpen = false;
  showIt = function() {
    var setSection;
    if (wasOpen) {
      $contentModal.off('hidden.bs.modal', showIt);
    }
    setSection = function($section, option) {
      if (typeof option === 'string') {
        return $section.text(option);
      } else {
        return $section.append(option);
      }
    };
    setSection($('#contentTitle'), options.title);
    setSection($('#contentBody'), options.body);
    setSection($('#contentFooter'), options.footer);
    options.title = null;
    options.body = null;
    options.footer = null;
    $contentModal.modal(options);
    if (options.then) {
      return options.then($contentModal);
    }
  };
  if ($contentModal.data('open')) {
    if (options.force === true) {
      wasOpen = true;
      $contentModal.on('hidden.bs.modal', showIt);
      return $contentModal.modal('hide');
    }
  } else {
    return showIt();
  }
};

this.hideContentModal = function() {
  return $('#contentModal').modal('hide');
};

this.errorModal = function(body, options) {
  if (typeof options !== 'object') {
    options = {};
  }
  options.title || (options.title = 'Error');
  options.body || (options.body = body);
  options.footer || (options.footer = $('<button class="btn btn-danger" data-dismiss="modal">OK</button>'));
  setupContentModal(function($contentModal) {
    $contentModal.find('.modal-content').addClass('modal-content-error');
    return $contentModal.find('.modal-body').addClass('centered');
  });
  return showContentModal(options);
};

this.successModal = function(titleOrBody, body, setup) {
  var title;
  title = body ? titleOrBody : (body = titleOrBody, "Success");
  setupContentModal(function($contentModal) {
    $contentModal.find('.modal-content').addClass('modal-content-success');
    $contentModal.find('.modal-body').addClass('centered');
    if (setup) {
      return setup($contentModal);
    }
  });
  return showContentModal({
    title: title,
    body: body,
    footer: $("<button class='btn btn-default' data-dismiss='modal'>OK</button>")
  });
};

this.confirmModal = function(question, callback) {
  var $footer, $modal, $noBtn, $yesBtn;
  $modal = $('#contentModal');
  $yesBtn = $('<a class="btn btn-primary" id="modal-confirm-btn">Confirm</a>');
  $noBtn = $('<a class="btn btn-default" id="modal-cancel-btn">Cancel</a>');
  $footer = $('#contentFooter');
  $footer.children().remove();
  $footer.append($yesBtn);
  $footer.append($noBtn);
  $yesBtn.click(function() {
    $modal.modal('hide');
    if (callback.length === 0) {
      return callback();
    } else {
      return callback(true);
    }
  });
  $noBtn.click(function() {
    $modal.modal('hide');
    if (callback.length >= 1) {
      return callback(false);
    }
  });
  setupContentModal(function($contentModal) {
    $contentModal.find('.modal-dialog').addClass('modal-sm');
    return $contentModal.find('.modal-body').addClass('centered');
  });
  return showContentModal({
    title: 'Confirm',
    body: question,
    footer: $footer
  });
};