////////////////////////////////////////////
|
|
// 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('<!-- QCodo Error -->') ){
|
|
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;
|