
//VAR//
/*
var sImgSeparator  = "";
var sImgPlay = "";
var sImgPlayOver = "";
var nItemHeight = 38;
var sDuracion = "";
var oTooltip;
var aItems = new Array();
var giCurrentItem = -1;
var gMaxMateriales = -1;
var giMaterialComenzar = null;
var PosLastDrawItem=false;//flag que indica si va en la última posicion
var PosLastDrawItemCount=0; //cuanta la cantidad de últimos item para 
var PosLastDrawItemCountActiv=false;//activa el contador de últimos item para 
var ClassDrawItem='';
var TBL_PL_PREF="PL_table_";
var nIdPlayListUser = "";
var gCurrentItemNode = null; //NODO XML con la info del currentitem
var debug_playlist = false;
*/
sImgSeparator  = "";
sImgPlay = "";
sImgPlayOver = "";
nItemHeight = 38;
sDuracion = "";
oTooltip=undefined;
aItems = new Array();
giCurrentItem = -1;
gMaxMateriales = -1;
giMaterialComenzar = null;
PosLastDrawItem=false;//flag que indica si va en la última posicion
PosLastDrawItemCount=0; //cuanta la cantidad de últimos item para 
PosLastDrawItemCountActiv=false;//activa el contador de últimos item para 
ClassDrawItem='';
TBL_PL_PREF="PL_table_";
nIdPlayListUser = "";
gCurrentItemNode = null; //NODO XML con la info del currentitem
debug_playlist = false;

/**
 * Indice del primer elemento
 */
//VAR//var giArrayEntryPoint = null;
giArrayEntryPoint = null;

/**
 * Esta funcion dibuja todos los items de la playlist.
 * param	bool	bPlay	Indica si cuando se carga la lista se debe reproducir automaticamente los contenidos
 * @param	bool	bDesplazar	No se que hace esto, mataria preguntarle al que lo agrego
 * @param	string	sInicio		Como esto es un desastre, ahora hay que especificar si queremos que arranque del primero o del ultimo que cargo.
 */
function fillPlaylist(bPlay,bDesplazar,sInicio) 
{
	var oXml = document.getElementById("xmlPlaylistAux");
	var oTbl = document.getElementById("tblPlaylist");
	var oItems = null;
	//Espero hasta que el xml este cargado
	var i=0;
	//while(oXml.readyState != 4);
	while(oXml.readyState != "complete"); //ROBERRS
	//Borro la tabla
	//clearPlaylist();
	//Recorro el xml
	oItems = oXml.selectNodes("playlist/item");
	if (oItems.length > 0) 
	{
		for(i = 0; i < oItems.length; i++) 
		{
			if (!aItems[oItems[i].attributes.getNamedItem("id_material").value]) drawItem(oTbl,oItems[i]);
		}	
	
		// chequeo numero m?ximo de materiales
		chequearMaximo();

		if (sInicio == undefined || sInicio == null) {
			sInicio = "ultimo"; //por default tiene que hacer eso, UNA COSA DE LOCOS!!!
		}

		//Seteo el current
		//var nIdMaterial = oItems[0].attributes.getNamedItem("id_material").value;
		if (sInicio == "ultimo") {
			var nIdMaterial = oItems[oItems.length - 1].attributes.getNamedItem("id_material").value;
		} else {
			var nIdMaterial = oItems[0].attributes.getNamedItem("id_material").value;
		}
		
		if (!aItems[nIdMaterial]) nIdMaterial = giArrayEntryPoint;
		
		if (bDesplazar) 
		{	
	        if (debug_playlist) {
		        alert(giMaterialComenzar + " | " +nIdMaterial + " | " +bPlay);	        	
	        }
			setCurrent(giMaterialComenzar&&giMaterialComenzar==nIdMaterial?giMaterialComenzar:nIdMaterial,bPlay);
		}
	}
	else
	{
		if(giMaterialComenzar && bDesplazar) setCurrent(giMaterialComenzar);
	}
	
	//alert('saliendo bien de funcion fillPlaylist');

}

/**
 * Esta funcion chequea el numero de materiales, y si supera el maximo va eliminando del principio 
 */
function chequearMaximo() 
{
		var Xml = document.getElementById("xmlPlaylist");
		
		if (gMaxMateriales != -1)
		{
			for (var i = Xml.selectNodes("playlist/item").length; i > gMaxMateriales; i--)
			{
				eliminarPrimerMaterial();
			}
		}
}

/**
 * Esta funcion agrega items a una playlist
 * @param	bool	bPlay		Indica si cuando se carga la lista se debe reproducir automaticamente los contenidos
 * @param	bool	bDesplazar	No se que hace esto, mataria preguntarle al que lo agrego
 * @param	string	sInicio		Como esto es un desastre, ahora hay que especificar si queremos que arranque del primero o del ultimo que cargo.
 */
function addPlaylist(bPlay,bDesplazar,sInicio) 
{
	var i=0;
	var oXmlAux = document.getElementById("xmlPlaylistAux");
	var oXml = document.getElementById("xmlPlaylist");
	var oTbl = document.getElementById("tblPlaylist");
	var oItems = null;

	//Espero hasta que el xml este cargado
	//while(oXmlAux.readyState != 4);	
	 while(oXmlAux.readyState != "complete"); //ROBERRS
	//Recorro el xml
	agregarXML(oXmlAux,oXml,bDesplazar);
	fillPlaylist(bPlay,bDesplazar,sInicio);	
	
}

/**
 * Esta funcion devuelve el siguiente id de material a reproducir 
 */

/* (funcion original)
function siguienteMaterial() 
{
	var bReturn = false;
	
	for (var i in aItems)
	{
		if (bReturn)
			return i;
		
		if (i == giCurrentItem)
		{
			bReturn = true;
		}
	}
	
	return -1;	
}
*/
/*
function siguienteMaterial() 
{
	var bReturn = false;
	var aTmp = new Array ();
	
	for (j in aItems)
		aTmp.push(j);

	aTmp.reverse();	
	for (var i = 0; i < aTmp.length; i++)
	{
		if (bReturn)
			return aTmp[i];
		alert(aTmp[i] +"=="+ giCurrentItem);
		if (aTmp[i] == giCurrentItem)
		{
			bReturn = true;
		}
	}
	
	return -1;	
}
*/

/**
* esta funcion se encarga de  traer el primer material
* de la tabla del playlist
*/
function primerMaterial(){
var tblPL=document.getElementById("tblPlaylist");

var rows = tblPL.getElementsByTagName("tr"); 
	for(var i in rows) {     
	//si tiene un nombre es el tr de la tabla tblPlaylist
	    if(rows[i].name)
	      {
	         var vName= new String(rows[i].name);      	          
	      	 return vName.replace(TBL_PL_PREF,'');
	      }
	}
	return -1;
}
/**
* esta funcion tre el siguiente material tomando los id 
* de la propiendad name del table html tblPlaylist
* descompone el prefijo y toma el id  de reproducción que tiene en este momento
* la proxima vez que pase va a tomer ese contenido sacandole el prefijo como actual
*/
function siguienteMaterial(bShuffle)
{
	var bReturn = false;
	var tblPL=document.getElementById("tblPlaylist");
	var rows = tblPL.getElementsByTagName("tr");
	var oXml = document.getElementById("xmlPlaylist");
	//si tiene un nombre es el tr de la tabla tblPlaylist
	if (!bShuffle) {
		for(var i in rows) {
		    
		    if(rows[i].name)
		    {
				//alert(rows[i].name +"=="+ (TBL_PL_PREF + giCurrentItem));
				if (bReturn) {
					var vName= new String(rows[i].name);
				    //alert(vName.replace(TBL_PL_PREF,''));
					//Verifico si es local
					var nIdMaterial = vName.replace(TBL_PL_PREF,'');				
					var oNode = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
					var bReturn = false;
					if (oNode != null && oNode.selectSingleNode("url_local").text) {
						//Obtengo el path local
						var sFileName = oNode.selectSingleNode("url_local").text;
						//Busco si existe el archivo
						if (top.downloader.oDownloader != undefined && top.downloader.oDownloader != null) {
							//Aca me retorna true si existe o false
							bReturn = top.downloader.oDownloader.object.Pending.isFileExists(sFileName);
						} else {
							//si no esta cargado retorno true
							bReturn = true;
						}
					} else {
						//no existe o no es local, retorno true
						bReturn = true;
					}
					if (bReturn) {
						return vName.replace(TBL_PL_PREF,'');						
					}
				}
				
				if (rows[i].name == (TBL_PL_PREF + giCurrentItem))
				{
					bReturn = true;
				}
		    }
		}
		return -1;
	} else {
		//Tomo la cantidad total de rows
		var nLength = document.getElementById("tblPlaylist").rows.length-1;
		var nIdMaterial = -1;
		var nRow = -1;
		if (nLength > 0) { //Si hay 1 solo item, devuelvo -1 para indicar que no hay mas nada para reproducir
			//Obtengo el row
			do {
				//Obtengo el id de material
				nRow = Math.round(Math.random() * nLength);
				//obtengo el id_material
				nIdMaterial = new String(document.getElementById("tblPlaylist").rows[nRow].name);
				nIdMaterial = parseInt(nIdMaterial.replace(TBL_PL_PREF,""));			
				//Verifico si es local				
				var oNode = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
				if (oNode != null && oNode.selectSingleNode("url_local").text) {
					//Obtengo el path local
					var sFileName = oNode.selectSingleNode("url_local").text;
					//Busco si existe el archivo
					if (top.downloader.oDownloader != undefined && top.downloader.oDownloader != null) {
						//Aca me retorna true si existe o false
						if (!top.downloader.oDownloader.object.Pending.isFileExists(sFileName)) {
							//Si no existe pruebo con otro
							continue;
						}
					}
				}
			} while (nIdMaterial == giCurrentItem);			
		}
		return nIdMaterial;
	}
}

/**
* Esta funcion trae el material anterior al que se esta reproduciendo actualmente (giCurrentItem)
*/
function MaterialAnterior()
{
	var bReturn = false;
	var tblPL=document.getElementById("tblPlaylist");
	var rows = tblPL.getElementsByTagName("tr"); 
	var oXml = document.getElementById("xmlPlaylist");

	for(var i=rows.length-1; i>=0 ;i--)
	{
		if(rows[i].name)
		{
			//alert(rows[i].name +"=="+ (TBL_PL_PREF + giCurrentItem));
			if (bReturn)
			{
				var vName= new String(rows[i].name);
				//Verifico si es local
				var nIdMaterial = vName.replace(TBL_PL_PREF,'');				
				var oNode = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
				var bReturn = false;
				if (oNode != null && oNode.selectSingleNode("url_local").text) {
					//Obtengo el path local
					var sFileName = oNode.selectSingleNode("url_local").text;
					//Busco si existe el archivo
					if (top.downloader.oDownloader != undefined && top.downloader.oDownloader != null) {
						//Aca me retorna true si existe o false
						bReturn = top.downloader.oDownloader.object.Pending.isFileExists(sFileName);
					} else {
						//si no esta cargado retorno true
						bReturn = true;
					}
				} else {
					//no existe o no es local, retorno true
					bReturn = true;
				}
				if (bReturn) { //si andubo todo bien, lo retorno, sino proceso el siguiente
					return vName.replace(TBL_PL_PREF,'');					
				}
			}
			if (rows[i].name == (TBL_PL_PREF + giCurrentItem))
				bReturn = true;
		}
	} 
	return -1;
}


