/* A collection of standard/useful ListWidget subclasses for speaker profiles. */
/* Dependencies: jquery.js, common.js, form.js, listwidget.js */
(function($) {
  this.LinkWidget = ListWidget.extend({
    defaultOptions: {
      display_format: function(data) { return $('<a></a>').attr('href', data.url).html(data.name); },
      type_name: 'Link', 
      form_fields: [{name: 'name', type: 'text'}, {name: 'url', type: 'text', 'default': 'http://'}],
      validation_rules: [['required', 'name', 'Name is required'],
                         ['required', 'url', 'Url is required'],
                         ['reg_exp', 'url', '(http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?', 'Url must be in the format: http://domain.com.']]
    }
  });
  
  this.PresentationWidget = ListWidget.extend({
    defaultOptions: {
      display_format: function(data) { return $('<div><h1>'+ data.title +'</h1><p>'+ data.description +'</p></div>'); },
      type_name: 'Presentation',
      form_fields: [{name: 'title', type: 'text'}, {name: 'description', type: 'textarea'}],
      validation_rules: [['required', 'title', 'Title is required.'],
                         ['required', 'description', 'Description is required.']]
    }
  });
  
  this.EngagementWidget = ListWidget.extend({
    defaultOptions: {
      display_format: function(data) { return $('<p></p>').html((data.title ? '"'+ data.title +'" ': '')+ data.location +' - '+ data.month +'/'+ data.year); },
      type_name: 'Engagement',
      form_fields: [
        {name: 'title', type: 'text'},
        {name: 'location', type: 'text'},
        {name: 'month', type: 'select', options: [[1, 'January'],[2, 'February'],[3, 'March'],[4, 'April'],[5, 'May'],[6, 'June'],[7, 'July'],[8, 'August'],[9, 'September'],[10, 'October'],[11, 'November'],[12, 'December']]},
        {name: 'year', type: 'select', options: (function() { 
          var years = [];
          var y = (new Date()).getFullYear();
          for(i = 0; i < 80; ++i) { 
            years.push(y - i); 
          }
          return years; })()}
      ],
      validation_rules: [['required', 'location', 'Location is required.'],
                         ['reg_exp', 'month', '^([1-9]|1[0-2])$', 'Valid month is required.'],
                         ['reg_exp', 'year', '^[1-9][0-9]{3}$', 'Valid year is required.']]
    }
  });
  
  this.PublicationWidget = ListWidget.extend({
    defaultOptions: {
      display_format: function(data) {
        var display = $([
          '<h1>' + data.title + '</h1>',
          (data.coauthor) ? '<h2>with ' + data.coauthor + '</h2' : '',
          (data.description) ? '<p class="pubDesc">' + data.description + '</p>' : '',
          '<p class="pubInfo">',
          (data.publisher) ? '  <span class="pubName">' + data.publisher + '</span> &mdash;' : '',
          '  <span class="pubYear">' + data.year + '</span>',
          '</p>'
        ].join('\n'));
        return display;
      },
      type_name: 'Publication',
      form_fields: [
        {name: 'title', type: 'text'},
        {name: 'coauthor', type: 'text'},
        {name: 'description', type: 'textarea'},
        {name: 'publisher', type: 'text'},
        {name: 'year', type: 'select', options: (function() { 
          var years = [];
          var y = (new Date()).getFullYear();
          for(i = 0; i < 80; ++i) { 
            years.push(y - i); 
          }
          return years; })()}
      ],
      validation_rules: [['required', 'title', 'Title is required.'],
                         ['reg_exp', 'year', '^[1-9][0-9]{3}$', 'Valid year is required.']]
    }
  });
})(jQuery);
