function editTableName(){

$('body').unbind('click');
$('.table-title').on('dblclick',null,null,setupTableNameForm);

}

function setupTableNameForm(event) {

if (openEditChecker()) { return };
let originalTitle = this.innerText;
$(this).popover('hide');
let cardID = $(this).parents('.card')[0].id;
this.outerHTML = tableTitleFormHTML(this.innerText);
addEditTableNameListeners(originalTitle, cardID);

}

function addEditTableNameListeners(originalTitle, cardID) {

$('.table-form').on('keypress', null, { originalTitle: originalTitle,
  cardID: cardID
}, titleKeypressListener);
$('body').on('click', null, { originalTitle: originalTitle,
  cardID: cardID,
  count: 0
}, titleBodyClickListener);

}

function titleKeypressListener(e) {

var key = e.which;
if(key == 13) {
  titleUpdate(e)
  return false;
}

}

function titleBodyClickListener(e) {

if(!$(event.target).is('.table-form') && e.data.count >= 1 ) {
  titleUpdate(e);
}
e.data.count++;

}

function titleUpdate(e) {

let schema = getSchema();
let newTableName = $('.table-form')[0].value;
let cards = $('.card');
for (var i = 0; i < cards.length; i++) {
  if ($(cards[i]).find('form').length === 0) {
    let tableName = $(cards[i]).find('h4.table-title').text().trim()
    if (tableName === newTableName) {
      $('.table-form')[0].parentElement.outerHTML = tableTitleHTML(e.data.originalTitle);
      editTableName();
      setSchema(schema);
      return
      // Should produce an error here
    }
  }
}
$('.table-form')[0].parentElement.outerHTML = tableTitleHTML(newTableName);
$('[data-toggle="popover"]').popover();
let tableID = e.data.cardID;
updateRefs(schema[tableID],schema,newTableName)
if (e.data.originalTitle !== newTableName) {
  schema[tableID].name = newTableName;
  checkTitleStatus(tableID,schema);
}
editTableName();
setSchema(schema);

}

function updateRefs(table,schema,newTableName) {

let refs = $("li[id^='ref-']");
for (var i = 0; i < refs.length; i++) {
  let refName = $(refs[i]).find('span.column-title').text().split('_');
  refName.pop();
  refName = refName.join('_');
  if (refName === table.name) {
    $(refs[i]).find('span.column-title').text(`${newTableName}_id`);
    let refID = refs[i].id;
    let tableID = `tbl-${refID.split('-')[1]}`;
    let refObj = schema[tableID].references[refID];
    refObj.foreign_table_name = newTableName;
    if (!refObj.status.new) {
      refObj.status.modified = true;
    }
  }
}

}

function tableTitleHTML(tableName) {

return "<h4 class='card-title table-title' data-toggle='popover' data-trigger='hover' data-content='Edit table name'>" +
  tableName +
"</h4>";

}

function tableTitleFormHTML(priorText) {

return `<form><input class='table-form' type='text' name='tableName' value='${priorText}'></form>`;

}

function checkTitleStatus(cardID,schema) {

if (schema[cardID].status.new === false) {
  updateTitleStatus(cardID,schema);
}

}

function updateTitleStatus(cardID,schema) {

if (schema[cardID].name === schema[cardID].original_name) {
  schema[cardID].status.modified = false;
} else {
  schema[cardID].status.modified = true;
}

}