/**
 * Esta funcion es llamada por el player para indicarle al playlist que le de el siguiente tema 
 */
function PL_cargarSiguiente(bShuffle) 
{
	
	if (bShuffle == undefined || bShuffle == null) {
		bShuffle = false;
	}
	var nIdMaterial;

	nIdMaterial = siguienteMaterial(bShuffle);

	if (nIdMaterial != -1)
	{
		setCurrent(nIdMaterial,true);
		return nIdMaterial;
	} else {
		return -1;
	}
}

/**
 * Esta funcion es llamada por el player para indicarle al playlist que le de el tema anterior 
 */
function PL_cargarAnterior() 
{
	
	var nIdMaterial;

	nIdMaterial = MaterialAnterior();
	if (nIdMaterial != -1)
	{
		setCurrent(nIdMaterial,true);
	}	
}

/**
 * Esta funcion agrega un elemento al array, y actualiza el puntero a la primer posicion
 */
function addElement(oArray,iIndex,oElement)
{
	oArray[iIndex] = oElement;
	if (!giArrayEntryPoint)
		giArrayEntryPoint = iIndex;
}

/**
 * Esta funcion elimina el primer elemento y actualiza el puntero al primer elemento
 */
function removeFirst(oArray)
{
	if (giArrayEntryPoint)
	{
		delete oArray[giArrayEntryPoint];
		for (var i in oArray)
		{
			giArrayEntryPoint = i;
			break;
		}
		return oArray;
	}
	else
		return null;
}



// bNoDesplazar le indica que solo agregue los datos, pero que no posicione el puntero de inicio al primer
// elemento de esta coleccion, sino que mantenga el anterior
function agregarXML(oXMLSource,oXMLDest,bDesplazar)
{
	
	var oItems = oXMLSource.selectNodes("playlist/item");	
	
	if (bDesplazar) giMaterialComenzar = null;
		
	if (oXMLDest.xml != "")
	{
		
		for(i = 0; i < oItems.length; i++) 
		{
			var nIdMaterial = oItems[i].attributes.getNamedItem("id_material").value;
			
			if (!aItems[nIdMaterial])
			{				
				var oNewNode = oItems[i].cloneNode(true);
				oXMLDest.documentElement.appendChild(oNewNode);
			}
			else if(bDesplazar)
			{				
				giMaterialComenzar = (!giMaterialComenzar&&!i)?nIdMaterial:giMaterialComenzar;
			} 
		}		
		if (debug_playlist) {
			alert("Seteo de giMaterialComenzar: " + giMaterialComenzar);
		}
	}	
	else
	{
		oXMLDest.loadXML(oXMLSource.xml);		
	}
	
}

function cargarPlayListDefault(bPlay,bDesplazar) 
{
	var oXml = document.getElementById("xmlPlaylistAux");	
	var sXml = "";

	sXml = openXml("metadatos","");
	//Cargo el nuevo xml
	oXml.loadXML(TrimString(sXml));
	
	//Lleno la lista con los nuevos datos
	setPosLastDrawItem(true);
	addPlaylist(bPlay,bDesplazar);	
	setPosLastDrawItem(false);	
	//Me posiciono en el ultimo agregado
}

/**
 * Esta carga la playlist con los capitulos de un grupo especificado
 * @param	int		nIdGrupo	ID del grupo para cargar
 * @param	string	sInicio		Como esto es un desastre, ahora hay que especificar si queremos que arranque del primero o del ultimo que cargo.
 */
function cargarPlayListGrupo(nIdGrupo,sInicio) {
	
	var oXml = document.getElementById("xmlPlaylistAux");
	
	var sXml = "";
	sXml = openXml("metadatos","&id_grupo=" + nIdGrupo);
	//Cargo el nuevo xml
	if (debug_playlist) {
	alert("Xml grupo:\n"+sXml);		
	}
	oXml.loadXML(TrimString(sXml));
	
	//Lleno la lista con los nuevos datos
	addPlaylist(true,true,sInicio);	
	// ahora llamamos siempre como ultimo al default de la instalacion
	//cargarPlayListDefault(true,false);
		
}

/**
 * Esta funcion carga el playlist con el capitulo seleccionado
 * param	int	nIdContenido	ID del contenido a mostrar
 */
function cargarPlayListContenido(nIdContenido,bPlay) {	
	var oXml = document.getElementById("xmlPlaylistAux");
	var sXml = "";	
	sXml = openXml("metadatos","&id_contenido=" + nIdContenido);	
	//Cargo el nuevo xml
	
	oXml.loadXML(TrimString(sXml));
	
	if(typeof bPlay=="undefined"){
		bPlay=true;
	}
	//Lleno la lista con los nuevos datos
	addPlaylist(bPlay,true);
	
	// ahora llamamos siempre como ultimo al default de la instalacion
	//cargarPlayListDefault(true,false);
}

/**
 * Esta funcion carga el playlist con el nodo seleccionado
 * @param	int	nIdnodo	ID del nodo
 */
function cargarPlayListNodo(nIdNodo) {
	var oXml = document.getElementById("xmlPlaylistAux");
	var sXml = "";
	sXml = openXml("metadatos","&id_nodo=" + nIdNodo);
	//Cargo el nuevo xml
	oXml.loadXML(TrimString(sXml));
	
	//Lleno la lista con los nuevos datos
	addPlaylist(true,true);		
	
	// ahora llamamos siempre como ultimo al default de la instalacion
	// 28-08-2006 PA La playlist de nodo no debe cargar el playlist default
	//cargarPlayListDefault(true,false);	
}

/**
 * Esta funcion carga la playlist seleccionada del usuario
 * @param	int	nIdPlaylist	ID de la playlist
 */
function cargarPlayListUser(nIdPlaylist) {
	//Verifico si esta logueado
	if (getStatusUsuario() != "logueado") {
		mostrarLogin(false,cargarPlayListUser);
		return;
	}
	//Verifico si debo usuar el parametro o la variable member
	if ((nIdPlaylist == undefined || nIdPlaylist == null) && nIdPlayListUser) {
		nIdPlaylist = nIdPlayListUser;
	}
	var oXmlAux = document.getElementById("xmlPlaylistAux");
	var sXml = openXml("metadatos","&id_playlist="+nIdPlaylist);
	//Primero limpio todo
	clearPlaylist(true);	
	//Cargo el nuevo xml	
	oXmlAux.async = false;
	oXmlAux.loadXML(TrimString(sXml));
	//Lleno la lista con los nuevos datos
	setPosLastDrawItem(true);
	addPlaylist(true,true,"primero");
	setPosLastDrawItem(false);
	//Seteo la lista cargada como la actual
	nIdPlayListUser = nIdPlaylist;
}

/**
 * Abre el xml por.........(en mi epoca se llamaba XmlHttpRequest, pero hoy es Ajax, faaaaa)
 * param	string	sParam	Parametros que se deben pasar a la URL
 */
function openXml(sOrden,sParam) {
	var oRnd = new Date();
	//var vret=unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|videos",sOrden,sParam + "&rnd="+oRnd.getTime()));	
	var vret=unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|player",sOrden,sParam + "&rnd="+oRnd.getTime()));	
	if (FWK.debug) 	
		alert("rcelestino:"+vret);
	return vret;
}

/**
 * Esta funcion se encarga de hacer el cambio de encodeo de reproduccion
 * param	int		nIdEncodeo	ID del nuevo encodeo
 */
function PL_cambiarEncodeo(nIdEncodeo) {
	
	var sResult = "";
	sXml = openXml("set_encodeo","&id_encodeo=" + nIdEncodeo);
	//Cargo el nuevo xml
	
	clearPlaylist();
	cargarPlayListDefault(false);
	
	return (TrimString(sXml));
		
}

/**
 * Borra la playlist actual
 * @param	bool	bClearAll	Limpia los xmls y reinicia variables globales que no tengo NI IDEA de para que son
 */
function clearPlaylist(bClearAll) {
	var oTbl = document.getElementById("tblPlaylist");
	if (bClearAll) {
		var oXmlAux = document.getElementById("xmlPlaylistAux");
		var oXml	= document.getElementById("xmlPlaylist");
		//oXmlAux.removeChild(oXmlAux.documentElement);
		//oXml.removeChild((oXml.documentElement));
		while(oXmlAux.firstChild != null) {
			oXmlAux.removeChild(oXmlAux.firstChild);
		}
		while(oXml.firstChild != null) {
			oXml.removeChild(oXml.firstChild);
		}
		//Borro aItems
		aItems = new Array();
		giArrayEntryPoint = null;
		giMaterialComenzar = null;		
	}
	while(oTbl.childNodes.length > 0) {
		var oNode = oTbl.childNodes[0];
		oTbl.removeChild(oNode);
	}
	//aItems = new Array();x
}

/**
 * Esta carga la playlist con los capitulos de un grupo especificado
 * param	int	nIdGrupo	ID del grupo para cargar
 */
function cargarPlayListAgregarGrupo(nIdGrupo) {

setPosLastDrawItem(true,true);
	var oXml = document.getElementById("xmlPlaylistAux");
	
	var sXml = "";
	sXml = openXml("metadatos","&id_grupo=" + nIdGrupo);
	//Cargo el nuevo xml
	
	oXml.loadXML(TrimString(sXml));
	//fillPlaylist(false,false);
	//Lleno la lista con los nuevos datos
	addPlaylist(false,false);	
	// ahora llamamos siempre como ultimo al default de la instalacion
	//cargarPlayListDefault(true,false);
setPosLastDrawItem(false,false);		
}
/**
 * indica el nombre de la clase que debe de utilzar en drawitem
 * @param fClass string nombre de la clase
 */
function setClassDrawItem(sClass){
 ClassDrawItem=sClass;
}
/**
 *  Flase que indica donde debe de poner el nuevo contenido
 *  @param fFlag boolean si tiene o no el último
 */
