/**
* Gestor del navegador
*
* Clase para gestionar operaciones con el navegador
* @package SISTEMA
* @subpackage BROWSER
* @author Manuel Segura
* @version 1.0
* @copyright OVALUS
*/

function cBrowser()
{
	//Data
	var sBrowser 			= navigator.userAgent.toLowerCase();
	this.aBrowser 			= new Array();
	this.aBrowser["IE"]		= ((sBrowser.indexOf("msie") != -1) && (sBrowser.indexOf("opera") == -1) && (sBrowser.indexOf("webtv") == -1));
	this.aBrowser["GK"] 	= (sBrowser.indexOf("gecko") != -1);
	this.aBrowser["SF"] 	= (sBrowser.indexOf("safari") != -1);
	this.aBrowser["KR"] 	= (sBrowser.indexOf("konqueror") != -1);

	this.aResize			= new Array();


	// Methods
	this.is 			= fBrowser_Is;
	this.findObj 		= fBrowser_FindObj;
	this.setLoader		= fBrowser_SetLoader;
	this.swapImg		= fBrowser_SwapImg;
	this.loadImg		= fBrowser_LoadImg;
	this.imgRestore		= fBrowser_ImgRestore;
	this.viewObj		= fBrowser_ViewObj;
	this.getMouseXY 	= fBrowser_GetMouseXY;
	this.getRelativePos	= fBrowser_GetRelativePos;
	this.getObjPos		= fBrowser_GetObjPos;
	this.setObjPos		= fBrowser_SetObjPos;
	this.createWin		= fBrowser_CreateWin;
	this.setObjContent	= fBrowser_SetObjContent;
	this.setObjSrc		= fBrowser_SetObjSource;
	this.zoomImg		= fBrowser_ZoomImg;
	this.detectPlugin	= fBrowser_DetectPlugin;
	this.getFlashPlugin = fBrowser_GetFlashPlugin;
	this.insertFlash	= fBrowser_InsertFlash;
	this.sendMail		= fBrowser_SendMail;
	this.changeStyle	= fBrowser_ChangeObjStyle;
	this.inc			= fBrowser_Inc;
	this.isInc			= fBrowser_IsInc;
	this.basename		= fBrowser_Basename;
	this.dirname		= fBrowser_Dirname;
	this.setResize		= fBrowser_SetResize;
	this.popSet			= fBrowser_PopSet;
	this.checkResize	= fBrowser_CheckResize;
};

// Detección de navegador
function fBrowser_Is(sNav)
{
	return this.aBrowser[sNav];
};

// Localización de un objeto
function fBrowser_FindObj(sObject, oDocument)
{
  	var oElement = null, oDocument = (oDocument?oDocument:document);

	//if(!(oElement=oDocument[sObject]) && oDocument.all) oElement=oDocument.all[sObject];
	if(!oElement && oDocument.getElementById) oElement=oDocument.getElementById(sObject);
	return oElement;
};

// Configuración mensaje de carga de imagen

function fBrowser_SetLoader(fLoading, fLoaded)
{
	document.OVALUS_LOADER = new Array;
	document.OVALUS_LOADER['loading'] 	= fLoading;
	document.OVALUS_LOADER['loaded'] 	= fLoaded;
}


// Intercambio de ina imagen
// Parámetros: sVisor, sPath
function fBrowser_SwapImg()
{
  	var iCont, iImage=0, oImage, aArgs = fBrowser_SwapImg.arguments;
  	document.OVALUS_IMG = new Array;
  	for(iCont=0; iCont < (aArgs.length-1); iCont+=2)
   		if ((oImage=this.findObj(aArgs[iCont]))!=null)
		{
				document.OVALUS_IMG[iImage++] = oImage;
				if(!oImage.sOldSrc) oImage.sOldSrc = oImage.src;
				if (document.OVALUS_LOADER)
				{
					oImage.onload = document.OVALUS_LOADER['loaded'];
					document.OVALUS_LOADER['loading']();
				}
				oImage.src=aArgs[iCont+1];
		};
};

