/* * NeoAjax - NeoBiz Asynchronous JavaScript And XML * Marcio Ghiraldelli / André Cupini * 20/04/2006 */ var debug=0; // Tenta criar objeto xmlHTTP try { xmlhttp = new XMLHttpRequest(); } catch(e) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlhttp = false; } } } // Pilha de conexões pilha=[]; ipilha=0; function ajaxSendRequest(idObj, url, form, newStyle) { stopBannerFade(); if (debug > 0) alert("ajaxSendRequest('" + idObj + "', '" + url + "', '" + form + "', '"+ newStyle + "')"); // DivLoading if (document.getElementById('divLoading')) { document.getElementById('divLoading').style.display = 'block'; document.getElementById('divLoading').innerHTML = ' Carregando, aguarde...'; } // Adiciona variavel randomica para matar o cache do navegador if (url != null) { var delimiter; if (url.indexOf("?") > 0) { delimiter = "&"; } else { delimiter = "?"; } url = url + delimiter + "rand=" + Math.floor(Math.random()*9999); } // Empilha if (debug > 0) alert("Empilhando " + idObj + ", " + url + ", " + form + ", " + newStyle); pilha[pilha.length] = [idObj, url, form, newStyle]; // Se não há conexões pendentes, executa if ( (ipilha + 1) == pilha.length) ajaxRun(); } function ajaxRun(){ // Recupera dados da pilha var idObj = pilha[ipilha][0]; var url = pilha[ipilha][1]; var form = pilha[ipilha][2]; var newStyle = pilha[ipilha][3]; // Opta pelo método var method = "GET"; if (form != null) { method = "POST"; } if (url != null) { // Se veio a URL, faz requisicao e so desempilha no retorno xmlhttp.open(method, url, true); // Se veio o form, manda os dados por POST, multipar/form-data var formData = ""; var boundary; if (form != null) { boundary = "---------------------------"+ Math.floor(Math.random()*99999999999999); formData = generateMultiPart(form, boundary); xmlhttp.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); } xmlhttp.send(formData); } else { // Se a URL veio null, so muda o // CSS se passado no ajaxSendRequest if (newStyle != null) document.getElementById(idObj).className = newStyle; if (debug > 0) alert("URL nula, apenas alterando CSS da div " + idObj + " para: " + newStyle); // Desempilhando ipilha++ if (ipilha < pilha.length) { setTimeout('ajaxRun()', 20); } } // Tratamento do retorno xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4){ if (document.getElementById('divLoading')) document.getElementById('divLoading').style.display = 'none'; // CSS se passado no ajaxSendRequest if (newStyle != null) document.getElementById(idObj).className = newStyle; // Mostra o HTML recebido //retorno=unescape(xmlhttp.responseText.replace(/\+/g, " ")); retorno = xmlhttp.responseText; document.getElementById(idObj).innerHTML = retorno; // Desempilhando ipilha++ if (ipilha < pilha.length) { setTimeout('ajaxRun()',20); } } } } // Gera multipart/form-data dos dados do formulário, conforme RFC 2388 // RFC 2388 --> http://www.faqs.org/rfcs/rfc2388.html function generateMultiPart(theForm, boundary) { var formData = ""; var cDisposition = 'Content-Disposition: form-data; name="'; // Percorre todos os elementos do formulário for(i = 0; i < theForm.elements.length; i++){ if (theForm.elements[i].name) { if ( theForm.elements[i].type == "text" || theForm.elements[i].type == "textarea" || theForm.elements[i].type == "button" || theForm.elements[i].type == "hidden" ) { formData += '--' + boundary + '\r\n'; formData += cDisposition + theForm.elements[i].name +'"\r\n\r\n'; formData += theForm.elements[i].value + "\r\n"; } if (theForm.elements[i].type == "select-one") { formData += '--' + boundary + '\r\n'; formData += cDisposition + theForm.elements[i].name +'"\r\n\r\n'; formData += theForm.elements[i].options[theForm.elements[i].selectedIndex].value + "\r\n"; } if (theForm.elements[i].type == "radio") { if (theForm.elements[i].checked == true) { formData += '--' + boundary + '\r\n'; formData += cDisposition + theForm.elements[i].name +'"\r\n\r\n'; formData += theForm.elements[i].value + "\r\n"; } } if (theForm.elements[i].type == "select-multiple") { for (j = 0; j < theForm.elements[i].length; j++) { if (theForm.elements[i][j].selected) { formData += '--' + boundary + '\r\n'; formData += cDisposition + theForm.elements[i].name +'"\r\n\r\n'; formData += theForm.elements[i][j].value + "\r\n"; } } } if (theForm.elements[i].type == "checkbox") { if (theForm.elements[i].checked) { formData += '--' + boundary + '\r\n'; formData += cDisposition + theForm.elements[i].name +'"\r\n\r\n'; formData += theForm.elements[i].value + "\r\n"; } } } } formData += "--" + boundary + "--\r\n"; return formData; } function initAjax() { // Inicializacao automatica var divConteudo = "conteudo"; var query=this.location.search.substring(1); if (query.length > 0){ var params=query.substring(query.indexOf("=") + 1); var url = divConteudo + ".php?pagina=" + params; ajaxSendRequest(divConteudo, url, null); } else ajaxSendRequest(divConteudo, 'principal.htm', null); }