loading = false;
function setup_filter() {
  var search_box = $("div#advanced-search")
  if (search_box.find('p.network-search').length > 0)
    search_box.show();
  $("div.network").click(function(e){
    // already working on a request... please wait, thanks
    if(loading) { return false; }
    e.preventDefault();
    var row = $("div#templates p.network-search").clone(true);
    var field = row.find("select.network-select");
    set_selection($(this), field, row);
  });
  $("a.add").click(function(e){
    e.preventDefault();
    $('div#templates p').clone(true).appendTo(search_box);
    update_filter();
  });
  $("a.remove").click(function(e){
    e.preventDefault();
    remove_row($(this))
    update_filter();
  });
  $("select.network-select").change(function() {
  if(($(this).val()) != "Select network") { update_filter(); }
  });
}

function update_filter() {
  existing_terms = $("input#filter").val();
  current_searches = $("div#advanced-search").find('select.network-select option:selected');
  terms = "";
  if(current_searches.length > 0) {
  current_searches.each(function(index, option) {
    if($(option).val() != "Select network") { terms += $(option).val() + " "; }
  });
  }
  if(terms != "" && terms != existing_terms) {
  $("input#filter").val(terms);
  update_search();
  }
}

function update_search(){
  loading = true;
  sLoad();

  var container = $("table#contact-listing");
  container.html("");
  // Is a group selected?
  var gid = group_id();
  
  params = {search_terms: $('input#filter').val()};
  
  if(gid) { params.group_id = gid[1]; }

  $.get('/contacts/search_contacts', params, function(result){
    loading = false;
    hLoad();
    $('#add_delete .buttons').fadeIn();
    $("#contacts-search #selections").show();
    container.html(result);
    $("div#advanced-search").show();
    $("#seek-insight").removeClass("default");
    $("#show-table").addClass("default");
    prepare_links();
    //handle_trash();
  })
}

function set_selection(el, field, row) {
  var search = $("div#advanced-search");
  var selected = el.attr('id')
  var existing = null;
  
  field.val(el.attr('id'));
  
  current_searches = search.find('select.network-select option:selected');
  if(current_searches.length > 0) {
  current_searches.each(function(index, option) {
    if(selected == $(option).val())
    existing = $(option);
  });
  if(existing){
    remove_row(existing)
    row.remove();
    //return false;
  } else {
    row.appendTo(search);
    //return true;
  }
  } else {
  row.appendTo(search);
  }
  update_filter();
  
  return true;
}

function remove_row(el){
  el.closest('p').remove();
  search_box = $("div#advanced-search");
  if (search_box.find('p.network-search').length == 0){
    $("input#filter").val('');
    search_box.hide();
    var gid = group_id();
    gid = (gid) ? gid[1] : "";
    sLoad();
    $.get("contacts/?group_id=" + gid, function(data) {
      console.log("data is "+data);
    $("table#contact-listing").html(data);
    hLoad();
    });
  }
}

function group_id() {
  var selected_group = $('.contact-group-selected a');
  if(selected_group.length > 0) 
    return $('.contact-group-selected a').attr('href').match(/group_id=(\d+)/);
}

function reset_search() {
  $("div#advanced-search").find('p').each(function(index, filter){
  $(filter).remove();
  });
  $("input#filter").val('');
  $("div#advanced-search").hide();
  $('div#templates a.add').unbind('click');
}

// end filter search ==================

