/*  * Cross-browser event handling, by Scott Andrew */function addEvent(element, eventType, lamdaFunction, useCapture) {    if (element.addEventListener) {        element.addEventListener(eventType, lamdaFunction, useCapture);        return true;    } else if (element.attachEvent) {        var r = element.attachEvent('on' + eventType, lamdaFunction);        return r;    } else {        return false;    }}/*  * Kills an event's propagation and default action */function knackerEvent(eventObject) {    if (eventObject && eventObject.stopPropagation) {        eventObject.stopPropagation();    }    if (window.event && window.event.cancelBubble ) {        window.event.cancelBubble = true;    }        if (eventObject && eventObject.preventDefault) {        eventObject.preventDefault();    }    if (window.event) {        window.event.returnValue = false;    }}/*  * Safari doesn't support canceling events in the standard way, so we must * hard-code a return of false for it to work. */function cancelEventSafari() {    return false;        }/*  * Cross-browser style extraction, from the JavaScript & DHTML Cookbook * <http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html> */function getElementStyle(elementID, CssStyleProperty) {    var element = document.getElementById(elementID);    if (element.currentStyle) {        return element.currentStyle[toCamelCase(CssStyleProperty)];    } else if (window.getComputedStyle) {        var compStyle = window.getComputedStyle(element, '');        return compStyle.getPropertyValue(CssStyleProperty);    } else {        return '';    }}/*  * CamelCases CSS property names. Useful in conjunction with 'getElementStyle()' * From <http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp> */function toCamelCase(CssProperty) {    var stringArray = CssProperty.toLowerCase().split('-');    if (stringArray.length == 1) {        return stringArray[0];    }    var ret = (CssProperty.indexOf("-") == 0)              ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1)              : stringArray[0];    for (var i = 1; i < stringArray.length; i++) {        var s = stringArray[i];        ret += s.charAt(0).toUpperCase() + s.substring(1);    }    return ret;}/* * Disables all 'test' links, that point to the href '#', by Ross Shannon */function disableTestLinks() {  var pageLinks = document.getElementsByTagName('a');  for (var i=0; i<pageLinks.length; i++) {    if (pageLinks[i].href.match(/[^#]#$/)) {      addEvent(pageLinks[i], 'click', knackerEvent, false);    }  }}/*  * Cookie functions */function createCookie(name, value, days) {    var expires = '';    if (days) {        var date = new Date();        date.setTime(date.getTime() + (days*24*60*60*1000));        var expires = '; expires=' + date.toGMTString();    }    document.cookie = name + '=' + value + expires + '; path=/';}function readCookie(name) {    var cookieCrumbs = document.cookie.split(';');    var nameToFind = name + '=';    for (var i = 0; i < cookieCrumbs.length; i++) {        var crumb = cookieCrumbs[i];        while (crumb.charAt(0) == ' ') {            crumb = crumb.substring(1, crumb.length); /* delete spaces */        }        if (crumb.indexOf(nameToFind) == 0) {            return crumb.substring(nameToFind.length, crumb.length);        }    }    return null;}function eraseCookie(name) {    createCookie(name, '', -1);}