// evitar voltar varias vezes em paginas de listagem quando ao excluir recarega a pagina
window.setCookie = function(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  var expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return '';
}

function clearHistory() {
  myHistory = {};
  historyLength = Object.keys(myHistory).length;
}

function addHistory(index) {
  myHistory[index] = {};
  myHistory[index].url = window.location.href;
  myHistory[index].route = route;
}

if (getCookie('history')) {
  var myHistory = JSON.parse(getCookie('history'));
} else {
  var myHistory = {}
}
var historyLength = Object.keys(myHistory).length;

if (getCookie('noadd')) {
  // caso o usuário esteja voltando
  window.setCookie('noadd', '', 1);
  delete myHistory[Object.keys(myHistory).length - 1];
  window.setCookie('history', JSON.stringify(myHistory), 1);
} else {
  // rotas onde a origem será sobrescrita pelo destino, evitando que o usuário passe por esta página ao voltar
  var excludedRoutes = {
    0: {
      origin: 'account/register',
      destiny: 'account/account'
    }
  }
  var overwrite = false;
  for (var key in excludedRoutes) {
    if (excludedRoutes.hasOwnProperty(key)) {
      if (typeof myHistory[historyLength - 1] != 'undefined' && excludedRoutes[key].origin == myHistory[historyLength - 1].route && excludedRoutes[key].destiny == route) {
        overwrite = true;
      }
    }
  }
  if (route == 'checkout/success') {
    clearHistory();
  } else if (historyLength == 0 || route == 'common/home') {
    clearHistory();
    addHistory(historyLength);
  } else if (overwrite) {
    // sobrescreve no historico caso esteja no array excludedRoutes
    addHistory(historyLength - 1);
  } else if (route == 'product/product') {
    // o cookie overwrite e setado como true quando é alterada uma caracteristica do produto com grade na página do produto

    if (getCookie('overwrite')) {
      window.setCookie('overwrite', '', 1);
      // sobrescreve a url anterior
      addHistory(historyLength - 1);
    } else {
      addHistory(historyLength);
    }
  } else {
    if (route != myHistory[historyLength - 1].route) {
      addHistory(historyLength);
    }
  }

  window.setCookie('history', JSON.stringify(myHistory), 1);
}

// inibe o comportamento padrao do botao voltar do navegador menos na account/return/insert senao fode!
if (route != 'account/return/insert'){
  history.pushState({}, null, window.location.href);
}

// impede que de erro de função indefinida, esta função vazia será sobrescrita por outra posteriormente
window.displayStep = function($step) {}

//=== Função que controla o botão voltar, tanto nas steps quanto nas páginas ===
window.onpopstate = function (event) {
  if ((route == 'account/register' || route == 'checkout/checkout') && window.location.href.indexOf('#login') > -1) {
    // login
    $('#form-register.ftr-steps').css({ left: '100vw' });
    $('.ftr-steps.ftr-checkout-steps').css({ left: '0vw' });
  } else if ((route == 'account/register' || route == 'checkout/checkout') && window.location.href.indexOf('#') > -1) {
    // steps
    displayStep($(window.location.href.slice(window.location.href.indexOf('#'), window.location.href.length)));
  } else {
    // não repetir as paginas ao voltar
    if (!event.state) {
      // inibe o comportamento padrao do botao voltar do navegador (caso o usuário clique varias vezes)
      history.pushState({}, document.title, window.location.href);

      if (typeof myHistory[Object.keys(myHistory).length - 2] != 'undefined' && myHistory[Object.keys(myHistory).length - 2].url != 'undefined') {
        // desabilitar o botao de voltar do navegador
        window.setCookie('noadd', true, 1);
        window.location.href = myHistory[Object.keys(myHistory).length - 2].url;
      } else if (route != 'common/home') {
        // volta para a home quando não tem mais url pra voltar e a página atual não for a home
        window.location.href = window.location.protocol + '//' + window.location.host + window.location.pathname + '?route=common/home';
      }
      return;
    }
  }

}