var defFontSize = 20;
const CHAR_ACENTOS = "\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD9\\xDA\\xDB\\xDC\\xE0\\xE1\\xE2\\xE3\\xE4\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF9\\xFA\\xFB\\xFC";
const CHAR_ESPECIAIS = "\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\072\\073\\074\\075\\076\\077\\100\\123\\124\\125\\126";
const CHAR_ESPACO = "\\040";
const CHAR_LETRAS_NUMEROS = "\\w";
const CHAR_NOVA_LINHA     = "\\012";

const REGEX_EMAIL     = new RegExp("^[\\w\\.=-]+@[\\w\\.-]+\\.[\\w\\.-]{2,4}$", "g");
const REGEX_NOT_TEXT  = new RegExp("[^" + CHAR_LETRAS_NUMEROS + CHAR_NOVA_LINHA +
                                      CHAR_ESPECIAIS + CHAR_ESPACO + 
                                      CHAR_ACENTOS + "]", "g");
const REGEX_NOT_NOME_PROPRIO  = new RegExp("[^" + CHAR_LETRAS_NUMEROS + CHAR_ESPACO +
                                           CHAR_ACENTOS + "\\.\\-\\']", "g");
const REGEX_ESPACOS_MULTIPLOS = new RegExp(CHAR_ESPACO + "{2,}", "g");
const REGEX_LINHAS_MULTIPLAS  = new RegExp(CHAR_NOVA_LINHA + "{4,}", "g");

function getXmlHttpRequest()
{
  var httpRequest = null;
  try
  {
    httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
      httpRequest = null;
    }
  }

  if (!httpRequest && typeof XMLHttpRequest != "undefined")
  {
    httpRequest = new XMLHttpRequest();
  }

  return httpRequest;
}


function fMeiu(u, div, d) {
  if((div = document.getElementById(div)) != null) {
    var v = '@';
    var link = document.createElement('a');
    link.setAttribute('href','ma' + 'ilt' + 'o:' + u + v + d);
    link.innerHTML = u + v + d;
    div.appendChild(link);
  }
}

function fillDiv(divName, value) {
  var div;
  if((div = document.getElementById(divName)) == null) return 0;
  div.innerHTML = value;
  return value;
}

function toggle_enable(obj) { 
  if(obj == null) return 0;

  if(obj.disabled == "true" || obj.disabled == true) {
    obj.disabled = false;
  } else {
    obj.disabled = true;
  }
}

function setValue(obj, value) {
  if(obj == null || value == null) return 0;

  obj.value = value;
}

function toggle_visibility(divName, status) {
  if(divName == null || (divObj = document.getElementById(divName)) == null) return false;
  if(status == true) {
    divObj.style.visibility = 'visible';
    divObj.style.display = 'block';
  } else if(status == false) {
    divObj.style.visibility = 'hidden';
    divObj.style.display = 'none';
  } else if(status == null) {
    if(divObj.style.visibility == '' || divObj.style.visibility == 'hidden') {
      divObj.style.visibility = 'visible';
      divObj.style.display = 'block';
    } else {
      divObj.style.visibility = 'hidden';
      divObj.style.display = 'none';
    }
  }
  return true;
}