$(function() {

  // remove twitter user
  $("a.remove-twitter-account").live("click", function(e) {
  if($(this).hasClass('active'))
    confirm_text = "This twitter account is associated with active Auto Responder sequences.  If you remove this twitter account future follows from this account with be cancelled!"
  else
    confirm_text = "Are you sure?"
  if(confirm(confirm_text)) {
    $.get($(this).attr('href'))
    $(this).closest("div.twitter-user").remove();
  }
  return false;
  });

  prepare_buy_credits();

  $('a#no-key-mc').live('click', function(e) {
  e.preventDefault();
  $('div#mailchimp-login').show();
  $('div#mailchimp-key').hide();
  });
  $('a#key-mc').live('click', function(e) {
  e.preventDefault();
  $('div#mailchimp-login').hide();
  $('div#mailchimp-key').show();
  });
  $('a#discount-code').click(function(e){
  e.preventDefault();
  $(this).fadeOut('fast', function() {
    $("p#discount-entry").fadeIn('fast');
  });

  })
  //tab management
  $('ul.jtabs li>a').click(function(e) {
    e.preventDefault();
    $('li.selected-tab').removeClass('selected-tab')
    $('div.tab-content').hide()
    $(this).parent('li').addClass('selected-tab')
    if( this.href.split("#")[1] == 'thirdparty' ){
      $("#content-wrap").addClass('third-party-wrap');// .css('background-color','#fff');
      //    $("#content-wrap").css('background-color','#fff');
    }else{
      $("#content-wrap").removeClass('third-party-wrap');
      // $("#content-wrap").css('background-color','');
    }
    $("div#" + this.href.split("#")[1] + "-import-tab").show()
    $('input[type="hidden"]#import_type_' + this.href.split("#")[1]).val(this.href.split("#")[1])
  })
  $('ul.nibs li>a').click(function(e) {
  e.preventDefault();
  
  $('li.selected-nib').removeClass('selected-nib')
  $('div.nib-content').hide()
  $(this).parent('li').addClass('selected-nib')
  $("div#" + this.href.split("#")[1] + "-import-nib").show()
  $('input[type="hidden"]#import_type_' + this.href.split("#")[1]).val(this.href.split("#")[1])
  })


  if($('div.tab-content').length > 0 && window.location.hash != '')
  	$('a[href="' + window.location.hash + '"]').trigger('click');
  else if($('div.tab-content').length > 0 && $("input[name='import[import_type]']").val() != "")
    $('a[href="#' + $("input[name='import[import_type]']").val() + '"]').trigger('click');

  $('a.sortable').live('click', function() {
  sLoad();
  var container = $("table#contact-listing");
  var group_id = current_group ? current_group : ''
  var order = ''
  if($(this).hasClass('sorted-up'))
    order = "down"
  else if($(this).hasClass('sorted-down'))
    order = "up"
  else
    order = "down"

  $.get('/contacts', {sort: $(this).attr('id'), group_id: group_id, order: order, search_terms:search}, function(result){
    container.html(result);
    handle_trash();
    hLoad();
  })
  return false;
  })

  $("span#active-pagination a").live('click', function(){
  var container = $("table.in-progress");
  $.get($(this).attr('href'), function(result){
    container.replaceWith(result)
    bindGroupLinks();prepare_links();
  })
  return false;
  });
  
  $("span#inactive-pagination a").live('click', function(){
  var container = $("table.completed");
  $.get($(this).attr('href'), function(result){
    container.replaceWith(result)
    bindGroupLinks();prepare_links();
  })
  return false;
  });
  
  $(".twitter-search .pagination a").live('click', function() {
  sLoad();
  $(".twitter-search").load($(this).attr("href"), function() { hLoad() });
  return false;
  })
  $('.pagination a').live('click', function() {
  sLoad();
  if($(this).parents("div#groups").length > 0){
    var container = $("#dashboard_groups")
    $.get($(this).attr('href'), function(result){
    container.html(result)
    handle_group_menu();
    hLoad();
    bindGroupLinks();prepare_links();
    })
  }
  if($(this).parents("table#contact-listing").length > 0){
    var container = $("table#contact-listing")
    $.get($(this).attr('href'), function(result){
    container.html(result);
    handle_trash();
    hLoad();
    bindGroupLinks();prepare_links();
    })
  }
  return false
  })
  
  bindGroupLinks();
  
  $("a#seek-insight").click(function(e) {
  if (loading) return false;
  loading = true;
  e.preventDefault();
  sLoad();
  reset_search();
  $(this).addClass('default');
  $("#show-table").removeClass('default');
  $('#add_delete .buttons').fadeOut();
  
  $.get($(this).attr('href'), function(result){
    $("table#contact-listing").html(result);
    $("#contacts-search #selections").hide();
    loading = false;
    hLoad();
  })
  })

  $("a#show-table").click(function(e) {
    if (loading) return false;
    loading = true;
    e.preventDefault();
    sLoad();
    $(this).addClass('default');
    $("#seek-insight").removeClass('default');
  
    $.get($(this).attr('href'), function(result){
      $("table#contact-listing").html(result);
      $('#add_delete .buttons').show();
      $("#bulk-delete").show();
      $("#contacts-search #selections").show();
      loading = false;
      hLoad();
      prepare_links();
    })
  })

  // view/close links on a campaign chore
  $(".edit-view a").live('click',function(e){
    e.preventDefault();
    $(this).parents('.chore').find("div.edit-view").hide();
    $(this).parents('.chore').find("div.edit").show();
  });

  $(".close-msg").live('click',function(e){
  e.preventDefault();
  var chore = $(this).parents('div.chore');
  
  //check values and update closed view
  //update title
  var new_title = '"'+chore.find("input[name*='[name]']").attr('value')+'"';
  chore.find("span.title").html( new_title );
  //update chore type
  if( chore.find(".sm-scope-chk").is(':checked') ){
    chore.find(".chore-type").removeClass().addClass("chore-type "+chore.find(".network-focus").val());
    chore.find(".chore-type").html("To "+chore.find(".network-focus option:selected").text()+" users");
  }else{
    chore.find(".chore-type").removeClass().addClass("chore-type");
    chore.find(".chore-type").html("To everyone");
  }
  //update day
  if (updateDay)
    chore.find('span.minimized-interval').html("Day " + chore.find('input.interval-input').val());
  
  chore.find("div.edit-view").show();
  chore.find("div.edit").hide();
  });

  // Search contacts
  $('#expand-contacts-search').live('click', function() {
  $('div#contacts-search-collapsed').hide();
  $('div#contacts-search').show();
  return false;
  })

  $('#collapse-contacts-search').live('click', function() {
  $('div#contacts-search').hide();
  $('div#contacts-search-collapsed').show();
  return false;
  })
  
  $('form#quick-search').submit(function(e) {
    e.preventDefault();
    sLoad();
    var container = $("table#contact-listing");

    $.get('/contacts/search_contacts', {search_terms: $('div#search input#search_terms').val()}, function(result){
      hLoad();
      $("#bulk-delete").show();
      $("#add_delete .buttons").show();
      $("#contacts-search #selections").show();
      container.html(result);
      prepare_links();
      //handle_trash();
    })
    return false;
  })
  
  $('div#search-results-summary a#create-group').live('click', function() {
  var $dialog = $('<div></div>').html('Enter a name for the group.<br/><input id="group_name_for_results" type="text" value="" name="group[name]" style="margin:10px 10px 0 0; width:270px;"/>').dialog(
    { buttons:{
      // "Cancel": function(){ $(this).dialog("close") },
      "Create Group": function(){
      sLoad();
      var f = document.createElement('form');
      f.style.display = 'none';
      this.parentNode.appendChild(f);
      f.method = 'POST';
      f.action = '/groups';
      var gn = document.createElement('input');
      gn.setAttribute('type', 'hidden');
      gn.setAttribute('name', 'group[name]');
      gn.setAttribute('value', $('#group_name_for_results').val());
      f.appendChild(gn);
      var gs = document.createElement('input');
      gs.setAttribute('type', 'hidden');
      gs.setAttribute('name', 'search_ids');
      gs.setAttribute('value', search_results_ids.join(","));
      f.appendChild(gs);
      var m = document.createElement('input');
      m.setAttribute('type', 'hidden');
      m.setAttribute('name', '_method');
      m.setAttribute('value', 'post');
      f.appendChild(m);
      var s = document.createElement('input');
      s.setAttribute('type', 'hidden');
      s.setAttribute('name', 'authenticity_token');
      s.setAttribute('value', FORM_AUTH_TOKEN);
      f.appendChild(s);
      f.submit();}
    },
    open: function(){
      // grr, defocus auto-default button
      $(this).parent().find('.ui-dialog-buttonpane .ui-state-focus').removeClass('ui-state-focus');
      $(this).parent().find('.ui-dialog-titlebar .ui-dialog-titlebar-close').focus();
    },
    autoOpen:false,
    title:'Create Group',
    width: 300,
    modal:true });
  $dialog.id = 'create_grpup_dialog';

  $dialog.dialog('open');
  return false;
  })


  handle_trash();
  handle_group_menu();
})

