// x_event.js, part of X, a Cross-Browser.com Javascript Library
// Copyright (C) 2001,2002,2003,2004,2005 Michael Foster - Distributed under the terms of the GNU LGPL - OSI Certified
// File Rev: 4
//xEvent=true;
function xAddEventListener(e,eventType,eventListener,useCapture){
  eventType=eventType.toLowerCase();  
  var eh='e.on'+eventType+'=eventListener';
  if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture);
  else if(e.attachEvent) e.attachEvent('on'+eventType,eventListener);
  else eval(eh);
}

function xRemoveEventListener(e,eventType,eventListener,useCapture)
{
  eventType=eventType.toLowerCase();
  
  var eh='e.on'+eventType+'=null';
  if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture);
  else if(e.detachEvent) e.detachEvent('on'+eventType,eventListener);
  else eval(eh);
}

function xEvent(evt) // object prototype
{
  this.type = ''; 
  this.target = null;
 
  this.keyCode = 0;
  
  this.button = 0;
  this.clientX=0; //navegador
  this.clientY=0;
  this.screenX=0; //pantalla
  this.screenY=0;
  this.relatedTarget = null; 
  this.altKey=false;
  this.ctrlKey=false;
  this.metaKey=false;
  this.shiftKey=false;
  
  //  propiedades no standards
  this.pageX=0; 
  this.pageY=0;
  this.offsetX = 0;
  this.offsetY = 0;
  
  this.e = evt || window.event;  
  
  if(!this.e) return false;
  
  if(this.e.type) this.type = this.e.type;
  
  if(this.e.target) this.target = this.e.target;
  else if(this.e.srcElement) this.target = this.e.srcElement;
  
  // mouseover y mouseout
  if (this.e.relatedTarget) this.relatedTarget = this.e.relatedTarget;
  else if (xBrowser.isIe) {	  
    if (this.e.type == 'mouseover') this.relatedTarget = this.e.fromElement;
    else if (this.e.type == 'mouseout') this.relatedTarget = this.e.toElement;
  }
  
  if (this.e.altKey)
  	this.altKey=this.e.altKey;
  if (this.e.ctrlKey)  
  	this.ctrlKey=this.e.ctrlKey;
  if (this.e.metaKey)
    this.metaKey=this.e.metaKey;
  if (this.e.shiftKey)
  	this.shiftKey=this.e.shiftKey;
  
  if (xBrowser.isIe){
	  if (this.e.button){
		  switch (this.e.button){
			  case 1:
			  this.button=1;
			  break;
			  case 2:
			  this.button=3;
			  break;
			  case 3:
			  this.button=1&3;
			  break;
			  case 4:
			  this.button=2;
			  break;
			  case 5:
			  this.button=1&2;
			  break;
			  case 6:
			  this.button=2&3;
			  break;
			  case 7:
			  this.button=1&2&3;
			  break;
		  }
	  }
  }
  // screenX
  
  // clientX 
  if(this.e.clientX){
	  this.clientX = this.e.clientX; 
	  this.clientY = this.e.clientY; 
	  
	  this.pageX = this.e.clientX + document.documentElement.scrollLeft; 
	  this.pageY = this.e.clientY + document.documentElement.scrollTop; 
  }
  
  if(xDef(this.e.offsetX,this.e.offsetY)) {
    this.offsetX = this.e.offsetX;
    this.offsetY = this.e.offsetY;    
  }
  else if (xDef(this.e.layerX,this.e.layerY)) {
    this.offsetX = this.e.layerX;
    this.offsetY = this.e.layerY;
  }
  else {
    this.offsetX = this.pageX - xPageX(this.target);
    this.offsetY = this.pageY - xPageY(this.target);
  }
  
  
  if (this.e.keyCode) { this.keyCode = this.e.keyCode; } // for moz/fb, if keyCode==0 use which
  else if (this.e.which && this.e.type.indexOf('key')!=-1) { this.keyCode = this.e.which; }
 
  this.stopPropagation=function(){
	evt=this.e;
	if (evt && evt.stopPropagation) 
		evt.stopPropagation();
	else{ 
		window.event.cancelBubble = true;
		window.event.keyCode = 0
	}
  }
  this.preventDefault=function (){
	evt=this.e;
	
	if (evt && evt.preventDefault)
		evt.preventDefault();			
	else{
		window.event.returnValue = false;
		//window.event.keyCode = 0
	}
  }
 
}
