<%
'************************************************************************************
'| TEMPLATE DE SELEÇÃO
'|***********************************************************************************
'| Classe: listaSelecao
'|-----------------------------------------------------------------------------------
'| Atributos públicos:
'|		dsOrigem - [dataset de origem das linhas do grid]
'|-----------------------------------------------------------------------------------
'| Métodos públicos: 
'|		addCol([nome da coluna], [rotulo da coluna], [largura da coluna])
'|		monta()
'************************************************************************************
'

Class coluna
	public nome
	public rotulo
	public largura
End Class

Class itemCombo
	public rotulo
	public valor
End Class

Class listaItens
	public indlista
	public lista()
	
	Private Sub Class_Initialize()
		Redim lista(5)
		indlista = 0
	End Sub
	
	Private Sub Class_Terminate()
		for i = 0 to indlista - 1
			set lista(i) = nothing
		next
	End Sub
	
	public Sub addItem(rotulo, valor)
		dim novo
		set novo = new itemCombo
		novo.rotulo = rotulo
		novo.valor = valor
		if indlista = UBound(lista)-1 then
			redim preserve lista(UBound(lista) + 5)
		end if	
		set lista(indlista) = novo
		indlista = indlista + 1
	End sub
End Class

Class campoPesquisa
	public nome				'nome do controle
	public rotulo			'rótulo do controle
	public grupo			'rótulo do grupo de controles (Radio button)
	public controle		'ctEdit, ctCombo, ctCheck, ctRadio
	public tamanho			'maxsize do controle (para ctEdit)
	public valor         'valor default para o controle
	public checked			'inicialmente marcado (check/radio)
	public onchange		'evento onchange do combo
	public todos			'true -> combo possui um item "Todos" com value=0 
	
	public dsOrigem		'recordset para montagem do combo
	public textoItem		'campo que será usado como texto do combo
	public valorItem		'campo que será usado como valor do combo
	
	public filtro			'nome do atributo que será usado como filtro
	public operador		'operador utilizado na comparação entre o filtro e valor do campo
	
	Private Sub Class_Terminate()
		if (controle = ctCombo) or (controle = ctList) then
			set dsOrigem = nothing
		end if
   End Sub
	
End Class

Class criterioOrdem
	public nome
	public valor
	public operador
	public tipo    '1-Critério; 2-Ordem
end class