function setPosLastDrawItem(fFlag,fActivate){
	PosLastDrawItem=fFlag;	
	PosLastDrawItemCountActiv=fActivate; 
	//vuelve a poner el contador	
	if(PosLastDrawItemCount!=0){
	PosLastDrawItemCount=0;
	}
}
/**
 * Esta funcion dibuja un item en la playlist
 * param	Table	oTbl		Tabla en la que se debe agregar el item
 * param	XMLNode	oXmlItem	Nodo xml con los datos
 */
 
var nivel = 1;

function drawItem(oTbl,oXmlItem) 
{
	//Objetos del item
	//Pasandole cero a insertRow() agrega los elementos en la playlist desde arriba
	//var oNewRow = oTbl.insertRow();
	//alert(oTbl);
	
	var oNewRow;
	if(PosLastDrawItem==false){
	   oNewRow = oTbl.insertRow(0);
	   oNewRow.className = "playlistTrExterno";
	}else{
	   oNewRow = oTbl.insertRow((document.getElementById("tblPlaylist").rows.length - ((PosLastDrawItemCountActiv==true)?PosLastDrawItemCount:0)));
	   oNewRow.className = "playlistTrExterno";
	   PosLastDrawItemCount++;
	}
	
	//en caso que exista una clase
	
	
	var oCell = oNewRow.insertCell();
	oCell.className="playlistTdExterno";
	
	var oTable = document.createElement("TABLE");
	var oRow = oTable.insertRow();
	oRow.className="playlistTrInterno";
	
	var oCellItem = oRow.insertCell();
	oCellItem.className="playlistTdInterno";
	
	var nIdMaterial = oXmlItem.attributes.getNamedItem("id_material").value;
	var nIdContenido = oXmlItem.selectSingleNode("id_contenido").text;
	var sTitulo		= oXmlItem.selectSingleNode("titulo").text;	
	var sUrlLocal		= oXmlItem.selectSingleNode("url_local").text || "";

	var sFuente		= oXmlItem.selectSingleNode("fuente").text;

	oNewRow.name = TBL_PL_PREF+nIdMaterial;
	//var sGenero = oXmlItem.selectSingleNode("genero").text;
	//var sFechaPub	= oXmlItem.selectSingleNode("fecha_pub").text;
	//var sData = "<a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" onmouseover=\"showPopup(" + nIdMaterial + ");\" onmouseout=\"closePopup();\" class=\"ab14g\">" + sTitulo + "<br></a><font class=\"v9g\">" + sFechaPub + ( sGenero != "" ? " | " + sGenero : "&nbsp;") + "</font><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\"><img src=\"" + sImgPlay + "\" onmouseover=\"this.src='" + sImgPlayOver + "';\" onmouseout=\"this.src='" + sImgPlay + "';\" width=\"12\" height=\"12\" border=\"0\" align=\"absbottom\"></a>";
	
	//var sData = "<img border=\"0\" align=\"absmiddle\" src=\"" + sImgPlay + "\" width=\"12\" height=\"12\"/> <a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" class=\"PL_titulo_2\" onmouseover=\"showPopup(" + nIdMaterial + ");\" onmouseout=\"closePopup();\">" + ajustarTexto(sTitulo,60) + "</a>";
	//var sData = "<a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\"><img border=\"0\" align=\"absmiddle\" src=\"" + sImgPlay + "\" width=\"12\" height=\"12\"/></a><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" class=\"PL_titulo_2\" onmouseover=\"showPopup(" + nIdMaterial + ");\" onmouseout=\"closePopup();\">" + ajustarTexto(sTitulo,70) + "</a><a href=\"javascript:ir_playFichaVideoByIdCont(" + nIdContenido + ");\" class=\"masInfo\"><span>"+sMasInfo+"</span></a>";
	//var sData = "<input type=\"radio\" name=\"itemPlayerBorrar\" id=\"itemPlayerBorrar\" value=\""+nIdMaterial+"\" class=\"itemPlayercheckbox\"/><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" class=\"playimg\"></a><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" id=\"playTituloMat\" class=\"PL_titulo_2\" onmouseover=\"showPopup(" + nIdMaterial + ");\" onmouseout=\"closePopup();\">" + ajustarTexto(sTitulo,52) + "</a><a href=\"javascript:ir_playFichaVideoByIdCont(" + nIdContenido + ");\" class=\"masInfo\"><span>"+sMasInfo+"</span></a> "+((sFuente)?"<img src=\""+sFuente+"\" class=\"playfuente\"/>":"");
	//Ahora se ajusta el texto del titulo a 45
	
	var sData = "<input type=\"radio\" name=\"itemPlayerBorrar\" id=\"itemPlayerBorrar\" value=\""+nIdMaterial+"\" class=\"itemPlayercheckbox\"/><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" class=\"playimg\"></a><a href=\"javascript:setCurrent(" + nIdMaterial + ",true);\" id=\"playTituloMat\" class=\"PL_titulo_2\" onmouseover=\"showPopup(" + nIdMaterial + ");\" onmouseout=\"closePopup();\">" + ajustarTexto((sUrlLocal ? sLocalFile + " " : "") + sTitulo,45) + "</a><a href=\"javascript:ir_playFichaVideoByIdCont(" + nIdContenido + ");\" class=\"masInfo\"><span>"+sMasInfo+"</span></a> "+((sFuente)?"<img src=\""+sFuente+"\" class=\"playfuente\"/>":"");
	

	oCell.align = "right";
	oCell.vAlign = "top";

	oTable.width = "100%";
	oTable.border = 0;
	oTable.cellPadding = 0;
	oTable.cellSpacing = 0;
	
	oCellItem.height = 36;
	oCellItem.style.paddingLeft = "3px";
	oCellItem.innerHTML = sData;
	if(ClassDrawItem!='')
	  {oCellItem.className=ClassDrawItem;}

	//Dibujo el separador de abajo
	drawSeparator(oTable);

	oCell.appendChild(oTable);	
	
	addElement(aItems,nIdMaterial,oNewRow);
}



/**
* cambia el conlor del material
* recorre los item y colorea el material correspondiente
*/
function unsetCurrentClass(){
	var tblPL=document.getElementById("tblPlaylist");	
	var rows = tblPL.getElementsByTagName("tr"); 
		for(var i in rows) {     
		//si tiene un nombre es el tr de la tabla tblPlaylist
		    if(rows[i].name)
		      {		        		      	   
		      	   if(giCurrentItem==rows[i].name.replace(TBL_PL_PREF,'')){		      	   
		      	   var RowTbl=rows[i].getElementsByTagName("td")[0];		      	  		      	  
		      	   RowTbl.getElementsByTagName("table")[0].getElementsByTagName("tr")[0].getElementsByTagName("td")[0].className='';
		      	   }
		      	
		      	
		      }
		}
		return;
}

/**
* cambia el color del material seleccionado previamente
* recorre los item y colorea el material correspondiente
*/
function setCurrentClass(nIdMaterial){
	var tblPL=document.getElementById("tblPlaylist");	
	var rows = tblPL.getElementsByTagName("tr"); 
		for(var i in rows) {     
		//si tiene un nombre es el tr de la tabla tblPlaylist
		    if(rows[i].name)
		      {		        		      	   
		      	   if(nIdMaterial==rows[i].name.replace(TBL_PL_PREF,'')){		      	   
		      	   var RowTbl=rows[i].getElementsByTagName("td")[0];		      	 		      	   
		      	   RowTbl.getElementsByTagName("table")[0].getElementsByTagName("tr")[0].getElementsByTagName("td")[0].className='activo';
		      	   }
		      	
		      	
		      }
		}
		return;
}

/**
 * Reemplaza un texto por otro dentro de una cadena dada
 * param	cadena	texto original a editar
 * param	cad1	texto que se busca
 * param	cad2	texto reemplazante
 */
function Reemplazar(cadena, cad1, cad2){
	while(cadena.indexOf(cad1)!= -1){
	cadena = cadena.replace(cad1, cad2);
	}
	return cadena;
}


/**
 * Muestra en el header del playlist cual es el item actualmente seleccionado
 * param	int		nIdMaterial	ID de material que se debe marcar como seleccionado
 * param	bool	bPlayItem	Si es true, se carge el actual y se dispara el play en el player, sino soloamente se carga el item como actual
 */
