// ============================ Tasks ============================
var Task = function(id){
  
}

var TaskList = {
  init: function(){
    jQuery('.task_checkbox').change(function(){
      var postUrl = jQuery(this).closest('.task').attr('data-remote-url');
      var checked = jQuery(this).attr('checked');

      var status = 0;
      if((jQuery(this).hasClass('in_progress') && checked) || (jQuery(this).hasClass('completed') && !checked)){
        jQuery(this).closest('.task').find('.in_progress').removeAttr("disabled");
        status = 1;
      } else if(jQuery(this).hasClass('completed') && checked){
        jQuery(this).closest('.task').find('.in_progress').attr('checked', 'checked').attr("disabled","disabled");
        status = 2;
      }
      
      jQuery.ajax({
        url:postUrl, 
        type:'PUT',
        data: {
          authenticity_token:AUTHENTICITY_TOKEN, 
          "task[status]":status
        }
      });
    });
  }
}


var SearchFilters = {  
  // ========================== Search ===========================
  // shift click select all on checkboxes 
  init: function(){
    window.onload = function(){    
      var lastChecked = null;

      $$('.chkbox').each(function(el){  
        el.observe('click', function(event) {

          if(!lastChecked) {
            lastChecked = this;
            return;
          }

          if(event.shiftKey) {
            var start = $$('.chkbox').indexOf(this);
            var end = $$('.chkbox').indexOf(lastChecked);

            for(i=Math.min(start,end);i<=Math.max(start,end);i++) {
              $$('.chkbox')[i].checked = lastChecked.checked;
            }
          }

          lastChecked = this;
        })
      });    

      // basically same as above but handles clicking the labels for checkboxes 
      lastChecked = null;

      $$('.chkbox').each(function(el){  
        $(el).next().observe('click', function(event) {

          cthis = $(this).previous();

          if(!lastChecked) {
            lastChecked = cthis;
            return;
          }

          if(event.shiftKey) {
            var start = $$('.chkbox').indexOf(cthis);
            var end = $$('.chkbox').indexOf(lastChecked);

            for(i=Math.min(start,end);i<=Math.max(start,end);i++) {
              $$('.chkbox')[i].checked = lastChecked.checked;
            }
          }

          lastChecked = this;
        })
      });    
    }
    //do when page loads 
    SearchFilters.hide_invalid_filters();    
  },

  clear_fields: function(el){
    $(el).up('form').select('input[type=checkbox]:checked').each((function(cur_el){cur_el.checked = false}));
    $(el).up('form').select('input[type=text]').each((function(cur_el){cur_el.value = ''; cur_el.focus()}));
    $(el).up('form').select('input[type=hidden]').each((function(cur_el){cur_el.value = null}));
    $(el).focus();
    $(el).up('form').submit();
  },


  // very much a work in progress below here...
  select_filter: function(el, exclusive){
    if(exclusive) 
      SearchFilters.enforce_single_selection(el);

    SearchFilters.hide_invalid_filters();
    
    jQuery('#search_filter_form').submit();
  },

  hide_invalid_filters: function(){
    // hiding uneeded filters
    hide_ct = false;
    hide_pi = false;

    $('search_filter_form').select('input[type=checkbox]:checked').pluck('id').each(function(mod){
      smod = mod.gsub('search_models_', '');
      var anti_ct = ['Asset', 'Message', 'Comment', 'Note', 'Pitch', 'Profile', 'Project', 'VideoRating', 'Friend', 'Status', 'Rating', 'ProjectMessage'];
      var anti_pi = ['Asset', 'Project', 'Status', 'Message', 'Comment', 'Note', 'Pitch', 'VideoRating', 'Rating', 'ProjectMessage'];

      if(anti_ct.indexOf(smod) > -1)
        hide_ct = hide_ct || true;        

      if(anti_pi.indexOf(smod) > -1)
        hide_pi = hide_pi || true;      
    });

    hide_ct ? SearchFilters.hide_filter('call_type_filters') : SearchFilters.show_filter('call_type_filters');
    hide_pi ? SearchFilters.hide_filter('personal_filters') : SearchFilters.show_filter('personal_filters');    
  },

  hide_filter: function(id){
    if($(id))
      if($(id).visible())
        Effect.BlindUp(id);      
  },

  show_filter: function(id){
    if($(id))
      if(!$(id).visible())
        Effect.BlindDown(id);    
  },

  enforce_single_selection: function(el){
    var chkbox = $(el).checked; 
    $(el).up('.filter_group').select('input[type=checkbox]').each((function(cur_el){cur_el.checked = false}));
    $(el).checked = chkbox;
  },

  toggle_reel_form_loading: function(){
    SearchFilters.toggle_form_loading('reel_form');
  },

  toggle_form_loading: function(id){
    $(id).down('.loading').toggle(); 
    $(id).down('.input_button_wr').toggle();
  },
  
  submit:function(){
    $('search_filter_form').submit();
  }
}