function sLoad(){
  $("#gload").animate({marginBottom:'40'},300);
}
function hLoad(){
  $("#gload").animate({marginBottom:'-100'},300);
}

function bindGroupLinks() {
  $('a.group-insight').live('click', function() {
  sLoad();
  reset_search();
  $("a#seek-insight").addClass('default');
  $("a#show-table").removeClass('default');
  $(".contact-group-selected").removeClass('contact-group-selected');
  $(this).parents(".contact-group").addClass('contact-group-selected');
  var gid = $(this).attr('href').match(/group_id=(\d+)/)[1];
  current_group = gid
  removal_group_id = gid;
  var insight_url = $("a#seek-insight").attr("href").replace(/\?group_id=\d+/, '') + '?group_id=' + gid;
  var table_url = $("a#show-table").attr("href").replace(/\/contacts.*/, '') + '/contacts/' + '?group_id=' + gid;
  $("a#seek-insight").attr("href", insight_url);
  $("a#show-table").attr("href", table_url);
  $.get($(this).attr('href'), function(result){
    $("table#contact-listing").html(result);
    $("#bulk-delete").removeClass("bulk-delete").addClass("bulk-remove").html("Remove").hide();
    $("#add_delete .buttons").hide();
    $("#contacts-search #selections").hide();
    hLoad();
  });
  return false;
  })
}

