// Include special extenders.js lib 
//if (/Mozilla\/5\.0/.test(navigator.userAgent))
if (/Mozilla\/5\.0/.test(navigator.userAgent) && !/safari/gi.test(navigator.userAgent))
    document.write('<script type="text/javascript" src="/lib/extenders.js"></sc' + 'ript>');

/*
 This library should contain alle the functions we need to be able to code quivalent on all platforms
 */

function TCompatibility() {
    this.addEvent = _addEvent;
    this.removeEvent = _removeEvent;
    this.stopBubbeling = _stopBubbeling;

    this.removeOnPart = _removeOnPart;

    /* FUNCTION addEvent
     Ensures that a the correct eventlistener is attached to the element

     element = A reference to the element to wich the listener is to be attached
     ename = name of the event, should allways contain the "on" part
     e = function to be attached
     */
    function _addEvent(element, ename, e, useCapture) {
        if (!element) return;
        if (typeof(useCapture) == "undefined") {
            useCapture = false
        }
        if (window.addEventListener) {
            ename = this.removeOnPart(ename);
            try {
                element.removeEventListener(ename, e, useCapture);
            } catch (ee) {

            }
            element.addEventListener(ename, e, useCapture);
        } else if (element.attachEvent) {
            element.attachEvent(ename, e)
        } else {
            return;
        }
    }

    function _removeEvent(element, ename, e) {
        if (!element) return;
        if (window.removeEventListener) {
            ename = this.removeOnPart(ename);
            element.removeEventListener(ename, e, false);
        } else if (element.attachEvent) {
            element.detachEvent(ename, e);
        } else {
            return;
        }
    }


    // Helper function to revove the leading "on" from a event name
    function _removeOnPart(ename) {
        return ename.replace(/^[o|O]{1}[n|N]{1}/g, "");
    }

    function _stopBubbeling(e)
    {
        if (!e)
            var e = window.event;
        if (window.event)
        {
            e.cancelBubble = true;
        }
        else
        {
            e.stopPropagation();
        }
        return false;
    }
}

// Instance for tsCompat
tsCompat = new TCompatibility();

// add methods to public Tangora.Events
if (typeof(Tangora) != 'undefined' && typeof(Tangora.Events) != 'undefined')
{
    Tangora.Events.AddHandler = tsCompat.addEvent;
    Tangora.Events.RemoveHandler = tsCompat.removeEvent;
    Tangora.Events.CancelBubble = tsCompat.stopBubbeling;
    Tangora.Events.removeOnPart = tsCompat.removeOnPart;
}
