function GetXmlHttpObject(handler) {                            //work out which Ajax object to return
  var objXMLHttp=null
  if (window.XMLHttpRequest) {
    objXMLHttp=new XMLHttpRequest()
  } else if (window.ActiveXObject) {
    objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
  return objXMLHttp
}


function domUtilities(elements, makeElementsIDsGlobalVariables) {
    this.domUtilities_findAVariableNameByTagName = (function (element) {if (element.nodeName) {var otherElementsLikeIt = document.getElementsByTagName(element.nodeName.toUpperCase());if (otherElementsLikeIt) {for (var e = 0; e < otherElementsLikeIt.length; e++) {if (element == otherElementsLikeIt[e]) {return window[element.nodeName.toUpperCase() + e] = element;}}} else {return element;}} else {return element;}});
    elements = (typeof elements == "object" && !elements.length) ? [elements] : (typeof elements == "object") ? elements : [elements];
    var returnAsObjects = [];
    for (var l = 0; l < elements.length; l++) {
        var element = (typeof elements[l] == "object") ? elements[l] : document.getElementById(elements[l]);
        if (!element || typeof element.style == "undefined") {
            continue;
        }
        returnAsObjects[++returnAsObjects.length - 1] = (!makeElementsIDsGlobalVariables) ? element : (element.id) ? window[element.id] = element : this.domUtilities_findAVariableNameByTagName(element);
        element.its = (function (cssProperty) {if (!cssProperty) {return false;}if (cssProperty.indexOf("-") != -1) {while (cssProperty.indexOf("-") != -1) {var myUppercase = cssProperty.substr(cssProperty.indexOf("-") + 1, 1).toUpperCase();cssProperty = cssProperty.replace(/-\w/, myUppercase);}}if (this.style[cssProperty]) {return [this.style[cssProperty], this.style.cssText, this.style];}var toReturn = false;outer:for (var loop = 0; loop < 3; loop++) {var className = (!loop) ? "#" + this.id : (loop == 1) ? "." + this.className : this.tagName;for (var s = document.styleSheets.length - 1; s >= 0; s--) {var RULES = (document.styleSheets[s].rules) ? "rules" : "cssRules";for (var r = document.styleSheets[s][RULES].length - 1; r >= 0; r--) {if (document.styleSheets[s][RULES][r].selectorText.toLowerCase() == className.toLowerCase()) {if (document.styleSheets[s][RULES][r].style[cssProperty]) {toReturn = [document.styleSheets[s][RULES][r].style[cssProperty], document.styleSheets[s][RULES][r].style.cssText, document.styleSheets[s][RULES][r]];break outer;}}}}}return toReturn;});
        element.its2 = (function (cssProperty) {if (!cssProperty) {return false;}if (window.getComputedStyle) {var regexp = new RegExp("([a-z])([A-Z])", "g");cssProperty = cssProperty.replace(regexp, "$1-$2").toLowerCase();return document.defaultView.getComputedStyle(this, null).getPropertyValue(cssProperty);} else {if (this.currentStyle) {while (cssProperty.indexOf("-") != -1) {var myUppercase = cssProperty.substr(cssProperty.indexOf("-") + 1, 1).toUpperCase();cssProperty = cssProperty.replace(/-\w/, myUppercase);}return this.currentStyle[cssProperty];}}return "";});
        element.center = element.itsCenter = element.itscenter = (function (layerToBeCentered, doNotAddOffsets) {layerToBeCentered = (!layerToBeCentered) ? 0 : (typeof (layerToBeCentered) == "object") ? layerToBeCentered : document.getElementById(layerToBeCentered) || 0;if (typeof (layerToBeCentered) == "object") {var clientHeight = this.clientHeight;var clientWidth = this.clientWidth;if (this.tagName.toLowerCase() == "body") {if (document.documentElement && document.documentElement.clientHeight) {clientHeight = document.documentElement.clientHeight;clientWidth = document.documentElement.clientWidth;} else {if (document.body.clientHeight) {clientHeight = document.body.clientHeight;clientWidth = document.body.clientWidth;} else {if (window.innerHeight) {clientHeight = window.innerHeight;clientWidth = window.innerWidth;}}}}var top = Math.abs(this.offsetTop + ((clientHeight / 2) - (layerToBeCentered.offsetHeight / 2)));var left = Math.abs(this.offsetLeft + ((clientWidth / 2) - (layerToBeCentered.offsetWidth / 2)));if (!doNotAddOffsets) {top += this.scrollTop;left += this.scrollLeft;}layerToBeCentered.style.top = top + "px";layerToBeCentered.style.left = left + "px";return [top, left];}return false;});
        element.onTop = element.ontop = (function (layer, center, plusTop, plusLeft) {layer = (!layer) ? 0 : (typeof (layer) == "object") ? layer : document.layer(layerToBeCentered);if (!layer) {return false;}plusTop = parseFloat(plusTop) || 0;plusLeft = parseFloat(plusLeft) || 0;if (!center) {layer.style.top = this.offsetTop - layer.offsetHeight + plusTop;layer.style.left = this.offsetLeft + plusLeft;} else {layer.style.top = this.offsetTop - layer.offsetHeight + plusTop;layer.style.left = this.offsetLeft + (this.offsetWidth / 2 - layer.offsetWidth / 2) + plusLeft;}return true;});
        element.onBottom = element.onbottom = (function (layer, center, plusTop, plusLeft) {layer = (!layer) ? 0 : (typeof (layer) == "object") ? layer : document.layer(layerToBeCentered);if (!layer) {return false;}plusTop = parseFloat(plusTop) || 0;plusLeft = parseFloat(plusLeft) || 0;if (!center) {layer.style.top = this.offsetTop + this.offsetHeight + plusTop;layer.style.left = this.offsetLeft + plusLeft;} else {layer.style.top = this.offsetTop + this.offsetHeight + plusTop;layer.style.left = this.offsetLeft + (this.offsetWidth / 2 - layer.offsetWidth / 2) + plusLeft;}return true;});
        element.onRight = element.onright = (function (layer, center, plusTop, plusLeft) {layer = (!layer) ? 0 : (typeof (layer) == "object") ? layer : document.layer(layerToBeCentered);if (!layer) {return false;}plusTop = parseFloat(plusTop) || 0;plusLeft = parseFloat(plusLeft) || 0;if (!center) {layer.style.top = this.offsetTop + plusTop;layer.style.left = this.offsetLeft + this.offsetWidth + plusLeft;} else {layer.style.top = this.offsetTop + (this.offsetHeight / 2 - layer.offsetHeight / 2) + plusTop;layer.style.left = this.offsetLeft + this.offsetWidth + plusLeft;}return true;});
        element.onLeft = element.onleft = (function (layer, center, plusTop, plusLeft) {layer = (!layer) ? 0 : (typeof (layer) == "object") ? layer : document.layer(layerToBeCentered);if (!layer) {return false;}plusTop = parseFloat(plusTop) || 0;plusLeft = parseFloat(plusLeft) || 0;if (!center) {layer.style.top = this.offsetTop + plusTop;layer.style.left = this.offsetLeft - layer.offsetWidth + plusLeft;} else {layer.style.top = this.offsetTop + (this.offsetHeight / 2 - layer.offsetHeight / 2) + plusTop;layer.style.left = this.offsetLeft - layer.offsetWidth + plusLeft;}return true;});
        element.coordinates = element.c = element.C = (function (withScroll, which) {var tops = this.itsTop();var lefts = this.itsLeft();var output = (!withScroll) ? [[tops[0], lefts[0]], [tops[0], lefts[3]], [tops[3], lefts[3]], [tops[3], lefts[0]]] : [[tops[0], lefts[0]], [tops[0], this.scrollWidth], [this.scrollHeight, this.scrollWidth], [this.scrollHeight, lefts[0]]];return (typeof (which) != "number" || which > 3) ? output : output[which];});
        element.opacity = (function (value) {value = parseFloat(value);if (isNaN(value)) {return;}if (typeof (this.style.opacity) != "undefined") {if (value > 1) {value /= 100;}this.style.opacity = value;} else {if (typeof (this.style.filter) != "undefined") {if (value <= 1 && value > 0) {value *= 100;}this.style.filter = "alpha(opacity=" + value + ")";}}});
        element.itsWidth = element.itswidth = element.w = element.W = (function (which) {var output = [this.offsetWidth, parseFloat(this.scrollWidth), this.clientWidth, this.offsetWidth + this.offsetLeft, this.offsetTop];return (typeof (which) != "number" || which > 4) ? output : output[which];});
        element.itsHeight = element.itsheight = element.h = element.H = (function (which) {var output = [this.offsetHeight, parseFloat(this.scrollHeight), this.clientHeight, this.offsetHeight + this.offsetTop, this.offsetLeft];return (typeof (which) != "number" || which > 4) ? output : output[which];});
        element.itsTop = element.itstop = element.t = element.T = (function (which) {var output = [this.offsetTop, parseFloat(this.style.top) || "", (typeof this.clientTop != "undefined") ? this.clientTop : "", this.offsetTop + this.offsetHeight, this.offsetLeft];return (typeof (which) != "number" || which > 4) ? output : output[which];});
        element.itsLeft = element.itsleft = element.l = element.L = (function (which) {var output = [this.offsetLeft, parseFloat(this.style.left) || "", (typeof this.clientLeft != "undefined") ? this.clientLeft : "", this.offsetLeft + this.offsetWidth, this.offsetTop];return (typeof (which) != "number" || which > 4) ? output : output[which];});
        element.position = element.itsPosition = element.itsposition = element.p = element.P = (function (top, left) {var originals = [this.offsetTop, this.offsetLeft];this.style.top = parseFloat(top) || this.offsetTop;this.style.left = parseFloat(left) || this.offsetLeft;return [parseFloat(this.style.top), parseFloat(this.style.left), originals[0], originals[1]];});
        element.size = element.itsSize = element.itssize = element.itSize = element.itsize = element.s = element.S = (function (width, height) {var originals = [this.offsetWidth, this.offsetHeight];this.style.width = parseFloat(width) || this.offsetWidth;this.style.height = parseFloat(height) || this.offsetHeight;return [parseFloat(this.style.width), parseFloat(this.style.height), originals[0], originals[1]];});
        element.rationalSize = element.rationalsize = element.rs = element.RS = element.Rs = (function (number, width1height0, onlyReturn) {number = parseFloat(number);if (isNaN(number)) {return false;}var originalDimensions = [this.offsetWidth, this.offsetHeight];var output = [];if (!width1height0) {output = [number, Math.round(((number * this.offsetHeight) / this.offsetWidth) * 100) / 100];} else {output = [Math.round(((number * this.offsetWidth) / this.offsetHeight) * 100) / 100, number];}if (!onlyReturn) {this.style.width = output[0];this.style.height = output[1];}return [output[0], output[1], originalDimensions[0], originalDimensions[1]];});
        element.rationalPosition = element.rationalposition = element.rp = element.RP = element.Rp = (function (number, top1left0, onlyReturn) {number = parseFloat(number);if (isNaN(number)) {return false;}var originalPositions = [this.offsetTop, this.offsetLeft];var output = [];if (!top1left0) {output = [number, Math.round(((number * this.offsetLeft) / this.offsetTop) * 100) / 100];} else {output = [Math.round(((number * this.offsetTop) / this.offsetLeft) * 100) / 100, number];}if (!onlyReturn) {this.style.top = output[0];this.style.left = output[1];}return [output[0], output[1], originalPositions[0], originalPositions[1]];});
        element.itsScroll = element.itsscroll = element.itScroll = element.itscroll = (function () {return [this.scrollTop, this.scrollLeft];});
        element.itsEvents = element.itsEvent = element.itsevents = element.itsevent = (function (e) {return (typeof (event) != "undefined") ? [parseFloat(event.clientY), parseFloat(event.clientX)] : [parseFloat(e.clientY), parseFloat(e.clientX)];});
        element.itsSource = element.itssource = element.itSource = element.itsource = (function (e, climb, specify) {var currentSource = (typeof (event) != "undefined") ? event.srcElement : e.target;if (!climb) {return [currentSource];}var passages = [(!specify) ? currentSource : currentSource[specify]];if (currentSource != this) {while (currentSource.parentNode) {currentSource = currentSource.parentNode;passages.unshift((!specify) ? currentSource : currentSource[specify]);if (currentSource == this) {break;}}}return (currentSource != this) ? false : passages;});
        element.parents = (function (specify) {var output = [];output.push((!specify) ? this : this[specify]);var climber = this;while (climber.parentNode) {climber = climber.parentNode;output.push((!specify) ? climber : climber[specify]);}return output;});
        element.siblings = (function (specify) {var output = [];var up = this;var down = this;var roundsAfter = 0;var roundsBefore = 0;while (up.nextSibling) {up = up.nextSibling;++roundsAfter;output.push((!specify) ? up : up[specify]);}output.unshift((!specify) ? this : this[specify]);while (down.previousSibling) {down = down.previousSibling;++roundsBefore;output.unshift((!specify) ? down : down[specify]);}return [roundsBefore, output, roundsAfter];});
    }
    return returnAsObjects;
/* keep this comment to reuse freely:
http://www.unitedscripters.com */}