/**
   Autor: Raúl Alzola (OTF)
   Empresa: VASS
   Fecha: 13/09/2007
   Descripión:

		La funcionalidad de este js, se puede dividir en 2 partes.<b> 

		1- Cuando la pagina se carga (onload), se explora el contenido html de la misma, 
		en busca de objetos tipo (span class="estatContent"). Se extrae el objeto enlace
		de dentro y se añaden los eventos necesarios (onmousover y onmouseout) para que se 
		muestre el menú correspondiente.

		2- Mantiene una estructura de objetos tipo CcontentMenu. 
		De esta manera se puede mostrar un menú en unas coordenadas xy de la ventana del navegador.	
		Está pensado para poder capturar las coordenadas del puntero del ratón 
		y mostrar el menu correspondiente en esa posición.
		
	Detalles:
		Utilizamos la variable global "staticFilesPath" declarada en la secondary page
		que nos indica dónde están las imagenes.

*/

/* Clase CcontentMenu */
function CcontentMenu(pMenuId, pState, pMessage)
{
	this.menuId = pMenuId;
	this.contentInfo = new String(this.menuId).split("#");
	this.contentId = (this.contentInfo!=null && this.contentInfo.length>0) ? this.contentInfo[0] : "";
	this.siteId = (this.contentInfo!=null && this.contentInfo.length>1) ? this.contentInfo[1] : "";
	this.channelId = (this.contentInfo!=null && this.contentInfo.length>2) ? this.contentInfo[2] : "";
	this.shortId = (this.contentInfo!=null && this.contentInfo.length>3) ? this.contentInfo[3] : "";
	this.state = pState;
	this.message = pMessage;
	this.items = new Array();
	this.divObj = null;
	this.appendToBody = fAppendToBody;

	function fAppendToBody()
	{
		document.body.appendChild(this.divObj);
	}

	this.createItems = function fCreateItems()
	{
		var posItem = 0;

		// Item ESTADO
		var item = document.createElement("div");
		item.innerHTML = this.state;
		this.items[posItem++] = item;

		// Item EDITAR
		item = document.createElement("img");
		item.src = staticFilesPath + "icon_reset.gif";
		this.items[posItem++] = item;

		item = document.createElement("a");
		item.href = "#";
		item.className = "estatcontent_menu_option";
		item.innerHTML = etiquetas[0]; // editar
		item.onclick = function(){
			if(this.parentNode != null){
				var menu = contentMenuManager.vectorContentMenu.getMenu(this.parentNode.id);
				if(menu != null){
					SimplePopwin("/AppConsole/secure/cmaViewer.do?spfAId="+menu.contentId+"&propertiesClose=true", menu.contentId, "", 800, 600);
					return false;
				}
			}		
		}
		this.items[posItem++] = item;
		this.items[posItem++] = document.createElement("br");

		// Item PUBLICAR
		item = document.createElement("img");
		item.src = staticFilesPath + "icon_reset.gif";
		this.items[posItem++] = item;
		
		item = document.createElement("a");
		item.href = "#";
		item.className = "estatcontent_menu_option";
		item.innerHTML = etiquetas[1]; //Publicar;
		item.onclick = function(){
			if(this.parentNode != null){
				var menu = contentMenuManager.vectorContentMenu.getMenu(this.parentNode.id);
				if(menu != null){
					publishManagedObject("true", menu.contentId, menu.siteId, menu.channelId, menu.message);
					return false;
				}
			}
		}
		this.items[posItem++] = item;
		this.items[posItem++] = document.createElement("br");

		// Item DESPUBLICAR
		item = document.createElement("img");
		item.src = staticFilesPath + "icon_reset.gif";
		this.items[posItem++] = item;

		item = document.createElement("a");
		item.href = "#";
		item.className = "estatcontent_menu_option";
		item.innerHTML = etiquetas[2]; //Despublicar;
		item.onclick = function(){
			if(this.parentNode != null){
				var menu = contentMenuManager.vectorContentMenu.getMenu(this.parentNode.id);
				if(menu != null){
					unpublishManagedObject("true", menu.contentId, menu.siteId, menu.channelId, menu.message);
					return false;
				}
			}
		}
		this.items[posItem++] = item;
	}

	this.createItemsMenu = function fCreateItemsMenu()
	{
		var divMenu = document.createElement("div");
		divMenu.style.visibility = "hidden";
		divMenu.style.position = "absolute";
		divMenu.style.left = "0px";
		divMenu.style.top = "0px";
		divMenu.style.width = "80px";
		divMenu.style.height = "60px";
		divMenu.className = "estatcontenido_menu";
		divMenu.id = this.menuId;			

		divMenu.onmouseover = function(){divMenu.style.visibility = "visible";};
		divMenu.onmouseout = function(){divMenu.style.visibility = "hidden";};

		for(var i=0;i<this.items.length;i++)
		{
				divMenu.appendChild(this.items[i]);
		}
		this.divObj = divMenu;
	}

	this.createItems();
	this.createItemsMenu();
	this.appendToBody();
}

