	verde = '#C5DAC6';
	branco = 'WHITE';
	cinza = '#E0E0E0';
	azul = '#BFCFE1';
	
	function mudarCorFundo(obj, cor) {
	   obj.style.backgroundColor=cor;
	   obj.style.cursor="hand";
	}
	
	function mudarCorFundoOut(obj, count) {
		if (count % 2 == 0) {
			obj.style.backgroundColor=branco;
		} else {
			obj.style.backgroundColor=cinza;
		}
		obj.style.cursor="default";
	}

  	// Exibe layer com mensagem de processando
  	function showLayerCenter(largura, altura) {
		//var left = Math.floor((screen.availWidth-largura)/2);
		//var top = Math.floor((screen.availHeight-altura)/2);
		var left = largura;
		var top = altura;
		
		var divErro = document.all('divErro');
		divErro.style.left = left;
		divErro.style.top = top;
		divErro.style.display = 'block';
	}
		
    function chamaLov() { 
        wnd = openWindow(self, '', 'popup', {width:616,height:450,top:120,left:200}, true, 'dialog', 0);
    }
    
        
    function popReportWindow() { 
      wndReport = openWindow(self, '/tecsis/htdocs/timer.jsp', 'report', {width:800,height:600,top:0,left:0}, true, 'dialog', 0);
      wndReport.resizeTo(screen.availWidth,screen.availHeight);    
    }    

    function isInteiro(pVal){
        var reTipo = /^\d+$/;
        return reTipo.test(pVal);
    }

    // remove a lista de mensagens
    function removeMessageList() {
        // busca o TD
        var tdElement = document.getElementById('messages');

        // busca a lista
        var list = document.getElementById('showMessages');
        
        // verifica se a lista já existe
        if (list != null) {
            tdElement.removeChild(list);
        }
    }
    
    // adciona uma mensagem à lista de mensagens
    function addMessageToList(message, type) {
        var indNewList = false;

        // busca o TD
        var tdElement = document.getElementById('messages');

        // busca a lista
        var list = document.getElementById('showMessages');
                    
        // verifica se a lista já existe
        if (list == null) {
            // cria a lista com ID
            list = document.createElement("ul");
            list.id = 'showMessages';
            indNewList = true;
        } 
        
        // texto do item da lista 
        var newText = document.createTextNode(replaceCode(message));

        // cria um novo item
        var newNode = document.createElement("li");

        // cria um novo span
        var newSpan = document.createElement("span");

        // ID do span
        newSpan.id = 'message' + list.childNodes.length;

        // class do span
        newSpan.className = type;

        // adiciona o texto ao span
        newSpan.appendChild(newText);
        
        // adiciona o span ao item
        newNode.appendChild(newSpan);

        // adiciona o item à lista
        list.appendChild(newNode);

        if (indNewList) {
            // adiciona a lista ao TD
            tdElement.appendChild(list);
        }
    }
    
	function replaceCode(str) {
		str = str.replace(new RegExp(/&#192;/g), "À");
		str = str.replace(new RegExp(/&#193;/g), "Á");
		str = str.replace(new RegExp(/&#194;/g), "Â");
		str = str.replace(new RegExp(/&#195;/g), "Ã");
		str = str.replace(new RegExp(/&#196;/g), "Ä");
		str = str.replace(new RegExp(/&#199;/g), "Ç");
		str = str.replace(new RegExp(/&#200;/g), "È");
		str = str.replace(new RegExp(/&#201;/g), "É");
		str = str.replace(new RegExp(/&#202;/g), "Ê");
		str = str.replace(new RegExp(/&#203;/g), "Ë");
		str = str.replace(new RegExp(/&#204;/g), "Ì");
		str = str.replace(new RegExp(/&#205;/g), "Í");
		str = str.replace(new RegExp(/&#206;/g), "Î");
		str = str.replace(new RegExp(/&#207;/g), "Ï");
		str = str.replace(new RegExp(/&#210;/g), "Ò");
		str = str.replace(new RegExp(/&#211;/g), "Ó");
		str = str.replace(new RegExp(/&#212;/g), "Ô");
		str = str.replace(new RegExp(/&#213;/g), "Õ");
		str = str.replace(new RegExp(/&#214;/g), "Ö");
		str = str.replace(new RegExp(/&#217;/g), "Ù");
		str = str.replace(new RegExp(/&#218;/g), "Ú");
		str = str.replace(new RegExp(/&#219;/g), "Û");
		str = str.replace(new RegExp(/&#220;/g), "Ü");
		str = str.replace(new RegExp(/&#224;/g), "à");
		str = str.replace(new RegExp(/&#225;/g), "á");
		str = str.replace(new RegExp(/&#226;/g), "â");
		str = str.replace(new RegExp(/&#227;/g), "ã");
		str = str.replace(new RegExp(/&#228;/g), "ä");
		str = str.replace(new RegExp(/&#231;/g), "ç");
		str = str.replace(new RegExp(/&#232;/g), "è");
		str = str.replace(new RegExp(/&#233;/g), "é");
		str = str.replace(new RegExp(/&#234;/g), "ê");
		str = str.replace(new RegExp(/&#235;/g), "ë");
		str = str.replace(new RegExp(/&#236;/g), "ì");
		str = str.replace(new RegExp(/&#237;/g), "í");
		str = str.replace(new RegExp(/&#238;/g), "î");
		str = str.replace(new RegExp(/&#239;/g), "ï");
		str = str.replace(new RegExp(/&#242;/g), "ò");
		str = str.replace(new RegExp(/&#243;/g), "ó");
		str = str.replace(new RegExp(/&#244;/g), "ô");
		str = str.replace(new RegExp(/&#245;/g), "õ");
		str = str.replace(new RegExp(/&#246;/g), "ö");
		str = str.replace(new RegExp(/&#249;/g), "ù");
		str = str.replace(new RegExp(/&#250;/g), "ú");
		str = str.replace(new RegExp(/&#251;/g), "û");
		str = str.replace(new RegExp(/&#252;/g), "ü");
		return str;
	};   
    
	/**
	 * Verifica se o valor informado é um número
	 * @param valor 
	 */
	function eNumerico(valor){
	  var wrk_filtro = /^[0-9]*$/;
	  if(wrk_filtro.test(valor)){
	     return true;
	  }
	  else {
	     return false;
	  }
	}
	
	/**
	 * Formata o campo para somente decimais
	 * @author TECBMMRR
	 * @since 20/03/2007
	 */
	function formataDecimal(event) {
		var wrk_caracter;
		// Internet Explorer
        if (isInternetExplorer()) {
			wrk_caracter = String.fromCharCode(event.keyCode);
			if (!eNumerico(wrk_caracter) && wrk_caracter != '.' && wrk_caracter != ',') {
				event.returnValue = false;
			}
        // Firefox
        } else {
			wrk_caracter = String.fromCharCode(event.charCode);
			if (!eNumerico(wrk_caracter) 
			    && wrk_caracter != '.' 
			    && wrk_caracter != ','
			    && event.charCode != 0) {
				event.preventDefault();
			}
        }
	}
	
	/**
	 * Formata o campo data em dd/mm/aaaa conforme se digita
	 */
	function formataData(event) { 
        var wrk_obj;
		var wrk_caracter;
        // Internet Explorer
        if (isInternetExplorer()) {
    		wrk_obj = event.srcElement;
			wrk_caracter = String.fromCharCode(event.keyCode);
			if(!eNumerico(wrk_caracter)){
				if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
					return true;
				}
			 	event.keyCode = 0;
				event.returnValue = false;
				return false;
			} else if (wrk_obj.value.length == 2 || wrk_obj.value.length == 5 ) {
		        wrk_obj.value += "/";
			}
        // Firefox
        } else {
            wrk_obj = event.target;
			wrk_caracter = String.fromCharCode(event.charCode);
			if (event.charCode != 0) {
				if(!eNumerico(wrk_caracter)){
					if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
						return true;
					}
					event.preventDefault();
					return false;
				} else if (wrk_obj.value.length == 2 || wrk_obj.value.length == 5 ) {
			        wrk_obj.value += "/";
				}
			}	
        }
	}
	
	/**
	 * Formata o campo data em dd/mm/aaaa hh:mm conforme se digita
	 * @author TECBMMHR
	 * @since 19/02/2007
	 */
	function formataDataHora(event) { 
        var wrk_obj;
		var wrk_caracter;
        // Internet Explorer
        if (isInternetExplorer()) {
    		wrk_obj = event.srcElement;
			wrk_caracter = String.fromCharCode(event.keyCode);
			if(!eNumerico(wrk_caracter)){
				if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
					return true;
				}
			 	event.keyCode = 0;
				event.returnValue = false;
				return false;
			} else {
		        if (wrk_obj.value.length == 2 || wrk_obj.value.length == 5 ) {
		            wrk_obj.value += "/";
		        } else if (wrk_obj.value.length == 10) {
		            wrk_obj.value += " ";
		        } else if (wrk_obj.value.length == 13) {
		            wrk_obj.value += ":";
		        }
		    }
        // Firefox
        } else {
            wrk_obj = event.target;
			wrk_caracter = String.fromCharCode(event.charCode);
			if (event.charCode != 0) {
				if(!eNumerico(wrk_caracter)){
					if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
						return true;
					}
					event.preventDefault();
					return false;
				} else {
			        if (wrk_obj.value.length == 2 || wrk_obj.value.length == 5 ) {
			            wrk_obj.value += "/";
			        } else if (wrk_obj.value.length == 10) {
			            wrk_obj.value += " ";
			        } else if (wrk_obj.value.length == 13) {
			            wrk_obj.value += ":";
			        }
			    }
			}
        }
	}	
	
	/**
	 * Formata o campo hora hh:mm conforme se digita
	 * @author TECBMMHR
	 * @since 19/02/2007
	 */
	function formataHora(event) {
        var wrk_obj;
		var wrk_caracter;
        // Internet Explorer
        if (isInternetExplorer()) {
    		wrk_obj = event.srcElement;
			wrk_caracter = String.fromCharCode(event.keyCode);
			if(!eNumerico(wrk_caracter)){
				if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
					return true;
				}
			 	event.keyCode = 0;
				event.returnValue = false;
				return false;
			} else {
		        if (wrk_obj.value.length == 2) {
		            wrk_obj.value += ":";
		        }
		    }
        // Firefox
        } else {
            wrk_obj = event.target;
			wrk_caracter = String.fromCharCode(event.charCode);
			if (event.charCode != 0) {
				if(!eNumerico(wrk_caracter)){
					if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
						return true;
					}
					event.preventDefault();
					return false;
				} else {
			        if (wrk_obj.value.length == 2) {
			            wrk_obj.value += ":";
			        }
			    }
			}    
        }
	}
    
    /* Consulta com os critérios informados ao precionar a tecla 'ENTER' */
    document.onkeypress = isInternetExplorer() ? submeterIE : submeterFirefox;
    
    // Firefox
    function submeterFirefox(event) {
        if (event.keyCode == 13) {
            document.getElementById('btnDefault').click();
        }
    }

    // Internet Explorer
    function submeterIE() {
        if (event.keyCode == 13) {
            if (document.getElementById('btnDefault')) {
                document.getElementById('btnDefault').click();
            }
        }
    }    
    
    // Verifica se o browser eh IE
    function isInternetExplorer() {
        var an = window.navigator.appName
        if (an.indexOf("Internet Explorer") != -1) return true;
        else return false;
    }

    // Varre os campos dos formulários da tela para desabilitar os campos com o estilo igual a "input-readonly",
    // desta forma os mesmos não são definidos explicitamente na página e seus valores são recuperados no servidor.
    // * JSF nao recupera do lado do server os valores de campos disabled e nem readonly (ver JSF_e_campos_readonly.txt)
    function setReadonly() {
        for (i=0; i<document.forms.length; i++) {
            for (j=0; j<document.forms[i].elements.length; j++) {       
                if (document.forms[i].elements[j].className == 'input-readonly'
                      || document.forms[i].elements[j].className == 'input-readonly-right') {
                    document.forms[i].elements[j].readOnly = true;
                }
            }
        }
    }
    
    // Função que retorna o valor do radio setado
	function valorRadioChecked(formName,fieldName) {
	    if (document.forms[formName][fieldName].length < 2) {
	        alert("Função valorRadioChecked\nCampo " + fieldName + " não é do tipo radio ou possui somente um valor.");
	    }
	    else { 
	        for (var i=0;i<document.forms[formName][fieldName].length;i++) { 
	            if (document.forms[formName][fieldName][i].checked) { 
	                return document.forms[formName][fieldName][i].value;
	            }
	        }
	    }
	    return "";
	}
	
	// Função para retornar os objetos imagem (<img></img>) através de uma de suas propriedades e seu respectivo valor
	function retornaImagesForm(property, value) {
		for (j = 0; j < document.images.length; j++) {
			if (document.images[j][property] && document.images[j][property].toString().indexOf(value) != -1) {
				return document.images[j];
			}
		}
		return null;
	}
	
	// Função para definir os combos da tela como disabled "false", permitindo que seus valores sejam permanecidos
	function setEnabledCombo() {
		for (i = 0; i < document.forms.length; i++) {
			for (j = 0; j < document.forms[i].elements.length; j++) {
				if (document.forms[i].elements[j].className == 'combobox-disabled') {
					document.forms[i].elements[j].disabled = false;
				}
			}
		}
    }
    
    // Função para validar se o conteúdo do campo é nulo
    function isNull(idCampo) {
    	if (idCampo != null && idCampo.length > 0) {
    		return false;
    	} else {
    		return true;
    	}
    }
    
    // Função que retorna o conteúdo de um campo formatado como CNPJ sem a máscara
	function getCnpjNoMask(numCnpj) {
		var numCnpjAux = ""; 
		for (var i=0;i<numCnpj.length;i++) {
			if (numCnpj.substr(i,1) != "." && numCnpj.substr(i,1) != "-" && numCnpj.substr(i,1) != "/") {
				numCnpjAux += numCnpj.substr(i,1);
			}
		}	
		return numCnpjAux;
	}
	
	// Função que retorna o conteúdo de um campo com a máscara (99.999.999/9999-99)
	function getCnpjMask(cnpj){		
		if (cnpj.length == 14) {
			cnpj = cnpj.substring(0,2) + "." + cnpj.substring(2,5) + "." + cnpj.substring(5,8) + "/" + cnpj.substring(8,12)  + "-" + cnpj.substring(12,14);		
		}
		return cnpj;
	}
	
	// Função que permite somente digitar números.
	function onlyNumber(event) {
		var wrk_obj;
		var wrk_caracter;
        // Internet Explorer
        if (isInternetExplorer()) {
    		wrk_obj = event.srcElement;
			wrk_caracter = String.fromCharCode(event.keyCode);
			if(!eNumerico(wrk_caracter)){
				if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
					return true;
				}
			 	event.keyCode = 0;
				event.returnValue = false;
				return false;
			}
        // Firefox
        } else {
            wrk_obj = event.target;
			wrk_caracter = String.fromCharCode(event.charCode);
			if (event.charCode != 0) {
				if(!eNumerico(wrk_caracter)){
					if (event.keyCode == 13) { // se for <enter> retorna a execução normal da tecla
						return true;
					}
					event.preventDefault();
					return false;
				}
			}	
        }
	}
	
	/* Função que preenche com o caracter pCaracter, o valor depQuantidade de vezes à esquerda do pTexto
	@param pTexto
	@param pQuantidade
	@param pCaracter
	13/12/2004 - tecbmjst
	*/
	function lPad(pTexto, pQuantidade, pCaracter) {
		var difCampo = 0;
		var contCaracter = 1;
		var cont = 0;
		var str = "";
		
		difCampo = pQuantidade - pTexto.length;
		
		if (pQuantidade < 0 || pTexto == "" || pQuantidade == "" || pQuantidade == 0) {
			str = ""
		} else {
		    if (difCampo > 0) {
		        while (cont <= difCampo) {
		            while (contCaracter <= pCaracter.length && str.length < difCampo) { 
		      			str += pCaracter.substr(contCaracter-1,1);
		            	contCaracter++;
		         	}
		         	contCaracter = 1;
		         	cont = cont + pCaracter.length;
		      	}
		      	str = str + pTexto;
			} else { 
				str = pTexto.substr(0,pQuantidade);
			}
		}  
		return str;
	}
	
	/* Limita o tamanho de campos textarea
       @param formName - Nome do form
       @param campo - Nome do campo
       @param max - Quantidade máxima de caracteres 
    */
    function maxLength(idCampo, max) {
        if (document.getElementById(idCampo).value.length > max) {            
            document.getElementById(idCampo).value = document.getElementById(idCampo).value.substring(0, max);
            return false;
        }
        return true;
    }	


	/* verifica se o formulário for alterado
	   @return Se formulário foi alterado, então retorna true
	*/
	function verificarEstadoForm() {
	   	for (var j = 0; j < document.forms.length; j++) {
	        for (var i = 0; i < document.forms[j].elements.length; i++) {
	        	if (document.forms[j].elements[i].id != "slEmpresaGrupoAcesso") {
					// se não for campo hidden
		            if (document.forms[j].elements[i].type != 'hidden') {    
			            // se for radio ou checkbox
			            if ((document.forms[j].elements[i].type == 'radio') || (document.forms[j].elements[i].type == 'checkbox')) {
			                if ((document.forms[j].elements[i].checked)  &&  (!document.forms[j].elements[i].defaultChecked)) {
			                    return true;
			                } else if ((!document.forms[j].elements[i].checked) && (document.forms[j].elements[i].defaultChecked)) {
			                    return true;
			                }
			        
			            // se for select (combobox) não multiplo
			            } else if (document.forms[j].elements[i].type == 'select-one') {			
			            	
							// verifica se existe alguma opção selecionada como default
			            	var isDefaultSelected = false;
							for (var x = 0; x < document.forms[j].elements[i].length; x++) {
								if (document.forms[j].elements[i].options[x].defaultSelected) {
									isDefaultSelected = true;
								}
							}
			            	 
			            	// se existe alguma opção selecionada como default
			            	if (isDefaultSelected) {
			            		if (!document.forms[j].elements[i].options[document.forms[j].elements[i].options.selectedIndex].defaultSelected) {
				                    return true;
				                } 
				            // se não existe, então verifica se a opção na posição [0] está seledionada    
			            	} else {
			            		if (!document.forms[j].elements[i].options[0].selected) {
				                    return true;
				                } 
			            	}
			            // se for input text, textarea, ...    
			            } else {
				            if (document.forms[j].elements[i].value != document.forms[j].elements[i].defaultValue) {
			                    return true;
			                }
			            }
			        }
			    }    
		    }
		}
	    return false;
	}

	/* Captura o 'id' do botão executado e guarda em um 'hidden' btnAction
	   localizado no header.jspf.
	*/
	document.onclick = getButtonAction;
	function getButtonAction(event) {
		if (document.getElementById('btnAction')) {
			if (isInternetExplorer()) {
				document.getElementById('btnAction').value = window.event.srcElement.id;
			} else {
				document.getElementById('btnAction').value = event.target.id;
			}
		}
	}

	/* Verifica se ocorreu alteração no form.
	   Se ocorreu, aplicação solicita confirmação com o usuário.
	   @return retorna false se o submit for cancelado e true se o submit for continuado.
	*/
	function verificaFormAlteradoContinuar() {
		var btnExecutado = document.getElementById('btnAction').value;
		if (btnExecutado.indexOf("btnDefault") < 0 
			&& btnExecutado.indexOf("btnSalvar") < 0 
			&& btnExecutado.indexOf("btnExecExcluir") < 0 
			&& btnExecutado.indexOf("btnExcluir") < 0 
			&& btnExecutado.indexOf("btnCancelar") < 0
			&& btnExecutado.indexOf("btnNovo") < 0
			&& (verificarEstadoForm()
					|| (document.getElementById("ihIndInfoNaoSalva") 
							&& document.getElementById("ihIndInfoNaoSalva").value == "true"))) {
	        if (!confirmDadosNaoSalvos()) {
	        	if (btnExecutado.indexOf("cbAlternarEmpresaGrupoAcesso") > -1) {
					document.getElementById("slEmpresaGrupoAcesso").options[getDefaultSelected("slEmpresaGrupoAcesso")].selected = true;
				}
	        	return false;
	        } else {
	        	return true;
	        }
	    } else {
	    	return true;
	    }
	    return true;
	}
	
	function getDefaultSelected(selectId) {
		for (var i = 0; i < document.getElementById(selectId).length; i++) {
			if (document.getElementById(selectId).options[i].defaultSelected) {
				return i;
			}
		}
	}
	
	/*
	  Aplica confirmação com o usuário quando existir dados no formulário que não foram salvos.
	  Retorna true se usuário decidir sair da tela sem salvar os dados.
	  Retorna false se usuário decidir retornar para a página. 
	*/
	function confirmDadosNaoSalvos() {
		return confirm("Existem dados que não foram salvos.\nClique em 'OK' para sair da tela sem salvar as alterações e 'Cancelar' para permanecer na tela.");
	}
	
    /*
        Aplica máscara de campo de data para mês e ano
    */	
	function dataMesAno(objeto){
		tamanho=objeto.value.length;
		if( (tamanho==2)&&(objeto.value.substring(1,2)!="/") ){
		  objeto.value=objeto.value+"/";
		}
    }      
