
/*
REGRAS PARA A UTILIZAÇÃO DE BOTÕES
- NOME DO CHECKBOX DEVE SER IGUAL AO NOME DO FORMULARIO. EX. Nome do Formulario: formCliente, nome do check: fIdCliente[]

*/

function alteraImagem(sForm,sBotao,nStatus){
	var form = document.getElementById(sForm);
	var nChecados = retornaChecados(form,sForm.replace('form',''));
	var oBotao = document.getElementById(sBotao);
	var oAjuda = document.getElementById("ajuda"+sForm.replace('form',''));
	var nTipo = oBotao.id.substr(oBotao.id.length-1,1);

	// ALTERA OS ÍCONES (ATIVO/INATIVO) DE ACORDO COM O TIPO
	// CASO O TIPO FOR 1 SÓ DESTACARÁ O ÍCONE CASO SÓ HAJA UM CHECK MARCADO
	// CASO O TIPO FOR 2 SÓ DESTACARÁ O ÍCONE CASO HAJA ALGUM CHECK MARCADO
	if(((nTipo == 1) && (nChecados != 1)) || ((nTipo == 2) && (nChecados == 0)) || ((nTipo == 0) && (nChecados != 0)))
		oBotao.src = oBotao.src.replace(/\d/,0);	
	else
		oBotao.src = oBotao.src.replace(/\d/,nStatus);
	
	// ESCREVE O TEXTO DE AJUDA
	oAjuda.innerHTML = recuperaAjuda(oBotao.id,nStatus);
	return;
}

function retornaChecados(form,sCategoria){
	var nChecados = 0;

// RETORNA O NÚMERO DE CHECK'S MARCADOS
	for(var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].name.indexOf(sCategoria) > 0) 
			if(form.elements[i].checked)
				nChecados++;
	}
	return nChecados;
}

function atualizaImagens(sForm,sCategoria){
	var form = document.getElementById(sForm);

	for(var i = 0; i < document.images.length; i++) {
		if(document.images[i].id) {
			var nTipo = document.images[i].id.substr(document.images[i].id.length-1,1);
			
			// ALTERA OS ÍCONES (ATIVO/INATIVO) DE ACORDO COM O TIPO
			// CASO O TIPO FOR 1 SÓ DESTACARÁ O ÍCONE CASO SÓ HAJA UM CHECK MARCADO
			// CASO O TIPO FOR 2 SÓ DESTACARÁ O ÍCONE CASO HAJA ALGUM CHECK MARCADO
			if(((nTipo == 1) && (retornaChecados(form,sCategoria) != 1)) || ((nTipo == 2) && (retornaChecados(form,sCategoria) == 0)) || ((nTipo == 0) && (retornaChecados(form,sCategoria) != 0)))
				document.images[i].src = document.images[i].src.replace(/\d/,0);
			else
				document.images[i].src = document.images[i].src.replace(/\d/,1);
		}
}
	return;
}

function alteraTodos(sForm){
	var form = document.getElementById(sForm);
	var nQtdDesabilitado = nQtdChecados = 0;
	
	// CONTA O NÚMERO DE CHECK'S MARCADOS
	for(var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].disabled)
			nQtdDesabilitado++;
		if(form.elements[i].checked)
			nQtdChecados++;
	}
	// CASO HAJA CHECK(S) DESMARCADO(S) MARCA TODOS, CASO CONTRÁRIO DESMARCA TODOS
	for(var i = 0; i < form.elements.length; i++) {
			form.elements[i].checked = ((form.elements.length - nQtdDesabilitado) != nQtdChecados && !form.elements[i].disabled) ? true : false;
	}
	return;
}

function submeteForm(sForm,sBotao,sDestino){
	var form = document.getElementById(sForm);
	var oBotao = document.getElementById(sBotao);
	
	// SUBMETE O FORMULÁRIO CASO O ÍCONE ESTEJA ATIVO
	if(oBotao.src.match(/\d/) != 0){
		form.action = sDestino;
		form.submit();
	}
	return;	
}

