var Preferences = Class.create({
 set_from_checkbox:function(pref_name) {
  pref_value = ($(pref_name).checked) ? 1 : 0;
  this.set_preference(pref_name, pref_value);
 },
 set_from_radio:function(pref_name) {
  pref_value = $$('input:checked[type="radio"][name="'+ pref_name + '"]').pluck('value');
  this.set_preference(pref_name, pref_value);
 },
 set_preference:function(pref_name, pref_value) {
  new Ajax.Request('/preferences', {
  method:'post',
  parameters:{requestType:'set_preference', pref_name:pref_name, pref_value:pref_value},
    onSuccess: function(transport) {   }
  });
  }
 }
)

preferences = new Preferences;

var pComments = Class.create({
  initialize:function() {
    this.registerEvents();
  },
  registerEvents: function() {
    Event.observe(document,'click',this.commentsListener.bind(this));
  },
 commentsListener: function(event) {
   var b = Event.findElement(event,'a');
   if(!b) return;
   switch (b.className) {
    case "save_comments":
      this.save(b.up('div.comments_input'))
      break;
    case "toggle_comments":
      var comments = b.up('div.comments_wrapper').down('div.display_comments');
      if (comments) {
        b.update((comments.visible()) ? "view" : "hide");
        Effect.toggle(comments, 'Blind', { duration: 1.0});
      }
      break;
   }

  },
  save:function(container) {
    if (!container) return;

    var comment = container.select('textarea').collect(function(ta){return $F(ta)});
    var collection = container.getAttribute('collection');
    if (!comment || !collection) return;
    container.down('a.save_comments').update("<img src='/imgs/small_boxes.gif'/> Saving")
    container.down('a.save_comments').removeAttribute('href');
    container.down('a.save_comments').addClassName('disabled');

    new Ajax.Request(window.location.href, {
      method:'post',
      parameters:{s:p, requestType:'submitComment', commentText:comment, collectionID:collection, commentRevID:1, pComment:1},
      onSuccess: function(transport) {
        var response = transport.responseText.evalJSON();
        if (!response || response.error==1) { this.helper.throw_error({msg:response.msg}); return; }
        container.up('div.comments_wrapper').update(response.html);
      }
    });
  }
 }
)

pcomments = new pComments;


var ProjectTagger = Class.create({
  initialize:function(tags) {
    this.tags = tags;
    this.taglist = $('project_tag_list');
    this.tagger = $('project_tag_input');
    this.save_button = $('save_project_tags');
    this.autocompleter = new Autocomplete(this.tagger,this.tags,{onSelect:function() { this.autocomplete_select(); }.bind(this) });
    this.registerEvents();
  },
  registerEvents: function() {
    if (this.taglist) Event.observe(this.taglist,'click',this.click_listener.bind(this));
    if (this.tagger) Event.observe(this.tagger,'focus',this.start_tagging.bind(this));
    if (this.tagger) Event.observe(this.tagger.up('div'),'keydown',this.key_listener.bind(this));
    if (this.save_button) Event.observe(this.save_button, 'click', this.save_tags.bind(this))
  },
  click_listener: function(event) {
   var b = Event.findElement(event,'a');
   if(!b) return;
   switch (true) {
    case b.hasClassName('delete_tag'):
      var tag_id = b.getAttribute('tag_id');
      if (tag_id) this.do_delete(tag_id)
      break;
   }
  },
  key_listener:function(event) {
    switch(event.keyCode) {
      case Event.KEY_RETURN:
        this.save_tags();
        Event.stop(event);
        break;
    }
  },
  autocomplete_select:function() {
    this.tagger.value = "\"" + $F(this.tagger) + "\"";
    this.save_tags();
  },
  start_tagging:function() {
    this.autocompleter.moveToElement(this.tagger);
  },
  save_tags:function() {
    this.do_save(this.tagger)
  },
  do_save:function(inputfield) {
    if (!inputfield || !$F(inputfield)) { return; }
    var tags = $F(inputfield);
    inputfield.value='';
    new Ajax.Request(window.location.href, {
      method:'post',
      parameters:{s:p, requestType:'saveProjectTag', tags:tags},
      onSuccess: function(transport) {
        var response = transport.responseText.evalJSON();
        if (!response || response.error==1) { this.helper.throw_error({msg:response.msg}); return; }
        if (response.html) { this.taglist.update(response.html); }
        new Effect.Highlight(this.taglist, '#ffffff');
      }.bind(this)
    });
  },
  do_delete:function(id) {
   new Ajax.Request(window.location.href, {
    method:'post',
    parameters:{s:p, requestType:'deleteProjectTag', tag_id:id},
    onSuccess: function(transport) {
      var response = transport.responseText.evalJSON();
      if (!response || response.error==1) { this.helper.throw_error({msg:response.msg}); return; }
      if (response.html) { this.taglist.update(response.html); }
      new Effect.Highlight(this.taglist, '#ffffff');
    }.bind(this)
   });
  }
})
