/* Copyright (c) 2005 The Hertz Corporation All Rights Reserved. (Unpublished.) The information contained herein is confidential and proprietary to The Hertz Corporation and may not be duplicated, disclosed to third parties, or used for any purpose not expressly authorized by it. Any unauthorized use, duplication, or disclosure is prohibited by law. Function Name: createXmlHttpRequest Arguments: none Returns: browser-specific xmlhttp object or false */ function createXMLHttpRequest() { try { var xmlhttp = new XMLHttpRequest(); if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType('text/html'); } } catch(err1) { var ieXmlHttpVersions = new Array(); ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.5.0"; ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.4.0"; ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.3.0"; ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp"; ieXmlHttpVersions[ieXmlHttpVersions.length] = "Microsoft.XMLHttp"; var i; for (i=0; i < ieXmlHttpVersions.length; i++) { try { var xmlhttp = new ActiveXObject(ieXmlHttpVersions[i]); break; } catch (err2) { //do nothing } } } return xmlhttp; } /* Function Name: $ Arguments: fElementId Returns: It gives reference to an element */ function $(fElementId){ return document.getElementById(fElementId); } /* Function Name: getElementsByClassName Arguments: fElement, strTagName, strClassName Returns: It gets all elements with a certain class name */ function getElementsByClassName(fElement, strTagName, strClassName){ var arrElements = (strTagName == "*" && fElement.all)? fElement.all : fElement.getElementsByTagName(strTagName); var arrReturnElements = new Array(); strClassName = strClassName.replace(/\-/g, "\\-"); var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"); var oElement; for(var i=0; i< arrElements.length; i++){ oElement = arrElements[i]; if(oRegExp.test(oElement.className)){ arrReturnElements.push(oElement); } } return (arrReturnElements) } /* Function Name: addClassName Arguments: fElement, strClassName Returns: Add a class name to an element, Returns: Checks if the element has class */ function addClassName(fElement, strClassName){ var strCurrentClass = fElement.className; if(!new RegExp(strClassName, "i").test(strCurrentClass)){ fElement.className = strCurrentClass + ((strCurrentClass.length > 0)? " " : "") + strClassName; } } /* Function Name: addClassName Arguments: fElement, strClassName Returns: Remove a class name from an element, Returns: Removes class name and spaces */ function removeClassName(fElement, strClassName){ var oClassToRemove = new RegExp((strClassName + "\s?"), "i"); fElement.className = fElement.className.replace(oClassToRemove, "").replace(/^\s?|\s?$/g, ""); } function findPos(obj) { var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return [curleft,curtop]; } var ELEMENT_NODE = 1; var ATTRIBUTE_NODE = 2; var TEXT_NODE = 3; var CDATA_SECTION_NODE = 4; var ENTITY_REFERENCE_NODE = 5; var ENTITY_NODE = 6; var PROCESSING_INSTRUCTION_NODE = 7; var COMMENT_NODE = 8; var DOCUMENT_NODE = 9; var DOCUMENT_TYPE_NODE = 10; var DOCUMENT_FRAGMENT_NODE = 11; var NOTATION_NODE = 12; /* Function Name: AttachEvent Arguments: OBJ,EVT,FNCT Action: cross browser: attaches event to passed in object. FNCT will be the event's callback function. Returns: true on success */ function AttachEvent(OBJ,EVT,FNCT) { if (OBJ.addEventListener) { OBJ.addEventListener(EVT,FNCT,false); return true; } else if (OBJ.attachEvent) { return OBJ.attachEvent("on"+EVT,FNCT); } } /* Function Name: RemoveTextNodes Arguments: NODE Action: Removes all child "empty" text nodes from an element. Returns: nothing Notes: The purpose of this function it to equalize the Mozilla and IE DOMs. */ function RemoveTextNodes(NODE,RECURSIVE) { var ChildNode; for (var i=NODE.childNodes.length-1; i>=0; i--) { ChildNode = NODE.childNodes[i]; if (ChildNode.nodeType == TEXT_NODE && !(/\S/.test(ChildNode.nodeValue))) { NODE.removeChild(ChildNode); } else if (RECURSIVE && ChildNode.hasChildNodes()) { RemoveTextNodes(ChildNode,true); } } }