/* Vector de menus de contenido */
function CcontentMenuVector()
{
	this.vMenus = [];
	this.addMenu = fAddMenu;
	this.menuExists = fMenuExists;
	this.getMenu = fGetMenu;

	function fAddMenu(pMenu)
	{
		if(!this.menuExists(pMenu.menuId))
		{
			this.vMenus.push(pMenu);
		}
	}

	function fMenuExists(pMenuId)
	{
		for(var i=0;i<this.vMenus.length;i++)
		{
			if(this.vMenus[i].menuId == pMenuId)
				return true;
		}
		return false;
	}
	
	function fGetMenu(pMenuId)
	{
		for(var i=0;i<this.vMenus.length;i++)
		{
			if(this.vMenus[i].menuId == pMenuId)
				return this.vMenus[i];
		}
		return null;
	}
}

function getIntWidth(pWidthStr)
{
	var widthString = new String(pWidthStr);
	
	var idx = widthString.indexOf("px");
	if(idx != -1){
		return parseInt(widthString.slice(0, idx),10);
	}
	return 0;
}

function getWindowSize(pXY)
{
	var winW = 630, winH = 460;

	if (parseInt(navigator.appVersion)>3){
	 	if (navigator.appName=="Netscape"){
	  		winW = window.innerWidth;
	  		winH = window.innerHeight;
	 	}

	 	if (navigator.appName.indexOf("Microsoft")!=-1){
	  		winW = document.body.offsetWidth;
	  		winH = document.body.offsetHeight;
	 	}
	}
	if(pXY == "x" || pXY == "X")
		return winW;
	if(pXY == "y" || pXY == "Y")
		return winH;
}


/* Clase para visualizar objetos menu */
function CcontentMenuViewer()
{
	this.showMenu = fShowMenu;
	this.showMenuXY = fShowMenuXY;
	this.hideMenu = fHideMenu;	

	function fShowMenu(pMenu, pShow)
	{
		if((pMenu != null) && (pMenu.divObj != null))
		{					
			pMenu.divObj.style.visibility = pShow ? "visible" : "hidden";
		}
	}
	
	function fShowMenuXY(pMenu, pX, pY)
	{
		if((pMenu != null) && (pMenu.divObj != null))
		{
			var menuWidth = getIntWidth(pMenu.divObj.style.width);
			var menuHeight = getIntWidth(pMenu.divObj.style.height);

			var winX = getWindowSize("x");
			var winY = getWindowSize("y");
			var x = pX;
			var y = pY;

			if((winX - pX) < menuWidth)
				x = pX - menuWidth;
			if((winY - pY) < menuHeight)
				y = pY - menuHeight;

			pMenu.divObj.style.left = x+"px";
			pMenu.divObj.style.top = y+"px";
			this.showMenu(pMenu, true);
		}
	}

	function fHideMenu(pMenu)
	{
		this.showMenu(pMenu,false);
	}
}

function CcontentMenuManager()
{
	this.vectorContentMenu = new CcontentMenuVector();
	this.contentMenuViewer = new CcontentMenuViewer();
	this.showMenu = fShowMenu;
	this.hideMenu = fHideMenu;

	function fShowMenu(pMenuId, pState, pMessage, pEvt)
	{
		var menu = this.vectorContentMenu.getMenu(pMenuId);
		if(menu == null)
		{
				menu = new CcontentMenu(pMenuId,pState,pMessage);
				this.vectorContentMenu.addMenu(menu);
		}

		if (!pEvt && window.event) {
				pEvt = window.event;
		}

		var xCoord = pEvt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		var yCoord = pEvt.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		this.contentMenuViewer.showMenuXY(menu, xCoord-2 ,yCoord-2);
	}

	function fHideMenu(pMenuId)
	{
		var menu = this.vectorContentMenu.getMenu(pMenuId);
		if(menu != null)
		{
			this.contentMenuViewer.hideMenu(menu);
		}
	}
}

/* Creamos el Manager de Menus de Contenido */
var contentMenuManager = new CcontentMenuManager();

var Content = {

	addEvent : function(obj, evType, fn){

		if(obj.addEventListener){ 
			obj.addEventListener(evType, fn, false);
			return true; 
		}else if (obj.attachEvent){
			return obj.attachEvent("on" + evType, fn);
		}else{ 
			return false; 
		} 	 
	},

	setLinkEventsForMenu : function(objLink, idContent, idSite, idChannel, contentState, id){

		var menuId = idContent + "#" + idSite + "#" + idChannel + "#" + id;

		objLink.onclick = function(){};

		objLink.onmouseover = function(evt){
			contentMenuManager.showMenu(menuId, contentState, "", evt);
		};

		objLink.onmouseout = function(){
			contentMenuManager.hideMenu(menuId);
		};
	}
}

Content.addEvent(window, "load", function(){

		if(document.getElementsByName){
			var spans = document.getElementsByName("estatcontenido");

			for(var i=0; i<spans.length; i++){
				var spanLink = spans[i].getElementsByTagName("a");

				if(spanLink!="undefined" && spanLink.length>0){
					var idString = new String(spanLink[0].id);
					var arrArgs = idString.split("#");

					if(arrArgs.length < 4){
						alert("Error en el formato de identificador de menu");
						break;
					}
					Content.setLinkEventsForMenu(spanLink[0], arrArgs[0], arrArgs[1], arrArgs[2], arrArgs[3], i);
				}
			}
		}
	}
)