function getCookie(c_name) {
  if (document.cookie.length>0) { 
    c_start=document.cookie.indexOf(c_name + "=");
    if (c_start!=-1) {
      c_start=c_start + c_name.length+1;
      c_end=document.cookie.indexOf(";",c_start);
      if (c_end==-1) c_end=document.cookie.length;
      return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  return "";
}

function setCookie(c_name,value,path,expiredays) {
  var exdate = new Date();
  exdate.setDate(exdate.getDate() + expiredays);
  document.cookie = c_name + "=" + escape(value) +
    ";path=" + (path == null ? "/" : path) +
    ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());
}

function formSetCookie(elemID) {
  var elem;
  if(elemID == null || elemID == "") return null;
  if(!(elem = document.getElementById(elemID))) return null;

  setCookie(elemID, elem.value, null, 10000);
  return elem.value;
}

function mostraOptsUsuario() {
  var divCfgs;
  if((divCfgs = document.getElementById('divOptsUsuario')) == null) return null;
  toggle_visibility('divOptsUsuario');
  divCfgs.style.top = this.offsetTop + 20;
  divCfgs.style.right = document.body.offsetWidth - this.offsetLeft + 20;
}

function salvarUserPrefs() {
  var divStatus;
  if((divStatus = document.getElementById('statusDivOptsUsuario')) != null ) {
    divStatus.innerHTML = '';
    document.body.style.fontSize = document.getElementById('txtFS').value || defFontSize;;
    if(document.getElementById('txtFS').value == "") { document.getElementById('txtFS').value = defFontSize; }
    setCookie('FS', document.getElementById('txtFS').value, null, 10000);
    if(document.getElementById('frmOptsChkNP').checked == true) {
      setCookie('npc', 1, null, 10000);
    } else {
      if(getCookie('npc') != "") { 
        setCookie('npc', 0, null, -1);
      }
    }
    setTimeout("fillDiv('statusDivOptsUsuario', 'Salvo!');", 400);
  }
}

function jsPrefs() {
  var imgOptUsuario;
  var lnkFecharDivOptsUsuario;
  var btnUserPrefsSalvar;
  var fontSize;
  if((imgOptUsuario = document.getElementById('imgOptUsuario')) != null) {
    imgOptUsuario.onclick = mostraOptsUsuario;
  }
  if((lnkFecharDivOptsUsuario = document.getElementById('lnkFecharDivOptsUsuario')) != null) {
    lnkFecharDivOptsUsuario.onclick = function() { toggle_visibility('divOptsUsuario'); }
  }
  if((btnUserPrefsSalvar = document.getElementById('btnUserPrefsSalvar')) != null) {
    btnUserPrefsSalvar.onclick = salvarUserPrefs;
  }
  if((FontSize = getCookie('FS')) != "") {
    document.body.style.fontSize = FontSize + "px";
    document.getElementById('txtFS').value = FontSize;
  } else {
    document.getElementById('txtFS').value = defFontSize;
  }
  if(getCookie('npc') != "") {
    document.getElementById('frmOptsChkNP').checked = true;
  } else {
    document.getElementById('frmOptsChkNP').checked = false;
  }
}

function setFont() {
  if(typeof window.innerWidth == 'undefined') return null;

  if(window.innerWidth < 1200) {
    document.body.style.fontSize = '14px';
  } else {
    document.body.style.fontSize = '16px';
  }
}

function encodeFormValues(form) {
  if(form == null) return false;

  var formVars = new Array();
  var data = "";

  for (var i = 0; i < form.elements.length; i++) {
    var formElement = form.elements[i];

    if(formElement.type=='checkbox' && !formElement.checked) {
      continue;
    }

    data += (data != "") ? '&' : '';
    data += encodeURIComponent(formElement.name) + '=' + encodeURIComponent(formElement.value);
  }

  return data;
} 

function validaFormContato(form) {
  if(form == null) return false;
  var err = 0;
  var errmsg = "Por favor preencha corretamente:\n";
  if(form['nome'].value == "") {
    err += 1;
    errmsg += "   * o seu nome\n";
  }
  if(form['email'].value == "") {
    err += 1;
    errmsg += "   * o seu email\n";
  }
  if(form['mensagem'].value == "") {
    err += 1;
    errmsg += "   * a mensagem"
  }
  
  if(err > 0) {
    alert(errmsg);
    form['submit'].disabled = false;
    return false;
  }

  if(!(form['email'].value.match(REGEX_EMAIL))) {
    alert("Erro. Verifique se o seu endereço de e-mail foi digitado corretamente.");
    return false;
  }

  return true;
}

function sanitizeText(text) {
  if(typeof text.value != "undefined") {
    valor = text.value;
  } else {
    valor = text;
  }

  valor = valor.replace(REGEX_LINHAS_MULTIPLAS, "\n\n");
  valor = valor.replace(REGEX_ESPACOS_MULTIPLOS, " ");
  valor = valor.replace(REGEX_NOT_TEXT, "");

  return valor;
}

function recebeContato(form) {
  if(!validaFormContato(form)) {
    return false;
  }

  form['submit'].disabled = true;
  form['token'].value = "";
  toggle_visibility('frmContatoDivErro', false);
  toggle_visibility('frmContatoDivSucesso', false);

  fillDiv('frmContatoSpanNome', form['nome'].value);
  fillDiv('frmContatoSpanNome_err', form['nome'].value);

  var xmlReq = getXmlHttpRequest();

  xmlReq.open("POST", form.action, false); // sincrono
  xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  // xmlReq.setRequestHeader("Content-length", params.length);
  xmlReq.send('rm=token_contato');

  if(xmlReq.status == 200) {
    form['token'].value = xmlReq.responseText;
  } else {
    toggle_visibility('frmContatoDivErro', true);
    toggle_visibility('frmContatoDivSucesso', false);
    form['submit'].disabled = false;
    return false;
  }

  xmlReq = getXmlHttpRequest();
  xmlReq.open("POST", form.action, false);
  xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlReq.send(encodeFormValues(form));
  if(xmlReq.status == 200) {
    toggle_visibility('frmContatoDivSucesso', true);
    toggle_visibility('frmContatoDivErro', false);
  } else {
    toggle_visibility('frmContatoDivErro', true);
    toggle_visibility('frmContatoDivSucesso', false);
  }

  form['submit'].disabled = false;
  return false;

}

function init() {
  // jsPrefs();
  setFont();
  var form;
  if(form = document.forms['form_contato']) {
    form['nome'].disabled     = false;
    form['email'].disabled    = false;
    form['mensagem'].disabled = false;
    form['mensagem'].value    = "";
    form['submit'].disabled   = false;

    form.onsubmit = function() { return recebeContato(form); }
    form['nome'].onkeyup     = function () { 
      this.value = this.value.replace(REGEX_NOT_NOME_PROPRIO, "");
      this.value = sanitizeText(this);
    } 
    form['mensagem'].onkeyup = function () { this.value = sanitizeText(this); } 
  }
}

window.onload=init;
