/*
29/02/2008:
----------
- Esta clase antes se llamaba BrowserInfo.
- Tareas que desarrollaba la clase BrowserInfo acerca del navegador fueron sustituidas por la clase "phpSniff", mucho más específica para el cliente (navegador), pero limitada
  para averiguar lo concerniente a la interface (ej.: dimensión de la ventana, config. de pantalla, etc.).

*/
function Capabilities() {
	this.NavBasicInfo = NavBasicInfo;
	this.WindowDimInfo = WindowDimInfo;
	this.GetWindowInfo = GetWindowInfo;
	
	function NavBasicInfo() {
		var ObjInfo = {
			userLanguage	: (navigator.language != undefined) ? navigator.language : navigator.userLanguage,
			systemLanguage	: (navigator.systemLanguage != undefined) ? navigator.systemLanguage : navigator.userLanguage,
			platform		: navigator.platform,
			appCodeName		: navigator.appCodeName,
			mimeTypes		: navigator.mimeTypes,
			plugins			: navigator.plugins,
			javaEnabled		: navigator.javaEnabled(),
			cookieEnabled	: navigator.cookieEnabled,
			onLine			: navigator.onLine, // No Opera
			wScreen			: screen.width,
			hScreen			: screen.height,
			wScreenAvail	: screen.availWidth,
			hScreenAvail	: screen.availHeight,
			colorDepth		: screen.colorDepth,
			pixelDepth		: screen.pixelDepth // No IE
		};
		return ObjInfo;
	}
	
	function WindowDimInfo() {
		var outer        = (arguments[0] == undefined) ? false : outer;
		var ObjDim       = {w:0, h:0};
		if (typeof window.innerWidth != 'undefined') {
			// Mozilla, Firefox, Opera
			var element  = window;
			if(!outer) {
				ObjDim.w = element.innerWidth;
				ObjDim.h = element.innerHeight;
			} else {
				ObjDim.w = element.outerWidth;
				ObjDim.h = element.outerHeight;
			}
		} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
			// IE; no encontré manera de medir la ventana completa.
			var element  = (document.documentElement) ? document.documentElement : document.body;
			if(!outer) {
				ObjDim.w = element.clientWidth;
				ObjDim.h = element.clientHeight;
			} else {
				ObjDim.w = element.clientWidth;
				ObjDim.h = element.clientHeight;
			}
		} else {
			var element  = document.getElementByTagName('body')[0];
			if(!outer) {
				ObjDim.w = element.clientWidth;
				ObjDim.h = element.clientHeight;
			} else {
				ObjDim.w = element.clientWidth;
				ObjDim.h = element.clientHeight;
			}
		}
		return ObjDim;
	}
	
	function GetWindowInfo() {
		// No todas las propiedades son reconocidas por todos los navegadores. Existen otras propiedades, pero son utilizadas generalmente
		// por el mtodo window.open como parmetros.
		var ObjWindow = {
			name          : window.name,				// Nombre de la ventana; generalemente cuando se usa window.open y se indica el nombre, sino "".
			opener        : window.opener,				// La ventana que abri la actual; generalemente cuando se usa window.open y se indica el nombre, sino undefined o null.
			innerWidth    : this.WindowDimInfo().w,		// Ancho "neto" interior de la ventana del navegador, contando la barra de scroll si la hubiese.
			innerHeight   : this.WindowDimInfo().h,     // Alto "neto" interior de la ventana del navegador, contando la barra de scroll si la hubiese.
			outerWidth    : this.WindowDimInfo(true).w, // Ancho total interior de la ventana del navegador.
			outerHeight   : this.WindowDimInfo(true).h, // Alto total interior de la ventana del navegador.
			parent        : window.parent,				// Idem top.
			self          : window.self,				// Ventana o frame actual.
			status        : window.status,				// Texto de la barra de estado.
			top           : window.top,					// Hace referencia a la ventana donde est situada el frame donde estamos trabajando. Como la propiedad parent.
			frames        : window.frames,				// Contiene todos los frames de la pgina. Se accede por su ndice a partir de 0.
			frames_len    : window.length,				// Numero de frames de la ventana.
			location      : window.location,			// Devuelve la ruta absoluta del documento actual.
			history       : window.history,				// Objeto historial de pginas visitadas.
			screenLeft    : window.screenLeft,			// Distancia del borde izquierdo de la pantalla.
			screenTop     : window.screenTop			// Distancia del borde superior de la pantalla.
		}
		return ObjWindow;
	}
};