// Restaurar la imagen anterior
function fBrowser_ImgRestore()
{
  var iCont, oImage, aBuffer=document.OVALUS_IMG;

  for(iCont=0; aBuffer && iCont < aBuffer.length && (oImage=aBuffer[iCont]) && oImage.sOldSrc; iCont++)
  	oImage.src=oImage.sOldSrc;
};

// Precarga de imágen
function fBrowser_LoadImg()
{
	var iCont, oImage, oPreload = new Image(), aArgs = fBrowser_LoadImg.arguments;
  	for(iCont=0; iCont < (aArgs.length-1); iCont+=2)
   		if ((oImage=this.findObj(aArgs[iCont]))!=null)
		{
			oPreload.oLinkImage = oImage;
			oPreload.onload 	= function fixedAspectRatio(){this.oLinkImage.width = this.width; this.oLinkImage.height = this.height; this.oLinkImage.src = this.src;};
			oPreload.src 		= aArgs[iCont+1];
		};
};

// Visibilidad de un objeto: SHOW o HIDDEN
function fBrowser_ViewObj(oObject, sVisibility)
{
	if (sVisibility == "show") oObject.style.visibility = "visible";
	else oObject.style.visibility = "hidden";
}

// Posición del ratón en un evento CLICK
function fBrowser_GetMouseXY(oEvt)
{
	var oPos = new Object();
	if (!oEvt) oEvt = window.event;
   	oPos.x = (this.is("IE")?(oEvt.clientX + document.body.scrollLeft):oEvt.pageX);
    oPos.y = (this.is("IE")?(oEvt.clientY + document.body.scrollTop):oEvt.pageY);

  	if (oPos.x < 0) oPos.x = 0;
	if (oPos.y < 0) oPos.y = 0;

	return oPos;
};

// POsición relativa de un objeto sobre el que se ha realizado un evento CLICK
function fBrowser_GetRelativePos(oEvt, sObject)
{
	var oPos, oObject;
	if (sObject)
	{

		oPos 	= this.getMouseXY(oEvt);
		oObject = this.findObj(sObject);

		oPos.x =  oPos.x - oObject.offsetLeft;
		oPos.y =  oPos.y - oObject.offsetTop;

		return oPos;
	}
	else return null;
};

// Posición de un objeto ABSOLUTA
function fBrowser_GetObjPos(oObj, sTag)
{
	var oPos = new Object();

	oPos.y			= oObj.offsetTop;
	oPos.x			= oObj.offsetLeft;
	oPos.objParent	= oObj.offsetParent;

	while(oPos.objParent.tagName.toUpperCase()!="BODY" && oPos.objParent.id.toUpperCase() != sTag)
	{
		oPos.y += oPos.objParent.offsetTop;
		oPos.x += oPos.objParent.offsetLeft;
		oPos.objParent = oPos.objParent.offsetParent;
	};
	return oPos;
};

// Cambia la posición de un objeto
function fBrowser_SetObjPos(oObj, iX, iY)
{
	oObj.style.left = (iX) + "px";
	oObj.style.top  = (iY) + "px";
};

// Crea una ventana
function fBrowser_CreateWin (sUrl, sWinName, iWidth, iHeight, iLeft, iTop, sOptions)
{
	sOptions += ",width=" + iWidth + ",height=" + iHeight;
	if (iLeft) sOptions += ",left=" + iLeft;
	if (iTop) sOptions += ",top=" + iTop;
	return window.open(sUrl, sWinName, sOptions);
};

// Cambia el contenido de un objeto (por ejemplo, contenido textual de una capa)
function fBrowser_SetObjContent(oObj, sString)
{
	oObj.innerHTML =  sString;
};

// Cambia el contenido de un objeto indicando una nueva fuente mediante una URL
function fBrowser_SetObjSource(oObj, sUrl)
{
	oObj.src =  sUrl;
};

