
/*Event handling functions*/
var invz ={};invz.Events = {};
if(document.addEventListener){//FF iphone

    invz.Events.add = function(element,handler,eventType){
  if(BrowserDetect.OS == "iPhone/iPod" || BrowserDetect.OS == "iPad"){
            if(eventType == "mousedown"){
                eventType = "touchstart";
            }else if(eventType =="mousemove"){
                eventType = "touchmove";
            }else if(eventType == "mouseup"){
                eventType = "touchend";
            }
        }

        element.addEventListener(eventType,handler,false);
    };
    invz.Events.remove = function(element,handler,eventType){
        if(BrowserDetect.OS == "iPhone/iPod" || BrowserDetect.OS == "iPad"){
            if(eventType == "mousedown"){
                eventType = "touchstart";
            }else if(eventType =="mousemove"){
                eventType = "touchmove";
            }else if(eventType == "mouseup"){
                eventType = "touchend";
            }
        }
        
        element.removeEventListener(eventType,handler, false);
    };
}else if(document.attachEvent){//ie5+
    invz.Events.add = function(element,handler,eventType){
        if(invz.Events._find(element,handler,eventType)!= -1)return;

        var wrappedHandler = function(e){
            if(!e)e=window.event;
            var event ={
                _event:e,
                type: e.type,
                target: e.srcElement,
                currentTarget:element,
                relatedTarget: e.fromElement?e.fromElement:e.toElement,
                eventPhase:(e.srcElement==element)?2:3,
                //mouse xy
                clientX:e.clientX,
                clientY:e.clientY,
                screenX:e.screenX,
                screenY:e.screenY,
                //Key State
                altKey: e.altKey,
                ctrlKey:e.ctrlKey,
                shiftKey:e.shiftKey,
                charCode:e.keyCode,
                wheelDelta:e.wheelDelta,

                stopPropagation:function(){
                    this._event.cancelBubble=true;
                },
                preventDefault:function(){
                    this._event.returnValue=false;
                }
            };
            if(Function.prototype.call)
                handler.call(element,event);
            else{
                element._currentHandler = handler;
                element._currentHandler(event);
                element._currentHandler = null;
            }

        };
        element.attachEvent("on"+eventType,wrappedHandler);

        var h ={
            element:element,
            eventType:eventType,
            handler:handler,
            wrappedHandler:wrappedHandler
        };

        var d = element.document || element;
        var w  = d.parentWindow;

        var id = invz.Events._uid();
        if(!w._allHandlers)w._allHandlers ={};
        w._allHandlers[id] = h;
        if(!element._handlers)element._handlers=[];
        element._handlers.push(id);
        if(!w.onunloadHandlerRegistered){
            w.onunloadHandlerRegistered = true;
            w.attachEvent("onunload",this._removeAllHandlers);
        }
    };
    invz.Events.remove=function(element,handler,eventType){
        var i =invz.Events._find(element,handler,eventType);
        if(i==-1) return;//doesnt exist

        var d = element.document || element;
        var w = d.parentWindow;
        var handlerId = element._handlers[i];
        var h = w._allHandlers[handlerId];
        element.detachEvent("on"+eventType, h.wrappedHandler);
        element._handlers.splice(i,1);
        delete w._allHandlers[handlerId];
    };
    invz.Events._find=function(element,handler,eventType){
        var handlers = element._handlers;
        if(!handlers){
            return -1;
        }
        var d = element.document || element;
        var w = d.parentWindow;
        for(var i = handlers.length-1;i >= 0; i--){
            var handlerId = handlers[i];
            var h = w._allHandlers[handlerId];
            if(h.eventType == eventType && h.handler == handler){
                return i;
            }
        }
        return -1;
    };
    invz.Events._removeAllHandlers=function(){
        var w = this;
        for(var id in w._allHandlers){
            var h = w._allHandlers[id];
            h.element.detachEvent("on"+h.eventType,h.wrappedHandler);
            delete w._allHandlers[id];
        }
    };
    invz.Events._counter = 0;
    invz.Events._uid=function(){
        invz.Events._counter++;
        return "h"+invz.Events._counter;
    };
};
invz.Events.getCursorXY =function(e){
    var cursorCoords = {};
    if(invz.envSettings.browser.isIPhone){// if is piece of shit
        cursorCoords.x = e.touches[0].screenX
        cursorCoords.y = e.touches[0].screenY
    }else{

        cursorCoords.x=(e||event).clientX;
        cursorCoords.y=(e||event).clientY;
        if (invz.envSettings.browser.isIE){
            //cursorCoords.x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
            //cursorCoords.y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
            cursorCoords.x += document.documentElement.scrollLeft + document.body.scrollLeft;
            cursorCoords.y += document.documentElement.scrollTop + document.body.scrollTop;
        }else if(invz.envSettings.browser.isNS){
            cursorCoords.x += window.scrollX;
            cursorCoords.y += window.scrollY;
        }
    }
    return cursorCoords;
};

