//JavaScript
<!--
/********************************************************************
		propriedade que guarda o conteudo de retorno da requisição
		==========================================================
		ajax.retorno
		ex: 
			alert(ajax.retorno);

		função a ser atribuido para o tratamento do retorno
		==========================================================
		ajax.fncTratar	= name_function;
		ex:
			function executa_ajax(){
				ajax.fncTratar	= tratar;
				ajax.sendData(...);
			
			}
			
			function tratar(){
				alert(this.retorno)
			}

		metodos de envio para requisição
		==========================================================		
		ajax.sendData(tipoRetorno, metodo, pagina, sendQuery)
		obs:
			tipoRetorno	-> Tipo de retorno pode assumir xml o texto default eh texto
			metodo		-> Metodo a ser executado pode assumir POST ou GET
			pagina		-> Pagina a ser requisitada que deve ter o retorno
			sendQuery	-> Parametros a serem passados
		ex:
			ajax.sendData("xml", "POST", "mostranome.asp", "nome=Roberto")
		
		metodos de para montar combo via xml
		==========================================================	
		ajax.sendCombo(sendTransacao, sendQuery, requestValue, requestItem, nameCombo)
		obs:
			sendTransacao	-> Transação cadastrada no PGAdmin que faz a consulta desejada
			sendQuery		-> Parametros a serem passados
			requestValue	-> Nome do campo que terá seu valor colocado no Value da tag <option>
							Quando houver mais de um campo, separá-los pelo caracter "|"
			requestItem		-> Nome do campo que terá seu valor exibido na tag <option>
						   Quando houver mais de um campo, separá-los pelo caracter "|"
		   nameCombo		-> Nome do combo que vai receber os valores
 		ex:
			ajax.sendCombo("Endereco_2_1", "txtCEP=11710000", "cdBairro", "cdLote|nmBairro", "cboBairro") 
			
		metodos de para retornar numa div uma requisição
		==========================================================	
		ajax.sendDiv(pagina, sendQuery, nameDiv)
		obs:
			pagina		-> Pagina a ser requisitada que deve ter o retorno
			sendQuery	-> Parametros a serem passados
		   	nameDiv 	-> Nome da div que vai receber o texto
 		ex:
			ajax.sendCombo("mostranome.asp", "nome=Roberto", "nome") 
			

*********************************************************************

		ajax._sendValue2(Pagina, sendQuery, VarRetorno,Funcao)
		obs:
			Pagina	        --> Codigo ASP que sera processado Assincrono.
			sendQuery	    --> Parametros a serem passados para o ASP
			VarRetorno      --> Variavel que recebe o retorno do ASP Executado pela Pagina.
			Funcao  		--> Funcao JavaScript a ser executada apos o retorno (tratamento de VarRetorno) 
 		ex:
 		
        Param = 'idContrato='+Contrato;
        Param = Param +'&nrEncerra='+nrEncerra;
        Param = Param +'&Campo='+escape(Campo);
        Param = Param +'&Obs='+escape(Obs);
        
        ajax.sendValue2('OS_GravaObs.asp',Param ,v,'Encerrar');
			
/********************************************************************		
		INSTANCIA XML CONFORME O BROWSER
********************************************************************/
	function createXML(){
		xml = false
		try {
			xml = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e){
			try {
				xml = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E){
				xml = null;
			}
		}

		if (!xml && typeof XMLHttpRequest!='undefined') {
			xml = new XMLHttpRequest();
		}
		return xml
	}


/********************************************************************		
		CLASSE AJAX
********************************************************************/
	function clsAjax()
	{
/********************************************************************		
		PROPRIEDADES DE CONTROLE DO COMPÓNENTE
********************************************************************/
		//propriedade para verificar se tem alguma requisição ativa
		this._carregando = false;
		//propriedade para verificar se o retorno vai ser em texto ou xml
		this._xml = false;
		//propriedade que informa o campo que o retorno deve retornar
		this._campoRetorno = "";
		//propriedade que informa o item caso tenha um array
		this._itemIndex = null
		//propriede de para debugar;
		this.debug = false;
		//propriedade que guarda o conteudo de retorno da requisição
		this.retorno = null;

/********************************************************************		
		METODOS DE EXECUÇÃO PROPRIOS DO COMPONENTE
********************************************************************/
		//metodo post
		this.sendData = _sendData;
		this.sendCombo = _sendCombo;
		this.sendDiv = _sendDiv;
		this.sendCEP = _sendCEP;
		this.sendValue = _sendValue;
		this.sendValue2 = _sendValue2;
/********************************************************************		
		EVENTOS DE EXECUÇÃO DO COMPONENTE
********************************************************************/		
		this.fncEsperar	= null;
		this.fncTratar	= null;
	}