function setCurrent(nIdMaterial,bPlayItem, oXml) {
//saca el color activado del anterior
unsetCurrentClass();

	//Defino los objetos
	//var oXml		= document.getElementById("xmlPlaylist");
	if (typeof oXml == "undefined") {
		oXml = document.getElementById("xmlPlaylist");
	}
	
	
	var oImgCont		= document.getElementById("imgHeader");	
	var oSpnTitle		= document.getElementById("spnHeaderTitle");
	var oPlayImg		= document.getElementById("aHeaderPlayImg");
	var oPlayTit		= document.getElementById("aHeaderPlayTit");
	//var oTblHeader		= document.getElementById("tblPlayListHeader");
	var oTblHeader		= document.getElementById("tooltip");
	var oSpnHeaderInfo	= document.getElementById("spnHeaderInfo");
	var oDivFuente		= document.getElementById("spnFuente");

	var oDivFechaPub	= document.getElementById("spnFechaPub");
	var oDivDuracion	= document.getElementById("spnDuracion");
	//var oImgFuente	= document.getElementById("imgSource");
	//var oSpnDate	= document.getElementById("spnDate");
	
	var oDivDescription	= document.getElementById("divHeaderDescripcion");
	var oXmlItem	= oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
	

	//Hago el attach de los eventos para mostrar el alt, 
	//ya que pudo ser sacado por otra funcion que no necesita mostrar el alt
	oTblHeader.onmouseover = showPopupEvent;
	oTblHeader.onmouseout = closePopup;
	
	//Seteo los objetos con los valores
	if (oXmlItem != undefined) 
	{	

		if(oXmlItem.selectSingleNode("id_contenido").text != ""){
			if(typeof cambiarAnchor != "undefined") {
				cambiarAnchor("player",oXmlItem.selectSingleNode("id_contenido").text,oXmlItem.selectSingleNode("titulo").text);
			}
			if(top.currentSkin){
				document.getElementById("inputUrl").value=Reemplazar(gURLPlayDirecto, 'ID_CONTENIDO', oXmlItem.selectSingleNode("id_contenido").text)+"&FWK[skin]="+top.currentSkin;
			}else{
				document.getElementById("inputUrl").value=Reemplazar(gURLPlayDirecto, 'ID_CONTENIDO', oXmlItem.selectSingleNode("id_contenido").text);
			}

			
			//Armando de: URL|ANCHO|ALTO
			var PRE_EMBED	= '<iframe src="V_URL/V_ID_CONTENIDO.php?extplay&FWK[id_nodo]=V_ID_NODO&FWK[skin]=V_SKIN" allowTransparency="yes" width="V_WIDTH" height="V_HEIGHT" frameborder="none"></iframe>';
			var arrTMP		= gEMBEDPlayDirecto.split("|");
			var TMP_EMBED	= Reemplazar(PRE_EMBED, 'V_URL', arrTMP[0]);
				TMP_EMBED	= Reemplazar(TMP_EMBED, 'V_WIDTH', arrTMP[1]);
				TMP_EMBED	= Reemplazar(TMP_EMBED, 'V_HEIGHT', arrTMP[2]);
			
			//Armado de: ID_CONTENIDO, ID_NODO, SK_SKIN
				TMP_EMBED = Reemplazar(TMP_EMBED, 'V_ID_CONTENIDO', oXmlItem.selectSingleNode("id_contenido").text);
				//id_nodo y sk_skin ahora se obtienen por javascript ya que la variable de sesion no es confiable
				//TMP_EMBED = Reemplazar(TMP_EMBED, 'V_ID_NODO', oXmlItem.selectSingleNode("id_nodo").text);
				//TMP_EMBED = Reemplazar(TMP_EMBED, 'V_SKIN', oXmlItem.selectSingleNode("sk_skin").text);
				TMP_EMBED = Reemplazar(TMP_EMBED, 'V_ID_NODO', obtenerNodo());
				TMP_EMBED = Reemplazar(TMP_EMBED, 'V_SKIN', getSkinCurrent());
				
			document.getElementById("inputEmbed").value=TMP_EMBED;
			
		}
		
		
		oImgCont.src 			= oXmlItem.selectSingleNode("imagen").text;
		oImgCont.alt			= oXmlItem.selectSingleNode("alt_imagen").text;
		oPlayImg.href	 		= "javascript:itemToPlay(" + nIdMaterial + ");";
		oPlayTit.href	 		= "javascript:itemToPlay(" + nIdMaterial + ");";
				
		//oImgFuente.src			= oXmlItem.selectSingleNode("fuente").text;
		//oImgFuente.alt			= oXmlItem.selectSingleNode("alt_fuente").text;	
		oSpnTitle.innerText 	= ajustarTexto(oXmlItem.selectSingleNode("titulo").text,85);
		//oSpnDate.innerText 		= oXmlItem.selectSingleNode("fecha_pub").text + " | " + sDuracion + " " + oXmlItem.selectSingleNode("duracion").text;
		//oSpnHeaderInfo.innerHTML= (oXmlItem.selectSingleNode("alt_fuente").text == "" ? "" : "<span id=\"itemPLFechapub\"> "+oXmlItem.selectSingleNode("alt_fuente").text + "</span> | ") +"<span id=\"itemPLFechapub\"> "+oXmlItem.selectSingleNode("fecha_pub").text + " |</span> <span id=\"itemPLFechapub\">" + sDuracion + " " + oXmlItem.selectSingleNode("duracion").text+ "</span>"; 

		//oDivFuente.innerHTML = oXmlItem.selectSingleNode("alt_fuente").text + " | ";
		elAltFuente=oXmlItem.selectSingleNode("alt_fuente").text;
		if(elAltFuente.length>17) elAltFuente=elAltFuente.substr(0,14)+"...";
		oDivFuente.innerHTML = elAltFuente + " | "; //goose on 3/12/2007
		
		oDivFechaPub.innerHTML = oXmlItem.selectSingleNode("fecha_pub").text + " | ";
		oDivDuracion.innerHTML = sDuracion + " " + oXmlItem.selectSingleNode("duracion").text;
		//oFntDescrip.innerHTML	= "<br>" + oXmlItem.text;
		//alert(oXmlItem.xml);
		if (oXmlItem.selectSingleNode("url_local").text == "") {
			oDivDescription.innerHTML = ajustarTexto(oXmlItem.selectSingleNode("descripcion").text,100);
		} else {
			oDivDescription.innerHTML = ajustarTexto(sUbicacion + " " + oXmlItem.selectSingleNode("url_local").text,100);
		}

		if (bPlayItem) 
		{
			itemToPlay(nIdMaterial,oXml);
			//Aca actualizo siempre el relacionado para probar
			var oRnd = new Date();	
			var nIdContenido = oXmlItem.selectSingleNode("id_contenido").text
			var sTitulo = oXmlItem.selectSingleNode("titulo").text
			//var sHtml = FWK.loadApp("playlist_contenidos|playlist|playlist|player","&playlist[action]=relacionados&playlist[id_contenido]="+nIdContenido+"&playlist[titulo]="+sTitulo+"&rnd="+oRnd.getTime());
			//document.getElementById("divRelacionados").innerHTML = sHtml;
			//ROBER-CAMBIO A CALLBACK PARA CONTROLAR EL REFRESCO DE BANNER Y EVITAR QUE SE HAGA
			//FWK.loadAppInto("divRelacionados","playlist_contenidos|playlist|playlist|player","&playlist[action]=relacionados&playlist[id_contenido]="+nIdContenido+"&playlist[titulo]="+sTitulo+"&FWK[SITE_PAGE]=player&rnd="+oRnd.getTime(),"noocultarplayer"); //le puse el FWK[sitepage] para que como va a refrescar mantenga el sitepage player para que no devuelvan flyad
			if(typeof window.currentSkin!="undefined"){
				FWK.loadAppCallback("callbackDivRelacionados","playlist_contenidos|playlist|playlist|player","&playlist[action]=relacionados&playlist[id_contenido]="+nIdContenido+"&playlist[titulo]="+sTitulo+"&FWK[SITE_PAGE]=player&FWK[skin]="+window.currentSkin+"&rnd="+oRnd.getTime()); 
     			FWK.loadAppCallback("callbackDivCompartir","socialnetworks|playlist|playlist|player","&playlist[action]=playlist&playlist[id_contenido]="+nIdContenido+"&playlist[template]="+window.currentSkin+"&rnd="+oRnd.getTime()); 
     			//FWK.loadAppCallback("callbackDivRelacionados","socialnetworks|playlist|playlist|player","&playlist[action]=playlist&playlist[id_contenido]="+nIdContenido+"&FWK[skin]="+window.currentSkin+"&rnd="+oRnd.getTime()); 
			
			}else{
				FWK.loadAppCallback("callbackDivRelacionados","playlist_contenidos|playlist|playlist|player","&playlist[action]=relacionados&playlist[id_contenido]="+nIdContenido+"&playlist[titulo]="+sTitulo+"&FWK[SITE_PAGE]=player&rnd="+oRnd.getTime()); 
     			FWK.loadAppCallback("callbackDivCompartir","socialnetworks|playlist|playlist|player","&playlist[action]=playlist&playlist[id_contenido]="+nIdContenido+"&rnd="+oRnd.getTime()); 
				//FWK.loadAppCallback("callbackDivRelacionados","socialnetworks|playlist|playlist|player","&playlist[action]=playlist&playlist[id_contenido]="+nIdContenido+"&rnd="+oRnd.getTime()); 
			}
			//le puse el FWK[sitepage] para que como va a refrescar mantenga el sitepage player para que no devuelvan flyad
			
		}
		// Hacemos scroll para asegurarnos que el material activado esta visible en el listado de playlist
		var oScroll = document.getElementById("divScroll");
		
		if(typeof aItems[nIdMaterial] != "undefined"){
			if (typeof aItems[nIdMaterial].offsetTop != "undefined" && aItems[nIdMaterial].offsetTop != null) {
				if (aItems[nIdMaterial].offsetTop < oScroll.scrollTop || aItems[nIdMaterial].offsetTop + 36 > (oScroll.scrollTop + oScroll.clientHeight))
				{
					oScroll.scrollTop = aItems[nIdMaterial].offsetTop;			
				}
			}
		}
		giCurrentItem = nIdMaterial;	
		//cambia el conlor del material
		setCurrentClass(nIdMaterial);
		//Guardo el nodo xml
		gCurrentItemNode = oXmlItem.cloneNode(true);
	} else {
		//Si esta vacio borro el gCurrentItemNode
		gCurrentItemNode = null;
	}
	
}

function callbackDivRelacionados(req){
	var reloadIsNeedAnterior=FWK.reloadIsNeed;	
	var codigo=req.responseText;
	FWK.reloadIsNeed=function(){};
	if(document.getElementById("divRelacionados"))
		document.getElementById("divRelacionados").innerHTML=codigo;
	FWK.reloadIsNeed=reloadIsNeedAnterior;
}

function callbackDivCompartir(req){
	var reloadIsNeedAnterior=FWK.reloadIsNeed;	
	var codigo=req.responseText;
	FWK.reloadIsNeed=function(){};
	if(document.getElementById("divCompartir"))
		document.getElementById("divCompartir").innerHTML=codigo;
	FWK.reloadIsNeed=reloadIsNeedAnterior;
}

/*
 * Esta funcion es invocada cuando se desdea setear en el header informacion
 * pero de un archivo que se esta reproduciendo localmente
 * @param	string	sUrlImg	URL de la imagen
 * @param	string	sTitle	Titulo del contenido
 * @param	string	sPath	Path local del archivo
 */
function setCurrentLocal(sUrlImg,sTitle,sPath) {
	var oImgCont		= document.getElementById("imgHeader");	
	var oSpnTitle		= document.getElementById("spnHeaderTitle");
	var oDivDescription	= document.getElementById("divHeaderDescripcion");
	var oDivFuente		= document.getElementById("spnFuente");
	var oDivFechaPub	= document.getElementById("spnFechaPub");
	var oDivDuracion	= document.getElementById("spnDuracion");
	var oPlayImg		= document.getElementById("aHeaderPlayImg");
	var oPlayTit		= document.getElementById("aHeaderPlayTit");
	//saca el color activado del anterior en la playlist
	unsetCurrentClass();
	//Cargo los datos	
	oImgCont.src 			= sUrlImg;
	oImgCont.alt			= "";
	oPlayImg.href	 		= "javascript:itemLocalToPlay('file:///"+sPath+"');";
	oPlayTit.href	 		= "javascript:itemLocalToPlay('file:///"+sPath+"');";
	oSpnTitle.innerText 	= ajustarTexto(sTitle,85);	
	oDivDescription.innerHTML = ajustarTexto(sUbicacion + " " + sPath,100);
	//Estos datos no los tengo, entonces los vacio
	oDivFuente.innerHTML  = "";
	oDivFechaPub.innerHTML = "";
	oDivDuracion.innerHTML = "";
	//Saco los eventos para que no tenga alt
	//var oTblHeader		= document.getElementById("tblPlayListHeader");
	var oTblHeader		= document.getElementById("tooltip");
	oTblHeader.onmouseover = null;
	oTblHeader.onmouseout = null;
}
/**
 * Esta funcion dibuja un separador
 * param	Table	oTbl		Tabla en la que se debe dibujar el separado
 */
