<%
const stVertical		= 1
const stHorizontal	= 2

const spSpaces 	= "&nbsp;&nbsp;&nbsp;"
const spDate 		= "/"
const spHifen 		= "-"
const spTime 		= ":"
const spNone		= ""

const ctEdit  		= 1
const ctCombo 		= 2
const ctText 		= 3
const ctList 		= 4
const ctButton		= 5
const ctCheck 		= 6
const ctRadio 		= 7
const ctLabel		= 8
const ctComboMan 	= 9

public indicecampoformulario
indicecampoformulario = 0

'**********************************************************************************
Public Function GRDAutoriza(usuario, sistema, programa, operacao)
	dim user
	set user = usuario
	if programa <> "" then
		if not isEmpty(user) then
			GRDAutoriza = user.Autorizado(sistema,programa,operacao)
		else
			GRDAutoriza = false
		end if
	else
		GRDAutoriza = true
	end if
End Function

'**********************************************************************************
Class itemComboForm
	public rotulo
	public valor
End Class

Class listaItensCombo
	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 itemComboForm
		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 campoFormulario
	public nome				'nome do controle
	public rotulo			'rótulo do controle
	public controle		'ctEdit, ctCombo, ctCheck, ctRadio, ctText, ctList, ctButton
	public tamanho       'maxsize do controle (ctEdit e ctText)
	public colunas			'número de colunas (ctEdit e ctText)
	public linhas			'número de linhas (ctText e ctList)
	public valor         'valor default para o controle
	public checked			'inicialmente marcado (ctCheck e ctRadio)
	public onclick			'onClick do controle (ctButton)
	public onchange		'onChange do controle (ctCombo, ctList)
	public multi			'multiselect true/false (ctList)
	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
	
	Private Sub Class_Terminate()
		if (controle = ctCombo) or (controle = ctList) then
			set dsOrigem = nothing
		end if
   End Sub
End Class
'**********************************************************************************
Class grupoCampos
	
	public rotuloGrupo	'rótulo do grupo de controles
	public sentido			'sentido do grupo, horizontal ou vertical
	public separador		'separador de controles
	public enabled			'habilita/desabilita grupo
	
	private inicializou
	
	Private Sub Class_Initialize()
		inicializou = false
		enabled = true
	End Sub
	'--------------------------------------------------------------------------
	Private Sub Class_Terminate()
		if sentido = stHorizontal then
			Response.write("</td></tr>")
		end if
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addEdit(nome, rotulo, valor, tamanho, colunas)
		addCampo nome, rotulo, ctEdit, valor, tamanho, colunas, false, ""
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addCheck(nome, rotulo, valor, checked)
		addCampo nome, rotulo, ctCheck, valor, "", "", checked, ""
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addRadio(nome, rotulo, valor, checked)
		addCampo nome, rotulo, ctRadio, valor, "", "", checked, ""
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addButton(nome, rotulo, onclick, GRDprograma, GRDoperacao)
		addCampo nome, rotulo, ctButton, "", "", "", false, onclick
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addLabel(nome, rotulo, valor, tamanho)
		addCampo nome, rotulo, ctLabel, valor, tamanho, tamanho+3, "", ""
	End Sub
	'--------------------------------------------------------------------------
	Private Sub addCampo(nome, rotulo, controle, valor, tamanho, colunas, checked, onclick)
		dim novo
		set novo = new campoFormulario
		novo.nome 		= nome
		novo.rotulo 	= rotulo
		novo.controle 	= controle
		novo.valor 		= valor
		novo.tamanho 	= tamanho
		novo.colunas	= colunas
		novo.onclick	= onclick
		novo.checked 	= checked
		
		if enabled then indicecampoformulario = indicecampoformulario + 1
		if not inicializou then
			%>
			<tr><td class="rotuloForm" nowrap><%= rotuloGrupo %></TD>
				<td class="textoForm">
				<%
			if novo.controle = ctEdit then response.write(novo.rotulo)
			criaControle novo, indicecampoformulario, enabled
			
			if sentido = stVertical then
				response.write("</td></tr>")
			end if
			
			inicializou = true
		else
			if sentido = stVertical then
				%>
				<tr><td class="rotuloForm" nowrap>&nbsp;</TD>
					 <td class="textoForm">
					 <% 
					 if novo.controle = ctEdit then response.write(novo.rotulo)
					 criaControle novo, indicecampoformulario, enabled
					 %></td>
				</tr>
				<%
			else
				response.write(separador)
				if novo.controle = ctEdit then response.write(novo.rotulo)
				criaControle novo, indicecampoformulario, enabled
			end if
		end if
		set novo = nothing
	End Sub
	
