A Qcodo based CMS/ecommerce framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

260 lines
9.9 KiB

////////////////////////////////////////////
// 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;