function recuperaAjuda(sImagem,nStatus){
	if(nStatus == 1)
		return '';
	if(sImagem.indexOf('Cadastrar') > 0)
		return "Cadastrar";
	if(sImagem.indexOf('Detalhe') > 0)
		return "Detalhe";
	if(sImagem.indexOf('Editar') > 0)
		return "Editar";
	if(sImagem.indexOf('GerenciarProcedimento') > 0)
		return "Gerenciar Procedimentos";
	if(sImagem.indexOf('GerenciarArquivo') > 0)
		return "Gerenciar Arquivos";
	if(sImagem.indexOf('Excluir') > 0)
		return "Excluir";
	if(sImagem.indexOf('Permissao') > 0)
		return "Editar Permissão";

	return;

}

function selecionaOpcao(nId,sComponente,sDescricao){
	var oComponente = window.opener.document.getElementById(sComponente);
	var oOption = new Option(sDescricao,nId);
	for(var nOption = 0; nOption < oComponente.options.length; nOption++) {
		if(oComponente.options[nOption].value == nId) {
			oComponente.options[nOption].text = sDescricao;
			oComponente.options[nOption].selected = true;
			return;
		}
	}
	oComponente.options[oComponente.options.length] = oOption;
	oComponente.options[oComponente.options.length-1].selected = true;
	window.close();
}


// ORDENA A TABELA
function ordenaTabela(sIdTabela,sCampoId,nPosicaoId,nTitulo,vTabela,nColuna,sTipoOrdenamento,sHrefLink) {
	// CONFIGURAÇÃO ESPECÍFICA
	var sDiretorioImagens = '/imagens/';
	var sEstiloTrPadrao = 'destaque2';
	var sEstiloTrDestaque = 'destaque1';
	var sEstiloTituloPadrao = 'th';
	var sEstiloTituloDestaque = 'thDestaque';
	var sEstiloTrDestaque = 'destaque1';
	var sEstiloCheck = 'check';
	
	var oTabela = document.getElementById(sIdTabela);
	var oImagem = document.getElementById('ImagemOrdenacao'+nColuna);
	var oColunaTitulo = document.getElementById('ColunaTitulo'+nColuna);
	var vSrc = oImagem.src.split('/');
	var sOrdenacao = '';
	
	// LIMPA A TABELA QUE SERÁ REORDENADA
	reiniciaTabela(oTabela,nTitulo);
	
	// DESTACA O TÍTULO DA COLUNA A SER ORDENADA ALTERANDO O FUNDO DA COLUNA
	oColunaTitulo.className = sEstiloTituloDestaque;
	
	// ALTERA A IMAGEM QUE INDICA A ORDENAÇÃO DA COLUNA
	switch(vSrc[vSrc.length-1]) {
		case 'desordenado.gif':
			sOrdenacao = 'decrescente';
			oImagem.src = sDiretorioImagens + 'ordenado_decr.gif';
		break;
		case 'ordenado_decr.gif':
			sOrdenacao = 'crescente';
			oImagem.src = sDiretorioImagens + 'ordenado_cres.gif';
		break;
		case 'ordenado_cres.gif':
			sOrdenacao = 'decrescente';
			oImagem.src = sDiretorioImagens + 'ordenado_decr.gif';
		break;
	}

	// CHAMA O MÉTODO ADEQUADO DE ORDENAÇÃO, DE ACORDO COM O TIPO DE DADO DA COLUNA
	switch(sTipoOrdenamento) {
		case 'numerico':
			vTabela = ordenaVetorNumerico(vTabela,nColuna,sOrdenacao);
		break;
		case 'string':
			vTabela = ordenaVetorString(vTabela,nColuna,sOrdenacao);
		break;
		case 'data':
			vTabela = ordenaVetorData(vTabela,nColuna,sOrdenacao);
		break;
	}
	
	// CRIA AS LINHAS DA TABELA
	for(var nLinha = 0; nLinha < vTabela.length; nLinha++) {
		var nQtdColunas = vTabela[nLinha].length;
		var oTr = oTabela.insertRow(nTitulo);
		
		oTr.className = sEstiloTrPadrao;
		
		oTr.onmouseover = function() {
			destacaLinha(this,sEstiloTrDestaque); 
		}
		oTr.onmouseout = function() {
			destacaLinha(this,sEstiloTrPadrao);
		}
		
		// CASO TENHA CHECKBOX
		if(nPosicaoId >= 0) {
			var oCheck = document.createElement("input");
			oCheck.type = "checkbox";
			oCheck.name = sCampoId;
			oCheck.value = vTabela[nLinha][nPosicaoId];
			oCheck.className = sEstiloCheck;
			oCheck.onclick = function() {
				atualizaImagens(sIdTabela.replace('Tabela','form'),sIdTabela.replace('Tabela',''));
			}
		}
		
		// INSERE AS COLUNAS
		for(var nNovaColuna = nQtdColunas-1; nNovaColuna > 0; nNovaColuna--) {
			var oTd = oTr.insertCell(0);
			
			if(nNovaColuna == 1 && nPosicaoId >= 0)
				oTd.appendChild(oCheck);
			else {
				
				//INSERE O LINK NAS COLUNAS
				if(sHrefLink != ''){
					var oLink = document.createElement("a");
					var sLink = '?';
					var vVariaveis = vTabela[nLinha][nQtdColunas-1].split('&');
					for(var nVariavel = 0; nVariavel < vVariaveis.length; nVariavel++) {
						var vVariavel = vVariaveis[nVariavel].split('=');
						sLink += vVariavel[0]+ '=' +vVariavel[1];
						sLink += '&';
					}
					oLink.href = sHrefLink + sLink;
					oLink.appendChild(document.createTextNode(vTabela[nLinha][nNovaColuna-1].replace('&nbsp;','')));
					oTd.appendChild(oLink);
				} else
					oTd.appendChild(document.createTextNode(vTabela[nLinha][nNovaColuna-1].replace('&nbsp;','')));
			}
		}
	}
	
	// OCULTA AS IMAGENS DAS COLUNAS QUE NÃO ESTÃO SENDO USADAS PARA ORDERNAR
	ocultaImagemOrdenacao(nColuna,nQtdColunas,sDiretorioImagens);
	
	// RETIRA O DESTAQUE DAS COLUNAS QUE NÃO ESTÃO SENDO USADAS PARA ORDERNAR
	retiraDestaqueTitulo(nColuna,nQtdColunas,sEstiloTituloPadrao);	
	return;
}

