/**
 * @author Pablo Cuadrado
 */
function CrossBrowserAPI() {

	classname = 'CrossBrowserAPI';
	classversion = [0,1,1];
	
	/**
	 * M?todo propio para abrir una ventana, 
	 * para detectar bloqueo de popUps.
	 */
	this.OpenWindow = function (cUrl, cName, cParms) {
		var wOpened = window.open(cUrl, cName, cParms);
		if (wOpened) {
			return wOpened;
		} else {
			return false;
		}
	};
	
	/**
	 * M?todo para obtener la posici?n X de un elemento.
	 */
	this.GetX = function(oElem) {
		var curleft = 0;
		if (oElem.offsetParent) {
			while (oElem.offsetParent) {
				curleft += oElem.offsetLeft
				oElem = oElem.offsetParent;
			}
		} else if (oElem.x) {
			curleft += oElem.x;
		}
		return curleft;
	};
	
	/**
	 * M?todo para obtener la posici?n Y de un elemento
	 */
	this.GetY = function(oElem) {
		var curtop = 0;
		if (oElem.offsetParent) {
			while (oElem.offsetParent) {
				curtop += oElem.offsetTop
				oElem = oElem.offsetParent;
			}
		} else if (oElem.y) {
			curtop += oElem.y;
		} 
		return curtop;	
	};

	/**
	 * Para setear la propiedad alpha de un objeto.
	 */
	this.SetAlpha = function(oElem, nValue)	{
		// Para Gecko
		oElem.style.opacity = nValue/10;
		// Para IE
		oElem.style.filter = 'alpha(opacity=' + nValue*10 + ')';
	};

	this.InnerWidth = function(oDoc) {
		if(oDoc == undefined) var oDoc = document;
		// Cualquiera menos IE
		if (self.innerWidth) {
			return self.innerWidth;
		} else if (oDoc.documentElement && oDoc.documentElement.clientHeight) {
			// IE 6 en modo Strict
			return oDoc.documentElement.clientWidth;
		} else if (oDoc.body) {
			// Otros IE
			return oDoc.body.clientWidth;
		} else {
			return false;
		}
	};

	this.InnerHeight = function(oDoc) {
		if(oDoc == undefined) var oDoc = document;		
		// Cualquiera menos IE
		if (self.innerHeight) {
			return self.innerHeight;
		} else if (oDoc.documentElement && oDoc.documentElement.clientHeight) {
			// IE 6 en modo Strict
			return oDoc.documentElement.clientHeight;
		} else if (oDoc.body) {
			// Otros
			return oDoc.body.clientHeight;
		} else {
			return false;
		}
	};

	this.ScrollX = function () {
		if (self.pageXOffset) {
			// Todos salvo Explorer
			return self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			// Explorer 6 Strict
			return document.documentElement.scrollLeft;
		} else if (document.body) {
			return document.body.scrollLeft;
		} else {
			return false;
		}
	};
	
	this.ScrollY = function () {
		if (self.pageYOffset) {
			return self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop) {
			return document.documentElement.scrollTop;
		} else if (document.body) {
			return document.body.scrollTop;
		}
	}
	
	this.Focus = function (cElement) {
		oElem = document.getElementById(cElement);
		oElem.focus();
	}
	
}