// Abre una ventana indicandole el fichero imagen a cargar
function fBrowser_ZoomImg(sZoomPage, sImageFile, iWidth, iHeight)
{
	sUrl = sZoomPage + "?pF=" + sImageFile + "&pW=" + iWidth + "&pH=" + iHeight;
	this.createWin(sUrl, "ZOOM", iWidth, iHeight, 0, 0,"menubar=0, location=0, resizable=0, scrollbars=0, status=0, titlebar=0, toolbar=0");
};

// Detecta el pluigin indicado por la clase
function fBrowser_DetectPlugin(sClassID_IE, sClassID_GK, sPlugin_GK)
{
	bPlugin = 0;

	//if (this.is("IE")) document.write('<SCRIPT type="text/vbscript"\>\n on error resume next\n For i = 2 to 12\n If Not(IsObject(CreateObject("' + sClassID_IE + '" & i))) Then\n Else\n bPlugin=i\n End If\n Next\n </SCRIPT\>\n');
	if (this.is("IE")) bPlugin = 10;
	if (this.is("GK"))
	{
		if (navigator.plugins && navigator.plugins.length && (oPlugin = navigator.plugins[sPlugin_GK])) bPlugin = parseInt(oPlugin.description.split(' ')[2].substr(0,oPlugin.description.indexOf(".")-1));
		else if (navigator.mimeTypes && navigator.mimeTypes.length && navigator.mimeTypes[sClassID_GK].enabledPlugin != null) bPlugin = 1;
	};
	return bPlugin;
};

// Obtiene la versión del visor de Flash
function fBrowser_GetFlashPlugin()
{
	bPlugin = this.detectPlugin("ShockwaveFlash.ShockwaveFlash.","application/x-shockwave-flash","Shockwave Flash");
	return bPlugin;
};

/**
* Configura en enlace para llamar a MAILTO
* @access public
* @param string oLink  Objeto enlace: <A>
* @param string sAccount  Cuenta de e-mail (parte anterior al símbolo @)
* @param string sDomaint  Dominio de e-mail (parte posterior al símbolo @)
*/

function fBrowser_SendMail(oLink, sAccount, sDomain)
{
	oLink.href="mailto:" + sAccount + "@" + sDomain;
};

// Cambia la propiedad de un objeto
function fBrowser_ChangeObjStyle(oObj, sProperty, sValue)
{
	oObj.style[sProperty]=sValue;
};

/**
* Incluye otros ficheros
* @access public
* @param string sFile Fichero JS a incluir
* @param string sType Tipo del fichero que se va a incluir: CSS o JS
* @param boolean bDOM Indicamos si queremos insertarel SCRIPT en el DOM o en el HTML
* @return void
*/

function fBrowser_Inc(sFile, sType, bDOM)
{
	var sPath	= "";
	var sSrc	= "";
	var oInc	= null;
	var oHead 	= document.getElementsByTagName('head').item(0);

	switch(sType.toLowerCase())
	{
		case "script": 	if ((sPath = this.isInc(sFile, sType))!="")
						{
							if (bDOM)
							{
								oInc 		= document.createElement('script');
								oInc.src 	= sPath +"/"+ sFile;
								oInc.type 	= 'text/javascript';
							}
							else document.write("<SCRIPT type='text/javascript' src='" + sPath +"/"+ sFile + "'></SCRIPT>");
						};
						break;
		case "css": 	if (sPath = this.isInc(sFile, sType)!="")
						{
							oInc 		= document.createElement('script');
							oInc.rel 	= 'stylesheet';
							oInc.href 	= sPath +"/"+ sFile
							oInc.type 	= 'text/css';
						}
						else document.write("<LINK rel='stylesheet' type='text/css' href='" + sPath +"/"+ sFile + "'></LINK>");
						break;
	};
	if (oInc) oHead.insertBefore(oInc, oHead.firstChild);
};