// ORDENA VETOR DE DATAS
function ordenaVetorData(vTabela,nColuna,sOrdenacao) {
	var vAux = Array();
	var vAux2 = Array();
	var vResultado = Array();
	var sCondicao = (sOrdenacao == 'crescente') ? "nDiaAnterior > nDiaPosterior" : "nDiaAnterior < nDiaPosterior";
	var nAux = 0;
	var nCount = 0;

	for(var i = 0; i < vTabela.length; i++){
		vAux.push(vTabela[i][nColuna]);
	}

	for(var i = 0; i < vAux.length; i++) {
		for(var j = vAux.length-1; j > i; j--) {
			var vDataHoraAnterior  = vAux[j-1].split(' ');
			var vDataHoraPosterior = vAux[j].split(' ');
			if(vDataHoraAnterior.length == 2) {
				var vDataAnterior  = vDataHoraAnterior[0].split('/');
				var vDataPosterior = vDataHoraPosterior[0].split('/');
				var vHoraAnterior  = vDataHoraAnterior[1].split(':');
				var vHoraPosterior = vDataHoraPosterior[1].split(':');
				var oDiaAnterior  = new Date(vDataAnterior[2],vDataAnterior[1],vDataAnterior[0],vHoraAnterior[0],vHoraAnterior[1],vHoraAnterior[2]);
				var oDiaPosterior = new Date(vDataPosterior[2],vDataPosterior[1],vDataPosterior[0],vHoraPosterior[0],vHoraPosterior[1],vHoraPosterior[2]);
			} else {
				var vDataAnterior  = vAux[j-1].split('/');
				var vDataPosterior = vAux[j].split('/');
				var oDiaAnterior  = new Date(vDataAnterior[2],vDataAnterior[1],vDataAnterior[0]);
				var oDiaPosterior = new Date(vDataPosterior[2],vDataPosterior[1],vDataPosterior[0]);
			}
			var nDiaAnterior  = oDiaAnterior.getTime();
			var nDiaPosterior = oDiaPosterior.getTime();

			if(eval(sCondicao)) {
				nAux = vAux[j];
				vAux[j] = vAux[j-1];
				vAux[j-1] = nAux;
			}				   
		}
	}

	for(var j = 0; j < vAux.length; j++) {
		for(var i = 0; i < vTabela.length; i++) {
			if(vTabela[i][nColuna] == vAux[j] && !in_array(i,vAux2)) {
				vResultado[nCount++] = vTabela[i];
				vAux2.unshift(i);
			}
		}
	}
	
	return vResultado;
}