function drawSeparator(oTbl) {
	var oRow = oTbl.insertRow();
		oRow.className = "playlistTrInterno";
		
	var oCell = oRow.insertCell();
		oCell.className = "playlistTdInterno";
		
	var oImg = document.createElement("IMG");
	oCell.height= 2;
	oCell.align = "center";

	oImg.src = sImgSeparator;
	oImg.width = 251;
	oImg.height = 2;
	oCell.appendChild(oImg);
}

/**
 * Esta funcion abre un item desde el xml y llama al player
 * param	int	nIdMaterial	ID del material que se desea reproducir
 */
function itemToPlay(nIdMaterial,oXml) 
{
	if (typeof oXml == "undefined") {
		oXml = document.getElementById("xmlPlaylist");	
	}
	var oNode = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
	var oMaterial = new Array();

	if (oNode != undefined) 
	{		
		oMaterial["titulo"]				        = oNode.selectSingleNode("titulo").text;
		oMaterial["trackeable"] 	    	  = oNode.selectSingleNode("trackeable").text;
		oMaterial["id_contenido"]    		  = oNode.selectSingleNode("id_contenido").text;
		oMaterial["id_material"] 		      = nIdMaterial;
		oMaterial["id_encodeo"] 		      = oNode.selectSingleNode("id_encodeo").text;
		oMaterial["derechos"] 			      = oNode.selectSingleNode("derechos").text;
		oMaterial["consumido"] 			      = oNode.selectSingleNode("consumido").text;
		oMaterial["imagen"] 			        = oNode.selectSingleNode("imagen").text;
		oMaterial["fecha_publicacion"]	  = oNode.selectSingleNode("fecha_pub").text;
		oMaterial["comprado"] 			      = oNode.selectSingleNode("comprado").text;
		oMaterial["precio"] 			        = oNode.selectSingleNode("precio").text;
		oMaterial["adicionales"] 			    = oNode.selectSingleNode("adicionales").text;
		oMaterial["moneda"] 			        = oNode.selectSingleNode("moneda").text;
		oMaterial["encodeos_streaming"]		= oNode.selectSingleNode("encodeos_streaming").text;
		oMaterial["encodeos_download"]		= oNode.selectSingleNode("encodeos_download").text;
		oMaterial["url_local"]				= oNode.selectSingleNode("url_local").text;
		cargarMaterialPlayer(oMaterial);
	}
}

/**
 * Reproduce en el player un archivo que se encuentra en la maquina del usuario
 * @param	string	sFile	Archivo que se desea reproducir
 */
function itemLocalToPlay(sFile) {
	var oPlayer = obtenerReferenciaPlayer("player");
	if (oPlayer != undefined && oPlayer != null) {
		oPlayer.url = sFile;
		oPlayer.controls.play();
	}
}

/**
 * Mueve la playlist un item hacia arriba
 */
function scrollUp() {
	var oScroll = document.getElementById("divScroll");
	scrollMove(oScroll,false);
}

/**
 * Las funciones de scroll llaman a esta funcion la cual tiene seteado el step para realizarlo
 */
function scrollMove(oScroll,bUp) {
	var nLastValue = oScroll.scrollTop; 
	var nStep = 2;
	if (bUp) {		
		for (i = nStep; i <= nItemHeight; i+=nStep) {
			oScroll.scrollTop += nStep;
			if (oScroll.scrollTop != nLastValue) {
				nLastValue = oScroll.scrollTop;
			} else {
				break;
			}
		}
	} else {
		for (i = nStep; i <= nItemHeight; i+=nStep) {
			oScroll.scrollTop -= nStep;
			if (oScroll.scrollTop != nLastValue) {
				nLastValue = oScroll.scrollTop;
			} else {
				break;
			}
		}
	}
}

/**
 * Mueve la playlist un item hacia abajo
 */
function scrollDown() {
	var oScroll = document.getElementById("divScroll");
	scrollMove(oScroll,true);
}

/**
 * Esta funcion se dispara desde el evento onmouseover y llama a showPopup con el parametro
 * correspondiente
 */
function showPopupEvent() {
	showPopup(giCurrentItem);
}


/**
 * Arma el popup para mostrar los datos del contenido
 * param	int	nIdMaterial	Id del material que se debe mostrar en el popup
 */
function showPopup(nIdMaterial) {

	var oXmlItem = null;

	var oXml = document.getElementById("xmlPlaylist");
	if ((oXmlItem = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]")) == null) {
		//Si no existe entonces tomo el current
		oXmlItem = gCurrentItemNode;
	}
	
	var x, y;
	var sTooltip;
	var sError = "";
	//var oXmlItem = oXml.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
	var bLocalFileNotFound = false;
	//Si existe en el xml tomo ese
	//Si el item del xml no existe entonces lo tomo del ultimo curren
	
	var sDescripcion = oXmlItem.selectSingleNode("descripcion").text;
	
	var iCantidadCaracteres = 0;
	
	sDescripcion = ajustarTexto(sDescripcion,220);
	
	iCantidadCaracteres += sDescripcion.length;
	
	// &#65533;Donde?
	/*
	x = event.clientX + document.body.scrollLeft;
	y = event.clientY + document.body.scrollTop;	
	*/
	x = event.clientX;
	y = event.clientY;	
	
	iCantidadCaracteres += oXmlItem.selectSingleNode("imagen").text.length;
	iCantidadCaracteres += oXmlItem.selectSingleNode("titulo").text.length;
	iCantidadCaracteres += oXmlItem.selectSingleNode("fecha_pub").text.length;	
	iCantidadCaracteres += (sDuracion+ " " +oXmlItem.selectSingleNode("duracion").text).length;

	//Si es un archivo local debo verificar si existe
	if (oXmlItem.selectSingleNode("url_local").text != "") {
		//Busco si existe el archivo
		if (top.downloader.oDownloader != undefined && top.downloader.oDownloader != null) {
			if (!top.downloader.oDownloader.object.Pending.isFileExists(oXmlItem.selectSingleNode("url_local").text)) {
				//No existe el archivo, lo informo en el alt
				iCantidadCaracteres += (sFileNotFound + " " + oXmlItem.selectSingleNode("url_local").text).length;
				bLocalFileNotFound = true;
			}
		}
	}

	// en 100 de alto entran aproximadamente 200 caracteres, hacemos una regla de tres
	var iHeight = 0;
	
	// 20 es el margen de seguridad
	//var iHeight = (iCantidadCaracteres*0.5)+20;
	var iHeight = (iCantidadCaracteres*0.3)+20;
	
//	iHeight = iHeight>85?iHeight:85;
	
//	sTooltip = "<div id=\"tblPlaylistPopup\" class=\"PlaylistPopup\" ><table width=\"100%\" height=\"100%\" id=\"altPlaylist\"><tr><td align=\"center\" valign=\"top\" width=\"30%\"><img width=\"70\" height=\"70\" src=\""+oXmlItem.selectSingleNode("imagen").text+"\" /></td><td valign=\"top\" width=\"70%\"><table width=\"100%\"><tr><td>"+oXmlItem.selectSingleNode("titulo").text+"<br>"+ sDescripcion + (bLocalFileNotFound ? "<br>" + sFileNotFound + " " + oXmlItem.selectSingleNode("url_local").text : "") + "</td></tr></table></td></tr></table></div>";
	sTooltip = "<div id=\"PlaylistAlt\" class=\"PlaylistAlt\" ><div id=\"PlaylistAltImagen\" class=\"PlaylistAltImagen\"><img width=\"70\" height=\"70\" src=\""+oXmlItem.selectSingleNode("imagen").text+"\" /></div><div id=\"PlaylistAltTexto\" class=\"PlaylistAltTexto\"><p><span class=\"PlaylistAltTitular\">"+oXmlItem.selectSingleNode("titulo").text+"</span><br /><span class=\"PlaylistAltBajada\">"+ sDescripcion + (bLocalFileNotFound ? "<br>" + sFileNotFound + " " + oXmlItem.selectSingleNode("url_local").text : "") + "</span></p></div></div>";	

//	GOOSE ---- datos que saque del alt. supuestamente.
//	"+oXmlItem.selectSingleNode("fecha_pub").text+"<br>
//	"+sDuracion+ " " +oXmlItem.selectSingleNode("duracion").text+"<br>
	
	oTooltip = window.createPopup();
	oTooltip.document.createStyleSheet(document.styleSheets[0].href);
    oTooltip.document.body.innerHTML = sTooltip;
	oTooltip.document.body.className="PlaylistAltBody";
	oTooltip.show(x+15,y+15,280,90,document.body);
}

/**
 * Cierro el popup
 */
function closePopup() {
	if (oTooltip != undefined) {
		oTooltip.hide();
	}
}

function TrimString(sInString) {
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
}

/**
* function unescapeText(sText)
* recibe un string urlencode del php y le hace un unescape con algunos adherezos
*/
function unescapeText(sText){
	regExp = /\+/g; //para reemplazar los + por espacios
	sText  = unescape(sText);
	//porque el unescape en js deja los + que equivalen a espacios
	sText  = sText.replace(regExp,' ');
	return sText;
}

/**
* Corta el texto en la cantidad de caracteres y le agrega "..." para indicar que sigue
* param	string	sTexto	Texto que se debe ajustar
* param int		nLength	Cantidad de caracteres a ajustar
* return 	string
*/
function ajustarTexto(sTexto,nLength) {
	var sReturn = sTexto;
	if (sTexto.length > nLength) {
		sReturn = sTexto.substring(0,nLength)+"...";
	}
	return sReturn;
}


/*
function obtenerMaterialDwl(nIdContenido, nIdEncodeo,nIdReproduccion)
{
	var oXml = document.getElementById("xmlPlaylistDwl");
	var sXml = "";
	sXml = openXml("metadatos","&id_contenido=" + nIdContenido + "&id_encodeo=" + nIdEncodeo+"&id_reproduccion=" + nIdReproduccion);
	//alert ("obtenerMaterialDwl:" + sXml); //DEBUG
	oXml.loadXML(TrimString(sXml));
	var oNode = oXml.selectSingleNode("playlist/item");
	var oMaterial = new Array();
	if (oNode != undefined) 
	{		
		oMaterial["titulo"]			        = oNode.selectSingleNode("titulo").text;
		oMaterial["trackeable"] 	    	= oNode.selectSingleNode("trackeable").text;
		oMaterial["id_contenido"]    		= oNode.selectSingleNode("id_contenido").text;
		oMaterial["id_material"] 		    = oNode.selectSingleNode("@id_material").text;
		oMaterial["id_encodeo"] 		    = oNode.selectSingleNode("id_encodeo").text;
		oMaterial["derechos"] 			    = oNode.selectSingleNode("derechos").text;
		oMaterial["consumido"] 			    = oNode.selectSingleNode("consumido").text;
		oMaterial["imagen"] 			      = oNode.selectSingleNode("imagen").text;
		oMaterial["fecha_publicacion"]	= oNode.selectSingleNode("fecha_pub").text;
		oMaterial["comprado"] 			    = oNode.selectSingleNode("comprado").text;
		oMaterial["precio"] 			      = oNode.selectSingleNode("precio").text;
		oMaterial["adicionales"] 			  = oNode.selectSingleNode("adicionales").text;
		oMaterial["moneda"] 			      = oNode.selectSingleNode("moneda").text;
		oMaterial["duracion"] 		      		= oNode.selectSingleNode("duracion").text;
		oMaterial["url_material"] 		      	= oNode.selectSingleNode("url_material").text;
		oMaterial["url_material_hostayv"] 		= oNode.selectSingleNode("url_material_hostayv").text;
		oMaterial["url_material_hostayvdwl"]		= oNode.selectSingleNode("url_material_hostayvdwl").text;		
	}
	return oMaterial;
}
*/

