var ctrlDown, shiftDown = false;
var ctrlKey = 17;
var shiftKey = 16;
var selected = [];

$(function() {
  $(document).keydown(function(e) {
    if (e.keyCode == ctrlKey) ctrlDown = true;
    if (e.keyCode == shiftKey) shiftDown = true;
  }).keyup(function(e) {
    if (e.keyCode == ctrlKey) ctrlDown = false;
    if (e.keyCode == shiftKey) shiftDown = false;
  });

  $('.node-list-table tbody').find('tr').mousedown(function() {
    var retval = true;
    if (ctrlDown) {
      setRowColor($(this));
      if(!$(this).hasClass('node-list-selected')) {
        selected.splice(selected.indexOf($(this).index()), 1);
      } else {
        selected.push($(this).index());
      }
      retval = false;
    } else if(shiftDown) {
      if(selected.length > 0) {
        start = selected[selected.length - 1] + 1;
        end = $(this).index();

        if(start > end) {
          var tmp = start - 1; start = end; end = tmp - 1;
        }

        for(var i = start; i <= end; i++) {
          if(selected.indexOf(i) < 0) {
            selected.push(i);
            setRowColor($('.node-list-table tbody tr').eq(i));
            }
        }
      }
      retval = false;
    } else {
      $('.node-list-selected').removeClass('node-list-selected');
      $(this).addClass('node-list-selected');
      selected = [$(this).index()];
    }

    // reset btn disables
    $('.node-list-table tbody tr .btn').attr('disabled', false);
    // show/hide group controls
    if(selected.length > 1) {
      $('.node-list-group-control a').attr('disabled', false);
      for(var i = 0; i < selected.length; i++) {
        $('.node-list-table tbody tr').eq(selected[i]).find('.btn').attr('disabled', true);
      }
    } else {
      $('.node-list-group-control a').attr('disabled', true);
    }
    return retval;
  });

  $('#node-list-group-migrate').click(function() {
    console.log(collectIds(selected));
  });

  $(document).ready( function()
  {
    colortable();
    $('.node-list-details').popover(
    {
      placement : 'auto',
      html : true,
      trigger : 'click',
    });
  });
	

  $('tbody a').mousedown(function(e) {
    // parent tr doesn't get selected when clicked
    e.stopPropagation();
    });

  $('tbody a').click(function(e) {
    // browser doesn't jump to top when clicked the buttons
      
      if(!$(this).hasClass('real-link')) {
      return false;
    }
  });

  // find disabled nodes, set danger (red) on the rows
  function colortable() 
  {
	var tr= $('.false').closest("tr");
	tr.addClass('danger');
	var tr= $('.true').closest("tr");
	tr.removeClass('danger');
  }

  /* rename */
  $("#node-list-rename-button, .node-details-rename-button").click(function() {
    $("#node-list-column-name", $(this).closest("tr")).hide();
    $("#node-list-rename", $(this).closest("tr")).css('display', 'inline');
  });

  /* rename ajax */
  $('.node-list-rename-submit').click(function() {
    var row = $(this).closest("tr")
    var name = $('#node-list-rename-name', row).val();
    var url = '/dashboard/node/' + row.children("td:first-child").text().replace(" ", "") + '/';
    $.ajax({
      method: 'POST',
      url: url,
      data: {'new_name': name},
      headers: {"X-CSRFToken": getCookie('csrftoken')},
      success: function(data, textStatus, xhr) {
        
        $("#node-list-column-name", row).html(
          $("<a/>", {
            'class': "real-link",
            href: "/dashboard/node/" + data['node_pk'] + "/",
            text: data['new_name']
          })
        ).show();
        $('#node-list-rename', row).hide();
        // addMessage(data['message'], "success");
      },
      error: function(xhr, textStatus, error) {
	 addMessage("Error during renaming!", "danger");
      }
    });
    return false;
  });

  function statuschangeSuccess(tr){
   var tspan=tr.children('.enabled').children();
    var buttons=tr.children('.actions').children('.btn-group').children('.dropdown-menu').children('li').children('.node-enable');
 
    buttons.each(function(index){
      if ($(this).css("display")=="block"){
          $(this).css("display","none");
        }
      else{
         $(this).css("display","block");
        }
    }); 
    if(tspan.hasClass("false")){
          tspan.removeClass("false");
	  tspan.addClass("true");
 	  tspan.text("✔");
      } 
  else{
  	  tspan.removeClass("true");
	  tspan.addClass("false");
	  tspan.text("✘");
      }
  	  colortable();
  }


  $('#table_container').on('click','.node-enable',function() {
    var tr= $(this).closest("tr");
    var pk =$(this).attr('data-node-pk');
    var url = $(this).attr('href');
    $.ajax({
      method: 'POST',
      url: url,
      data: {'change_status':''},
      headers: {"X-CSRFToken": getCookie('csrftoken')},
      success: function(data, textStatus, xhr) {
      statuschangeSuccess(tr);
      },
      error: function(xhr, textStatus, error) {
        addMessage("Error!", "danger");
      }
    });
    return false;
  });

  /* group actions */

  /* select all */
  $('#node-list-group-select-all').click(function() {
    $('.node-list-table tbody tr').each(function() {
      var index = $(this).index();
      if(selected.indexOf(index) < 0) {
        selected.push(index);
        $(this).addClass('node-list-selected');
      }
    });
    if(selected.length > 0)
      $('.node-list-group-control a').attr('disabled', false);
    return false;
  });

  /* mass vm delete */
  $('#node-list-group-delete').click(function() {
    addModalConfirmation(massDeleteVm,
      {
        'url': '/dashboard/node/mass-delete/',
        'data': {
          'selected': selected,
          'v': collectIds(selected)
        }
      }
    );
    return false;
  });
});

function collectIds(rows) {
  var ids = [];
  for(var i = 0; i < rows.length; i++) {
    var div = $('td:first-child div', $('.node-list-table tbody tr').eq(rows[i]));
    ids.push(div.prop('id').replace('node-', ''));
  }
  return ids;  
}

function setRowColor(row) {
  if(!row.hasClass('node-list-selected')) {
    row.addClass('node-list-selected');
  } else {
    row.removeClass('node-list-selected');
  }
}