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 posición
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;

/**
 * Indice del primer elemento
 */
var 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
	while(oXml.XMLDocument.readyState != 4);
	//Borro la tabla
	//clearPlaylist();
	//Recorro el xml
	oItems = oXml.XMLDocument.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);
	}

}

/**
 * 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 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.XMLDocument.readyState != 4);	
	//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");
	//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,''));
					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,""));			
			} 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"); 

	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);      	          
				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.XMLDocument.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.XMLDocument.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.XMLDocument.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.XMLDocument.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.XMLDocument.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.XMLDocument.async = false;
	oXmlAux.XMLDocument.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()));	
	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.XMLDocument.removeChild(oXmlAux.documentElement);
		//oXml.XMLDocument.removeChild((oXml.documentElement));
		while(oXmlAux.XMLDocument.firstChild != null) {
			oXmlAux.XMLDocument.removeChild(oXmlAux.XMLDocument.firstChild);
		}
		while(oXml.XMLDocument.firstChild != null) {
			oXml.XMLDocument.removeChild(oXml.XMLDocument.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.XMLDocument.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
 */
function drawItem(oTbl,oXmlItem) 
{
	//Objetos del item
	//Pasandole cero a insertRow() agrega los elementos en la playlist desde arriba
	//var oNewRow = oTbl.insertRow();
	
	var oNewRow;
	if(PosLastDrawItem==false){
	   oNewRow = oTbl.insertRow(0);
	}else{
	 // alert("ultimo "+ document.getElementById("tblPlaylist").rows.length);
	   oNewRow = oTbl.insertRow((document.getElementById("tblPlaylist").rows.length - ((PosLastDrawItemCountActiv==true)?PosLastDrawItemCount:0)));
	   PosLastDrawItemCount++;
	}
	
	//en caso que exista una clase
	
	
	var oCell = oNewRow.insertCell();
	
	var oTable = document.createElement("TABLE");
	var oRow = oTable.insertRow();
	var oCellItem = oRow.insertCell();
	var nIdMaterial = oXmlItem.attributes.getNamedItem("id_material").value;
	var nIdContenido = oXmlItem.selectSingleNode("id_contenido").text;
	var sTitulo		= oXmlItem.selectSingleNode("titulo").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(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;
}
/**
 * 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) {

//saca el color activado del anterior
unsetCurrentClass();

	//Defino los objetos
	var 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 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.XMLDocument.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) 
	{
		// /GOOSE/oTblHeader.filters[0].Apply();	
		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 + " | ";
		oDivFechaPub.innerHTML = oXmlItem.selectSingleNode("fecha_pub").text + " | ";
		oDivDuracion.innerHTML = sDuracion + " " + oXmlItem.selectSingleNode("duracion").text;
		// /GOOSE/ oTblHeader.filters[0].Play();
		//oFntDescrip.innerHTML	= "<br>" + oXmlItem.text;
		//alert(oXmlItem.xml);
		oDivDescription.innerHTML = ajustarTexto(oXmlItem.selectSingleNode("descripcion").text,100);
		if (bPlayItem) 
		{
			itemToPlay(nIdMaterial);
		}
		// Hacemos scroll para asegurarnos que el material activado esta visible en el listado de playlist
		var oScroll = document.getElementById("divScroll");
		
		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;
	}
}

/*
 * 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");
	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();
	var oCell = oRow.insertCell();
	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) 
{
	var oXml = document.getElementById("xmlPlaylist");	
	var oNode = oXml.XMLDocument.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;
		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 oXml = document.getElementById("xmlPlaylist");	
	var x, y;
	var sTooltip;
	var sError = "";
	//var oXmlItem = oXml.XMLDocument.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]");
	var oXmlItem = null;
	//Si existe en el xml tomo ese
	if ((oXmlItem = oXml.XMLDocument.selectSingleNode("playlist/item[@id_material=\"" + nIdMaterial + "\"]")) == null) {
		//Si no existe entonces tomo el current
		oXmlItem = gCurrentItemNode;		
	}
	//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;
	
	// 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 = "<table width=\"100%\" height=\"100%\"><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 style=\"font-family: Arial;font-size: 10px;color:#999999;\" width=\"100%\"><tr><td>"+oXmlItem.selectSingleNode("titulo").text+"<br>"+ sDescripcion + "</td></tr></table></td></tr></table>";

//	GOOSE ---- datos que saque del alt. supuestamente.
//	"+oXmlItem.selectSingleNode("fecha_pub").text+"<br>
//	"+sDuracion+ " " +oXmlItem.selectSingleNode("duracion").text+"<br>
	
	oTooltip = window.createPopup();
	var pbody = oTooltip.document.body;
	pbody.style.verticalAlign="middle";
	pbody.style.border="1px outset #666666";
	pbody.style.backgroundColor="#333333";
	pbody.innerHTML = sTooltip;
	oTooltip.show(x+15,y+15,280,iHeight,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.XMLDocument.loadXML(TrimString(sXml));
	var oNode = oXml.XMLDocument.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.XMLDocument.loadXML(TrimString(sXml));
	var oNode = oXml.XMLDocument.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["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;

	}
	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));	

}

/**
* 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.XMLDocument.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.XMLDocument.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.XMLDocument.selectSingleNode("playlist/item[@id_material=\"" + iLastMat + "\"]");
	oXml.XMLDocument.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.XMLDocument.selectSingleNode("playlist/item[@id_material=\"" + iMaterial + "\"]");
			oXml.XMLDocument.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.XMLDocument.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.XMLDocument.documentElement.childNodes[(iSelectMat + newPos)];
		else
			var oRef = oXml.XMLDocument.documentElement.childNodes[(iSelectMat + newPos)+1];
		if (oRef != null) {
			oXml.XMLDocument.documentElement.insertBefore(oClone,oRef);
		} else { //Si dio null es porque es el ultimo y debo ingresarlo al final
			oXml.XMLDocument.documentElement.insertBefore(oClone,null);				
		}
		//Remuevo el original
		oXml.XMLDocument.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.XMLDocument.selectSingleNode("playlist/item[@id_material=\"" + aObj[i] + "\"]");						     	
			   oXml.XMLDocument.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.XMLDocument.childNodes.length > 0) {
		//Verifico si esta logueado
		if (getStatusUsuario() != "logueado") {
			mostrarLogin(false,showSavePlaylist);
			return;
		}
		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|principal|principal|principal","&principal[action]=show_save&principal[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|principal|principal|principal","&principal[action]=show_dialog&principal[type]=alert&principal[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 = "";
	if (tblPL != undefined && tblPL != null) {
		var rows = tblPL.getElementsByTagName("tr");
		for(var i=0; i < rows.length; i++) {
			if(rows[i].name) {
				sItems += rows[i].name.replace(TBL_PL_PREF,'') + ",";
			}
		}
		
		//Remuvo la ultima ,
		if (sItems.length > 0) {
			sItems = sItems.substring(0,sItems.length-1);
		}
		//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())));
		//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;
	}
	//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())));
	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());
		//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());
		//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);
	}
	*/
}