function obtenerMaterialDwl(nIdContenido, nIdEncodeo,nIdReproduccion,nIdMaterial)
{
	var oXml = document.getElementById("xmlPlaylistDwl");
	var sXml = "";
	if(nIdMaterial){
		sXml = openXml("metadatos","&id_contenido=" + nIdContenido + "&id_encodeo=" + nIdEncodeo+"&id_reproduccion=" + nIdReproduccion+"&id_material="+nIdMaterial);
	}else{
		sXml = openXml("metadatos","&id_contenido=" + nIdContenido + "&id_encodeo=" + nIdEncodeo+"&id_reproduccion=" + nIdReproduccion);
	}
	//alert ("obtenerMaterialDwl:" + sXml); //DEBUG
	oXml.loadXML(TrimString(sXml));
	var oNode = oXml.selectSingleNode("playlist/item");
	var oMaterial = new Array();
	if (oNode != undefined) 
	{		
		oMaterial["titulo"]			        = oNode.selectSingleNode("titulo").text;
		oMaterial["trackeable"] 	    	= oNode.selectSingleNode("trackeable").text;
		oMaterial["id_contenido"]    		= oNode.selectSingleNode("id_contenido").text;
		oMaterial["id_material"] 		    = oNode.selectSingleNode("@id_material").text;
		oMaterial["id_encodeo"] 		    = oNode.selectSingleNode("id_encodeo").text;
		oMaterial["derechos"] 			    = oNode.selectSingleNode("derechos").text;
		oMaterial["descripcion"] 		    = oNode.selectSingleNode("descripcion").text;
		oMaterial["consumido"] 			    = oNode.selectSingleNode("consumido").text;
		oMaterial["puederegenerar"] 		    = oNode.selectSingleNode("puederegenerar").text;
		oMaterial["imagen"] 			      = oNode.selectSingleNode("imagen").text;
		oMaterial["fecha_publicacion"]	= oNode.selectSingleNode("fecha_pub").text;
		oMaterial["comprado"] 			    = oNode.selectSingleNode("comprado").text;
		oMaterial["precio"] 			      = oNode.selectSingleNode("precio").text;
		oMaterial["adicionales"] 			  = oNode.selectSingleNode("adicionales").text;
		oMaterial["moneda"] 			      	= oNode.selectSingleNode("moneda").text;
		oMaterial["duracion"] 		      		= oNode.selectSingleNode("duracion").text;
		oMaterial["url_material"] 		      	= oNode.selectSingleNode("url_material").text;
		oMaterial["url_material_hostayv"] 		= oNode.selectSingleNode("url_material_hostayv").text;
		oMaterial["url_material_hostayvdwl"]		= oNode.selectSingleNode("url_material_hostayvdwl").text;
		oMaterial["encodeos_streaming"]		= oNode.selectSingleNode("encodeos_streaming").text;
		oMaterial["encodeos_download"]		= oNode.selectSingleNode("encodeos_download").text;
		oMaterial["url_local"]					= oNode.selectSingleNode("url_local").text;
	}
	return oMaterial;
}
/**
* esta función se encarga de llama al veragregartodos que trae los datos
* pasandole los parametros desde los botones de la cinta (browser)
*/

function openObtenerTodo(nIdNodo,nIdGenero,nIdFuente,nIdTipoCont,nIdFormato,sEstado,sCampoOrden,sTipoOrden,sTipoConsulta){
	var sParam="&id_nodo="+ nIdNodo +"&id_genero="+nIdGenero+"&id_fuente="+ nIdFuente +"&id_tipo_cont="+ nIdTipoCont +"&id_formato="+ nIdFormato +"& estado="+ sEstado +"&campo_orden="+ sCampoOrden +"&tipo_orden="+ sTipoOrden +"&tipo_consulta="+sTipoConsulta;
	//return unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|principal","vertodos",sParam));	
	return unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|player","vertodos",sParam));	

}

/**
* es llamada desde cinta.js para traer todos los contenidos
* y ubicarlos al principio de la lista y pone el setCurrent primero
*/
function playlistVerTodos(nIdNodo,nIdTipoCont,sTipoConsulta){

var nIdGenero='';
var nIdFuente='';
var nIdFormato='';
var sEstado='';
var sCampoOrden='';
var sTipoOrden='';
var sXml=openObtenerTodo(nIdNodo,nIdGenero,nIdFuente,nIdTipoCont,nIdFormato,sEstado,sCampoOrden,sTipoOrden,sTipoConsulta);

//alert(sXml);
	var oXml = document.getElementById("xmlPlaylistAux");
	
	//var sXml = "";
	//sXml = openXml("metadatos","&id_grupo=" + nIdGrupo);
	//Cargo el nuevo xml
	
	oXml.loadXML(TrimString(sXml));
	
	//Lleno la lista con los nuevos datos
	
	addPlaylist(true,false);
	
	setCurrent(primerMaterial(),true);
	// ahora llamamos siempre como ultimo al default de la instalacion
	//cargarPlayListDefault(false,false);
}
/**
* es llamada desde cinta.js para traer todos los contenidos
* y ubicarlos al final de la lista se ejecutarán a medida que vaya corriendo la lista
*/

function playlistAgregarTodos(nIdNodo,nIdTipoCont,sTipoConsulta){
setPosLastDrawItem(true,false);
setClassDrawItem('anexado');
	var oXml = document.getElementById("xmlPlaylistAux");
	var nIdGenero='';
	var nIdFuente='';
	var nIdFormato='';
	var sEstado='';
	var sCampoOrden='';
	var sTipoOrden='ASC';
	var sXml=openObtenerTodo(nIdNodo,nIdGenero,nIdFuente,nIdTipoCont,nIdFormato,sEstado,sCampoOrden,sTipoOrden,sTipoConsulta);

	oXml.loadXML(TrimString(sXml));
	//fillPlaylist(false,false);
	//Lleno la lista con los nuevos datos
	addPlaylist(false,false);	
	// ahora llamamos siempre como ultimo al default de la instalacion
	//cargarPlayListDefault(true,false);
setClassDrawItem('');
setPosLastDrawItem(false,false);
}//end func playlistAgregarTodos

/**
 * Elimina el primer elemento de la lista de materiales 
 */
function eliminarPrimerMaterial() 
{	
	
	// eliminamos el primer material de la tabla
	
	//-------------- obtengo el final ----------------
	var tblPL=document.getElementById("tblPlaylist");	
	var iPrevMat = -1;
	var iLastMat = -1;
	var iLastPostMat=0;
		var rows = tblPL.getElementsByTagName("tr"); 
			for(var i in rows) { 			    
			    if(rows[i].name)
			      {				      
			      	  iPrevMat=iLastMat;	
			      	  iLastMat=rows[i].name.replace(TBL_PL_PREF,'');	
			      	  iLastPostMat++;
			      }
   			} 
	//-------------- /obtengo el final ----------------	
	
	if (iPrevMat!=-1)
		{
			delete aItems[iLastMat];
			giArrayEntryPoint=iPrevMat;
		}
	//-----------------------------------------	
	//eliminamos el id en el xml iLast	
	var oXml = document.getElementById("xmlPlaylist");	
	var oXmlItem	= oXml.selectSingleNode("playlist/item[@id_material=\"" + iLastMat + "\"]");
	oXml.documentElement.removeChild(oXmlItem);	
	// eliminamos el primer material de la tabla
	var oTbl = document.getElementById("tblPlaylist");
	var ultimo = oTbl.rows.length;		
	oTbl.deleteRow(ultimo - 1);

	
}
/**
* retorna el material seleccionado en el readiobutton
*/
function playlistGetSelectMat(){

 if(document.playlistForm.itemPlayerBorrar!=undefined){
	 if(!document.playlistForm.itemPlayerBorrar.value){
	 	for(i=0;i<document.playlistForm.itemPlayerBorrar.length;i++)
			{if(document.playlistForm.itemPlayerBorrar[i].checked) {return document.playlistForm.itemPlayerBorrar[i].value;}
			}//end for
	 }else{
			return document.playlistForm.itemPlayerBorrar.value;
	 }//end if itemPlayerBorrar value
 }else{
	   	return false; 
 }//end if itemPlayerBorrar

}
/**
* Setea el radiobutton del material
*/
function playlistSetSelectMat(iMaterial){

 if(document.playlistForm.itemPlayerBorrar!=undefined){
	 if(!document.playlistForm.itemPlayerBorrar.value){
	 	for(i=0;i<document.playlistForm.itemPlayerBorrar.length;i++)
			{if(document.playlistForm.itemPlayerBorrar[i].value==iMaterial) {document.playlistForm.itemPlayerBorrar[i].checked=true;}
			}//end for
	 }else{
			document.playlistForm.itemPlayerBorrar.checked=true;
	 }//end if itemPlayerBorrar value
 }//end if itemPlayerBorrar

}
/**
* Borra un contenido seleccionado en el checkbox
* a menos que este sea el actual
*/