End Class
'**********************************************************************************
Class Formulario
	
	Private Enabled
	Private programaGRD
	Private operacaoGRD
	
	'--------------------------------------------------------------------------
	Private Sub Class_Initialize()
		Enabled = true
		Response.write("<input type='Hidden' name='ctrlchk$' value='1'>")
		Response.write("<BR><table border='0' cellpadding='3' cellspacing='0' width='100%'>")
		if err.number <> 0 then
			addErroMsg(err.description)
		end if
		indicecampoformulario = 0
	End Sub
	'--------------------------------------------------------------------------
	Private Sub Class_Terminate()
		Response.write("</table>")
	End Sub
	'--------------------------------------------------------------------------
	Public Sub seguranca(programa, operacao)
	'Implemente aqui seu código para checagem de autorização do usuário ativo
        dim autorizacao
		autorizacao = true
		if not autorizacao then
			Enabled = false
		end if
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addEdit(nome, rotulo, valor, tamanho, colunas)
		addCampo nome, rotulo, ctEdit, valor, tamanho, colunas, "", "", "", nothing, "", "", false
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addText(nome, rotulo, valor, colunas, linhas)
		addCampo nome, rotulo, ctText, valor, "", colunas, linhas, "", "", nothing, "", "", false
	End Sub
	
	Public Sub addText2(nome, rotulo, valor, colunas, linhas)
		addCampo nome, rotulo, ctText2, valor, "", colunas, linhas, "", "", nothing, "", "", false
	End Sub	
	'--------------------------------------------------------------------------
	Public Sub addCombo(nome, rotulo, valor, onchange, fieldTexto, fieldValor, rs)
		valor = Split(valor,",")
		addCampo nome, rotulo, ctCombo, valor, "", "", 1, fieldTexto, fieldValor, rs, "", onchange, false
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addComboManual(nome, rotulo, valor, onchange, listaItens)
		addCampo nome, rotulo, ctComboMan, valor, "", "", "", "", "", listaItens, "", onchange, false
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addList(nome, rotulo, valor, linhas, multiselect, onchange, fieldTexto, fieldValor, rs)
		valor = Split(valor,",")
		addCampo nome, rotulo, ctList, valor, "", "", linhas, fieldTexto, fieldValor, rs, "", onchange, multiselect
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addButton(nome, rotulo, onclick, GRDprograma, GRDoperacao)
		addCampo nome, rotulo, ctButton, "", "", "", linhas, fieldTexto, fieldValor, rs, onclick, "", false
	End Sub
	'--------------------------------------------------------------------------
	Public Function addGrupo(rotulo, sentido, separador)
		dim novo
		set novo = new grupoCampos
		novo.rotuloGrupo = rotulo
		novo.sentido = sentido
		novo.separador = separador
		novo.enabled = Enabled
		set addGrupo = novo
	End Function
	'--------------------------------------------------------------------------
	Public Sub addLabel(nome, rotulo, valor, tamanho)
		addCampo nome, rotulo, ctLabel, valor, tamanho, tamanho, "", "", "", nothing, "", "", false
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addErroMsg(mensagem)
		%>
		<tr>
		 	<td class="rotuloForm" valign="middle"><img src="imagens/error.gif" alt="" border="0" align="absmiddle"></td>
		 	<td class="msgErro" valign="middle"><%= mensagem %></td>
		</tr>
		<%
		addSeparador
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addAvisoMsg(mensagem)
		%>
		<tr>
		 	<td class="rotuloForm" valign="middle"><img src="imagens/warning.gif" alt="" border="0" align="absmiddle"></td>
		 	<td class="msgAviso" valign="middle"><%= mensagem %></td>
		</tr>
		<%
		addSeparador
	End Sub
	'--------------------------------------------------------------------------
	Public Sub addSeparador()
		%>
		<tr>
		 	<td colspan="2"><hr size="3" width="90%"></td>
		</tr>
		<%
	End Sub
	'--------------------------------------------------------------------------
	Private Sub addCampo(nome, rotulo, controle, valor, tamanho, colunas, linhas, fieldTexto, fieldValor, rs, onclick, onChange, multiselect)
		dim alinhamento
		dim novo
		
		set novo = new campoFormulario
		novo.nome 		= nome
		novo.rotulo 	= rotulo
		novo.controle 	= controle
		novo.valor 		= valor
		novo.tamanho 	= tamanho
		novo.colunas	= colunas
		novo.linhas		= linhas
		novo.textoItem = fieldTexto
		novo.valorItem = fieldValor
		novo.onClick   = onclick
		novo.onChange	= onchange
		novo.multi		= multiselect
		if (novo.controle = ctCombo) or (novo.controle = ctComboMan) or (novo.controle = ctList) then
			if not isEmpty(rs) then set novo.dsOrigem = rs
		end if
		alinhamento = ""
		if (novo.controle = ctText or novo.controle = ctText2 or novo.controle = ctList) then
			alinhamento = " valign='top'"
		end if
		if Enabled then indicecampoformulario = indicecampoformulario + 1
		if novo.controle <> ctButton then
			%>
			<tr><td class="rotuloForm" nowrap<%= alinhamento %>><%= novo.rotulo %></TD>
				 <td><% criaControle novo, indicecampoformulario, Enabled %></td>
			</tr>
			<%
		else
			%>
			<tr><td class="rotuloForm" nowrap>&nbsp;</TD>
				 <td><% criaControle novo, indicecampoformulario, Enabled %></td>
			</tr>
			<%
		end if
		set novo = nothing
	End Sub
	'--------------------------------------------------------------------------
	
