//
//------------------------------------------------------------------------------------------------
// Proyect:		Control browser operations
// File: 		oeditor.js
// Description: Main class to define control browser objects
// Copyright: 	OVALUS.COM
// Version:		1.0
// Dependence: 	--
//------------------------------------------------------------------------------------------------

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);

	// 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.zoomImg		= fBrowser_ZoomImg;
	this.detectPlugin	= fBrowser_DetectPlugin;
	this.getFlashPlugin = fBrowser_GetFlashPlugin;
	this.sendMail		= fBrowser_SendMail;
	this.changeObjStyle = fBrowser_ChangeObjStyle;
};

// Detección de navegador
function fBrowser_Is(sNav)
{
	return this.aBrowser[sNav];
};

// Localización de un objeto
function fBrowser_FindObj(sObject)
{
  	var oElement = null, 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;
};

// 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("GK"))
	{
		if (navigator.plugins && navigator.plugins.length && (oPlugin = navigator.plugins[sPlugin_GK])) bPlugin = parseInt(oPlugin.description.charAt(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()
{
	return this.detectPlugin("ShockwaveFlash.ShockwaveFlash.","application/x-shockwave-flash","Shockwave Flash");
};

// Envia un e-mail
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;
};


// Creamos un objeto global
var gBrowser = new cBrowser();