/**
* Comprueba si se ha incluido un fichero
* @access public
* @param string sFile Fichero JS a comprobar
* @param string sType Tipo del fichero que se va a incluir: CSS o JS
* @return bool
*/

function fBrowser_IsInc(sFile, sType)
{
	var sPath, sInc, sSrc = "";
	var oHead 	= document.getElementsByTagName('head').item(0);

	// Buscamos SCRIPTS, y comprobamos que no esta cargado
	for (var iElement=0; iElement<oHead.childNodes.length; iElement++)
	{
		if (oHead.childNodes[iElement].nodeName.toLowerCase()==sType)
		{
			sInc = "";
			try	{ sSrc  = oHead.childNodes[iElement].attributes["src"].value; }
			catch (oEvt) { sSrc = ""; };
			if (sSrc!="")
			{
				sPath = this.dirname(sSrc);
				sInc  = this.basename(sSrc);
				if (sFile == sInc) return "";
			};
		};
	};
	return sPath;
};

/**
* Obtiene el nombre del fichero en una cadena
* @access public
* @param string sPath Cadena con la ruta completa
* @return string
*/

function fBrowser_Basename(sPath)
{
	var sPath = new String(sPath);
	return sPath.substr(sPath.lastIndexOf("/")+1, sPath.length);
};

/**
* Obtiene la ruta en una cadena
* @access public
* @param string sPath Cadena con la ruta completa
* @return string
*/

function fBrowser_Dirname(sPath)
{
	var sPath = new String(sPath);
	return sPath.substr(0, sPath.lastIndexOf("/"));
};

/**
* Establece un control de tamaño sobre un objeto
* @access public
* @param object oObject Objeto sobre el que se ejercerá el control
* @param string sProperty Propiedad del objeto a controlar: width o height
* @param iAdjust Valor de compensación del tamaño
* @return void
*/

function fBrowser_SetResize(sObjName, sProperty, iAdjust)
{
	this.aResize[this.aResize.length] = {'obj':sObjName, 'property':sProperty, 'adj':iAdjust};
};

/**
* Elimina la última configuración añaida
* @access public
* @return void
*/

function fBrowser_PopSet()
{
	this.aResize.pop;
};

/**
* Activa el control de tamaño sobre los objetos definidos
* @access public
* @param string sPath Cadena con la ruta completa
* @return string
*/

function fBrowser_CheckResize()
{
	var oObj, iIndex;
	for(iIndex=0; iIndex<this.aResize.length; iIndex++)
	{
		oObj = this.findObj(this.aResize[iIndex].obj);
		this.changeStyle(oObj, this.aResize[iIndex].property, (this.aResize[iIndex].property=="width"?document.body.clientWidth-this.aResize[iIndex].adj:document.body.clientHeight-this.aResize[iIndex].adj)+"px");
	}
};

/**
* Inserta un objeto FLASH
* @access public
* @param string sPath Cadena con la ruta completa
* @return string
*/

function fBrowser_InsertFlash(sPath, sName, iWidth, iHeight, oParams)
{
	var sObject = "";
	if (this.aBrowser["IE"])
	{
		sObject  = "<OBJECT classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' width='"+ iWidth + "' height='" + iHeight + "' id='" + sName + "' align='middle'>";
		sObject += "<PARAM name='movie' value='"+sPath+"'>";
		for (sIndex in oParams)
			sObject += "<PARAM name='"+ sIndex + "' value='" + oParams[sIndex] + "'>";
		sObject += "</OBJECT>";
	}
	else
	{
		sObject = "<EMBED src='" + sPath + "' width='" + iWidth + "' height='" + iHeight + "' id='" + sName + " align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' ";
		for (sIndex in oParams)
			sObject += sIndex + "='" + oParams[sIndex] + "' ";
		sObject += ">";
	};
	document.write(sObject);
};


// Creamos un objeto global
var gBrowser = new cBrowser();

// Configuramos RESIZER
gBrowser.setResize('data_panel','height',200);