/********************************************************************		
		FUNÇÃO QUE VERIFICA AS MUDANÇAS DE STATUS DO XMLHTTP
		E EXECUTA A FUNÇÃO DE TRATAMENTO
********************************************************************/
	function _onChange(){
		//verifica o status do xml
		if (xmlhttp.readyState == 4){
			//verifica qual o status atual do xmlhttp
			switch(xmlhttp.status){
				case 200:
					//recupera o o retorno conforme o tipo
					ajax.retorno = (ajax._xml) ? xmlhttp.responseXML :xmlhttp.responseText;
					//verifica se tem alguma função de tratamento para executar
					if (ajax.fncTratar != null){
						ajax.fncTratar();
					}
				break
				case 404:
					alert("Arquivo não encontrado.");
					ajax.retorno =  (ajax._xml) ? xmlhttp.responseXML :xmlhttp.responseText;
				break
				case 500:
					/*alert("Erro interno do servidor.");
					ajax.retorno = (ajax._xml) ? xmlhttp.responseXML :xmlhttp.responseText;*/
					ajax.retorno = "[]";
					if (ajax.fncTratar != null)
						ajax.fncTratar();
				break
				default:
					alert("Há problema com a requisição.");
					ajax.retorno =  (ajax._xml) ? xmlhttp.responseXML :xmlhttp.responseText;
				break
			}
			if (this.debug==true)
			{
				alert('Retorno : ' + ajax.retorno);
			}
			
			//seta a propriedade carregando para false para terminar uma requisição
			ajax._carregando = false;
		}
	}

/********************************************************************		
		FUNÇÃO QUE ENVIA UMA REQUISIÇÃO ATRAVES DO XMLHTTP
********************************************************************/
	function _sendData(tipoRetorno, metodo, pagina, sendQuery){
		//verifia se ja tem uma requisição em execução
		if (this._carregando){
			alert("Aguarde um momento, uma requisição ja foi solicitada.")
		}
		else{
			//verifia se o objeto xmlhttp esta instanciado
			if (xmlhttp==null){
				alert("Objeto não instanciado.");
			}
			else{

				if (pagina == "" || pagina == null){
					alert("Deve ser informado uma pagina para requisicao.");
					return false;
				}
				if (sendQuery == "") sendQuery = null;
				//verifica se foi inormado o metodo correto
				if (metodo == "") metodo = "POST";
				if (metodo != "POST" && metodo != "GET"){
					alert("Por favor informar ou medoto correto.");
					return false;
				}
				
				//seta a propriedade carregando para true para inicializar uma requisição
				this._carregando = true;
				
				//seta a propriedde xml para saber qual o tipo de retorno
				this._xml = (tipoRetorno == "xml");
				
				//abre o xmlhttp para envio
				xmlhttp.open(metodo, pagina, true);
				
				//muda o cabeçalho de retorno do xmlhttp
				xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				
				//envia os dados para pagina
				xmlhttp.send(sendQuery);
				//associa a função onchange para verificar os status do xmlhttp
				xmlhttp.onreadystatechange = _onChange
           }
		}
	}
	