// ==== Contacts =====
var Contacts = {
  edit_list: new Hash(),	      

  add_phone_number:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".your_office_left_item").down("div.phone_numbers");
    var clo = Object.clone($("default_phone"));    
    Element.insert(tar, {bottom: clo.innerHTML})
  },
  add_email_account:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".your_office_left_item").down("div.email_accounts");
    var clo = Object.clone($("default_email"));    
    Element.insert(tar, {bottom: clo.innerHTML})
  },
  add_address:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".your_office_left_item").down("div.addresses");
    var clo = Object.clone($("default_address"));    
    Element.insert(tar, {bottom: clo.innerHTML})
  },
  add_job:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".your_office_left_item").down("div.jobs");
    var clo = Object.clone($("default_job"));    
    Element.insert(tar, {bottom: clo.innerHTML})
  },
  add_website:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".your_office_left_item").down("div.websites");
    var clo = Object.clone($("default_website"));    
    Element.insert(tar, {bottom: clo.innerHTML})
  },
// add:function(e, contact_type){
//   var el = $(Event.element(e));
//   var tar = el.up(".your_office_left_item").down("div." + contact_type + "s");
//   var clo = Object.clone($("default_" + contact_type));    
//   Element.insert(tar, {bottom: clo.innerHTML})        
// },
  edit:function(e, contact_type){	        
    var tar = $(Event.element(e)).up(".profile_contact_item");
    var clo = Object.clone($("default_" + contact_type).down());

    var type = tar.select('.view_type')[0].innerHTML;
    var values = [];
    tar.select('.view_value').each((function(el){values.push(el.innerHTML)}));

    // console.log(tar.identify())
    this.edit_list.set(tar.identify(), tar.down().innerHTML);
    Element.replace(tar.down(), clo.innerHTML);

    tar.down('select').value = type;
    tar.select("input[type='text']").each((function(el, i){
      el.value = values[i];
    }));        
  },
  cancel_edit:function(el) {
    var tar = $(el).up(".profile_contact_item");

    // console.log(tar.identify())
    info = this.edit_list.get(tar.identify());
    info ? Element.update(tar, "<div>" + info + "</div>") : tar.remove();
  },
  remove:function(e){
    var el = $(Event.element(e));
    var tar = el.up(".profile_contact_item");

    all_blank = true;
    tar.select("input[type='text']").each((function(el){
      if(!$F(el).blank()) all_blank = false; 
    }));

    tar.fade({duration:.2});
    all_blank ? tar.remove() : tar.addClassName('marked_for_removal');        
  },
  undo_removes:function(){
    $$('.marked_for_removal').each((function(el){
      this.cancel_edit(el.down(1));
    }).bind(this));

    $$('.marked_for_removal').invoke('appear', {duration:.2}).invoke('removeClassName', 'marked_for_removal');

    Effect.toggle('edit_profile','blind');
  },
  remove_marked:function(){
    $$('.marked_for_removal').invoke('remove');
    return true;
  }
}



// === PlusMinus ===
// * toggle (-) / (+) icons within link texts
var PlusMinus = {
  toggle:function(event_or_element, id){
    var img = (typeof event_or_element == 'object' ? Event.element(event_or_element) : $(event_or_element)).down('img');
    img.src = img.src.match(/plus/) ? img.src.gsub('plus','minus') : img.src.gsub('minus','plus');
    
    Effect.toggle(id,'blind');
  }

  // initialize:function(id){
  //   $$((id || '')+' .plus_minus').each(function(wrapper){
  //     wrapper.down
  //   });
  // }
}

function log(x){
  try{console.log(x)}catch(e){}
}


function initTimeAgo(){
  jQuery('.relative_time').html(function(){
    var timeago = jQuery.timeago(jQuery(this).attr('data-timestamp'));
    jQuery(this).attr('data-timeago',timeago);
    return timeago;
  });  
}
