ajax.js
Summary
Ajax Javascript Library
(c)2006 LAMATEK, Inc.
Version: 2.0
Author: Tom Cole tcole@lamatek.com
|
Method Summary
|
static Object
|
getXMLHttpRequest()
Generic function that returns a new request, but does not map it to the xmlhttp variable.
Returns - an XMLHttpRequest
|
function AjaxRequest () {
var debug = false;
var async = true;
var value = null;
var xmlhttp = null;
var response_code = null;
var completed = false;
var handler = null;
var browser = (navigator.appName.indexOf('Microsoft') >= 0);
var message = "Please wait...";
var type = "text";
var Drag = {
obj : null,
init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
{
try {
o.onmousedown = Drag.start;
o.hmode = bSwapHorzRef ? true : false ;
o.vmode = bSwapVertRef ? false : true ;
o.root = oRoot && oRoot != null ? oRoot : o ;
if (o.hmode && isNaN(parseInt(o.root.style.left ))) o.root.style.left = "0px";
if (o.vmode && isNaN(parseInt(o.root.style.top ))) o.root.style.top = "0px";
if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right = "0px";
if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";
o.minX = typeof minX != 'undefined' ? minX : null;
o.minY = typeof minY != 'undefined' ? minY : null;
o.maxX = typeof maxX != 'undefined' ? maxX : null;
o.maxY = typeof maxY != 'undefined' ? maxY : null;
o.xMapper = fXMapper ? fXMapper : null;
o.yMapper = fYMapper ? fYMapper : null;
o.root.onDragStart = new Function();
o.root.onDragEnd = new Function();
o.root.onDrag = new Function();
}
catch(e) {
}
},
start : function(e)
{
try {
var o = Drag.obj = this;
e = Drag.fixE(e);
var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
o.root.onDragStart(x, y);
o.lastMouseX = e.clientX;
o.lastMouseY = e.clientY;
if (o.hmode) {
if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
} else {
if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
}
if (o.vmode) {
if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
} else {
if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
}
document.onmousemove = Drag.drag;
document.onmouseup = Drag.end;
return false;
}
catch(e) {
}
},
drag : function(e)
{
try {
e = Drag.fixE(e);
var o = Drag.obj;
var ey = e.clientY;
var ex = e.clientX;
var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
var nx, ny;
if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);
nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));
if (o.xMapper) nx = o.xMapper(y)
else if (o.yMapper) ny = o.yMapper(x)
Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
Drag.obj.lastMouseX = ex;
Drag.obj.lastMouseY = ey;
Drag.obj.root.onDrag(nx, ny);
return false;
}
catch(e) {
}
},
end : function()
{
try {
document.onmousemove = null;
document.onmouseup = null;
Drag.obj.root.onDragEnd( parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]),
parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
Drag.obj = null;
}
catch(e) {
}
},
fixE : function(e)
{
try {
if (typeof e == 'undefined') e = window.event;
if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
return e;
}
catch(e) {
}
}
};
getJSONRequest = function (method) {
type = "json";
log("----Registering client handler method for text request:<br/><blockquote><pre>" + method.toString().replace(/</g, "<").replace(/>/g, ">") + "</pre></blockquote>",1);
handler = method;
xmlhttp = getRequest();
if (xmlhttp) {
xmlhttp.onreadystatechange = parseJSONResponse;
}
}
getXMLRequest = function (method) {
type = "xml";
log("----Registering client handler method for text request:<br/><blockquote><pre>" + method.toString().replace(/</g, "<").replace(/>/g, ">") + "</pre></blockquote>",1);
handler = method;
xmlhttp = getRequest();
if (xmlhttp) {
xmlhttp.onreadystatechange = parseXMLResponse;
}
}
getTextRequest = function (method) {
type = "text";
log("----Registering client handler method for text request:<br/><blockquote><pre>" + method.toString().replace(/</g, "<").replace(/>/g, ">") + "</pre></blockquote>",1);
handler = method;
xmlhttp = getRequest();
if (xmlhttp) {
xmlhttp.onreadystatechange = parseTextResponse;
}
}
getRequest = function () {
completed = false;
var xml;
if (!xml && typeof XMLHttpRequest != 'undefined') {
try {
xml = new XMLHttpRequest();
browser = false;
}
catch (e) {
xml = false;
browser = false;
}
}
if (! xml) {
this.log("------Unable to create XmlHTTPRequest.", 3);
}
return xml;
}
parseJSONResponse = function () {
if (xmlhttp.readyState == 4) {
log("------XmlHTTPRequest readystate is OK...");
response_code = xmlhttp.status;
completed = true;
if (response_code == 200) {
log("------XmlHTTPRequest status is OK...");
log("");
log("------Response received:<br/><blockquote><pre>" + xmlhttp.responseText + "</pre></blockquote>",1);
try {
value = eval('(' + xmlhttp.responseText + ')');
}
catch(e) {
log("------Error occurred assigning response to value: " + e.message + "...", 3);
value = null
}
if (handler) {
log("Forwarding control to client handler for XML request...");
handler.call(this);
}
}
else {
log("------XmlHTTPRequest status returned " + response_code + "...", 3);
value = null;
}
if (document.getElementById('loadingDiv')) {
document.getElementById('loadingDiv').style.display = 'none';
}
}
else {
log("------XmlHTTPRequest readystate is " + xmlhttp.readyState + "...", 2);
}
}
parseXMLResponse = function () {
if (xmlhttp.readyState == 4) {
log("------XmlHTTPRequest readystate is OK...");
response_code = xmlhttp.status;
completed = true;
if (response_code == 200) {
if (debug == true) {
log("------XmlHTTPRequest status is OK...");
var formatted = xmlhttp.responseText.replace(/</g, "<").replace(/>/g, ">");
log("------Response received:<br/><blockquote><pre>" + formatted + "</pre></blockquote>",1);
}
value = xmlhttp.responseXML;
if (handler) {
log("Forwarding control to client handler for XML request...");
handler.call(this);
}
}
else {
log("------XmlHTTPRequest status returned " + response_code + "...", 3);
value = null;
}
if (document.getElementById('loadingDiv')) {
document.getElementById('loadingDiv').style.display = 'none';
}
}
else {
log("------XmlHTTPRequest readystate is " + xmlhttp.readyState + "...", 2);
}
}
parseTextResponse = function () {
if (xmlhttp.readyState == 4) {
log("------XmlHTTPRequest readystate is OK...");
response_code = xmlhttp.status;
completed = true;
if (response_code == 200) {
log("------XmlHTTPRequest status is OK...");
log("------Response received:<br/><blockquote><pre>" + xmlhttp.responseText + "</pre></blockquote>",1);
value = xmlhttp.responseText;
if (handler) {
log("Forwarding control to client handler for XML request...");
handler.call(this);
}
}
else {
log("------XmlHTTPRequest status returned " + response_code + "...", 3);
value = null;
}
if (document.getElementById('loadingDiv')) {
document.getElementById('loadingDiv').style.display = 'none';
}
}
else {
log("------XmlHTTPRequest readystate is " + xmlhttp.readyState + "...", 2);
}
}
this.doJSONRequest = function (url, method, parameters, callback, asynchronous) {
log("Beginning new JSON request...");
if (url) {
var defMethod = "GET";
if (method) {
defMethod = method;
}
log("--Request method set to " + defMethod + "...");
async = true;
if (! asynchronous) {
async = asynchronous;
}
log("--Request set to asynchronous: " + async + "...");
showLoadingDiv();
getJSONRequest(callback);
xmlhttp.open(defMethod, url, async);
if (parameters) {
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
else {
parameters = null;
}
log("--Sending request...");
xmlhttp.send(parameters);
}
else {
log("--Request URL is not set. Unable to process request.", 3);
}
}
this.doXMLRequest = function (url, method, parameters, callback, asynchronous) {
log("Beginning new XML request...");
if (url) {
var defMethod = "GET";
if (method) {
defMethod = method;
}
log("--Request method set to " + defMethod + "...");
async = true;
if (! asynchronous) {
async = asynchronous;
}
log("--Request set to asynchronous: " + async + "...");
showLoadingDiv();
getXMLRequest(callback);
xmlhttp.open(defMethod, url, async);
if (parameters) {
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
else {
parameters = null;
}
log("--Sending request...");
xmlhttp.send(parameters);
}
else {
log("--Request URL is not set. Unable to process request.", 3);
}
}
this.doTextRequest = function (url, method, parameters, callback, asynchronous) {
log("Beginning new text request...");
if (url) {
var defMethod = "GET";
if (method) {
defMethod = method;
}
log("--Request method set to " + defMethod + "...");
async = true;
if (! asynchronous) {
async = asynchronous;
}
log("--Request set to asynchronous: " + async + "...");
showLoadingDiv();
getTextRequest(callback);
xmlhttp.open(defMethod, url, async);
if (parameters) {
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
else {
parameters = null;
}
log("--Sending request...");
xmlhttp.send(parameters);
}
else {
log("--Request URL is not set. Unable to process request.", 3);
}
}
this.isCompleted = function () {
return completed;
}
this.getValue = function () {
return value;
}
this.transformValueInto = function (url, element) {
if (type == "xml") {
if (value && url && element) {
if (typeof XSLTProcessor != 'undefined') {
var processor = new XSLTProcessor();
var request = getXMLHttpRequest();
if (request) {
request.open("GET", url, false);
request.send(null);
var xsl = request.responseXML;
processor.importStylesheet(xsl);
var fragment = processor.transformToFragment(value, document);
if (element)
element.appendChild(fragment);
}
else {
return;
}
}
else {
var stylesheet = new ActiveXObject("Msxml2.DOMDocument.3.0");
if (stylesheet) {
stylesheet.async = false;
stylesheet.load(url);
var results = new ActiveXObject("Msxml2.DOMDocument.3.0");
results.async = false;
results.validateOnParse = true;
value.transformNodeToObject(stylesheet, results);
if (element)
element.innerHTML = results.documentElement.xml;
}
else {
return;
}
}
}
}
else if (type == "text") {
if (element && value) {
element.innerHTML = value;
}
}
else if (type == "json") {
if (element && value) {
element.append(value);
}
}
else {
return;
}
}
this.getNodeCount = function (nodeName) {
try {
var root = value.documentElement;
return root.getElementsByTagName(nodeName).length;
}
catch (e) {
return 0;
}
}
this.getNode = function (nodeName, index) {
if (! index)
index = 0;
try {
var root = value.documentElement;
var node = root.getElementsByTagName(nodeName)[index];
return node;
}
catch (e) {
return null;
}
}
this.getValueForNode = function (nodeName, index) {
if (! index)
index = 0;
try {
var root = value.documentElement;
var nodeValue = root.getElementsByTagName(nodeName)[index].firstChild.data;
return nodeValue;
}
catch (e) {
return null;
}
}
this.getNodeCountByParent = function (parentNode, nodeName) {
try {
return parentNode.getElementsByTagName(nodeName).length;
}
catch (e) {
return 0;
}
}
this.getNodeByParent = function (parentNode, nodeName, index) {
if (! index) {
index = 0;
}
try {
var node = parentNode.getElementsByTagName(nodeName)[index];
return node;
}
catch (e) {
return null;
}
}
this.getValueForNodeByParent = function (parentNode, nodeName, index) {
if (! index) {
index = 0;
}
try {
var nodeValue = parentNode.getElementsByTagName(nodeName)[index].firstChild.data;
return nodeValue;
}
catch (e) {
return null;
}
}
this.getResponseCode = function () {
return response_code;
}
this.isIE = function () {
if (browser) {
return browser;
}
else {
try {
var test = new ActiveXObject("Msxml2.XMLHTTP");
browser = true;
}
catch (e) {
browser = false;
}
return browser;
}
}
showLoadingDiv = function () {
if (async == true) {
if (document.getElementById('loadingDiv')) {
document.getElementById('loadingDiv').style.display = 'block';
}
else {
var loading = document.createElement("div");
loading.id = 'loadingDiv';
loading.innerHTML = message;
loading.style.background = '#cc0000';
loading.style.color = '#ffffff';
loading.style.position = 'fixed';
loading.style.top = 0;
loading.style.right = 0;
loading.style.paddingLeft = 5;
loading.style.paddingRight = 5;
loading.style.fontFamily = "Arial";
loading.style.fontSize = "12";
document.body.appendChild(loading);
}
}
}
this.log = function (message, severity) {
log(message, severity);
}
log = function (message, severity) {
if (debug) {
var bg = "#ffffff";
if (severity) {
if (severity > 2) {
bg = "#ff0000";
}
else if (severity > 1) {
bg = "#ffb500";
}
else if (severity > 0) {
bg = "#ffff00";
}
}
if (! document.getElementById("loggerDiv")) {
var logger = document.createElement("div");
logger.id = "loggerDiv";
if (browser) {
logger.style.position = "absolute";
}
else {
logger.style.position = "fixed";
}
logger.style.top = "25px";
logger.style.right = "25px";
logger.style.display = "inline";
logger.style.width = "400";
logger.style.height = "400";
logger.style.border = "1px solid #000000";
logger.style.background = "#cccccc";
var loggerBar = document.createElement("div");
loggerBar.id = "loggerBar";
loggerBar.style.height = 22;
loggerBar.style.textAlign = "right";
loggerBar.innerHTML = "<span width=\"100%\"><input type=\"button\" value=\"Clear\" onclick=\"document.getElementById('loggerStatusDetails').removeChild(document.getElementById('loggingDetailLines'));\"/><input type=\"button\" value=\"X\" onclick=\"document.body.removeChild(document.getElementById('loggerDiv'));\"/></span>";
logger.appendChild(loggerBar);
var loggerStatus = document.createElement("div");
loggerStatus.style.overflow = "auto";
loggerStatus.id = "loggerStatusDetails";
loggerStatus.style.background = "#ffffff";
loggerStatus.style.width = "100%";
loggerStatus.style.height = 378;
logger.appendChild(loggerStatus);
document.body.insertBefore(logger, document.body.firstChild);
}
if (! document.getElementById('loggingDetailLines')) {
var loggerDiv = document.getElementById("loggerStatusDetails");
var loggingDiv = document.createElement("div");
loggingDiv.id = "loggingDetailLines";
loggerDiv.appendChild(loggingDiv);
}
var loggingDiv = document.getElementById('loggingDetailLines');
var logLine = document.createElement("div");
logLine.style.borderTop = "1px solid #cccccc";
logLine.innerHTML = message;
logLine.style.background = bg;
loggingDiv.appendChild(logLine);
Drag.init(document.getElementById('loggerBar'), document.getElementById('loggerDiv'));
}
}
this.setDisplayMessage = function (text) {
message = text;
}
this.setDebugging = function (show) {
debug = show;
}
}
function getXMLHttpRequest() {
var xml;
if (!xml && typeof XMLHttpRequest != 'undefined') {
try {
xml = new XMLHttpRequest();
}
catch (e) {
xml = false;
}
}
if (xml) {
return xml;
}
else {
return null;
}
}
Documentation generated by
JSDoc on Tue Feb 27 10:07:22 2007