function handle_trash() {
  $("table#contact-listing .tcontact").hover(function() {
  $(this).find('td.zoom > a.trash-delete').show();
  },
  function() {
  $(this).find('td.zoom > a.trash-delete').hide();
  })
}

function handle_group_menu() {
  $('.group').each(function() {
    var container = $(this);
    var graphic = container.find('.view-menu');
    // Bind the context menu to appear when the hovered graphic is clicked
    var context_menu = graphic.next('.contextMenu');
    graphic.contextMenu(
      { menu: context_menu.attr('id'), leftButton: true },
      function(action, el, pos) {
        group_id = el.attr('id').split("_")[2];
        if (action.match(/export|form|twitter_list|twitter_follow/)) {
          window.location.href = "/groups/" + group_id + "/" + action;
        } else if (action == 'configure_notifications') {
          window.location.href = "/groups/" + group_id + "/notification/new";
        } else if (action == 'delete') {
          var answer = confirm("Are you sure you want to delete this group? (this will only remove the group without deleting any contacts)");
          if(answer) 
            window.location.href = "/groups/" + group_id + "/remove";
        } else if (action == 'rename') {
          // Stop the hover context menu graphic
          container.unbind('mouseenter mouseleave');
          $('#group_' + group_id).trigger("edit");;
        }
        return false;
      }
  );

  // Jeditable isn't really set up to handle editing from another link.
  // We can set up a new event 'edit' and trigger that instead of the usual
  // click event.
  // We want to Because the text being replaced is a link
  var title = container.find(".contact-group");
  if(title.length == 0) { return; }
  var group_id = title.attr('id').split("_")[1]
  var inner_link = title.find('a');
  title.editable("/groups/" + group_id, { 
    event : "edit", 
    name  : "group[name]",
    // we don't care what the element's ID is, and the default param 'id'
    // clashes with rails, so change it to something else
    id  : 'unicorns',
    submit: 'Save',
    cancel: 'Cancel',
    method: 'PUT',
    onblur: 'ignore',
    indicator: 'Saving <img src="/images/small-ajax-loader.gif" />',
    data: inner_link.text(),
    submitdata: {
    authenticity_token: FORM_AUTH_TOKEN
    },
    onreset: function() {
    container.hover(hover_in, hover_out);
    },
    callback: function(value, settings) {
    inner_link.text(value);
    $(this).html(inner_link);
    container.hover(hover_in, hover_out);
    }
  })
  }); 

  return false;
}

