//////////////////////////////////////////// // PostBack and AjaxPostBack //////////////////////////////////////////// qcodo.postBack = function(strForm, strControl, strEvent, strParameter) { var objForm = document.getElementById(strForm); objForm.Qform__FormControl.value = strControl; objForm.Qform__FormEvent.value = strEvent; objForm.Qform__FormParameter.value = strParameter; objForm.Qform__FormCallType.value = "Server"; objForm.Qform__FormUpdates.value = this.formUpdates(); objForm.Qform__FormCheckableControls.value = this.formCheckableControls(strForm, "Server"); objForm.submit(); }; qcodo.formUpdates = function() { var strToReturn = ""; for (var strControlId in qcodo.controlModifications) for (var strProperty in qcodo.controlModifications[strControlId]) strToReturn += strControlId + " " + strProperty + " " + qcodo.controlModifications[strControlId][strProperty] + "\n"; qcodo.controlModifications = new Object; return strToReturn; }; qcodo.formCheckableControls = function(strForm, strCallType) { var objForm = document.getElementById(strForm); var strToReturn = ""; for (var intIndex = 0; intIndex < objForm.elements.length; intIndex++) { if (((objForm.elements[intIndex].type == "checkbox") || (objForm.elements[intIndex].type == "radio")) && ((strCallType == "Ajax") || (!objForm.elements[intIndex].disabled))) { // CheckBoxList if (objForm.elements[intIndex].id.indexOf('[') >= 0) { if (objForm.elements[intIndex].id.indexOf('[0]') >= 0) strToReturn += " " + objForm.elements[intIndex].id.substring(0, objForm.elements[intIndex].id.length - 3); // RadioButtonList } else if (objForm.elements[intIndex].id.indexOf('_') >= 0) { if (objForm.elements[intIndex].id.indexOf('_0') >= 0) strToReturn += " " + objForm.elements[intIndex].id.substring(0, objForm.elements[intIndex].id.length - 2); // Standard Radio or Checkbox } else { strToReturn += " " + objForm.elements[intIndex].id; }; }; }; if (strToReturn.length > 0) return strToReturn.substring(1); else return ""; }; qcodo.ajaxQueue = new Array(); qcodo.postAjax = function(strForm, strControl, strEvent, strParameter, strWaitIconControlId) { // Only add if we're not unloaded if (!qc.unloadFlag) { if (qc.beforeUnloadFlag) { qc.beforeUnloadFlag = false; }; // Figure out if Queue is Empty var blnQueueEmpty = false; if (qcodo.ajaxQueue.length == 0) blnQueueEmpty = true; // Enqueue the AJAX Request qcodo.ajaxQueue.push(new Array(strForm, strControl, strEvent, strParameter, strWaitIconControlId)); // If the Queue was originally empty, call the Dequeue if (blnQueueEmpty) qcodo.dequeueAjaxQueue(); }; }; qcodo.clearAjaxQueue = function() { qcodo.ajaxQueue = new Array(); }; qcodo.objAjaxWaitIcon = null; qcodo.dequeueAjaxQueue = function() { if (qcodo.ajaxQueue.length > 0) { strForm = this.ajaxQueue[0][0]; strControl = this.ajaxQueue[0][1]; strEvent = this.ajaxQueue[0][2]; strParameter = this.ajaxQueue[0][3]; strWaitIconControlId = this.ajaxQueue[0][4]; // Display WaitIcon (if applicable) if (strWaitIconControlId) { this.objAjaxWaitIcon = this.getWrapper(strWaitIconControlId); if (this.objAjaxWaitIcon) this.objAjaxWaitIcon.style.display = 'inline'; }; var objForm = document.getElementById(strForm); objForm.Qform__FormControl.value = strControl; objForm.Qform__FormEvent.value = strEvent; objForm.Qform__FormParameter.value = strParameter; objForm.Qform__FormCallType.value = "Ajax"; objForm.Qform__FormUpdates.value = qcodo.formUpdates(); objForm.Qform__FormCheckableControls.value = this.formCheckableControls(strForm, "Ajax"); var strPostData = ""; for (var i = 0; i < objForm.elements.length; i++) { switch (objForm.elements[i].type) { case "checkbox": case "radio": if (objForm.elements[i].checked) { var strTestName = objForm.elements[i].name + "_"; if (objForm.elements[i].id.substring(0, strTestName.length) == strTestName) strPostData += "&" + objForm.elements[i].name + "=" + objForm.elements[i].id.substring(strTestName.length); else // strPostData += "&" + objForm.elements[i].id + "=" + "1"; strPostData += "&" + objForm.elements[i].id + "=" + objForm.elements[i].value; }; break; case "select-multiple": var blnOneSelected = false; for (var intIndex = 0; intIndex < objForm.elements[i].options.length; intIndex++) if (objForm.elements[i].options[intIndex].selected) { strPostData += "&" + objForm.elements[i].name + "="; strPostData += objForm.elements[i].options[intIndex].value; }; break; default: strPostData += "&" + objForm.elements[i].id + "="; // For Internationalization -- we must escape the element's value properly var strPostValue = objForm.elements[i].value; if (strPostValue) { strPostValue = strPostValue.replace(/\%/g, "%25"); strPostValue = strPostValue.replace(/&/g, escape('&')); strPostValue = strPostValue.replace(/\+/g, "%2B"); }; strPostData += strPostValue; break; }; }; var strUri = objForm.action; var objRequest; if (window.XMLHttpRequest) { objRequest = new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined") { objRequest = new ActiveXObject("Microsoft.XMLHTTP"); }; if (objRequest) { objRequest.open("POST", strUri, true); objRequest.setRequestHeader("Method", "POST " + strUri + " HTTP/1.1"); objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); objRequest.onreadystatechange = function() { if (objRequest.readyState == 4) { if (!qcodo.beforeUnloadFlag) { try { var objXmlDoc = objRequest.responseXML; // qcodo.logMessage(objRequest.responseText, true); // alert('AJAX Response Received'); if (!objXmlDoc) { if(-1 != objRequest.responseText.indexOf('') ){ var objErrorWindow = window.open('about:blank', 'qcodo_error','menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=1000,height=700,left=50,top=50'); objErrorWindow.focus(); objErrorWindow.document.write(objRequest.responseText); } else { if(objRequest.responseText.length > 0 && -1 == objRequest.responseText.indexOf('Qform__FormId') ) alert('AJAX Response Error: ' + objRequest.responseText); //else // alert('AJAX Response Error - XML missing.'); } window.location.href = strUri; return; } else { var intLength = 0; // Go through Controls var objXmlControls = objXmlDoc.getElementsByTagName('control'); intLength = objXmlControls.length; for (var intIndex = 0; intIndex < intLength; intIndex++) { var strControlId = objXmlControls[intIndex].attributes.getNamedItem('id').nodeValue; var strControlHtml = ""; if (objXmlControls[intIndex].textContent) strControlHtml = objXmlControls[intIndex].textContent; else if (objXmlControls[intIndex].firstChild) strControlHtml = objXmlControls[intIndex].firstChild.nodeValue; // Perform Callback Responsibility if (strControlId == "Qform__FormState") { var objFormState = document.getElementById(strControlId); objFormState.value = strControlHtml; } else { var objSpan = document.getElementById(strControlId + "_ctl"); if (objSpan) objSpan.innerHTML = strControlHtml; }; }; // Go through Commands var objXmlCommands = objXmlDoc.getElementsByTagName('command'); intLength = objXmlCommands.length; for (var intIndex = 0; intIndex < intLength; intIndex++) { if (objXmlCommands[intIndex] && objXmlCommands[intIndex].firstChild) { var strCommand = ""; intChildLength = objXmlCommands[intIndex].childNodes.length; for (var intChildIndex = 0; intChildIndex < intChildLength; intChildIndex++) strCommand += objXmlCommands[intIndex].childNodes[intChildIndex].nodeValue; eval(strCommand); }; }; }; } catch (objExc) { alert(objExc.message + "\r\non line number " + objExc.lineNumber + "\r\nin file " + objExc.fileName); alert("An error occurred during AJAX Response handling.\r\n\r\nThe error response will appear in a new popup."); var objErrorWindow = window.open('about:blank', 'qcodo_error','menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=1000,height=700,left=50,top=50'); objErrorWindow.focus(); objErrorWindow.document.write(objRequest.responseText); return; }; }; // Perform the Dequeue qcodo.ajaxQueue.shift(); // Hid the WaitIcon (if applicable) if (qcodo.objAjaxWaitIcon) qcodo.objAjaxWaitIcon.style.display = 'none'; // If there are still AjaxEvents in the queue, go ahead and process/dequeue them if (qcodo.ajaxQueue.length > 0) qcodo.dequeueAjaxQueue(); }; }; objRequest.send(strPostData); }; }; }; ////////////////// // Qcodo Shortcuts ////////////////// qc.pB = qcodo.postBack; qc.pA = qcodo.postAjax;