/***************************************************************
Script principal, para utilizacao auxiliar de rotinas JavaScript
Por....: SHIFT Consultoria e sistemas
Em.....: 25 de maio de 2006
Versao.: 1.0.00
****************************************************************
Alteracoes:
****************************************************************/
var AjaxControle = {
	mensagem_acao : "nao contem o campo acao no formulario",
	mensagem_servidor : "",
	dados             : null,
	cont              : 0,
	cont1             : 0,	
	cf                : 0,
	lcselect          : 0,	
	dados_botao       : "",
	actionForm        : "",		
	retorno           : "",
	asp               : 0,
	retorno_aspa      : "",
	multiple_select   : "",
	novo_valor        : "",	
		
	
	//function enviar(form,acao, msg_erro) -> envia os dados do formulario
	// acoes possiveis em um formulario
	//form -> nome do formulario que serß passado os dados. Todos os forms deverß ter o campo acao
	//acao -> tipo de acao que serß passado. exemplo, ACAO_PESQUISA
	//msg_erro -> a mensagem de erro que aparecera quando nao conseguir estabelecer conexao com o servidor
   
   mensagem :  function (msg){
      AjaxControle.mensagem_servidor = msg;
   },   
   enviar :  function (form, acao){
		if (form.acao == null) alert(AjaxControle.mensagem_acao);	
		form.acao.value               = acao;
		var oForm                     = form;
		var sBody                     = AjaxControle.getRequestBody(oForm);
		var oXmlHttp = zXmlHttp.createRequest();
		oXmlHttp.open("post", oForm.action, true);
		oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		oXmlHttp.onreadystatechange = function () {
			 if (oXmlHttp.readyState == 4) {
				if (oXmlHttp.status == 200) {
					if (!AjaxControle.ValidaRetornoD3(oXmlHttp.responseText,"1")){
						if (oXmlHttp.responseText.charAt(1)=="\""){
						  AjaxControle.retorno = AjaxControle.verAspa_dupas(oXmlHttp.responseText);
						}else{
						  AjaxControle.retorno = AjaxControle.verAspa_simples(oXmlHttp.responseText);
						}
						retorno_d3(AjaxControle.retorno,acao);
					    AjaxControle.alert_aviso(AjaxControle.retorno);
						return																	
					}
					retorno_d3(oXmlHttp.responseText,acao);				  
				    AjaxControle.alert_aviso(oXmlHttp.responseText);											
				}else{					
				   alert(AjaxControle.mensagem_servidor);
				   retorno_d3("",acao);				   				   
				}
			 }
		};

		oXmlHttp.send(sBody);
	},
	getRequestBody : function (oForm) {
		var aParams = new Array();
		for (AjaxControle.cont=0 ; AjaxControle.cont < oForm.elements.length; AjaxControle.cont++) {
		   if (oForm.elements[AjaxControle.cont].value == "") continue;
			if (oForm.elements[AjaxControle.cont].type == "radio"){
				if (oForm.elements[AjaxControle.cont].checked == true){
					var sParam = encodeURIComponent(oForm.elements[AjaxControle.cont].name);
					sParam += "=";
					sParam += encodeURIComponent(oForm.elements[AjaxControle.cont].value);
					aParams.push(sParam);
				}
			}else if (oForm.elements[AjaxControle.cont].type == "checkbox"){
					if (oForm.elements[AjaxControle.cont].checked == true){
						var sParam = encodeURIComponent(oForm.elements[AjaxControle.cont].name);
						sParam += "=";
						sParam += encodeURIComponent(oForm.elements[AjaxControle.cont].value);
						aParams.push(sParam);
					}
					//utilizado para pesquisar select com multiplos valores.
					//o nome da variavel é repetido e o sistema o lerá em multivalores.
			}else if (oForm.elements[AjaxControle.cont].type == "select-multiple"){
				campo = oForm.elements[AjaxControle.cont]
				for (AjaxControle.lcselect = 0;AjaxControle.lcselect < campo.options.length;AjaxControle.lcselect++){
					if (campo.options[AjaxControle.lcselect].selected){
						var sParam = encodeURIComponent(oForm.elements[AjaxControle.cont].name);
						sParam += "=";
						sParam += encodeURIComponent(oForm.elements[AjaxControle.cont].options[AjaxControle.lcselect].value);
						aParams.push(sParam);
					}//fim do if
				}//fim do for								
			}else{

					var sParam = encodeURIComponent(oForm.elements[AjaxControle.cont].name);
					sParam += "=";
					sParam += encodeURIComponent(oForm.elements[AjaxControle.cont].value);
					aParams.push(sParam);
			}
		}
		aParams.push("ajax=1");
		return aParams.join("&");
	},
	//form -> NOME DO FORMULARIO
	//dados -> STRING DO FORMULARIO VINDA 
	getdados:function (form, dados){
	    //passa por todos os campos do formulario
		for (AjaxControle.cf = 0;AjaxControle.cf <= form.elements.length; AjaxControle.cf++){		   
		       //se o campo do formulario nao for nulo
				if (form.elements[AjaxControle.cf]!= null){
				//se o campo do formulario possuir nome
				if (form.elements[AjaxControle.cf].name != null){
					//se os campos do formulario nao for botao ou campo do tipo file
					if (form.elements[AjaxControle.cf].type == "button") continue;
					if (form.elements[AjaxControle.cf].type == "submit") continue;
					if (form.elements[AjaxControle.cf].type == "file") continue;
					//se contiver o nome do formulario na string vinda do ajax				
					if (eval("dados."+form.elements[AjaxControle.cf].name) != null) {									
					   //tipos de insercao especial(select radio e checkbox) tera os dados cadastrado de outra maneira
						if ((form.elements[AjaxControle.cf].type == "select") || (form.elements[AjaxControle.cf].type == "select-one"))					
							AjaxControle.setSelect(form.elements[AjaxControle.cf],eval("dados."+form.elements[AjaxControle.cf].name));
						else if (form.elements[AjaxControle.cf].type == "select-multiple")					
							AjaxControle.setSelect_multiple(form.elements[AjaxControle.cf],eval("dados."+form.elements[AjaxControle.cf].name));							
						else if (form.elements[AjaxControle.cf].type == "radio"){
							AjaxControle.setRadio(form.elements[AjaxControle.cf],eval("dados."+form.elements[AjaxControle.cf].name));
						}else if (form.elements[AjaxControle.cf].type == "checkbox"){
							if (form.elements[AjaxControle.cf].value == eval("dados."+form.elements[AjaxControle.cf].name))						
								form.elements[AjaxControle.cf].checked = true;
						}else form.elements[AjaxControle.cf].value = eval("dados."+form.elements[AjaxControle.cf].name);          
						//caso seja um campo normal de insercao de dados.
					}
				}
			    }
         
		}//fim do for
	},
	//seleciona o dado atraves do codigo apos fazer uma pesquisa
	setSelect :  function (campo,valor){

		for (AjaxControle.lcselect = 0;AjaxControle.lcselect < campo.length;AjaxControle.lcselect++){
			if (campo.options[AjaxControle.lcselect].value == valor){
				campo.options[AjaxControle.lcselect].selected = true;
				return;
			}
		}
	},
    setSelect_multiple :  function (campo,valor){			
		AjaxControle.multiple_select  = valor.toUpperCase().split("<VM>")		
		for (AjaxControle.contl = 0;AjaxControle.contl < AjaxControle.multiple_select.length; AjaxControle.contl++){
			AjaxControle.novo_valor	 = AjaxControle.multiple_select[AjaxControle.contl]		
			for (AjaxControle.lcselect = 0;AjaxControle.lcselect < campo.length;AjaxControle.lcselect++){			
				if (campo.options[AjaxControle.lcselect].value == AjaxControle.novo_valor){				
					campo.options[AjaxControle.lcselect].selected = true;
				}
			}
	    }
	},	  
	setRadio : function (campo,valor){   
		if (campo == null)	return;
		if (campo.type != "radio") return;
		if (campo.value == valor) campo.checked = true;		

	},
	//form T o nome do formulario que irß desabilitar os bot)es	
	desabilita_botao : function (form){
      AjaxControle.dados_botao = new Array();
		for (AjaxControle.cf = 0;AjaxControle.cf <= form.elements.length; AjaxControle.cf++){		   
			if (form.elements[AjaxControle.cf]!= null)
   			if (form.elements[AjaxControle.cf].name != null)
			if (form.elements[AjaxControle.cf].type == "button"){
			   AjaxControle.dados_botao[AjaxControle.cf] = form.elements[AjaxControle.cf].disabled;
			   form.elements[AjaxControle.cf].disabled = true;
			}
		}//fim do for
	},
	//form T o nome do formulario que irß habilitar os bot)es
	habilita_botao : function (form){
		for (AjaxControle.cf = 0;AjaxControle.cf <= form.elements.length; AjaxControle.cf++){		   
			if (form.elements[AjaxControle.cf]!= null)
   				if (form.elements[AjaxControle.cf].name != null)
   			if (form.elements[AjaxControle.cf].type == "button"){
   			   form.elements[AjaxControle.cf].disabled = AjaxControle.dados_botao[AjaxControle.cf] ;
   			}

		}//fim do for
	},
	//mostra as mensagens que o programa envia
	alert_aviso:function(mensagem){	
		if (mensagem != ""){
			try {
				AjaxControle.dados = eval("("+mensagem+")");
   			if ((AjaxControle.dados.aviso != null)) {
   				for(AjaxControle.cont = 0;AjaxControle.cont < AjaxControle.dados.aviso.length ;AjaxControle.cont++){
   					alert(AjaxControle.dados.aviso[AjaxControle.cont].mensagem);
   				}					  
   			}
			} catch (erro) {
			   return;
			}
		}				   
	},
	//mostra_mesagem quando definido como 0 ou null nao tera a mensagem mostrada.	
	ValidaRetornoD3: function(dados_retorno,mostra_mensagem){
		try {
			if (dados_retorno == "") return true;
			AjaxControle.dados = eval("("+dados_retorno+")");
		} catch (erro) {
			if (erro instanceof Error) {
				if (mostra_mensagem == null){
					var erro_msg = erro.name+'  '+erro.message;
					if (confirm('A estrutura da variavel de retorno, esta incorreta: '+erro_msg+'\n\nDeseja visualizar os dados de retorno?') ) {
					   alert("dados_retorno: "+dados_retorno);
					}
				}
				return false;
			}
		}
		return true;
	},
	//esta funcao pega os dados de um formulario e passa para outro formulario
	//oformrecebe -> formulario que esta recebendo os dados
	//oformenvia -> formulario que esta enviando os dados
	setFormulario: function(oformrecebe,oformenvia){
	   if (oformrecebe == null){
	      return;
	   }
	   if (oformenvia == null){
	      return;	   
	   }
	   
	   if (oformenvia.elements == null) return;	   
	   //alert('enviando :' + oformenvia.elements.length + ' recebendo ' + oformrecebe.elements.length)
		for (AjaxControle.cont=0 ; AjaxControle.cont < oformenvia.elements.length; AjaxControle.cont++) {
			try{

				if ((eval("oformrecebe."+oformenvia.elements[AjaxControle.cont].name)==null) || (oformenvia.elements[AjaxControle.cont].type == "select-multiple")){			    
					if (oformenvia.elements[AjaxControle.cont].type == "button") continue;
					if (oformenvia.elements[AjaxControle.cont].type == "submit") continue;
					if (oformenvia.elements[AjaxControle.cont].type == "file") continue;				
					if (oformenvia.elements[AjaxControle.cont].type == "radio")
						if(oformenvia.elements[AjaxControle.cont].checked==false) continue;
					if (oformenvia.elements[AjaxControle.cont].type == "checkbox")
						if(oformenvia.elements[AjaxControle.cont].checked==false) continue;				    
					if (oformenvia.elements[AjaxControle.cont].type == "select-multiple"){
						for (AjaxControle.contl = 0; AjaxControle.contl <  oformenvia.elements[AjaxControle.cont].options.length; AjaxControle.contl++){
							if (oformenvia.elements[AjaxControle.cont].options[AjaxControle.contl].selected){
								var OInput    = 	document.createElement("input");
								OInput.type   = 	"hidden";
								OInput.name   = 	oformenvia.elements[AjaxControle.cont].name;
								OInput.value  = 	oformenvia.elements[AjaxControle.cont].options[AjaxControle.contl].value;
								oformrecebe.appendChild(OInput);			
							}
						}										
					}else{					
						var OInput    = 	document.createElement("input");
						OInput.type   = 	"hidden";
						OInput.name   = 	oformenvia.elements[AjaxControle.cont].name;
						OInput.value  = 	oformenvia.elements[AjaxControle.cont].value;
						oformrecebe.appendChild(OInput);			
					}
				}else{									
					oformrecebe.elements[AjaxControle.cont].value = "";
					if (oformrecebe.elements[AjaxControle.cont].type == "button") continue;
					if (oformrecebe.elements[AjaxControle.cont].type == "submit") continue;
					if (oformrecebe.elements[AjaxControle.cont].type == "file") continue;				
					if (oformrecebe.elements[AjaxControle.cont].type == "radio")
						if(oformrecebe.elements[AjaxControle.cont].checked==false) continue;
					if (oformrecebe.elements[AjaxControle.cont].type == "checkbox")
						if(oformrecebe.elements[AjaxControle.cont].checked==false) continue;													
					oformrecebe.elements[AjaxControle.cont].value = oformenvia.elements[AjaxControle.cont].value;
				}
			}catch(ex){
				continue;
			}
		}		
	},
	verAspa_dupas: function(text){
		AjaxControle.retorno_aspa = "";
		AjaxControle.asp = 0;//quer dizer que nao tem aspa aberta.
		for (AjaxControle.cont=0 ; AjaxControle.cont < text.length; AjaxControle.cont++) {	
			if (text.charAt(AjaxControle.cont)=='"'){
				//se a  aspa estiver fechada
				if (AjaxControle.asp == 0){
					//para aspa fechada eu olho os caracteres que existem atraz
					for (AjaxControle.cont1= parseInt(AjaxControle.cont-1); 0 <= AjaxControle.cont1; AjaxControle.cont1--) {					
						ajax_retorno = text.charAt(parseInt(AjaxControle.cont) - (parseInt(AjaxControle.cont)-parseInt(AjaxControle.cont1)));						
						if (ajax_retorno == " ") continue;
						if ((ajax_retorno =="," )|| (ajax_retorno==":" ) || (ajax_retorno =="}" ) || (ajax_retorno =="{" ) || (ajax_retorno=="\"")){
							AjaxControle.asp = 1;//quer dizer que abriu aspa
							AjaxControle.retorno_aspa +=text.charAt(AjaxControle.cont);	
							break;
						}else{
							AjaxControle.retorno_aspa +="\\\""	;
							break
						}
				    }
			    }else{//quando a aspa estiver aberto
					//para aspa aberto eu olho os caratctes que existem na frente					
					for (AjaxControle.cont1=AjaxControle.cont;AjaxControle.cont1 < text.length; AjaxControle.cont1++) {	
						ajax_retorno = text.charAt(parseInt(AjaxControle.cont) + parseInt(AjaxControle.cont1) - parseInt(AjaxControle.cont)+parseInt(1));
						if ( ajax_retorno == " ") continue;						
						if ((ajax_retorno =="," )|| (ajax_retorno ==":" ) || (ajax_retorno =="}" ) || (ajax_retorno =="{" )){
							AjaxControle.asp = 0;//quer dizer que fechou
							AjaxControle.retorno_aspa +=text.charAt(AjaxControle.cont);	
							break;
						}else{
							AjaxControle.retorno_aspa +="\\\""	;
							break;
						}
				    }//FIM DO FOR
				}//FIM DO ELSE
			}else{//FIM DO IF
				AjaxControle.retorno_aspa += text.charAt(AjaxControle.cont);
			}
		}//FIM DO FOR		
		return AjaxControle.retorno_aspa ;
	},//FIM DA FUNCAO
	verAspa_simples: function(text){
		AjaxControle.retorno_aspa = "";
		AjaxControle.asp = 0;//quer dizer que nao tem aspa aberta.
		for (AjaxControle.cont=0 ; AjaxControle.cont < text.length; AjaxControle.cont++) {	
			if (text.charAt(AjaxControle.cont)=="'"){
				//se a  aspa estiver 
				if (AjaxControle.asp == 0){
					//para aspa fechada eu olho os caracteres que existem atraz
					for (AjaxControle.cont1= parseInt(AjaxControle.cont-1); 0 <= AjaxControle.cont1; AjaxControle.cont1--) {
					
						ajax_retorno = text.charAt(parseInt(AjaxControle.cont) - (parseInt(AjaxControle.cont)-parseInt(AjaxControle.cont1)));					
						if (ajax_retorno == " ") continue;
						if ((ajax_retorno =="," )|| (ajax_retorno==":" ) || (ajax_retorno =="}" ) || (ajax_retorno =="{" ) || (ajax_retorno=="'")){
							AjaxControle.asp = 1;//quer dizer que abriu aspa
							AjaxControle.retorno_aspa +=text.charAt(AjaxControle.cont);	
							break;
						}else{
							AjaxControle.retorno_aspa +="\\'"	;
							break
						}
					}
				}else{//quando a aspa estiver aberto
					//para aspa aberto eu olho os caratctes que existem na frente					
					for (AjaxControle.cont1=AjaxControle.cont;AjaxControle.cont1 < text.length; AjaxControle.cont1++) {	
						ajax_retorno = text.charAt(parseInt(AjaxControle.cont) + parseInt(AjaxControle.cont1) - parseInt(AjaxControle.cont)+parseInt(1));
						if ( ajax_retorno == " ") continue;						
						if ((ajax_retorno =="," )|| (ajax_retorno ==":" ) || (ajax_retorno =="}" ) || (ajax_retorno =="{" )){
							AjaxControle.asp = 0;//quer dizer que abriu aspa
							AjaxControle.retorno_aspa +=text.charAt(AjaxControle.cont);	
							break;
						}else{
							AjaxControle.retorno_aspa +="\\'"	;
							break;
						}
					}//FIM DO FOR
				}//FIM DO ELSE
			}else{//FIM DO IF
				AjaxControle.retorno_aspa += text.charAt(AjaxControle.cont);
			}
		}//FIM DO FOR		
		return AjaxControle.retorno_aspa ;
	}//FIM DA FUNCAO

};