function update_import_progress(group_id) {
  var group = $("div#group_" + group_id)
  $.ajax({
  url: '/groups/' + group_id + '/imported_contacts.json', 
  dataType: 'json',
  success: function(result, status, request){
  $("tr.tcontact").remove();
  $(result.html).appendTo("table#contact-listing");
  if(result.status == 200) {
    group.parents(".group").find(".contact-count").html(result.group_count);
    $('#all_contacts .group-contact-count').html(result.all_count);
  } else if(result.status == 203) { 
    group.siblings("img.processing-indicator").remove();
    clearInterval(refreshInterval);
    // Insert CTA if limit is hit
    if(result.cta != '' && $('div.contacts-cta').length == 0) {
    $('#contacts-header').after(result.cta);
    }
    prepare_buy_credits();
  }
  prepare_links();  
  prepare_buy_credits();
  }
  })
}

function prepare_buy_credits() {
  $(".dialog").dialog({
    bgiframe: true,
    autoOpen: false,
    height: 340,
    width: 500,
    modal: true,
    buttons: {
       Cancel: function() {
      $(this).dialog('close');
     },
    'Process Import': function() {
      var container = $(this)
        var form = $(this).children('form');
        var valid = true
        form.find('input:not(:hidden)').each(function(i, v){
           if($(v).attr('name').match(/card_number|cvv/)) {
           number = $(v).val()
           if(!number.match(/[0-9]/))
             valid = false;
           }
        });
        if(valid) {
          $("p#validation-tips").html("");
          //$("#process-purchase").dialog('open');
          $('.ui-dialog-titlebar-close').hide();
          var button_pane =  $("div.ui-dialog-buttonpane")
          button_pane.find('button').hide();
          $("div#process-purchase").clone().prependTo(button_pane)
          $.post(form.attr('action'), form.serialize(), function(response) {
             button_pane.find("div#process-purchase").remove();
             button_pane.find('button').show();

           if(response['result'] == 'pass') {
             $(".contacts-cta").remove();
             $("#dialog-buy").dialog('close');
             $("#response").dialog('open');
             $("#response").html(response["message"]);
             pageTracker._trackPageview('/new-payg');
             } else {
             $("p#validation-tips").html(response["message"])
             }
             $('.ui-dialog-titlebar-close').show();
           return
          },"json");
         } else {
          $("p#validation-tips").html("Invalid credit card information.");
          return;
         }
       }
      },
      beforeclose: function() {
        form = $(this).children('form');
        if(form.length > 0)
          $(this).children('form')[0].reset();
        $("p#validation-tips").html("");
      }
  });
  $("#cvv").dialog({
  bgiframe: true,
  autoOpen: false,
  height: 225,
  width: 375,
  modal: true
  });

  $("#response").dialog({
  bgiframe: true,
  autoOpen: false,
  height: 225,
  width: 400,
  modal: true,
  buttons: {
   Close: function() {
    $(this).dialog('close');
    location.reload(true);
   }
  }
  });

  $("#process-purchase").dialog({
  bgiframe: true,
  autoOpen: false,
  height: 25,
  width: 300,
  modal: true
  });
  


  $('#show-cvv').live('click', function(e) {
    e.preventDefault();
    $('#cvv').dialog('open');
  });
  $("a#cancel-imports").click(function(e) {
    e.preventDefault();
    $.get($(this).attr('href'));
    $('div.contacts-cta').fadeOut();
  });

  $("a#send-custom-campaign").live('click', function(e) {
    e.preventDefault();
    $("div#custom-campaign").slideDown();
  });
  
  $("a#cancel-campaign").live('click', function(e) {
    e.preventDefault();
    $("div#custom-campaign").slideUp();
  });
  
  $("#send-custom-campaign").livequery('click', function(e) {
    e.preventDefault();
    sLoad();
    var form = $("form#custom-campaign-ids")
    $.post(form.attr("action"), form.serialize(), function(response) {
      if(response.errors) { 
        alert(response.errors)
      } else { location.href = (response); }
    });
  })

}

function prepare_links() {
  $("#contact-listing .tcontact").click(function(e){
     if( $(e.target).is("[type=checkbox]") ){
       // nothing
     }else{
       location.href = $(this).attr('ftcurl');
     }
   });
   setup_row_hover();
}

function setup_row_hover(){
  $("tr.tcontact").hover(
    function(){$(this).find("td.influence").css("background", "url('/images/view_menu-big-rotated.png') no-repeat 93% 50%");},
    function(){$(this).find("td.influence").css("background", "none");}
  );
}