function playlistBorrarItem(){

var iMaterial;

 iMaterial=playlistGetSelectMat();

if(iMaterial){
	// eliminamos el primer material de la tabla	
	//-------------- obtengo el final ----------------
	var tblPL=document.getElementById("tblPlaylist");	
	var iLastMat = 0;
	var iLastPostMat=0;
	var iPrevMat=-1;
		var rows = tblPL.getElementsByTagName("tr"); 
			for(var i in rows) { 	
			//obtiene solo los row que tienen name
			// son los que el nombre contiene el id de material
			// de rows[i].name.replace(TBL_PL_PREF,'') se obtiene el nombre del material
			    if(rows[i].name)
			      {	  iPrevMat=iLastPostMat;
			      	  //Solo entra si el id del material corresponde a la celda y si no es el actual
			      	  if(rows[i].name.replace(TBL_PL_PREF,'')==iMaterial ){
			      	  iLastMat=iLastPostMat;			      	 
			      	  }
			      	  iLastPostMat++;
			      }
   			} 
   	
	//-------------- /obtengo el final ----------------	
	/**
	* esta funcion tiene el problema que no elimina la primera posición
	* de la tabla  lo mas probable es que sea el if (iLastPostMat!=0)
	* habria que sacarlo y testearlo
	* 
	*/
	/*if (iLastPostMat!=0)
	{*/ 
	
	if(giCurrentItem==iMaterial)PL_cargarSiguiente(false);
	
			if(aItems[iMaterial])delete aItems[iMaterial];				
		//-----------------------------------------	
		/*if(iLastMat!=0){*/
				//eliminamos el id en el xml iLast	
			var oXml = document.getElementById("xmlPlaylist");	
			var oXmlItem	= oXml.selectSingleNode("playlist/item[@id_material=\"" + iMaterial + "\"]");
			oXml.documentElement.removeChild(oXmlItem);	
			// eliminamos el primer material de la tabla
			var oTbl = document.getElementById("tblPlaylist");		
			oTbl.deleteRow(iLastMat);
			return true;
		/*}*/
	/*}*/
	
 }
	return false;
}
/**
* mueve los diferentes item de la playlist hacia arriba y abajo
*/
function playlistMoveSelecItem(newPos){
var iMaterial;
iMaterial=playlistGetSelectMat();
if(iMaterial){
//-------------- obtengo el final y la posicion del material ----------------
	var tblPL=document.getElementById("tblPlaylist");	
	var iSelectMat = 0;
	var iLastPostMat=0;
	var iPrevMat=-1;
		var rows = tblPL.getElementsByTagName("tr"); 
			for(var i in rows) { 	
			//obtiene solo los row que tienen name
			// son los que el nombre contiene el id de material
			// de rows[i].name.replace(TBL_PL_PREF,'') se obtiene el nombre del material
			    if(rows[i].name)
			      {	  iPrevMat=iLastPostMat;
			      	  //Solo entra si el id del material corresponde a la celda y si no es el actual
			      	  if(rows[i].name.replace(TBL_PL_PREF,'')==iMaterial){
			      	  iSelectMat=iLastPostMat;			      	 
			      	  }
			      	  iLastPostMat++;
			      }
   			} 
  //----------------------------------------------------------- 	
  if( (newPos<0 && iSelectMat!=0) || (newPos>0 && iSelectMat!=(iLastPostMat-1)) )
  {
	//Muevo el tr
  	tblPL.moveRow(iSelectMat,(iSelectMat + newPos));
  	//Ahora lo reordeno en el xml
  	var oXml = document.getElementById("xmlPlaylist");
	var oNode = oXml.selectSingleNode("playlist/item[@id_material=\"" + iMaterial + "\"]");
	if (oNode != undefined && oNode != null) {
		//Obtengo la copia del nodo		
		var oClone = oNode.cloneNode(true);
		//Ahora inserto en donde corresponde
		if (newPos<0) 
			var oRef = oXml.documentElement.childNodes[(iSelectMat + newPos)];
		else
			var oRef = oXml.documentElement.childNodes[(iSelectMat + newPos)+1];
		if (oRef != null) {
			oXml.documentElement.insertBefore(oClone,oRef);
		} else { //Si dio null es porque es el ultimo y debo ingresarlo al final
			oXml.documentElement.insertBefore(oClone,null);				
		}
		//Remuevo el original
		oXml.documentElement.removeChild(oNode);
	}
  	playlistSetSelectMat(iMaterial)
  }//end if newPos
 }//end if Material
}
/**
* Limpia todos los contenidos de la playlist menos el que esta activo
*/
function playlistLimpiar(){

// eliminamos el primer material de la tabla	
	//-------------- obtengo el final ----------------
	var tblPL=document.getElementById("tblPlaylist");
	var oXml = document.getElementById("xmlPlaylist");
	var oTbl = document.getElementById("tblPlaylist");
	var iLastMat = 0;
	var iLastPostMat=0;	
	var iPrevMat=-1;
	var oXmlItem;
	var aObj = new Array();
		var rows = tblPL.getElementsByTagName("tr"); 
			for(var i in rows) { 			    
			
			    if(rows[i].name)
			      {	
			      if( rows[i].name.replace(TBL_PL_PREF,'')==giCurrentItem)iLastMat=iLastPostMat;
			      aObj[iLastPostMat]=rows[i].name.replace(TBL_PL_PREF,'');
			      //alert(iLastPostMat + " " +rows[i].name.replace(TBL_PL_PREF,''));
			       iLastPostMat++;
			      }
   			} 
   			
   			
   			for (var i =(iLastPostMat-1); i>=0;i--){   			 
   			 if(i!=iLastMat){   			   
   			   if(aItems[aObj[i]]) delete aItems[aObj[i]];
   			   try{
   			   oXmlItem	= oXml.selectSingleNode("playlist/item[@id_material=\"" + aObj[i] + "\"]");						     	
			   oXml.documentElement.removeChild(oXmlItem);
			   }catch(e)
			   {
			   }
   			   oTbl.deleteRow(i);   			  
   			   //if((iLastPostMat-1)==i)i++;
   			 }
   			}
}

/**
 * Muestra la ventana para elejir donde guardar la playlist del usuario
 */
function showSavePlaylist(nIdPlaylist) {
	//Verifico que haya algo para guardar
	var oXml = document.getElementById("xmlPlaylist");
	if (oXml.childNodes.length > 0) {
		//Verifico si esta logueado
		if (getStatusUsuario() != "logueado") {
			mostrarLogin(false,showSavePlaylist);
			return;
		}
		mostrarPlayer();
		if (nIdPlaylist == undefined || nIdPlaylist == null) {
			if (nIdPlayListUser != undefined && nIdPlayListUser != null) {
				nIdPlaylist = nIdPlayListUser;			
			} else {
				nIdPlaylist = "";			
			}
		}	
		//var sHtml = FWK.loadApp("playlist_contenidos:4c","&principal[action]=show_save&principal[id_playlist]="+nIdPlaylist);
		var oRnd = new Date();	
		var sHtml = FWK.loadApp("playlist_contenidos|playlist|playlist|player","&playlist[action]=show_save&playlist[id_playlist]="+nIdPlaylist+"&rnd="+oRnd.getTime());
		//Muestro el div con el html adentro
		document.getElementById("divPlaylistManager").innerHTML = sHtml;
		document.getElementById("divPlaylistManager").style.display = "";			
	} else {
		var oRnd = new Date();	
		var sHtml = FWK.loadApp("playlist_contenidos|playlist|playlist|player","&playlist[action]=show_dialog&playlist[type]=alert&playlist[message]=empty_playlist&rnd="+oRnd.getTime());
		//Muestro el div con el html adentro
		document.getElementById("divPlaylistManager").innerHTML = sHtml;
		document.getElementById("divPlaylistManager").style.display = "";			
	}
}

/**
 * Guarda la playlist del usuario
 */
function savePlaylist() {
	var nIdPlaylist;
	var sName = "";	
	if (document.getElementById("radExist") !=null && document.getElementById("radExist").checked) {
		//Tomo el id de la playlist que esta seleccionado en el combo
		nIdPlaylist = document.getElementById("cboPlaylists").value;
	} else {
		//Tengo que creear una nueva playlist
		nIdPlaylist = "";
		sName = document.getElementById("guardar").value;
	}
	/*ESTO ERA UNA BUENA IDEA, HASTA QUE METIERON MANO
	var oXml = document.getElementById("xmlPlaylist");
	var sItems = "";
	if (oXml != undefined && oXml != null) {		
		var oList = oXml.selectNodes("/playlist/item");
		for (var i = 0; i < oList.length; i++) {
			sItems += oList[i].attributes.getNamedItem("id_material").value + ",";
		}
	*/
	
	/*AHORA LA GENIALIDAD...........RECORRER LA TABLA :S*/
	
	var tblPL	= document.getElementById("tblPlaylist");
	var sItems	= "";
	var oXml	= document.getElementById("xmlPlaylist");
	if (tblPL !=undefined && tblPL != null) {
		var rows = tblPL.getElementsByTagName("tr");
		for(var i=0; i < rows.length; i++) {
			if(rows[i].name) {
				/*Esto no va mas, ahora se guardan pares ordenados
				sItems += rows[i].name.replace(TBL_PL_PREF,'') + ",";
				*/
				var nId = rows[i].name.replace(TBL_PL_PREF,'');
				//Ahora busco la url local si es que existe
				var oXmlItem	= oXml.selectSingleNode("playlist/item[@id_material=\"" + nId + "\"]");
				sItems +=  nId + "*" + oXmlItem.selectSingleNode("url_local").text + "|";
			}
		}
		
		//Remuvo la ultima ,
		if (sItems.length > 0) {
			sItems = sItems.substring(0,sItems.length-1);
		}
		/* ESTE METODO NO VA MAS, AHORA SE MANDA LA INFO POR POST
		 * 
		//Salvo la playlist y guardo el id que se utilizo
		var oRnd = new Date();
		nIdPlayListUser=TrimString(unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|videos","save","&id_playlist="+nIdPlaylist+"&items="+sItems+"&name="+sName+ "&rnd="+oRnd.getTime())));
		*/
		//Cargo los datos en los hiddens
		document.getElementById("id_playlist").value = nIdPlaylist;
		document.getElementById("items").value = sItems;
		document.getElementById("name").value = sName;
		//Ahora ejecuto el form por ajax
		//nIdPlayListUser = FWK.postApi("playlist_contenidos|playlist|playlist|videos","save","frmSavePlaylist","");
		nIdPlayListUser = FWK.postApi("playlist_contenidos|playlist|playlist|player","save","frmSavePlaylist","");
		//nIdPlayListUser = openXml("save","&id_playlist="+nIdPlaylist+"&items="+sItems+"&name="+sName);
		//Cierro el formulario
		if(debug_playlist) {
			alert("savePlaylist retorna: " + nIdPlayListUser);
		}
		closePlaylistManager();
	}	
}

/**
 * Esta funcion oculta el div y borra el contenido del playlistManager
 */
function closePlaylistManager() {
	document.getElementById("divPlaylistManager").style.display = "none";
	document.getElementById("divPlaylistManager").innerHTML = "";
}
/**
 * Esta funcion cambia el estado de los controles segun la opcion seleccionada
 * en los radio buttons del formulario para guardar una playlist del usuario
 * @param	object	oObject	Objet radExist que es el que tiene el evento onChange que dispara esta funcion
 */