/********************************************************************		
		FUNÇÃO QUE ENVIA UMA REQUISIÇÃO ATRAVES DO XMLHTTP PARA
		RETORNAR NUM COMBO
********************************************************************/
	function _sendCombo(obj ,Metodo ,Param , requestValue, requestItem, nameCombo)
	{
		
		var query = new Array;

		if (requestItem == "" || requestItem == null){
			alert("Deve ser informado os paramentros de retorno.");
			return false;
		}
		
		/*
		if (requestValue == "" || requestValue == null){
			alert("Deve ser informado os paramentros de valor para o retorno.");
			return false;
		}
        */
        
		if (obj == "" || obj == null){
			alert("Deve ser informado a Componene ActiveX.");
			return false;
		}
		
		if (Metodo == "" || Metodo == null){
			alert("Deve ser informado a Metodo.");
			return false;
		}

		if (nameCombo == "" || nameCombo == null){
			alert("O nome do combo deve ser informado.");
			return false;
		}
		
		if (document.getElementById(nameCombo) == null) {
			alert("Combo não encontrado na pagina.");
			return false;
		}
		
		this._campoRetorno = nameCombo;

        requestItem	= requestItem.replace(' ','!');
        requestItem	= requestItem.replace(' ','!');
        requestItem	= requestItem.replace(' ','!');
        requestItem	= requestItem.replace(' ','!');
        requestItem	= requestItem.replace(' ','!');
        
		query[0] = "obj=" + obj;
		query[1] = "p_value=" + escape(requestValue);
		query[2] = "p_item=" + escape(requestItem);
		query[3] = "Metodo=" + escape(Metodo);
		query[4] = "Param=" + escape(Param);
		
		this.fncTratar	= function () 
		{
			eval("var combo=document.getElementById('" + this._campoRetorno + "'); combo.length = 0;" + this.retorno);
		};
        
		this.sendData("", "POST", "/CarsystemWeb/Include/Ajax/ComboAjax.asp", query.join("&"));

	}

	function _sendDiv(pagina, sendQuery, nameDiv){
		
		var query = new Array;
		
		if (sendQuery == "") sendQuery = null;
		
		if (nameDiv == "" || nameDiv == null){
			alert("O nome do div deve ser informado.");
			return false;
		}
		
		if (document.getElementById(nameDiv) == null) {
			alert("Div não encontrado na pagina.");
			return false;
		}
		
		this._campoRetorno = nameDiv;

		this.fncTratar = function (){
			document.getElementById(this._campoRetorno).innerHTML = this.retorno;
		};
		
		this.sendData("", "", pagina, sendQuery);
	}


	function _sendCEP(pagina, sendQuery, Nome, Num, Habilita, nameDiv)
	{
	    	
		var query = new Array;
		
		if (pagina == "" || pagina == null ) pagina = "/CarsystemWeb/Include/Ajax/CEP.asp"
	
		if (sendQuery == "") sendQuery = null;
		
		if (nameDiv == "" || nameDiv == null){
			alert("O nome do div deve ser informado.");
			return false;
		}
		
		if (document.getElementById(nameDiv) == null) {
			alert("Div não encontrado na pagina.");
			return false;
		}
		
		
	    if (Num == "") Num = '';

		
		this._campoRetorno = nameDiv;

		this.fncTratar = function (){
			document.getElementById(this._campoRetorno).innerHTML = this.retorno;
		};
		
		
		    query[0] = sendQuery;
		    query[1] = "Nome=" + Nome;
		    query[2] = "Num=" + Num;
		    query[3] = "Habilita=" + Habilita;

		    sendQuery = query.join("&");
		
		this.sendData("", "", pagina, sendQuery);
	}




	
	function _sendValue(sendTransacao, sendQuery, tipoRetorno, Campo, RercordSet){
		
		var query = new Array;
		
		if (sendTransacao == "" || sendTransacao == null){
			alert("Deve ser informado a transação.");
			return false;
		}
	
		if (tipoRetorno == "" || tipoRetorno == null){
			alert("O tipo de retorno deve ser informado.");
			return false;
		}

		if (RercordSet.toUpperCase()=="TRUE"){
			if(Campo == "" || Campo == null){
				alert("O tipo de retorno deve ser informado.");
				return false;
			}
		}else{
			if(RercordSet.toUpperCase()!="FALSE"){
				RercordSet = "False"
			}
		}

		query[0] = "p_transacao=" + sendTransacao;
		query[1] = "p_TipoRetorno=" + tipoRetorno;
		query[2] = "p_Campo=" + Campo;
		query[3] = "p_RecordSet=" + RercordSet;
		query[4] = sendQuery;
		
		this.sendData("", "POST", "/intra2/includes/RetornoValorAjax.asp", query.join("&"));
	}
	

/*********************************************************************

		ajax._sendValue2(Pagina, sendQuery, VarRetorno,Funcao)
		obs:
			Pagina	        --> Codigo ASP que sera processado Assincrono.
			sendQuery	    --> Parametros a serem passados para o ASP
			VarRetorno      --> Variavel que recebe o retorno do ASP Executado pela Pagina.
			Funcao  		--> Funcao JavaScript a ser executada apos o retorno (tratamento de VarRetorno) 
 		ex:
 		
        Param = 'idContrato='+Contrato;
        Param = Param +'&nrEncerra='+nrEncerra;
        Param = Param +'&Campo='+escape(Campo);
        Param = Param +'&Obs='+escape(Obs);
        
        ajax.sendValue2('OS_GravaObs.asp',Param ,v,'Encerrar');
 		
/********************************************************************/		
	function _sendValue2(Pagina, sendQuery, VarRetorno,Funcao)
	{
		
		var query = new Array;
		if (sendQuery == "") sendQuery = null;
		
		if (Funcao != "" && Funcao != null)
		{
		    this.fncTratar = function()
		    {
			    VarRetorno = this.retorno;                                 
			    eval(Funcao+'('+VarRetorno+');');
		    };
		}else
		{
		    this.fncTratar = function()
		    {
			    VarRetorno = this.retorno;                
			    return VarRetorno;
		    };
		}
		
		this.sendData("", "", Pagina, sendQuery);
		
	}
	

/********************************************************************		
		CRIA OS OBJETOS NECESSARIO PARA EXECUTAR COMO AJAX
********************************************************************/
	//Cria o objeto xml
	var xmlhttp = createXML();
	//cria o objeto ajax
	var ajax = new clsAjax;
-->
