function Ajax(tipo, url, tabela, formulario) { var Ajax_var; if(window.XMLHttpRequest) { Ajax_var = new XMLHttpRequest(); } else if(window.ActiveXObject) { Ajax_var = new ActiveXObject("MSXML2.XMLHTTP"); } if (Ajax_var == null) { if(typeof reloadMe == 'function') reloadMe(); else if (eval("typeof reloadMe_" + tabela + " == 'function'")) eval('reloadMe_' + tabela + '()'); else alert("Não é possível executar esta ação porque\nseu navegador não aceita o recurso Ajax!"); return; } url=url.replace( /&amp;/g, '&'); if (formulario) { var query_string = ''; for (i = 0; i < formulario.elements.length; i++) { if (formulario.elements[i].name.indexOf("[") > -1) { var s = formulario.elements[i].name.indexOf("["); formulario.elements[i].name = formulario.elements[i].name.substring(0, s) + ']' + formulario.elements[i].name.substring(s, formulario.elements[i].name.lastIndexOf("]")); } if (formulario.elements[i].type == "text" || formulario.elements[i].type == "hidden" || formulario.elements[i].type == "password" || formulario.elements[i].type == "file") { query_string += "&HTTP_POST_VARS[" + formulario.elements[i].name + "]=" + escape(formulario.elements[i].value); } if (formulario.elements[i].type == "checkbox") { if (formulario.elements[i].checked) { query_string += "&HTTP_POST_VARS[" + formulario.elements[i].name + "]=" + escape(formulario.elements[i].value); } } if (formulario.elements[i].type == "radio") { if (formulario.elements[i].checked) { query_string += "&HTTP_POST_VARS[" + formulario.elements[i].name + "]=" + escape(formulario.elements[i].value); } } if (formulario.elements[i].type == "select-one") { var sel = formulario.elements[i]; query_string += "&HTTP_POST_VARS[" + sel.name + "]=" + escape(sel.options[sel.selectedIndex].value); } if (formulario.elements[i].type == "textarea") { query_string += "&HTTP_POST_VARS[" + formulario.elements[i].name + "]=" + escape(formulario.elements[i].value); } } query_string = query_string.replace(/\//g, '--barra--'); query_string = query_string.replace(/%0D%0A/g, '--novalinha--'); query_string = query_string.replace(/%0D/g, '--novalinha--'); query_string = query_string.replace(/%0A/g, '--novalinha--'); query_string = query_string.replace(/%26/g, '--ampersand--'); query_string = query_string.replace(/%25/g, '--porcentagem--'); url += query_string; }; Ajax_var.open("POST", url, true); Ajax_var.onreadystatechange = function(){ if (document.getElementById(tabela)) { if(Ajax_var.readyState < 4) {		 if (!document.getElementById(tabela + '_bloqueador')) { this.objeto = document.getElementById(tabela); this.caixa = this.objeto.insertBefore(document.createElement('DIV', {}), this.objeto.firstChild); this.caixa.innerHTML = '<div id="' + tabela + '_bloqueador" class="ajax_bloqueador" style="width: ' + (this.objeto.clientWidth + 2) + 'px; height: ' + (this.objeto.clientHeight + 2) + 'px;"><div id="' + tabela + '_progresso" class="ajax_progresso" style="top: ' + ((this.objeto.clientHeight / 2) - 24) + 'px; left: ' + ((this.objeto.clientWidth / 2) - 24) + 'px;"></div></div>'; } } else { if(Ajax_var.status == 200) { if (tipo == 'select') { var response = Ajax_var.responseXML.documentElement; AjaxToSelect(tabela, response); } else { var response = unescape(Ajax_var.responseText); AjaxToInnerHtml(tabela, response); } } if (document.getElementById(tabela + '_bloqueador')) this.objeto.removeChild(this.caixa); } } }; Ajax_var.send(url); } function AjaxToSelect(tabela,response) { document.getElementById(tabela).length = 0; var _data = response.getElementsByTagName('category'); var i; for (i = 0; i < _data.length; i++) { response.getElementsByTagName('fname')[i].firstChild.data = unescape(response.getElementsByTagName('fname')[i].firstChild.data); if (response.getElementsByTagName('id')[i].firstChild.data == '-') { document.getElementById(tabela).options[i] = new Option(response.getElementsByTagName('fname')[i].firstChild.data, ''); } else { if (response.getElementsByTagName('id')[i].firstChild.data == '*') { document.getElementById(tabela).options[i] = new Option(response.getElementsByTagName('fname')[i].firstChild.data); } else { document.getElementById(tabela).options[i] = new Option(response.getElementsByTagName('fname')[i].firstChild.data, response.getElementsByTagName('id')[i].firstChild.data); } } } document.getElementById(tabela).index = 0; } function AjaxToInnerHtml(tabela, response){ var response = unescape(response); var scripts = ''; while (response.indexOf("<script") > -1 || response.indexOf("</script") > -1) { var s = response.indexOf("<script"); var s_e = response.indexOf(">", s); var e = response.indexOf("</script", s); var e_e = response.indexOf(">", e); scripts = scripts + response.substring(s_e + 1, e); response = response.substring(0, s) + response.substring(e_e + 1); } response = response.replace(/  /g, ''); response = response.replace(/	/g, ''); if (document.getElementById(tabela)) { if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) { var len = document.getElementById(tabela).childNodes.length; for (var i = (len-1); i >= 0; i--) { document.getElementById(tabela).removeChild(document.getElementById(tabela).childNodes[i]); } document.getElementById(tabela).innerHTML = '';document.getElementById(tabela).scrollTop = 0;document.getElementById(tabela).scrollLeft = 0; asyncInnerHTML(response, function(fragment){ document.getElementById(tabela).appendChild(fragment); }); if (scripts != '') { scripts = scripts.replace(/<!--/g, ''); scripts = scripts.replace(/-->/g, ''); eval(scripts); } } else {document.getElementById(tabela).innerHTML = '';document.getElementById(tabela).scrollTop = 0; document.getElementById(tabela).scrollLeft = 0; document.getElementById(tabela).innerHTML = response; if (scripts != '') { scripts = scripts.replace(/<!--/g, ''); scripts = scripts.replace(/-->/g, ''); eval(scripts); } } } } function asyncInnerHTML(HTML, callback) { var temp = document.createElement('div'), frag = document.createDocumentFragment(); temp.innerHTML = HTML; (function(){ if(temp.firstChild){ frag.appendChild(temp.firstChild); setTimeout(arguments.callee, 0); } else { callback(frag); } })(); } 