End Class

Public Sub criaControle(objeto, indice, habilita)
	
	dim selecionado, ind
	
	Select Case objeto.controle
		'================================================= EDIT
		Case ctEdit, ctLabel
			if request.form(objeto.nome) <> "" then
				objeto.valor = request.form(objeto.nome)
			end if
			if (habilita and objeto.controle = ctEdit) then
				%>
	  			<input type="Text" tabindex="<%= indice %>" class="campoForm" maxlength="<%= objeto.tamanho %>" SIZE="<%= objeto.colunas %>" name="<%= objeto.nome %>" value="<%= objeto.valor %>">
			<% else %>
	  			<input type="Text" tabindex="<%= indice %>" class="campoFormDisabled" maxlength="<%= objeto.tamanho %>" SIZE="<%= objeto.colunas %>" name="<%= objeto.nome %>" value="<%= objeto.valor %>" onfocus="this.blur()">
				<%
			end if
		'================================================= COMBO, LIST
		Case ctCombo, ctList
			if request.form(objeto.nome) <> "" then
				objeto.valor = Split(request.form(objeto.nome),",")
			end if
			if habilita then
				%>
				<select class="campoForm" tabindex="<%= indice %>" name="<%= objeto.nome %>" size="<%= objeto.linhas %>"<% if objeto.controle = ctList then response.write(" multiple=" & objeto.multi) %> onchange="<%= objeto.onChange %>">
			<% else %>
				<select class="campoFormDisabled" tabindex="<%= indice %>" name="<%= objeto.nome %>" size="<%= objeto.linhas %>"<% if objeto.controle = ctList then response.write(" multiple=" & objeto.multi) %>>
			<%
			end if
			if not isEmpty(objeto.dsOrigem) then
	 			do while not objeto.dsOrigem.eof
					selecionado = ""
					if InArray(objeto.valor, objeto.dsOrigem(objeto.valorItem)) then
						selecionado = " selected"
					end if
					if (habilita or (not habilita and selecionado <> "")) then
					%>
					<option value="<%= objeto.dsOrigem(objeto.valorItem) %>"<%= selecionado %>><%= objeto.dsOrigem(objeto.textoItem) %></OPTION>
					<%
					end if
					objeto.dsOrigem.moveNext
				loop
			end if
			%>
			</select>
			<%
		'================================================= COMBO, LIST
		Case ctComboMan
			if request.form(objeto.nome) <> "" then
				objeto.valor = request.form(objeto.nome)
			end if
			if habilita then
				%>
				<select class="campoForm" tabindex="<%= indice %>" name="<%= objeto.nome %>" size="<%= objeto.linhas %>" onchange="<%= objeto.onChange %>">
			<% else %>
				<select class="campoFormDisabled" tabindex="<%= indice %>" name="<%= objeto.nome %>">
			<%
			end if
			if not isEmpty(objeto.dsOrigem) then
	 			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
					response.write "h="&cstr(habilita)
					response.write "s="&selecionado
					if (habilita or (not habilita and selecionado <> "")) then
					%>
					<option value="<%= objeto.dsOrigem.lista(ind).valor %>"<%= selecionado %>><%= objeto.dsOrigem.lista(ind).rotulo %></OPTION>
					<%
					end if
				next
			end if
			%>
			</select>
			<%
		'================================================= TEXT
		Case ctText
			if request.form(objeto.nome) <> "" then
				objeto.valor = request.form(objeto.nome)
			end if
			if habilita then
			%>
			<textarea class="campoForm" tabindex="<%= indice %>" name="<%= objeto.nome %>" cols="<%= objeto.colunas %>" rows="<%= objeto.linhas %>"><%= objeto.valor %></textarea>
			<% else %>
			<textarea class="campoFormDisabled" tabindex="<%= indice %>" name="<%= objeto.nome %>" cols="<%= objeto.colunas %>" rows="<%= objeto.linhas %>" onfocus="this.blur()"><%= objeto.valor %></textarea>
			<%
			end if
			
		Case ctText2
			if request.form(objeto.nome) <> "" then
				objeto.valor = request.form(objeto.nome)
			end if
			%>
			<textarea class="campoFormDisabled" tabindex="<%= indice %>" name="<%= objeto.nome %>" cols="<%= objeto.colunas %>" rows="<%= objeto.linhas %>" onfocus="this.blur()"><%= objeto.valor %></textarea>
			<%
		'================================================= CHECK BOX
		Case ctCheck
			selecionado = ""
			if request.form("ctrlchk$") <> "" then
				if InArray(Split(request.form(objeto.nome),","), objeto.valor) then
					selecionado = " checked"
				end if
			else
				if objeto.checked then selecionado = " checked"
			end if
			if habilita then
			%>
			<input type="Checkbox" tabindex="<%= indice %>" value="<%= objeto.valor %>" name="<%= objeto.nome %>"<%= selecionado %>><%= objeto.rotulo %>
			<% else 
					if selecionado <> "" then gif = "checkon" else gif = "checkoff"%>
					<img align="absmiddle" src="imagens/<%= gif %>.gif" alt="" hspace="3" vspace="3" border="0"><%= objeto.rotulo %>
			<%
			end if
		'================================================= RADIO BUTTON
		Case ctRadio
			selecionado = ""
			if (request.form(objeto.nome) <> "") then
				if trim(request.form(objeto.nome)) = trim(cstr(objeto.valor)) then
					selecionado = " checked"
				end if
			else
				if objeto.checked then
					selecionado = " checked"
				end if
			end if
			if habilita then
			%>
				<input type="Radio" tabindex="<%= indice %>" value="<%= objeto.valor %>" name="<%= objeto.nome %>"<%= selecionado %>><%= objeto.rotulo %>
			<% else
					if selecionado <> "" then gif = "radioon" else gif = "radiooff"%>
					<img align="absmiddle" src="imagens/<%= gif %>.gif" alt="" hspace="3" vspace="3" border="0"><%= objeto.rotulo %>
			<%
			end if
		'================================================= BUTTON
		Case ctButton
'			if GRDAutoriza(objeto.GRDPrograma, objeto.GRDOperacao) then
				if habilita then
				%>
				<input type="Button" class="botaoAcao" tabindex="<%= indice %>" name="<%= objeto.nome %>" value="<%= objeto.rotulo %>" onclick="<%= objeto.onclick %>">
				<% else %>
				<input type="Button" class="botaoAcaoDisabled" tabindex="<%= indice %>" name="<%= objeto.nome %>" value="<%= objeto.rotulo %>">
				<%
				end if
'			end if
	End Select
End Sub

Function InArray(tstArray, teste)
	dim item
	InArray =false
	For Each item In tstArray
		if trim(cStr(item)) = trim(cStr(teste)) then InArray = true
	Next
End Function
%>