// 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;
}