
/* classes/login_or_save.js */

 var LoginOrSave = Class.create();
LoginOrSave.prototype = {
  modals: {},
  errors: {},

  urlTemplate: new Template("/mmh/projects/#{project_id}/prompt_for_title?" +
                            "redirect_tab=#{href}"),

  initialize: function( logged_in ) {
    this.is_logged_in = logged_in;

    this.generateLinks = logged_in ?
      this.generate_save_project_links :
      this.generate_login_links;

    this.generateLinks();
  },

  error: function( link, error ) {
    this.errors[link.id] = error;
  },

  links: function() { return $$(".login_or_save"); },

  generate_save_project_links: function() {
    this.links().each(function( link ) {
        var project_id = this.getProjectIdFromLink( link );
        if( project_id == null ) {
          return null;
        }

        var values = {
          project_id: project_id,
          href: link.href
        };
        var url = this.urlTemplate.evaluate( values );

        this.modals[link.id] = new MMH.Modal( link.id, {
          href:     url,
          position: "mouse"
        });

        return this.modals[link.id];
      }.bind(this));
  },

  generate_login_links: function() {
    this.links().each(
      function( link ) {
        var projectId = this.getProjectIdFromLink( link );
        this.modals[link.id] = new MMH.LoginModal( link.id ).listen({
          beforeOpen: function() {
            s.eVar9 = projectId + " - Save";
            void s.t();
          }
        });
      }.bind(this));
  },

  getProjectIdFromLink: function( link ) {
    try {
      return link.href.match( /projects\/([^/]+)/ )[1];
    } catch( e ) {
      this.error( link, e );
      return null;
    }
  }
};