function changeStateFormSaveCtrls(oObject) {
	if (oObject.id == "radExist") {
		if (oObject.checked) {
			if (document.getElementById("cboPlaylists") != null) {
				document.getElementById("cboPlaylists").disabled = false;				
			}
			document.getElementById("guardar").disabled = true;
		} else {
			if (document.getElementById("cboPlaylists") != null) {
				document.getElementById("cboPlaylists").disabled = true;				
			}
			document.getElementById("guardar").disabled = false;		
		}		
	} else {
		if (oObject.checked) {
			if (document.getElementById("cboPlaylists") != null) {
				document.getElementById("cboPlaylists").disabled = true;				
			}
			document.getElementById("guardar").disabled = false;
		} else {
			if (document.getElementById("cboPlaylists") != null) {
				document.getElementById("cboPlaylists").disabled = false;				
			}
			document.getElementById("guardar").disabled = true;		
		}				
	}
}

/**
 * Muestra la ventana para elejir donde guardar la playlist del usuario
 */
function showLoadPlaylist(nIdPlaylist) {
	//Verifico si esta logueado
	if (getStatusUsuario() != "logueado") {
		mostrarLogin(false,showLoadPlaylist);
		return;
	}
	mostrarPlayer();
	//Obtengo un listado de las playlists del usuario
	var oRnd = new Date();	
	//var sXml = TrimString(unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|videos","playlists","&rnd="+oRnd.getTime())));
	var sXml = TrimString(unescapeText(FWK.loadApi("playlist_contenidos|playlist|playlist|player","playlists","&rnd="+oRnd.getTime())));
	if (sXml != "<playlists></playlists>") {
		if (nIdPlaylist == undefined || nIdPlaylist == null) {
			if (nIdPlayListUser != undefined && nIdPlayListUser != null) {
				nIdPlaylist = nIdPlayListUser;			
			} else {
				nIdPlaylist = "";			
			}
		}	
		//var sHtml = FWK.loadApp("playlist_contenidos:4c","&principal[action]=show_load&principal[id_playlist]="+nIdPlaylist);
		//var sHtml = FWK.loadApp("playlist_contenidos|principal|principal|principal","&principal[action]=show_load&principal[id_playlist]="+nIdPlaylist+"&rnd="+oRnd.getTime());
		var sHtml = FWK.loadApp("playlist_contenidos|playlist|playlist|player","&playlist[action]=show_load&playlist[id_playlist]="+nIdPlaylist+"&rnd="+oRnd.getTime());
		//Muestro el div con el html adentro
		document.getElementById("divPlaylistManager").innerHTML = sHtml;
		document.getElementById("divPlaylistManager").style.display = "";		
	} else {
		//var sHtml = FWK.loadApp("playlist_contenidos|principal|principal|principal","&principal[action]=show_dialog&principal[type]=alert&principal[message]=no_playlists&rnd="+oRnd.getTime());
		var sHtml = FWK.loadApp("playlist_contenidos|playlist|playlist|player","&playlist[action]=show_dialog&playlist[type]=alert&playlist[message]=no_playlists&rnd="+oRnd.getTime());
		//Muestro el div con el html adentro
		document.getElementById("divPlaylistManager").innerHTML = sHtml;
		document.getElementById("divPlaylistManager").style.display = "";					
	}
	/*
	//Verifico si esta logueado
	if (getStatusUsuario() != "logueado") {
		mostrarLogin(false,playlistGuardar);
		return;
	}
	var oXml = document.getElementById("xmlPlaylist");
	var sItems = "";
	if (oXml != undefined && oXml != null) {
		if (nIdPlaylist == undefined || nIdPlaylist == null) {
			if (nIdPlayListUser != undefined && nIdPlayListUser != null) {
				nIdPlaylist = nIdPlayListUser;			
			} else {
				nIdPlaylist = "";			
			}
		}
		var oList = oXml.selectNodes("/playlist/item");
		for (var i = 0; i < oList.length; i++) {
			sItems += oList[i].attributes.getNamedItem("id_material").value + ",";
		}
		//Remuvo la ultima ,
		if (sItems.length > 0) {
			sItems = sItems.substring(0,sItems.length-1);
		}
		//Salvo la playlist y guardo el id que se utilizo
		nIdPlayListUser = openXml("save","&id_playlist="+nIdPlaylist+"&items="+sItems);
	}
	*/
}


/**
 * Agrega un archivo local a la playlist
 * @param {int}		nIdMaterial	ID del material del contenido
 * @param {string}	sPath		Archivo local
 * @param {boolean}	bPlay		Indica si se debe comenzar a reproducir el contenido
 */
function addLocalFile(nIdMaterial,sPath,bPlay) {
	var sXml = openXml("metadatos","&id_material=" + nIdMaterial);
	var oXml = document.getElementById("xmlPlaylistAux");
	//Cargo el xml con el dato
	oXml.loadXML(sXml);
	//Ahora modifico la url_local por la que me vino como parametro
	var oNode = oXml.selectSingleNode("/playlist/item[@id_material = " + nIdMaterial + "]/url_local");
	if (oNode != null) {
		oNode.text = sPath;		
	}
	//Ahora lo agrego a la playlist
	bPlay = bPlay || false;
	if (bPlay) {
		addPlaylist(bPlay,true);		
	} else {
		setPosLastDrawItem(true);
		addPlaylist(bPlay,false);		
		setPosLastDrawItem(false);		
	}
}

/**
 *
 */
function REL_cargarSiguiente() {
	
	var oRelacionados = document.getElementById("divRelacionados");
	if (oRelacionados) {
		var oPrimero = oRelacionados.firstChild;
		if (oPrimero && oPrimero.id_contenido) {			
			//Obtengo el ID_CONTENIDO y llamo a obtenerMaterialDwl
			var oMaterial = obtenerMaterialDwl(oPrimero.id_contenido,'',1);
			if (oMaterial) {
				setCurrent(oMaterial["id_material"],true,document.getElementById("xmlPlaylistDwl"));
			}
		}
	}
}


/**
 * Muestra la playlist de relacionados y oculta el playlist comun
 */
function mostrarRelacionados() {
	document.getElementById("divPlaylist").style.display = "none";
	document.getElementById("playlistTblBtns").style.display = "none";
	document.getElementById("divRelacionados").style.display = "";
}

/**
 * Muestra la playlist de relacionados y oculta el playlist comun
 */
function mostrarPlaylist() {
	document.getElementById("divRelacionados").style.display = "none";
	document.getElementById("divPlaylist").style.display = "";
	document.getElementById("playlistTblBtns").style.display = "";
}

/*IMPORTS*/
/*VARIABLES*/
window.sImgSeparator=sImgSeparator;
window.sImgPlay=sImgPlay;
window.sImgPlayOver=sImgPlayOver;
window.nItemHeight=nItemHeight;
window.sDuracion=sDuracion;
window.oTooltip=oTooltip;
window.aItems=aItems;
window.giCurrentItem=giCurrentItem;
window.gMaxMateriales=gMaxMateriales;
window.giMaterialComenzar=giMaterialComenzar;
window.PosLastDrawItem=PosLastDrawItem;
window.PosLastDrawItemCount=PosLastDrawItemCount;
window.PosLastDrawItemCountActiv=PosLastDrawItemCountActiv;
window.ClassDrawItem=ClassDrawItem;
window.TBL_PL_PREF=TBL_PL_PREF;
window.nIdPlayListUser=nIdPlayListUser;
window.gCurrentItemNode=gCurrentItemNode;
window.debug_playlist=debug_playlist;
window.giArrayEntryPoint=giArrayEntryPoint;
/*FUNCIONES*/
window.fillPlaylist=fillPlaylist;
window.chequearMaximo=chequearMaximo;
window.addPlaylist=addPlaylist;
window.siguienteMaterial=siguienteMaterial;
window.siguienteMaterial=siguienteMaterial;
window.primerMaterial=primerMaterial;
window.siguienteMaterial=siguienteMaterial;
window.MaterialAnterior=MaterialAnterior;
window.PL_cargarSiguiente=PL_cargarSiguiente;
window.PL_cargarAnterior=PL_cargarAnterior;
window.addElement=addElement;
window.removeFirst=removeFirst;
window.agregarXML=agregarXML;
window.cargarPlayListDefault=cargarPlayListDefault;
window.cargarPlayListGrupo=cargarPlayListGrupo;
window.cargarPlayListContenido=cargarPlayListContenido;
window.cargarPlayListNodo=cargarPlayListNodo;
window.cargarPlayListUser=cargarPlayListUser;
window.openXml=openXml;
window.PL_cambiarEncodeo=PL_cambiarEncodeo;
window.clearPlaylist=clearPlaylist;
window.cargarPlayListAgregarGrupo=cargarPlayListAgregarGrupo;
window.setClassDrawItem=setClassDrawItem;
window.setPosLastDrawItem=setPosLastDrawItem;
window.drawItem=drawItem;
window.unsetCurrentClass=unsetCurrentClass;
window.setCurrentClass=setCurrentClass;
window.setCurrent=setCurrent;
window.setCurrentLocal=setCurrentLocal;
window.drawSeparator=drawSeparator;
window.itemToPlay=itemToPlay;
window.itemLocalToPlay=itemLocalToPlay;
window.scrollUp=scrollUp;
window.scrollMove=scrollMove;
window.scrollDown=scrollDown;
window.showPopupEvent=showPopupEvent;
window.showPopup=showPopup;
window.closePopup=closePopup;
window.TrimString=TrimString;
window.unescapeText=unescapeText;
window.ajustarTexto=ajustarTexto;
window.obtenerMaterialDwl=obtenerMaterialDwl;
window.openObtenerTodo=openObtenerTodo;
window.playlistVerTodos=playlistVerTodos;
window.playlistAgregarTodos=playlistAgregarTodos;
window.eliminarPrimerMaterial=eliminarPrimerMaterial;
window.playlistGetSelectMat=playlistGetSelectMat;
window.playlistSetSelectMat=playlistSetSelectMat;
window.playlistBorrarItem=playlistBorrarItem;
window.playlistMoveSelecItem=playlistMoveSelecItem;
window.playlistLimpiar=playlistLimpiar;
window.showSavePlaylist=showSavePlaylist;
window.savePlaylist=savePlaylist;
window.closePlaylistManager=closePlaylistManager;
window.changeStateFormSaveCtrls=changeStateFormSaveCtrls;
window.showLoadPlaylist=showLoadPlaylist;
window.addLocalFile=addLocalFile;
window.REL_cargarSiguiente = REL_cargarSiguiente;
window.mostrarRelacionados = mostrarRelacionados;
window.mostrarPlaylist = mostrarPlaylist;
window.callbackDivRelacionados=callbackDivRelacionados;
window.callbackDivCompartir=callbackDivCompartir;