;(function($){


  var classes = { content: '.slide-content', panel: '.slide-panel', controls: '.slide-controls', cancel: '.cancel-button' };
  
  $.fn.slidesheet = function(onclose_callback) {
    $(classes.panel).find(classes.cancel).live('click', function(){
      $(this).hideSheet(onclose_callback);
      return false;
    });

    return $(this).each(function(i, elem){
      $(this).data('slidesheet-obj', new slidesheet(elem));
    });
  };
  
  $.fn.hideSheet = function(callback) {
    console.log("hide sheet");
    
    return $(this).each(function(){
      $(this).closest(classes.panel).slideUp(callback);
    });
  };
  
  $.fn.showSheet = function() {
    console.log("show sheet");
    
//    return $(this).each(function(){
      var elemToShow = $(this);
      
      console.log(elemToShow);
      
      $(classes.panel).not(elemToShow).slideUp();
      elemToShow.closest(classes.panel).slideDown();
      
      return $(this);
//    });
  };
  
  $.fn.setSheetContent = function(content) {
    var elem = $(this);
    
    $(this).slideUp(function(){
      elem.closest(classes.panel).find(classes.content).empty().append(content);
      elem.showSheet();
    });
    return this;
  };
    
  function slidesheet(elementToContain)
  {
    function needBuiltinControls(elem)
    {
      var cancel_button = $(elem).find(classes.cancel);
      return  (cancel_button.length == 0);
    }

     function createControls()
     {
       return $("<div></div>").addClass('slide-controls')
        .append(
          $("<span>[cancel]</span>").addClass("close").bind('click', $.fn.hideSheet)
        )
        .append(
          $("<label></label>")
            .text("Auto Close")
            .append(
              $("<input>").addClass('autoclose').attr("type", "checkbox").attr("checked", "checked")
            ));
     }

    function createContainer()
    {
      var content = $("<div></div>").addClass('slide-content');
      var elemClasses =  $(elementToContain).attr('class');
      $(elementToContain).removeAttr('class');
      return $("<div></div>").attr('class', elemClasses).addClass('slide-panel').append(content);
    };
  
    function setContentFor(panel, content) {
//      $.fn.setSheetContent(content);
      $(panel).find(classes.content).empty().append(content);
    };

    var panel = createContainer();
    /*if (needBuiltinControls(elementToContain)){
      panel.append(createControls());
    }*/

    var elem = $(elementToContain).replaceWith(panel);
    $(this).data(classes.panel, panel);

    setContentFor(panel, elem);
  }
  
})(jQuery);