String.fromKeyCode = function(keyCode,bShift,bVerbose) {
	//String.fromKeyCode = function(keyCode,evtType,bShift,bVerbose) {
	/*if (evtType && evtType.length && evtType.toLowerCase() == "keypress") { 
		return String.fromCharCode(keyCode);
	}*/
	if(bShift == undefined) var bShift = false;
	if(bVerbose == undefined) var bVerbose = false;
	
	if(bVerbose == true) {
		var keyDownChars = new Array(16);
		keyDownChars[8] = '[Bksp]';
		keyDownChars[9] = '[Tab]';
		keyDownChars[12] = '[N5+shift]';
		keyDownChars[13] = '[Enter]';
		keyDownChars.push('[Shift]','[Ctrl]','[Alt]','[Pause]','[CapsLock]');
		for (i=11;i;--i) keyDownChars.push('undefined');
		keyDownChars[27] = '[Esc]';
		keyDownChars.push(' ','[PgUp]','[PgDn]','[End]','[Home]','[Left]','[Up]','[Right]','[Down]');
		for (i=7;i;--i) keyDownChars.push('undefined');
		keyDownChars[45] = '[Ins]';
		keyDownChars[46] = '[Del]';
		keyDownChars.push(['0',')'],['1','!'],['2','@'],['3','#'],['4','$'],['5','%'],['6','^'],['7','&'],['8','*'],['9','(']);
		for (i=7;i;--i) keyDownChars.push('undefined');
		keyDownChars.push('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U ','V','W','X','Y','Z','[WinKey]');
		for (i=4;i;--i) keyDownChars.push('undefined');
		keyDownChars.push('0','1','2','3','4','5','6','7','8','9','*','+','undefined','-','.','/','[F1]','[F2]','[F3]','[F4]','[F5]','[F6]','[F7]','[F8]','[F9]','[F10]','[F11]','[F12]');
		for (i=62;i;--i) keyDownChars.push('undefined');
		keyDownChars[144] = '[NumLock]';
		keyDownChars[145] = '[ScrollLock]';
		keyDownChars.push([';',':'],['=','+'],[',','<'],['-','_'],['.','>'],['/','?'],['`','~']);
		for (i=26;i;--i) keyDownChars.push('undefined');
		keyDownChars.push(['[','{'],['\\','|'],[']','}'],["'",'"']);
	} else {
		var keyDownChars = new Array(16);
		keyDownChars[8] = '';
		keyDownChars[9] = '';
		keyDownChars[12] = '';
		keyDownChars[13] = '';
		keyDownChars.push('','','','','');
		for (i=11;i;--i) keyDownChars.push('');
		keyDownChars[27] = '';
		keyDownChars.push(' ','','','','','','','','');
		for (i=7;i;--i) keyDownChars.push('');
		keyDownChars[45] = '';
		keyDownChars[46] = '';
		if(bShift == true) {
			keyDownChars.push('=','!','"','·','$','%','&','/','(',')');
		} else {
			keyDownChars.push('0','1','2','3','4','5','6','7','8','9');
		}		
		for (i=7;i;--i) keyDownChars.push('');
		keyDownChars.push('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','');
		for (i=4;i;--i) keyDownChars.push('');
		keyDownChars.push('0','1','2','3','4','5','6','7','8','9','*','+','','-','.','/','','','','','','','','','','','','');
		for (i=62;i;--i) keyDownChars.push('');
		keyDownChars[144] = '';
		keyDownChars[145] = '';
		if(bShift == true) {
			keyDownChars.push(':','+',';','_',':','?','~');
		} else {
			keyDownChars.push(';','=',',','-','.','/','`');
		}
		for (i=26;i;--i) keyDownChars.push('');
		//keyDownChars.push(['[','{'],['\\','|'],[']','}'],["'",'"']);
		if(bShift == true) {
			keyDownChars.push('?','|','¿','"');	
		} else {
			keyDownChars.push("'",'\\','¡',"'");	
		}
		
		if(bShift == true) {
			keyDownChars[226] = '>';	
		} else {
			keyDownChars[226] = '<';	
		}		
		keyDownChars[192] = 'Ñ';
	}
	return keyDownChars[keyCode];
}

/**
 * Reemplazo de GetElementById
 * Nota: No es un m?todo de la clase CBAPI.
 * 
 * Uso: 
 * var x = new GetElem('layername');
 */
function GetElem(oDoc, cName) {
  if(oDoc == undefined) var oDoc = document;
  if(oDoc.getElementById) {
  	this.obj = oDoc.getElementById(cName);
	this.style = oDoc.getElementById(cName).style;
  } else if (oDoc.all) {
	this.obj = oDoc.all[cName];
	this.style = oDoc.all[cName].style;
  } else if (oDoc.layers) {
   	this.obj = oDoc.layers[cName];
   	this.style = oDoc.layers[cName];
  }
}

Extend(CrossBrowserAPI, QObject);

var CBAPI = new CrossBrowserAPI();