Class listaPesquisa
	private	ctEdit
	private	ctCombo
	private	ctCheck
	private	ctRadio
	private  ctLabel
	private  ctComboMan
	
	private  colunas()
	private 	indColuna
	private  campos()
	private  indCampo
	private  parametros()
	private  indParam
	
	private	componenteLista
	private	campoID
	private	temPadrao
	private  temCheck
	private  temLink
	private  temPaginacao
	private  nomecookie
	
	Private Sub Class_Initialize()
   	Redim colunas(8)
		Redim campos(5)
		Redim parametros(8)
		indColuna = 0
		indCampo = 0
		indParam = 0
		campoID = ""
		temPadrao = false
		temLink = true
		
		ctEdit  = 1
		ctCombo = 2
		ctCheck = 3
		ctRadio = 4
		ctLabel = 5
		ctComboMan = 6
		
   End Sub
	
	Private Sub Class_Terminate()
   	dim i
		for i = 0 to indColuna - 1
			set colunas(i) = nothing
		next
		for i = 0 to indCampo - 1
			set campos(i) = nothing
		next
		for i = 0 to indParam - 1
			set parametros(i) = nothing
		next
		set componenteLista = nothing
   End Sub
	
	Public Sub Inicializa(componente, identificador, pesquisapadrao)
		set componenteLista = componente
		if identificador = false then
			campoID = ""
		else	
			campoID = identificador
		end if
		
		temPadrao = pesquisapadrao
		temCheck = true
		temPaginacao = true
		
		nomecookie = Session("UserID")
		Response.write("<input type='Hidden' name='tstprimexec' value='1'>")
	End Sub
	
	Public Sub ConfiguraGrid(check, paginar)
		temCheck = check
		temPaginacao = paginar
	End Sub
	
	Public Sub ExibeLink(lincar)
		temLink = lincar
	End Sub	
	
	Private Sub PesquisaInitialize()
		%>
		<br><center>
		<table class="caixaPesquisa" width="70%" cellpadding="5px" cellspacing="0">
		<tr>
			<td class="pesquisaTitulo">Pesquisa</td></tr>
		<tr>
			<td class="pesquisaCorpo" valign="center" align="middle">
			<table width="100%" cellpadding="2" cellspacing="0" border="0">
		<%
	End Sub
	
	Private Sub PesquisaTerminate()
		%>
			<tr>
				<td colspan="2" align="right"><input type="Submit" name="pesquisar" value="Pesquisar" width="50px" class="botaoAcao" onclick="if(document.forms[0].pagAtual){document.forms[0].pagAtual.value = 1}"></TD>
			</tr>
			</table>
			</td>
		</tr>
		</table></center>
		<%
	End Sub
	
	Public Sub addColuna(nome, rotulo, largura)
		dim novacol
		set novacol = new coluna
		novacol.nome = nome
		novacol.rotulo = rotulo
		novacol.largura = largura
		if indColuna = UBound(colunas)-1 then
			redim preserve colunas(UBound(colunas) + 5)
		end if
		set colunas(indColuna) = novacol
		indColuna = indColuna + 1
	End Sub
	
	Public Sub addEdit(nome, rotulo, tamanho, filtro, operador)
		addCampo nome, rotulo, "", ctEdit, "", tamanho, false, "", "", nothing, filtro, operador,"",false
	End Sub
	
	Public Sub addCombo(nome, rotulo, fieldTexto, fieldValor, rs, filtro, operador, onchange, todos)
		addCampo nome, rotulo, "", ctCombo, "", "", false, fieldTexto, fieldValor, rs, filtro, operador, onchange, todos
	End Sub
	
	Public Sub addComboManual(nome, rotulo, listaItens, filtro, operador, onchange, todos)
		addCampo nome, rotulo, "", ctComboMan, "", "", false, "", "", listaItens, filtro, operador, onchange, todos
	End Sub
	
	Public Sub addCheck(nome, rotulo, valor, checked, filtro, operador)
		addCampo nome, rotulo, "", ctCheck, valor, "", checked, "", "", nothing, filtro, operador,"",false
	End Sub
	
	Public Sub addRadio(nome, rotulo, grupo, valor, checked, filtro, operador)
		addCampo nome, rotulo, grupo, ctRadio, valor, "", checked, "", "", nothing, filtro, operador,"",false
	End Sub
	
	Private Function addCampo(nome, rotulo, grupo, controle, valor, tamanho, checked, fieldTexto, fieldValor, rs, filtro, operador, onchange, todos)
		dim novo
		set novo = new campoPesquisa
		novo.nome 		= nome
		novo.rotulo 	= rotulo
		novo.grupo 		= grupo
		novo.controle 	= controle
		novo.valor 		= valor
		novo.tamanho 	= tamanho
		novo.checked 	= checked
		novo.textoItem = fieldTexto
		novo.valorItem = fieldValor
		novo.filtro 	= filtro
		novo.operador 	= operador
		novo.onchange 	= onchange
		novo.todos	 	= todos
		if (novo.controle = ctCombo) or (novo.controle = ctComboMan) then
			set novo.dsOrigem = rs
		end if
		
		if indCampo = UBound(campos)-1 then
			redim preserve campos(UBound(campos) + 5)
		end if
		set campos(indCampo) = novo
		indCampo = indCampo + 1
	End Function
	
	Public Sub addCriterio(nome, valor, operador)
		dim novo
		set novo = new criterioOrdem
		novo.nome 	= nome
		novo.valor 	= valor
		novo.operador = operador
		novo.tipo 	= 1
		if indParam = UBound(parametros)-1 then
			redim preserve parametros(UBound(parametros) + 5)
		end if
		set parametros(indOrdem) = novo
		indParam = indParam + 1
	End Sub
	
	Public Sub addOrdem(nome, valor)
		dim novo
		set novo = new criterioOrdem
		novo.nome 	= nome
		novo.valor 	= valor
		novo.tipo 	= 2
		if indParam = UBound(parametros)-1 then
			redim preserve parametros(UBound(parametros) + 5)
		end if
		set parametros(indOrdem) = novo
		indParam = indParam + 1
	End Sub
	
	Public Sub Monta()
		dim i
		MontaGrid
		if indCampo > 0 then
			PesquisaInitialize
			for i = 0 to indCampo - 1
				criaControles campos(i)
			next
			PesquisaTerminate
		end if
	End sub
	
	Private Sub MontaGrid
		dim i, dsOrigem, temParam
		dim pag, valor
		dim jaexecutou, objLista
		dim colAtual, ordAtual
		
		jaexecutou = false
		if request.form("tstprimexec") <> "" then jaexecutou = true
		
		if jaexecutou then
			pag = request.form("pagAtual")
		else
			pag = request.cookies(NomeCookie)("pagAtual")
		end if
		if pag = "" then
			pag = 1
		end if
		response.cookies(NomeCookie)("pagAtual") = pag
		
		if not isEmpty(componenteLista) then
			temParam = false
			set objLista = componenteLista
			for i = 0 to indCampo - 1
				if jaexecutou then
					valor = request.form(campos(i).nome)
					if campos(i).controle = ctCheck then
						if valor = "" then valor = "false" else valor = "true"
					end if
					if campos(i).controle = ctRadio then
						if valor <> campos(i).valor then valor = ""
					end if
				else
					valor = request.cookies(NomeCookie)(campos(i).nome)
					if campos(i).controle = ctCheck then
						if valor = "" then valor = "false" else valor = "true"
					end if
					if campos(i).controle = ctRadio then
						if valor <> campos(i).valor then valor = ""
					end if
				end if
				if (valor <> "") then
					if (valor <> "0" or ((campos(i).controle <> ctCombo) and (campos(i).controle <> ctComboMan))) then
						objLista.AddParam campos(i).filtro, Trim(cStr(valor)), cInt(campos(i).operador)
					end if
					temParam = true
				end if
			next
			
			if (not temParam) and (not temPadrao) then 
				set objLista = nothing
				exit sub
			end if
			
			if jaexecutou then
				colAtual = request.form("coluna")
				ordAtual = request.form("ordem")
				if colAtual <> "" then
					objLista.AddOrder colAtual, cInt(ordAtual)
					response.cookies(NomeCookie)("coluna") = colAtual
					response.cookies(NomeCookie)("ordem") = ordAtual
				end if
			else
				colAtual = request.cookies(NomeCookie)("coluna")
				ordAtual = request.cookies(NomeCookie)("ordem")
				if colAtual <> "" then
					objLista.AddOrder colAtual, ordAtual
				end if
			end if
			
			for i = 0 to indParam - 1
				if Parametros(i).tipo = 1 then
					objLista.AddParam Parametros(i).nome, Parametros(i).valor, Parametros(i).operador
				else
					if (Parametros(i).tipo = 2) and (Parametros(i).nome <> colAtual) then
						objLista.AddOrder Parametros(i).nome, Parametros(i).valor
					end if
				end if
			next
			
			dim pageCount
			if temPaginacao then
				set dsOrigem = objLista.GetRecordSetP(cInt(pag), cInt(Session("pageSize")), pageCount)
				if cInt(pageCount) < cInt(pag) then 
					pag = pageCount
				end if	
			else
				set dsOrigem = objLista.GetRecordSet()
			end if
			set objLista = nothing
		else
			response.write ("ERRO! < listaSelecao.componenteLista > não inicializado...")
		end if
		
		MontaJavaScript
		
		%>
		<input type="Hidden" name="pagAtual" value="<%= pag %>">
		<input type="Hidden" name="coluna" value="<%= colAtual %>">
		<input type="Hidden" name="ordem" value="<%= ordAtual %>">
		<%
		
		if (not isEmpty(dsOrigem)) and (not dsOrigem.eof) then
			dim numcol
			if temCheck then 
				numcol = indcoluna + 1
			else
				numcol = indcoluna
			end if
		%>
		<table  width="100%" border="0" cellpadding="2" cellspacing="1">
		<% if temPaginacao then %>
			<tr><td class="paginacaoLista" colspan="<%= numcol %>">
					<% if cInt(pag) > 1 then
							response.write("<a href='#' onclick='paginaAnterior()'><b>&lt;&lt;&nbsp;anterior</b></a>&nbsp;&nbsp;")
						end if
						response.write(pag & "/" & pageCount)
						if cInt(pag) < cInt(pageCount) then
							response.write("<a href='#' onclick='paginaPosterior()'>&nbsp;&nbsp;<b>próxima&nbsp;&gt;&gt;</b></a>")
						end if %>	
					<br><br></td></tr>
		<% end if %>		
		<tr>
			<% if temCheck then %>
			<td width="0%" class="listaTitulo" valign="middle" align="center"><a href="javascript:void('')" onclick="marcaDesmarca()"><img src="imagens/check.gif" width="13" height="12" alt="" border="0" vspace="5"></a></td>
			<% end if
		
		for i = 0 to indColuna - 1
			dim imagem
			if colAtual = colunas(i).nome then
				if ordAtual = 0 then 'ASC
					imagem = "<img src='imagens/asc.gif' alt='' border='0' align='absmiddle' hspace='5'>"
				else
					imagem = "<img src='imagens/desc.gif' alt='' border='0' align='absmiddle' hspace='5'>"
				end if
			else
				imagem = ""
			end if
			%>
			<td class="listaTitulo" width="<%= colunas(i).largura %>"><a href="#" class="lnklistaTitulo" onclick="reordena('<%= colunas(i).nome %>')"><%= colunas(i).Rotulo %><%= imagem %></a></td>
			<%
		next
		%>
		</tr>
		<%
		dim linha, zebrado
		linha = 0
		do while not dsOrigem.eof
			linha = linha + 1
			if linha mod 2 = 0 then
				zebrado = "listaLinhaPar"
			else
				zebrado = "listaLinhaImpar"
			end if
			valorChave = ""

			if campoID <> "" then valorChave = dsOrigem(campoID)
			%>
		<tr>
			<% if temCheck then %>
			<td class="<%= zebrado %>" align="center"><input type="checkbox" value="<%= valorChave %>" name="selecionado"></td>
			<% end if %>
			<td class="<%= zebrado %>">
			<% if valorChave <> "" and temLink then
					Response.Write("<a href=""#"" onclick=""editar('" & valorChave & "')"">" & dsOrigem(colunas(0).nome) & "</a>") 
				else 
					Response.Write(dsOrigem(colunas(0).nome)) end if%></td>
			<%
			for i = 1 to indColuna - 1
			%>
			<td class="<%= zebrado %>">
			<% 
				'Se tipo = 11 (adBoolean) testa troca por "Sim" ou "Não"

				if  dsOrigem(colunas(i).nome).type = 11 then
					if dsOrigem(colunas(i).nome) = true then 
						response.write("Sim")
					else
						response.write("Não")
					end if
				else
					response.write(dsOrigem(colunas(i).nome))
				end if
			%></td>
			<%
			next
			%>
		</tr>
		<%
			dsOrigem.moveNext
		loop
		if temPaginacao then
			%>
			<tr><td class="paginacaoLista" colspan="<%= indColuna + 1 %>"><br>
				<% if cInt(pag) > 1 then
						response.write("<a href='#' onclick='paginaAnterior()'><b>&lt;&lt;&nbsp;anterior</b></a>&nbsp;&nbsp;")
					end if
					response.write(pag & "/" & pageCount)
					if cInt(pag) < cInt(pageCount) then
						response.write("<a href='#' onclick='paginaPosterior()'>&nbsp;&nbsp;<b>próxima&nbsp;&gt;&gt;</b></a>")
					end if %>	
			<br><br></td></tr>
		<% end if %>
		</table>
		<%
		else
		%>
		<table width="100%">
		<tr>
		 	<td class="msgAviso" valign="middle" align="center"><img src="imagens/warning.gif" alt="" border="0" align="absmiddle" hspace="10">Nenhum resultado foi encontrado com os atuais critérios de pesquisa!<br><br></td>
		</tr>
		</table>		
		<%
		end if
		dsOrigem.close
		set dsOrigem = nothing
	End Sub
	
	Private Sub criaControles(objeto)
		dim selecionado, primeiraexec, valor
		
		primeiraexec = false
		if Request.Form("tstprimexec") = "" then primeiraexec = true
		
		valor = ""
		if primeiraexec then
			valor = Request.cookies(NomeCookie)(objeto.nome)
		else
			valor = Request.Form(objeto.nome)
			if (objeto.controle = ctCheck) then
				if Trim(cStr(valor)) = Trim(cStr(objeto.valor)) then
					response.cookies(NomeCookie)(objeto.nome) = "true"
				else
					response.cookies(NomeCookie)(objeto.nome) = ""
				end if
			else
				if (objeto.controle = ctRadio) then
					if Trim(cStr(valor)) = Trim(cStr(objeto.valor)) then
						response.cookies(NomeCookie)(objeto.nome) = objeto.valor
					end if
				else
					response.cookies(NomeCookie)(objeto.nome) = valor
				end if
			end if
		end if
		
		Select Case objeto.controle
			'********************************************* EDIT
			Case ctEdit
				objeto.valor = valor
				%>
				<tr>
					<td class="rotuloForm"><%= objeto.rotulo %></td>
					<td>
					<input type="Text" value="<%= objeto.valor %>" name="<%= objeto.nome %>" maxlength="<%= objeto.tamanho %>" size="<%= objeto.tamanho %>"  class="campoForm"></td>
				</tr>
				<%
			'********************************************* COMBO
			Case ctCombo
				objeto.valor = valor
				%>
				<tr>
					<td class="rotuloForm"><%= objeto.rotulo %></td>
					<td>
						<select name="<%= objeto.nome %>" class="campoForm" onchange="<%= objeto.onchange %>">
						<%
						if objeto.todos then
							selecionado = ""
							if trim(objeto.valor) = "0" then selecionado = " selected"
							response.write ("<option value=0 "&selecionado&">Todos</OPTION>")
						end if
						do while not objeto.dsOrigem.eof
							selecionado = ""
							if trim(objeto.valor) = Trim(objeto.dsOrigem(objeto.valorItem)) then
								selecionado = " selected"
							end if
							%>
							<option value="<%= objeto.dsOrigem(objeto.valorItem) %>"<%= selecionado %>><%= objeto.dsOrigem(objeto.textoItem) %></OPTION>
							<%
							objeto.dsOrigem.moveNext
						loop
						%>
						</select>
					</td>
				</tr>
				<%
			'********************************************* COMBO
			Case ctComboMan
				objeto.valor = valor
				%>
				<tr>
					<td class="rotuloForm"><%= objeto.rotulo %></td>
					<td>
						<select name="<%= objeto.nome %>" class="campoForm" onchange="<%= objeto.onchange %>">
						<%
						if objeto.todos then
							selecionado = ""
							if trim(objeto.valor) = "0" then selecionado = " selected"
							response.write ("<option value=0 "&selecionado&">Todos</OPTION>")
						end if
						dim ind
						for ind = 0 to objeto.dsOrigem.indlista-1
							selecionado = ""
							if trim(cStr(objeto.valor)) = Trim(cStr(objeto.dsOrigem.lista(ind).valor)) then
								selecionado = " selected"
							end if
							%>
							<option value="<%= objeto.dsOrigem.lista(ind).valor %>"<%= selecionado %>><%= objeto.dsOrigem.lista(ind).rotulo %></OPTION>
							<%
						next
						%>
						</select>
					</td>
				</tr>
				<%
			'********************************************** CHECK BOX
			Case ctCheck
				selecionado = ""
				if (not primeiraexec) then 
					if (Trim(cStr(request.form(objeto.nome))) = Trim(cStr(objeto.valor))) then
						selecionado = " checked"
					end if
				else
					if request.cookies(NomeCookie)(objeto.nome) = "true" then
						selecionado = " checked"
					else	
						if objeto.checked then
							selecionado = " checked"
						end if
					end if
				end if
				%>
				<tr>
					<td class="rotuloForm">&nbsp;</td>
					<td class="textoForm">
					<input type="Checkbox" value="<%= objeto.valor %>" name="<%= objeto.nome %>"<%= selecionado %>><%= objeto.rotulo %></td>
				</tr>
				<%
			'********************************************** RADIO BUTTON
			Case ctRadio
				selecionado = ""
				if (not primeiraexec) then 
					if (Trim(cStr(request.form(objeto.nome))) = Trim(cStr(objeto.valor))) then
						selecionado = " checked"
					end if
				else
					if Trim(cStr(request.cookies(NomeCookie)(objeto.nome))) = Trim(cStr(objeto.valor)) then
						selecionado = " checked"
					else	
						if (objeto.checked) and (Trim(cStr(request.cookies(NomeCookie)(objeto.nome))) = "") then
							selecionado = " checked"
						end if
					end if
				end if
				%>
				<tr>
					<td class="rotuloForm"><% if objeto.grupo = "" then response.write("&nbsp;") else response.write(objeto.grupo) %>&nbsp;</td>
					<td class="textoForm">
					<input type="Radio" value="<%= objeto.valor %>" name="<%= objeto.nome %>"<%= selecionado %>><%= objeto.rotulo %></td>
				</tr>
				<%
		End Select
	End Sub
	
	Private Sub MontaJavaScript()
		%>
		<script  language="JavaScript">
		marca = true;
		function marcaDesmarca()
		{
			if(document.forms[0].selecionado.length) {
				for (i=0;i<document.forms[0].selecionado.length;i++)
					document.forms[0].selecionado[i].checked = marca;
			} else document.forms[0].selecionado.checked = marca;
			marca = !(marca);
			return false;	
		}
		function reordena(coluna)
		{
			if(coluna != document.forms[0].coluna.value)
				document.forms[0].ordem.value = 0; /*'ASC'*/
			else					
			{	
				if(document.forms[0].ordem.value == 0 ) /*'ASC'*/ 
					document.forms[0].ordem.value = 1;   /*'DESC'*/
				else
					document.forms[0].ordem.value = 0;
			}		
			document.forms[0].coluna.value = coluna;
			document.forms[0].pagAtual.value = 1;
			document.forms[0].action = location.pathname+location.search;
			document.forms[0].submit();
		}
		function paginaAnterior()
		{
			if(document.forms[0].pagAtual.value > 1) 
			{
				document.forms[0].pagAtual.value = parseInt(document.forms[0].pagAtual.value) - 1;
				document.forms[0].action = location.pathname+location.search;
				document.forms[0].submit();
			}
			else
			{
				alert('Você já está na primeira página!');
			}
		}
		function paginaPosterior()
		{
			document.forms[0].pagAtual.value = parseInt(document.forms[0].pagAtual.value) + 1;
			document.forms[0].action = location.pathname+location.search;
			document.forms[0].submit();
		}
		</script>
		<%
	End Sub
End Class

Public Function MontaNomeCookie(user)
	dim asp, posponto, posbarra
	asp = Request.ServerVariables("SCRIPT_NAME")
	posponto = InStrRev(asp, ".",len(asp), 1)
	posbarra = InStrRev(asp, "/", cInt(posponto), 1)
	MontaNomeCookie = Trim(user)&"-"&Mid(asp, cInt(posbarra)+1, cInt(posponto)-cInt(posbarra)-1)
End Function
%>