﻿function WVBrowser()
{
    var oThis = this;
    var viewer;
    this.init = function (visor)
    {
        viewer = visor;
        lockFeatures();
    }
    
    function lockFeatures()
    {
        if (document.addEventListener) 
		{
		/*
			//document.addEventListener( "mousedown",     function (e) {e.preventDefault();}, false);
			document.addEventListener( "draggesture",   function (e) {e.preventDefault();}, true );
		*/
			document.addEventListener( "contextmenu",   function (e) {e.preventDefault();}, true );	 
			viewer.getContainer().addEventListener( "mousedown",     function (e) {e.preventDefault();}, false);   
		}
		else
		{
			//document.onselectstart  =   function() {return false;};
			//document.ondragstart    =   function() {return false;};
			document.oncontextmenu  =   function() {return false;};
		}
    }
    
    //Retorna el número de botón pulsado 
    //(difiere entre navegadores pero si retorna 1 significa que se pulsó botón izquierdo del ratón)
    this.getButtonClicked=function(e)
    {
        if (e.which)
        {
          return e.which;
        }
        else 
        {
          return e.button;
        }
    }
    
    this.registerEventMouseWheel = function(obj, callback)
    {
        if (window.addEventListener)
        {
            obj.addEventListener('DOMMouseScroll', callback, false);
            obj.onmousewheel = document.onmousewheel = callback;
        }
        else
        {
            obj.attachEvent('onmousewheel',callback);
        }
    }
    
    this.registerEventClick = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "click",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onclick',callback);
		}
    }
    
    this.registerEventMouseDown = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "mousedown",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onmousedown',callback);
		}
    }
    
    this.registerEventMouseMove = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "mousemove",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onmousemove',callback);
		}
    }
    
    this.registerEventMouseOver = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "mouseover",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onmouseover',callback);
		}
    }
    
    this.registerEventMouseOut = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "mouseout",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onmouseout',callback);
		}
    }
    
    this.registerEventMouseUp = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "mouseup",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onmouseup',callback);
		}
    }
    
    this.registerEventKeyDown = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "keydown",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onkeydown',callback);
		}
    }
    
    this.registerEventKeyUp = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "keyup",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onkeyup',callback);
		}
    }
    
    this.registerEventFocus = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "focus",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onfocus',callback);
		}
    }
    
    this.registerEventBlur = function (obj, callback)
    {
        if (document.addEventListener) 
		{
			obj.addEventListener ( "blur",   function (e){ callback(e);}, false);
		}
		else
		{
		    obj.attachEvent('onblur',callback);
		}
    }
    
    this.getTargetElement= function (evt)
    {
        if (document.addEventListener) 
		{
			return evt.target;
		}
		else
		{
		    return evt.srcElement;
		}
    }
    
    this.getKeyCode = function (evt)
    {
        var keynum;
        var keychar;
        var numcheck;
        
        if(window.event) // IE
        {
            keynum = evt.keyCode;
        }
        else if(evt.which) // Netscape/Firefox/Opera
        {
            keynum = evt.which;
        }
        //keychar = String.fromCharCode(keynum);
        //numcheck = /\d/;
        return keynum;//!numcheck.test(keychar);
    }
    
    this.setCapture=function(obj, callbackMouseMove, callbackMouseUp)
    {
        if (document.addEventListener) 
        {
            //window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP );
            window.onmousemove  = callbackMouseMove;
            window.onmouseup    = callbackMouseUp;
        }
        else
        {
            obj.setCapture();
        }
    }
    
    this.releaseCapture=function(obj)
    {
        if (document.addEventListener ) 
		{
			//window.releaseEvents( Event.MOUSEMOVE | Event.MOUSEUP );
		}
		else
		{
            obj.releaseCapture();
        }
    }
    
    //Retorna la coordenada X de la pagina asociada a un evento de raton
    this.mousepageX  = function(e)
    {
        return (document.all)? e.clientX : e.pageX; 
	    //return ((document.all)? event.clientX : e.pageX)+ document.body.scrollLeft; 
    }
     //Retorna la coordenada Y de la pagina asociada a un evento de raton
    this.mousepageY = function(e)
    {
        return (document.all)? e.clientY : e.pageY;
	    //return ((document.all)? event.clientY : e.pageY)+ document.body.scrollTop ;
    }
    
    //Retorna la coordenada X dentro del elemento contenedor asociada a un evento de raton
    this.mouseclientX  = function(e)
    {
	    return (!document.addEventListener )? e.x: e.target.offsetLeft + e.layerX;

    }
    //Retorna la coordenada Y dentro del elemento contenedor asociada a un evento de raton
    this.mouseclientY = function(e)
    {
	    return (!document.addEventListener)? e.y: e.target.offsetTop + e.layerY;
    }
    
    this.getOffSetMouseClient = function(e)
    {
        if (window.opera)
        {
            var x0 = e.offsetX ;
            var y0 = e.offsetY ; 
            if(!document.all )
            {
                x0 = e.target.offsetLeft + e.layerX;
                y0 = e.target.offsetTop  + e.layerY;
            }
            var offsetvector = getOffSet(e);
            return {x:(x0+offsetvector.x), y:(y0+offsetvector.y)};
        
        }
        else /* IE, Firefox, Safari */
        {
            return {x:oThis.mouseclientX(e),y:oThis.mouseclientY(e)};
        } 
    }
    
    //retorna el desplazamiento de un nodo relativo al Container
	function getOffSet(e)
	{
	    var xo = 0;
	    var yo = 0;
	    var padreEvent = oThis.parentEvent(e);
	    var id = viewer.getContainer().id;
	    while( padreEvent != null && ( padreEvent.id == null || padreEvent.id != id ))
	    {
		    xo += padreEvent.offsetLeft;
		    yo += padreEvent.offsetTop;
		    padreEvent = padreEvent.parentNode; 
	    }
	    return {x:xo,y:yo};
	}
    
    //Retorna Nodo que genero el evento
    this.parentEvent = function(e)
    {
        return(document.all)? event.srcElement : e.target;
    }
    
    //detiene la propagacion del evento
    this.stopEvent = function(e)
    {
        if(!e)e = window.event;
        if (e!=null)
        {
            e.cancelBubble  = true;
            if (e.stopPropagation) e.stopPropagation();
        }
    }
    
    //guarda cookie
    this.registerCookie=function(name,value,expires,path,domain,secure)
    { 
        document.cookie=name+ "=" +escape(value) + ((expires==null)?"":";expires="+expires.toGMTString()) +((path==null)?"":";path=" + path) +((domain==null)?"":";domain="+domain) +((secure==null)?"":";secure"); 
    } 
    
    //borra cookie
    this.deleteCookie=function(name,path,domain)
    { 
        if(oThis.getCookie(name)!=null)
        { 
            document.cookie=name+"="+((path==null)?"":";path="+path) +((domain==null)?"":";domain="+domain)+";expires=Thu,01-Jan-70 00:00:01 GMT"; 
        } 
    } 
    
    //retorna cookie
    this.getCookie=function(c_name)
    {
        if (document.cookie.length>0)
        {
          c_start=document.cookie.indexOf(c_name + "=");
          if (c_start!=-1)
          { 
            c_start=c_start + c_name.length+1; 
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
          } 
        }
        return null;
    }
    
    function findPos(obj) 
    {
	    var curleft = curtop = 0;
	    if (obj.offsetParent) 
	    {
		    do 
		    {
			    curleft += obj.offsetLeft;
			    curtop += obj.offsetTop;
		    } while (obj = obj.offsetParent);
	    }
	    return [curleft,curtop];
    }

}