// ORDENA VETOR DE STRINGS
function ordenaVetorString(vTabela,nColuna,sOrdenacao) {
	var vAux = Array(); 
	var vAux2 = Array();
	var vResultado = Array();
	var nCount = 0;

	for(var i = 0; i < vTabela.length; i++)
		vAux.push(vTabela[i][nColuna]);
	
	vAux.sort();
	
	if(sOrdenacao == 'decrescente')
		vAux.reverse();
	
	for(var j = 0; j < vAux.length; j++) {
		for(var i = 0; i < vTabela.length; i++) {
			if(vTabela[i][nColuna] == vAux[j] && !in_array(i,vAux2)) {
				vResultado[nCount++] = vTabela[i];
				vAux2.unshift(i);
			}
		}
	}
	
	return vResultado;
}

// ORDENA VETOR DE NÚMEROS
function ordenaVetorNumerico(vTabela,nColuna,sOrdenacao) {
	var nAux = 0;
	var sCondicao = (sOrdenacao == 'crescente') ? "Number(vTabela[j-1][nColuna].replace('.','').replace(',','.').replace('&nbsp;','')) > Number(vTabela[j][nColuna].replace('.','').replace(',','.').replace('&nbsp;',''))" : "Number(vTabela[j-1][nColuna].replace('.','').replace(',','.')) < Number(vTabela[j][nColuna].replace('.','').replace(',','.'))";
	for(var i = 0; i < vTabela.length; i++) {
		for(var j = vTabela.length-1; j > i; j--) {
			if(eval(sCondicao)) {
				nAux = vTabela[j];
				vTabela[j] = vTabela[j-1];
				vTabela[j-1] = nAux;
			}
		}
	}
	return vTabela;
}

function in_array(xValor,vVetor) {
  var sTexto = "¬" + vVetor.join("¬") + "¬";
  var oReg = new RegExp ("¬" + xValor + "¬", "gim");
  return (sTexto.match(oReg)) ? true : false;
}

// LIMPA A TABELA QUE SERÁ REORDENADA
function reiniciaTabela(oTabela,nLinhaInicial) {
	var nLinhas = oTabela.rows.length - nLinhaInicial;

	for(var i = 0; i < nLinhas; i++) {
		oTabela.deleteRow(nLinhaInicial);
	}
	return;
}

// OCULTA AS IMAGENS DAS COLUNAS QUE NÃO ESTÃO SENDO USADAS PARA ORDERNAR
function ocultaImagemOrdenacao(nColunaSelecionada,nQtdColunas,sDiretorioImagens) {
	for(var nCount = 0; nCount <= nQtdColunas; nCount++) {
		if(nCount != nColunaSelecionada) {
			var oImagem = document.getElementById('ImagemOrdenacao'+nCount);
			if(oImagem != null)
				oImagem.src = sDiretorioImagens + 'desordenado.gif';
		}
	}
	return;
}

// RETIRA O DESTAQUE DAS COLUNAS QUE NÃO ESTÃO SENDO USADAS PARA ORDERNAR
function retiraDestaqueTitulo(nColunaSelecionada,nQtdColunas,sFundoPadrao) {
	for(var nCount = 0; nCount <= nQtdColunas; nCount++) {
		if(nCount != nColunaSelecionada) {
			var oColunaTitulo = document.getElementById('ColunaTitulo'+nCount);
			if(oColunaTitulo != null)
				oColunaTitulo.className = sFundoPadrao;
		}
	}
	return;
}



