﻿// Captura erros não monitorados e os envia para a função AnalyzingErrors. Para ocultar estas notificações definir: 'window.onerror = null;'.
window.onerror = AnalyzingErrors;
// Função que recebe os parâmetros do erro não monitorado e dispara alertas com os detalhes dele.
function AnalyzingErrors(msg, url, line){
  window.alert('Houve um erro de execução não monitorado. - Mensagem de erro: ' + msg + ' - URL da página: ' + url + ' - Linha de código: ' + line);
}
// Esta função só é executada quando o usuário logado é do tipo 'des'. Ela cria um div de id 'divDevelopmentTools' dentro do 'divContent'.
// Ela executa as funções que fazem parte das ferramentas do desenvolvedor.
function StartDevelopmentTools() {
  var divDevelopment = document.createElement('div');
  divDevelopment.id = 'divDevelopmentTools';
  try {
    var divContent = document.getElementById('divContent');
    divContent.appendChild(divDevelopment);
	CheckCssAbsolutePaths();
  }
  catch(excError) {
	OpenError('Default', excError, '');
  }
}
// Esta função percorre todas as regras de todos os arquivos css lincados com a página atrás do termo 'http://host/' (que indica que a regra possui um
// caminho absuloto que não funciona on-line). Ela coloca um div de id 'divCssAbsolutePaths' com um link para cada ocorrencia com as informações do
// arquivo e da regra css dentro do div de id 'divDevelopmentTools' criado pela função StartDevelopmentTools().
function CheckCssAbsolutePaths() {
  var blnErrorPaths = false;
  var divCss = document.createElement('div');
  divCss.id = 'divCssAbsolutePaths';
  var h3Css = document.createElement('h3');
  h3Css.innerHTML = 'CSS Paths Erros';
  divCss.appendChild(h3Css);
  try {
    for (var intSheets = 0; intSheets < document.styleSheets.length; intSheets++) {
      if (document.styleSheets[intSheets].cssRules) {
        var cssRules = document.styleSheets[intSheets].cssRules;
        for (var intRules = 0; intRules < cssRules.length; intRules++) {
	      var strCssText = cssRules[intRules].cssText;
	      if (strCssText.indexOf('http://host/') != -1) {
	        blnErrorPaths = true;
	        var ancCss = document.createElement('a');
	        ancCss.innerHTML = 'Title: ' + document.styleSheets[intSheets].title + ' - File: ' + document.styleSheets[intSheets].href + ' - Rule: ' + (intRules + 1);
	        ancCss.href = document.styleSheets[intSheets].href;
	        divCss.appendChild(ancCss);
	      }
	    }
	  }
	  else {
	    var strCssText = document.styleSheets[intSheets].cssText;
	    if (strCssText.indexOf('http://host/') != -1) {
	      blnErrorPaths = true;
	      var ancCss = document.createElement('a');
	      ancCss.innerHTML = 'Title: ' + document.styleSheets[intSheets].title + ' - File: ' + document.styleSheets[intSheets].href + ' - Rule: not visible in IE.';
	      ancCss.href = document.styleSheets[intSheets].href;
	      divCss.appendChild(ancCss);
	    }
	  }
    }
  }
  catch(excError) {
    OpenError('Default', excError, '');
  }
  if (blnErrorPaths) {
    try {
      var divDevelopment = document.getElementById('divDevelopmentTools');
      divDevelopment.appendChild(divCss);
	}
	catch(excError) {
	  OpenError('Default', excError, '');
    }
  }
}
