/*
** player.js
** Este archivo contiene la implementacion de las acciones y los eventos del player
** Autor: Rodrigo Nicol?s Uroz <ruroz@claxson.com>
** Fecha: 16/11/2005
**
*/

/*
** VARIABLES GLOBALES
** ------------------
*/
var PLAYER_NOAUTOPLAY_ONLICENSE=0; //rcelestino semaforo para evitar el play de cuando termino de descargar


APP_llamador="player_contenidos|principal|principal|principal";
var player_debug=false;

/*
** Intencion de posicionamiento
*/
var giIntencion;

/*
** Path a las imagenes 
*/
var gsImagenes;

/*
** Ubicaci?n al momento del cambio
*/
var giUbicacionCambio;

/*
** Referencia al document donde est?n las publicidades
*/
var goPublicidades = window;

/*
** Indica si se esta reproduciendo una publicidad
*/
var gbReproduciendoPublicidad = false;

/*
** Cantidad de videos entre publicidad
*/
var giCantidadPrePublicidad;

/*
** Cantidad de videos restantes hasta una publicidad
*/
var giVideosRestantes;

/*
** Array utilizado para almacenar los materiales cargados en la playlist
** Por cada material, almacena la referencia al objeto tr en donde se encuentra, ademas de los metadatos
*/
var goCMaterial = null;

//variable global para almacenar el material recibio previo a mandarlo a loguear
var currentMaterial= null;

/*
** Identificador de material anterior
*/
var giIdMaterialAnterior = -1;

/*
** Objeto publicidad
*/
var goPublicidad = null;

/*
** Array para controlar los botones del menu del player
*/
var gaPlayerButtons = new Array();

/*
** Valor que indica si se debe mostrar el mensaje de cargando o no
*/
var gbCargando = false;
 
/*
** Valor que indica si se empezo a reproducir un material
*/
var gbComenzarReproduccion = false;

/*
** Mensaje de "cargando"
*/
var gsCargando;

/*
** Mensaje de "publicidad"
*/
var gsPublicidad;

/*
** Array de licencias por sesion
*/
var gaLicenciasSesion = new Array();

/*
** Direccion al servicio de carga
*/
//var gsServicioCarga = "/scripts/app/player_fox/control/cargador.php?";

/*
** Direccion al servicio de publicidad
*/
//var gsServicioPublicidad = "/scripts/app/player_fox/publicidades/publicidades.php?";

/*
** Array de mensajes de aviso de licencia
*/
var gaMensajeLicencia = new Array();

/*
** Variables que indican finalizaci?n de predelivery y de carga de material
*/
var gbPredeliveryFinalizado = false;
	
/*
** Estado inicial de los botones: desactivados
*/
gaPlayerButtons['boton_play'] = false;
gaPlayerButtons['boton_pause'] = false;
gaPlayerButtons['boton_rewind'] = false;
gaPlayerButtons['boton_fforward'] = false;
gaPlayerButtons['boton_silenciar'] = false;
gaPlayerButtons['boton_encodeo_bajo'] = false;
gaPlayerButtons['boton_encodeo_alto'] = false;
gaPlayerButtons['boton_fullscreen'] = false;
//gaPlayerButtons['boton_downloaddirecto'] = false;
//gaPlayerButtons['boton_download_1mb'] = false;
//gaPlayerButtons['boton_download_3mb'] = false;
gaPlayerButtons['boton_siguiente_material'] = false;
gaPlayerButtons['boton_material_anterior'] = false;

/*
 * Indica si se debe hacer una reproduccion aleatoria
 */
var gbShuffle = false;



/**
* Modificado por Marcelo Martinovic
*/

var gbRepetir = false;




/*
** CLASES
** ------
*/

function CMaterial(aMaterial)
{
if(player_debug) alert("CMaterial :: entrada");
	this.titulo = aMaterial["titulo"];	
	this.trackeable = aMaterial["trackeable"];	
	this.id_contenido = aMaterial["id_contenido"];
	this.id_material = aMaterial["id_material"];	
	this.id_encodeo = aMaterial["id_encodeo"];		
	this.derechos = aMaterial["derechos"];
	this.consumido = aMaterial["consumido"];
	this.imagen = aMaterial["imagen"];	
	this.fecha_publicacion = aMaterial["fecha_publicacion"];		
	this.oTr = aMaterial["oTr"];	
}


/*
** FUNCIONES PRINCIPALES
** ---------------------
*/

/*
** play
** Esta funcion se encarga de pasar el player al modo de reproduccion (del material actual)
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer play, 0 otherwise
*/
function play()
{
if(player_debug) alert("play :: entrada");
	// Esta funcion debe chequear si el player tiene un material cargado.
	//	Si hay uno cargado, debe empezar a reproducirlo
	//	Si no hay cargado, debe pedirle al playlist que reproduzca el actual
	
	var oPlayer = obtenerReferenciaPlayer("player");

	oPlayer.controls.play();
	
	try
	{
		onPlay();
	}
	catch (e)
	{
		//
	}	
	
	return 1;
}
/*
** pausar
** Esta funcion se encarga de pasar el player al modo de pausa
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo pausar, 0 otherwise
*/
function pausar()
{
if(player_debug) alert("pausar :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	
	if (oPlayer)
	{
		oPlayer.controls.pause();
		
		try
		{
			onPause();
		}
		catch (e)
		{
			//
		}
		
		return 1;
	}
	else
		return 0;
}
/*
** detener
** Esta funcion se encarga de pasar el player al modo de stop
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo detener, 0 otherwise
*/
function detener()
{
if(player_debug) alert("detener :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	
	if (oPlayer)
	{
		oPlayer.controls.stop();
		PLAYER_NOAUTOPLAY_ONLICENSE=1;
		
		try
		{
			onStop();
		}
		catch (e)
		{
			//
		}
		
		try
		{
			onBuffering(false);
		}
		catch (e)
		{
			//
		}						
		
		return 1;
	}
	else
		return 0;
}
/*
** cambiarVolumen
** Esta funcion se encarga de cambiar el volumen
** Recibe:
**					iVolumen		integer		Intensidad de 1 a 100
** Devuelve:
**					1 si pudo cambiar, 0 otherwise
*/
function cambiarVolumen(iVolumen)
{
if(player_debug) alert("cambiarVolumen :: entrada");

	if(isNaN(iVolumen)) return 0;

	var oPlayer = obtenerReferenciaPlayer("player");
	
	if (oPlayer)
	{
		oPlayer.settings.volume = iVolumen;
		
		try
		{
			onVolumeChange();
		}
		catch (e)
		{
			//
		}
		
		return 1;
	}
	else
		return 0;
}
/*
** cargarMaterialPlayer
** Esta funcion se encarga de cargar un material en el player y reproducirlo
** Recibe:
**					oMaterial		object		Instancia de la clase CMaterial
** Devuelve:
**					1 si pudo cargar, 0 otherwise
*/
function cargarMaterialPlayer(oMaterial)
{
//PLAYER_NOAUTOPLAY_ONLICENSE=0;	//apenas tira por defalt va a reproducir salvo que se prenda un STOP
ocultarMensajeDownload();
if(player_debug) alert("cargarMaterialPlayer :: entrada");
	if (gbReproduciendoPublicidad) return 0;
		
	if (estaOculto())	accionSolapa(obtenerReferenciaPlayer("boton_solapa"));
	
	/* PONER EL PLAYER EN FOCO - 30/10/06 */
	/* Versión utilizando el método focus()
	var oRegionPlayer = obtenerReferenciaPlayer("region_player");
	if (oRegionPlayer)
		oRegionPlayer.focus();
	else
		window.status = "'region_player' is undefined";
	*/
	/* Versión cambiando el scroll en base al tamaño de la región "top" que está encima del player */
	var oRegionTop = document.getElementById("top");
	if (oRegionTop)
	{
		var iAltoPxRegionTop = oRegionTop.clientHeight;
		window.scrollTo(0,iAltoPxRegionTop);
	}
	else
	{
		window.status = "'top' region is undefined";
	}
	
	var oPlayer = obtenerReferenciaPlayer("player");
	var sPublicidad = "";
	//oMaterial = ajustarMaterial(oMaterial);
	detener();
	
	if (oPlayer)
	{		
		if(oMaterial){
			goCMaterial = oMaterial;
			currentMaterial=oMaterial;
		}else{
			if(currentMaterial){
				oMaterial=currentMaterial;
				goCMaterial = oMaterial;
				currentMaterial=null;
			}
		}
		goCMaterial["id_encodeo"]=parseInt(goCMaterial["id_encodeo"]);
		// mostramos el encodeo activado que corresponde
		//alert ("goC_id_encodeo" + goCMaterial["id_encodeo"]);
		//alert ("goC_encodeos_streaming" + goCMaterial["encodeos_streaming"]);
		//alert ("goC_encodeos_download" + goCMaterial["encodeos_download"]);
		
		actualizarBotonesEncodeo ( goCMaterial["id_encodeo"], goCMaterial["encodeos_streaming"], goCMaterial["encodeos_download"] );
		
		var sUrlLic = "";
		// Hacemos el predelivery sincronico 
		
		//OJO: Obtiene nuevamente el xml del playlist con el campo comprado
		oMaterialTmp = obtenerMaterialDwl(oMaterial["id_contenido"],350,1);
		oMaterial["comprado"]=oMaterialTmp["comprado"];
		
		if(FWK.debug) {
			alert ("oMaterial comprado:"+oMaterial["comprado"]+
						 "oMaterial consumido:"+oMaterial["consumido"]+
						 "goCMaterial comprado:"+goCMaterial["comprado"]+
						 "goCMaterial consumido:"+goCMaterial["consumido"]);
		}
		//Sin Login para 350 Streaming
		/*
		if (getStatusUsuario() == "logueado"){																	//rceles/edy
		*/
			if (oMaterial["comprado"] == "S")
			{
				//if (oMaterial["consumido"] == "N") //&& !gaLicenciasSesion[oMaterial["id_material"]])
				//{
					sUrlLic = "?id_material="+oMaterial["id_material"]+"&id_contenido="+oMaterial["id_contenido"]+"&id_encodeo="+oMaterial["id_encodeo"];
					// En esta sesion, no le tengo que generar mas la licencia
					gaLicenciasSesion[oMaterial["id_material"]] = true;
					if(FWK.debug)
						alert ("Entro con Preview en 0 -> " + sUrlLic);
				//}		
				if(FWK.debug)
					alert ("Entre con preview en cero y no hice nada");
			}
			else
			{
				sUrlLic = "?id_material="+oMaterial["id_material"]+"&preview=1"+"&id_contenido="+oMaterial["id_contenido"]+"&id_encodeo="+oMaterial["id_encodeo"];
				if(FWK.debug)
					alert ("Entro con Preview en 1 -> " + sUrlLic);
			}
		/*
		}else{ 																							//rceles/edy
			mostrarLogin();
			return;			
		} 																							//rceles/edy
		*/

		if (sUrlLic != "")
		{
			window.setTimeout(function () {cargarLicenciado(sUrlLic)},400);
		}
		else
		{
		
			if (!giVideosRestantes && giIdMaterialAnterior != goCMaterial["id_material"])
			{
				giIdMaterialAnterior = goCMaterial["id_material"];
				goPublicidad = obtenerPublicidad();

				if(player_debug) alert("cargarMaterialPlayer :: obtuve en goPublicidad ["+goPublicidad+"]" );
				if(goPublicidad)
				{
					sPublicidad = goPublicidad["publicidad"];
					gbReproduciendoPublicidad = true;
				}
				else	sPublicidad = "";
			}
			else
			{
				if(giIdMaterialAnterior != oMaterial["id_material"])
				{  
					giVideosRestantes--;
					giIdMaterialAnterior = oMaterial["id_material"];
				}
			}
		
			gbPredeliveryFinalizado = true;
			
			if (gbReproduciendoPublicidad)
			{
				if (goPublicidad["asociado"])
				{	
					try
					{			
						obtenerReferenciaPlayer("publicidad_src").src = "/scripts/app/framework.php?APP="+APP_llamador+"&API=publicidad&servicio=publicidad_banner&what=bannerid:"+goPublicidad["asociado"];							
						accionBanner("start");							
					}
					catch(e){}	
				}
			}				

			// Ponemos los datos en el player
			// GOOSE le agregue el microtime para que
			// diferencia una llamada de la otra... 
			// teoricamente esto arreglaria el tema del
			// cambio de idioma ???
			var dNow=new Date();
			setUrl(oPlayer,"/scripts/app/framework.php?APP="+APP_llamador+"&API=cargador&trackeable="+oMaterial["trackeable"]+"&id_contenido="+oMaterial["id_contenido"]+"&spot="+sPublicidad+"&id_encodeo="+oMaterial["id_encodeo"]+"&time="+dNow.getTime());

			try
			{
				onMaterialCargado(oMaterial["id_material"]);
			}
			catch (e)
			{
				//
			}
		}

		try
		{
			onBuffering(true);
		}
		catch (e)
		{
			//
		}				

		return 1;
	}
	else
		return 0;
	
}
/*
** accionPlayer
** Indica una accion sobre un boton del player
** Recibe:
**					objeto		object		Objeto que origin? el evento
** Devuelve:
**					Nada
*/
function accionPlayer(objeto)
{
if(!goCMaterial&&!currentMaterial){
	window.status="Aguarde un instante o seleccione nuevamente el material";
	return;
}
if(player_debug) alert("accionPlayer :: entrada");
	var imagen;
	if (gaPlayerButtons[objeto.id])
	{
		gaPlayerButtons[objeto.id] = false;
		switch(objeto.id)
		{
			case "boton_downloaddirecto":							// Goose!
				boton_downloaddirecto(objeto);
				break;

			case "boton_play":
				// Llama a la funcionalidad play
				imagen = document.getElementById("imagen_play");
				if(imagen)
				{
					imagen.src = gsImagenes + "player_btn_play.gif";
				}				
				break;				
			case "boton_pause":
				// Llama a la funcionalidad pause
				if(estaStopeado()){
						cargarMaterialPlayer(goCMaterial);
				}else{
					var oPlayer = obtenerReferenciaPlayer("player");
					oPlayer.controls.play();				
					imagen = document.getElementById("imagen_play");
					if (imagen)
					{
						imagen.src = gsImagenes + "player_btn_pause.gif";
					}				
				}
				break;				
			case "boton_rewind":
				// Rewind
				if(estaReproduciendoOPausado()){
					var oPlayer = obtenerReferenciaPlayer("player");
					oPlayer.controls.play();				
					imagen = document.getElementById("imagen_rewind");
					if (imagen)
					{
						imagen.src = gsImagenes + "player_btn_left.gif";
					}				
				}
				break;				
			case "boton_fforward":
				// Fast forward
				if(estaReproduciendoOPausado()){
					var oPlayer = obtenerReferenciaPlayer("player");
					oPlayer.controls.play();
					imagen = document.getElementById("imagen_fforward");
					if (imagen)
					{
						imagen.src = gsImagenes + "player_btn_right.gif";
					}				
				}
				break;				
			case "boton_fullscreen":
				// Llama a la funcionalidad eliminar
				imagen = document.getElementById("imagen_fullscreen");
				if (imagen)
				{
					imagen.src = gsImagenes + "player_bot_full.gif";
				}				
				break;
			case "boton_silenciar":
				// Llama a la funcionalidad silencia
				try
				{
					obtenerReferenciaPlayer("player").settings.mute = false;
				}
				catch(e){}					
				imagen = document.getElementById("imagen_silenciar");
				if (imagen)
				{
					imagen.src = gsImagenes + "player_btn_vol_on.gif";
				}				
				break;	
			case "boton_siguiente_material":
				if (!gbReproduciendoPublicidad)
				{
					try
					{
						//PL_cargarSiguiente();
						PL_cargarSiguiente();
					}
					catch(e)
					{
						window.status = "Error calling PL_cargarSiguiente() in 'boton_siguiente_material'";
					}
				}
				break;
			case "boton_material_anterior":
				if (!gbReproduciendoPublicidad)
				{
					try
					{
						PL_cargarAnterior();
					}
					catch(e)
					{
						window.status = "Error calling PL_cargarAnterior() in 'boton_material_anterior'";
					}
				}
				break;
		}		
	}
	else
	{
		gaPlayerButtons[objeto.id] = true;
			
		switch(objeto.id)
		{
			case "boton_downloaddirecto":							// Goose!
				//boton_downloaddirecto(objeto);
				break;

			case "boton_stop":												// Goose!
				// Llama a la funcionalidad stop				
				try																			//esto lo agregue yo, no se si anda.
				{																				//no existia el case.
					detener();                             
				}
				catch(e){}
				break;
			case "boton_play":
				// Llama a la funcionalidad play
				if(estaStopeado()){
					cargarMaterialPlayer(goCMaterial);
				}else{
					try
					{
						play();
					}
					catch(e){}
				}
				break;
			case "boton_pause":
				// Llama a la funcionalidad pause
				if (!gbReproduciendoPublicidad)
				{				
					try
					{
						pausar();
					}
					catch(e){}				
				}
				break;												
			case "boton_rewind":
				if(estaReproduciendoOPausado()){
					// Rewind
					if (goCMaterial["fastReverse"] && !gbReproduciendoPublicidad)
					{				
						obtenerReferenciaPlayer("player").controls.fastReverse();
						imagen = document.getElementById("imagen_rewind");
						if (imagen)
						{
							imagen.src = gsImagenes + "player_btn_left_over.gif";
						}
					}
				}
				break;				
			case "boton_fforward":
				if(estaReproduciendoOPausado()){
					// Fast Forward
					if (goCMaterial["fastForward"] && !gbReproduciendoPublicidad)
					{
						obtenerReferenciaPlayer("player").controls.fastForward();
						imagen = document.getElementById("imagen_fforward");
						if (imagen)
						{
							imagen.src = gsImagenes + "player_btn_right_over.gif";
						}
					}
				}
				break;				
			case "boton_fullscreen":
				// Llama a la funcionalidad fullscreen
				if (!gbReproduciendoPublicidad)
				{
					imagen = document.getElementById("imagen_fullscreen");
					if (imagen)
					{
						imagen.src = gsImagenes + "player_bot_full.gif";
					}				
					window.setTimeout((function(){accionPlayer(objeto);}), 400);		
					var oPlayer = obtenerReferenciaPlayer("player");
					if (oPlayer.playState == 3)
						oPlayer.fullscreen = true;				
				}
				break;
			case "boton_encodeo_bajo":
  			gaPlayerButtons[objeto.id] = false; //No hago nunca esta logica de prender apagar
				// Llama a la funcionalidad eliminar
				if (!gbReproduciendoPublicidad && goCMaterial["id_encodeo"] != 128)
				{
					if (goCMaterial)
					{						
						goCMaterial["id_encodeo"] = 128;	
						cargarMaterialPlayer(goCMaterial);
					}					
				}		
				break;
			case "boton_encodeo_alto":
				gaPlayerButtons[objeto.id] = false; //No hago nunca esta logica de prender apagar
				// Llama a la funcionalidad eliminar
				if (!gbReproduciendoPublicidad && goCMaterial["id_encodeo"] != 350)
				{
					if (goCMaterial)
					{
						goCMaterial["id_encodeo"] = 350;
						cargarMaterialPlayer(goCMaterial);
					}
				}					
				break;
			/*
			case "boton_download_1mb":
				// Llama a la funcionalidad eliminar
				if (!gbReproduciendoPublicidad && goCMaterial["id_encodeo"] != 1024)
				{
					if (goCMaterial)
					{
						var oMaterialTmp;
						goCMaterial["id_encodeo"] = 1024;
						//cargarMaterialPlayer(goCMaterial);
						boton_downloaddirecto();
						
					}
				}					
				break;
			case "boton_download_3mb":
				// Llama a la funcionalidad eliminar
				if (!gbReproduciendoPublicidad && goCMaterial["id_encodeo"] != 3072)
				{
					if (goCMaterial)
					{
						goCMaterial["id_encodeo"] = 3072;
						//cargarMaterialPlayer(goCMaterial);
						boton_downloaddirecto();						
					}
				}					
				break;
			*/
			case "boton_silenciar":
				// Llama a la funcionalidad silencia
				if (!gbReproduciendoPublicidad)
				{
					try
					{
						obtenerReferenciaPlayer("player").settings.mute = true;
					}
					catch(e){}					
					imagen = document.getElementById("imagen_silenciar");
					if (imagen)
					{
						imagen.src = gsImagenes + "player_btn_vol_on_over.gif";
					}		
				}		
				break;	
			case "boton_siguiente_material":
				if (!gbReproduciendoPublicidad)
				{
					try
					{
						//PL_cargarSiguiente();
						PL_cargarSiguiente();
					}
					catch(e)
					{
						window.status = "Error calling PL_cargarSiguiente() in 'boton_siguiente_material'";
					}
				}
				break;
			case "boton_material_anterior":
				if (!gbReproduciendoPublicidad)
				{
					try
					{
						PL_cargarAnterior();
					}
					catch(e)
					{
						window.status = "Error calling PL_cargarAnterior() in 'boton_material_anterior'";
					}
				}
				break;
		}
		
	}
	player_debug=false;

}
/*
** FUNCIONES DE EVENTOS
** ---------------------
*/

/*
** onPlay
** Este evento se dispara cuando empieza a reproducirse un material
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onPlay()
{
if(player_debug) alert("onPlay :: entrada");

	// Aca se activa el thread que mantiene la posicion del material
	gbComenzarReproduccion = true;
		
	activarProgreso();

	try
	{	
		var iValor = Math.floor(obtenerReferenciaPlayer("player").currentMedia.duration);	
		slider_setMaxValue(obtenerReferenciaPlayer("progreso"),iValor);
	}
	catch(e){}	
	
	try
	{
		onBuffering(false);
	}
	catch (e)
	{
		//
	}			
	
	if (gbReproduciendoPublicidad)
	{
		datosMaterial("cargando",gsPublicidad);
	}
	else
	{
		var oMaterial = ajustarMaterial(goCMaterial,30);
		//var oMaterialSolapa = ajustarMaterial(goCMaterial,55);
		datosMaterial("cargando",oMaterial["titulo"]);
		//datosMaterial("solapa",oMaterialSolapa["titulo"]);
	}
		
	datosMaterial("duracion_total",obtenerReferenciaPlayer("player").currentMedia.durationString);
	
	// convertimos el boton de play en pause
	imagen = document.getElementById("imagen_play");
	try{
		document.getElementById("boton_play").id = "boton_pause";
		document.getElementById("boton_pause").title = gsTooltipPause;
	}catch(e){}
	if (imagen)
	{
		imagen.src = gsImagenes + "player_btn_pause.gif";				
		imagen.onmouseout = function () {if (this.src.indexOf('pause_over') != -1) this.src=gsImagenes+'/player_btn_pause.gif'};
		imagen.onmouseover = function () {if (this.src.indexOf('pause_over') == -1) this.src=gsImagenes+'/player_btn_pause_over.gif'};
	}
	gaPlayerButtons["boton_pause"] = false;
	
	// chequeamos si soporta las funcionalidades de rewind y fast forward
	var oPlayer = obtenerReferenciaPlayer("player");
	if (oPlayer.controls.isAvailable("fastForward"))
	{
		goCMaterial["fastForward"] = true;
		imagen = document.getElementById("imagen_left");	
		if (imagen)
		{
			imagen.src = gsImagenes + "player_btn_left.gif";
		}		
	}
	else
	{
		goCMaterial["fastForward"] = false;
		imagen = document.getElementById("imagen_left");	
		if (imagen)
		{
			imagen.src = gsImagenes + "player_btn_left_off.gif";
		}				
	}
	if (oPlayer.controls.isAvailable("fastReverse"))
	{
		goCMaterial["fastReverse"] = true;
		imagen = document.getElementById("imagen_right");	
		if (imagen)
		{
			imagen.src = gsImagenes + "player_btn_right.gif";
		}				
	}
	else
	{
		goCMaterial["fastReverse"] = false;
		imagen = document.getElementById("imagen_right");	
		if (imagen)
		{
			imagen.src = gsImagenes + "player_btn_right_off.gif";
		}				
	}
	
}
/*
** onStop
** Este evento se dispara cuando se detiene una reproduccion
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onStop()
{
if(player_debug) alert("onStop :: entrada");

	// Aca se desactiva el thread que mantiene la posicion del material
	datosMaterial("duracion_total","00:00");
	datosMaterial("duracion_actual","00:00");
	datosMaterial("cargando","");

	try
	{					
		slider_setCurrentValue(obtenerReferenciaPlayer("progreso"),0);
	}
	catch(e){}	

	obtenerReferenciaPlayer("player").close();
	
	gbCargando = false;
	
	imagen = document.getElementById("imagen_play");
  try{ 
		document.getElementById("boton_pause").id = "boton_play"
		document.getElementById("boton_play").title = gsTooltipPlay;
	} catch(e) {}
	if (imagen)
	{
		imagen.src = gsImagenes + "player_btn_play.gif";
		imagen.onmouseout = function () {if (this.src.indexOf('play_over') != -1) this.src=gsImagenes+'/player_btn_play.gif'};
		imagen.onmouseover = function () {if (this.src.indexOf('play_over') == -1) this.src=gsImagenes+'/player_btn_play_over.gif'};		
	}
	gaPlayerButtons["boton_play"] = false;	
			
}
/*
** onPlayEnd
** Este evento se dispara cuando termina la reproduccion de un material
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onPlayEnd()
{
if(player_debug) alert("onPlayEnd :: entrada");
	// Aca se desactiva el thread que mantiene la posicion del material
	// Nota: Ver si se puede llamar a onStop() (que no haya acoplamiento)

	var oPlayer = obtenerReferenciaPlayer("player");
	
	// No podemos pasar al proximo hasta que el player no este detenido
	var iIntentos = arguments[0]?arguments[0]:0;
	if ((oPlayer.playState > 1 && oPlayer.playState != 10) && iIntentos < 10)
	{
		window.setTimeout((function(){onPlayEnd(iIntentos+1);}),2000);
		return;
	}
	
	// pedimos el proximo al playlist

	try
	{		
		valor=obtenerReferenciaPlayer("playlist").PL_cargarSiguiente(gbShuffle);
		if (valor == -1 && gbRepetir ==true){
			obtenerReferenciaPlayer("playlist").setCurrent(obtenerReferenciaPlayer("playlist").primerMaterial(),true);
		}
	}
	catch(e)
	{
		//
	}

}
/*
** onPause
** Este evento se dispara cuando se pausa la reproduccion
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onPause()
{
if(player_debug) alert("onPause :: entrada");
	// Aca desactivamos el thread que mantiene la posicion del material
	// Mismo comentario que con onPlayEnd para ver si se puede llamar a onStop (y que no se acople)
	imagen = document.getElementById("imagen_play");
	document.getElementById("boton_pause").id = "boton_play";
	document.getElementById("boton_play").title = gsTooltipPlay;	
	if (imagen)
	{
		imagen.src = gsImagenes + "player_btn_play.gif";
		imagen.onmouseout = function () {if (this.src.indexOf('play_over') != -1) this.src=gsImagenes+'/player_btn_play.gif'};
		imagen.onmouseover = function () {if (this.src.indexOf('play_over') == -1) this.src=gsImagenes+'/player_btn_play_over.gif'};		
	}
	gaPlayerButtons["boton_play"] = false;	
	
}
/*
** onVolumeChange
** Este evento se dispara cuando el usuario cambia el volumen
** Recibe:
**					Nada
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onVolumeChange()
{
if(player_debug) alert("onVolumeChange :: entrada");
	// Hay que chequear el volumen.
	//	Si es 0 hay que asegurarse que el bot?n de silenciar sonido est? activado
	//	Si no es 0, hay que asegurarse que no est? silenciado
}
/*
** onMaterialCargado
** Este evento se dispara cuando se carga un material
** Recibe:
**					iIdMaterial		integer		identificador del material
** Devuelve:
**					1 si pudo hacer todo bien, 0 otherwise
*/
function onMaterialCargado(iIdMaterial)
{
if(player_debug) alert("onMaterialCargado :: entrada");
	// Tracking
	
}

/*
** FUNCIONES DE APOYO
** ------------------
*/

/*
** obtenerReferenciaPlayer
** Esta funcion encapsula como obtener referencias a los distintos objetos del player
** Recibe:
**					sTipoObjeto string					Tipo de objeto al cual se quiere obtener una referencia
** Devuelve:
**					Referencia del objeto solicitada, o null si no se pudo obtener
*/
function obtenerReferenciaPlayer(sTipoObjeto)
{
if(player_debug) alert("obtenerReferenciaPlayer :: entrada");
	switch (sTipoObjeto.toUpperCase())
	{
		case "REGION_PLAYER":		
			try
			{		
				return document.getElementById("region_player");
			}
			catch (e)
			{
				return null;
			}
			break;		
		case "PLAYER":
		
			try
			{						
				if(document.getElementById("objeto_player")){
					return document.getElementById("objeto_player");
				}else{
					return playerAsyncCreate("objeto_player");
				}
				//return document.getElementById("objeto_player");
				
			}
			catch (e)
			{
				return null;
			}
			break;
		case "CARGANDO":
		
			try
			{		
				return document.getElementById("cargando");
			}
			catch (e)
			{
				return null;
			}
			break;															
		case "SOLAPA":
		
			try
			{		
				return document.getElementById("titulo_video_solapa");
			}
			catch (e)
			{
				return null;
			}
			break;
		case "BOTON_SOLAPA":
		
			try
			{		
				return document.getElementById("boton_accion_solapa");
			}
			catch (e)
			{
				return null;
			}
			break;						
		case "DURACION_ACTUAL":
		
			try
			{		
				return document.getElementById("duracion_actual");
			}
			catch (e)
			{
				return null;
			}
			break;									
		case "DURACION_TOTAL":
		
			try
			{		
				return document.getElementById("duracion_total");
			}
			catch (e)
			{
				return null;
			}
			break;									
		case "VOLUMEN":
		
			try
			{		
				return "carpe_slider_vol";
			}
			catch (e)
			{
				return null;
			}
			break;												
		case "PROGRESO":
		
			try
			{		
				return "carpe_slider_pos";
			}
			catch (e)
			{
				return null;
			}
			break;															
		case "PUBLICIDAD":
		
			try
			{		
				return goPublicidades.frames["portabanner"];
			}
			catch (e)
			{
				return null;
			}
			break;			
		case "PUBLICIDAD_SRC":
		
			try
			{		
				return goPublicidades.document.getElementById("portabanner");
			}
			catch (e)
			{
				return null;
			}
			break;			
		case "PLAYLIST":
		
			try
			{		
				return window;
			}
			catch (e)
			{
				return null;
			}
			break;			
		case "RMGETLICENSE":
		
			try
			{		
				if(document.getElementById("RMGetLicense")){
					return document.getElementById("RMGetLicense");
				}else{
					return playerAsyncCreate("RMGetLicense");
				}						
				//return document.getElementById("RMGetLicense");
			}
			catch (e)
			{
				return null;
			}
			break;																																				
		case "CONTADOR_PUBLICIDAD":
		
			try
			{		
				return document.getElementById("region_contador");
			}
			catch (e)
			{
				return null;
			}
			break;			
	}
}
/*
** cargando
** Esta funcion activa y desactiva el mensaje de cargando
** Recibe:
**					bCargando		boolean		Indica si se debe mostrar o dejar de mostrar el mensaje
** Devuelve:
**					Nada
*/
function cargando(bCargando)
{
if(player_debug) alert("cargando :: entrada");
	if (bCargando && !gbCargando)
	{
		gbCargando = true;
		//Muestro el Now Playing
		document.getElementById("iframePlayerNowPlaying").style.display = "";
		//Muestro el mensaje de cargando		
		activarMensajeCargando();
	}
	else
	{
		//Oculto el Now Playing
		gbCargando = false;
		document.getElementById("iframePlayerNowPlaying").style.display = "none";
	}
}
/*
** activarMensajeCargando
** Esta funcion muestra intermitentemente el mensaje de cargando
** Recibe:
**					Nada
** Devuelve:
**					Nada
*/
function activarMensajeCargando()
{
if(player_debug) alert("activarMensajeCargando :: entrada");
	var oCargando = obtenerReferenciaPlayer("cargando");

	if (gbCargando)
	{	
		if (oCargando.innerHTML == "")
		{
			oCargando.innerHTML = gsCargando;
		}
		else
		{
			oCargando.innerHTML = "";
		}
		
		window.setTimeout(activarMensajeCargando,700);
	}
}
/*
** estaReproduciendo
** Esta funcion indica si el player esta reproduciendo
** Recibe:
**					Nada
** Devuelve:
**					true si esta reproduciendo, false otherwise
*/
function estaReproduciendo()
{
if(player_debug) alert("estaReproduciendo :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	
	return oPlayer.playState >= 3 && oPlayer.playState <= 5 ;
}

function estaReproduciendoOPausado(){
	if(player_debug) alert("estaReproduciendoOPausado :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	return oPlayer.playState >= 2 && oPlayer.playState <= 5 ;
}

function estaStopeado(){
	if(player_debug) alert("estaStopeado :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	return oPlayer.playState == 1 || oPlayer.playState == 10;
}

/*
** activarProgreso
** Esta funcion activa el progreso del material hasta que termina la reproduccion
** Recibe:
**					Nada
** Devuelve:
**					Nada
*/
function activarProgreso()
{
if(player_debug) alert("activarProgreso :: entrada");
	if (gbComenzarReproduccion)
	{
		if (estaReproduciendo())
		{
			gbComenzarReproduccion = false;		
		}
		window.setTimeout(activarProgreso,200);
	}
	else
	{
		if (estaReproduciendo())
		{
			var sDuracion = obtenerReferenciaPlayer("player").controls.currentPositionString;
			
			if (sDuracion == "")
				sDuracion = "00:00";
			
			datosMaterial("duracion_actual",sDuracion);
			
			var iPosicion = Math.floor(obtenerReferenciaPlayer("player").controls.currentPosition);
			var bActualizar;
			
			if (giIntencion && giUbicacionCambio)
			{
				if (giIntencion >= giUbicacionCambio)
				{
					if (iPosicion >= giIntencion)
					{
						bActualizar = true;
						giIntencion = null;
						giUbicacionCambio = null;
					}
					else
					{
						bActualizar = false;
					}
				}
				else
				{
					if (iPosicion < giUbicacionCambio)
					{
						bActualizar = true;
						giIntencion = null;
						giUbicacionCambio = null;						
					}
					else
					{
						bActualizar = false;
					}
				}
			}
			else
				bActualizar = true;
			
			if (bActualizar)
			{
				try
				{						
					slider_setCurrentValue(obtenerReferenciaPlayer("progreso"),iPosicion);
				}
				catch(e){}
			}

			window.setTimeout(activarProgreso,500);
		}
	}
}
/*
** onBuffering
** Evento de inicio o terminacion del buffering
** Recibe:
**					bStart		boolean		Indica si comenzo o termino el buffering
** Devuelve:
**					Nada
*/
function onBuffering(bStart)
{
if(player_debug) alert("onBuffering :: entrada");
	cargando(bStart);
}
/*
** onCambioEstado
** Evento de cambio de estado del player
** Recibe:
**					iEstado		integer		Estado actual
** Devuelve:
**					Nada
*/
function onCambioEstado(iEstado)
{
if(player_debug) alert("onCambioEstado :: entrada");

	switch(iEstado)
	{
		case 0:	//undefined
			break;
		case 1: //stopped
			onStop();					
			break;
		case 2: //paused
			break;
		case 3: //playing
			onPlay();
			break;
		case 4: //scanforward
			break;
		case 5: //scanreverse
			break;
		case 6: //buffering
			break;			
		case 7: //waiting
			break;
		case 8: //mediaended			
		
			if (gbReproduciendoPublicidad)
			{
				gbReproduciendoPublicidad = false;
				giVideosRestantes = giCantidadPrePublicidad-1;				
				var oMaterial = ajustarMaterial(goCMaterial,30);
				var oMaterialSolapa = ajustarMaterial(goCMaterial,55);
				datosMaterial("cargando",oMaterial["titulo"]);
				datosMaterial("solapa",oMaterialSolapa["titulo"]);
				accionBanner("stop");		
			}		
		
			var oPlayer = obtenerReferenciaPlayer("player");
			if (oPlayer.currentMedia.isIdentical(oPlayer.currentPlaylist.item(oPlayer.currentPlaylist.count-1)))
			{
				onStop();
				onPlayEnd();
			}
			break;
		case 9: //transitioning
			break;			
		case 10: //ready
			//Si termino el predelivery, puedo reproducir
			if (gbPredeliveryFinalizado) {
					try
					{					
						obtenerReferenciaPlayer("player").controls.play();
						gbPredeliveryFinalizado = false;
					}
					catch(e)
					{
						
					}				
			}
			break;
		case 11: //reconnecting
			break;

	}
}
/*
** onErrorReproduccion
** Evento que indica que hubo un error en la reproduccion
** Recibe:
**					sCodigo		string		Codigo de error
** Devuelve:
**					Nada
*/
function onErrorReproduccion(sCodigo)
{
if(player_debug) alert("onErrorReproduccion :: entrada");

	try
	{
		onBuffering(false);
	}
	catch(e)
	{
		//
	}		

	switch(sCodigo)
	{
		case "c00d1197":

			break;
	}
}
/*
** datosMaterial
** Esta funcion permite cambiar los datos que se visualizan cuando se reproduce un material
** Recibe:
**					sDato		string		Identificador del dato que se quiere cambiar
**					sValor	string		Valor del dato
** Devuelve:
**					Nada
*/
function datosMaterial(sDato,sValor)
{
if(player_debug) alert("datosMaterial :: entrada");
	try
	{
		var oDato = obtenerReferenciaPlayer(sDato);
	
		oDato.innerHTML = sValor;
	}
	catch(e)
	{
		//
	}
}
/*
** slide_cambiar_volumen
** Esta funcion es llamada desde el slide de volumen cuando el usuario cambia el volumen
** Recibe:
**					iVolumen	integer		Valor entre 0 y 10 indicando el nivel de volumen					
** Devuelve:
**					Nada
*/
function slide_cambiar_volumen(iVolumen)
{
if(player_debug) alert("slide_cambiar_volumen :: entrada");
	cambiarVolumen(iVolumen);
}
/*
** slide_cambiar_posicion
** Esta funcion es llamada desde el slide de posicion cuando el usuario lo cambia
** Recibe:
**					iSegundos	integer		Posicion en segundos deseada
** Devuelve:
**					Nada
*/
function slide_cambiar_posicion(iPosicion)
{	
if(player_debug) alert("slide_cambiar_posicion :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");
	
	if (gbReproduciendoPublicidad)
		return;
	
	giUbicacionCambio = oPlayer.controls.currentPosition;
	giIntencion = iPosicion;
	
	if (oPlayer.playState == 3)
	{		
		oPlayer.controls.currentPosition = iPosicion;
	}
}
/*
** cargarLicenciado
** Esta funcion es llamada desde la funcion que carga el material para hacer el predelivery asincronico y cargar
** el material
** Recibe:
**					sUrl	string para pedir la licencia
** Devuelve:
**					Nada
*/
function cargarLicenciado(sUrl)
{
PLAYER_NOAUTOPLAY_ONLICENSE=0;	//apenas tira por defalt va a reproducir salvo que se prenda un STOP
if(player_debug) alert("cargarLicenciado :: entrada");

	var sPublicidad = "";

	if (!giVideosRestantes && giIdMaterialAnterior != goCMaterial["id_material"])
	{
		giIdMaterialAnterior = goCMaterial["id_material"];
		goPublicidad = obtenerPublicidad();
		if(goPublicidad)
		{	
			sPublicidad = goPublicidad["publicidad"];
			gbReproduciendoPublicidad = true;
		}
		else	sPublicidad = "";
	}
	else
	{
		if (giIdMaterialAnterior != goCMaterial["id_material"])
		{  
			giVideosRestantes--;
			giIdMaterialAnterior = goCMaterial["id_material"];
		}
	}
	
	if (gbReproduciendoPublicidad)
	{
		//contabilizamos
		var oContabilizador = obtenerReferenciaPlayer("CONTADOR_PUBLICIDAD");
		oContabilizador.innerHTML = goPublicidad["contabilizador"];
		
		if (goPublicidad["asociado"])
		{	
			try
			{	
				obtenerReferenciaPlayer("publicidad_src").src = "/scripts/app/framework.php?APP="+APP_llamador+"&API=publicidad&servicio=publicidad_banner&what=bannerid:"+goPublicidad["asociado"];
				accionBanner("start");				
			}
			catch(e)
			{

			}	
		}
	}	

	var oPlayer = obtenerReferenciaPlayer("player");

	window.status = gaMensajeLicencia["pre_licencia"];
	try
	{
		getLicensePlayer(sUrl);
	}
	catch(e)
	{
		//
	}

	setUrl(oPlayer,"/scripts/app/framework.php?APP="+APP_llamador+"&API=cargador&trackeable="+goCMaterial["trackeable"]+"&id_contenido="+goCMaterial["id_contenido"]+"&spot="+sPublicidad+"&id_encodeo="+goCMaterial["id_encodeo"]);
						
	try
	{
		onMaterialCargado(goCMaterial["id_material"]);
	}
	catch (e)
	{
		//
	}
	
	cargarPostLicencia();

}
/*
** cargarPostLicencia
** Esta funcion se encarga de esperar que la licencia descargue asincronicamente y luego inicia la reproduccion
** Recibe:
**					Nada
** Devuelve:
**					Nada
*/
function cargarPostLicencia()
{
if(player_debug) alert("cargarPostLicencia :: entrada");
	var oPlayer = obtenerReferenciaPlayer("player");

	// Esto es impresionante!!!
	var pStatus = VB_StubGetAsyncCallStatus();

	if (pStatus == 2)
	{
		//Puedo reproducir si el player esta listo
		if (oPlayer.playState == 10) 
		{
			if(PLAYER_NOAUTOPLAY_ONLICENSE){
				window.status="player was stopped";
			}else{
				oPlayer.controls.play();
			}
			gbPredeliveryFinalizado = false;
		} 
		else 
		{
			gbPredeliveryFinalizado = true;
		}
		window.status = gaMensajeLicencia["post_licencia"];
	}
	else
	{
		window.setTimeout(function () {cargarPostLicencia();},1000);
	}
}
/*
** obtenerPublicidad
** Esta funcion se encarga de obtener un spot para visualizar. Si hay un html asociado, lo muestra
** Recibe:
**					Nada
** Devuelve:
**					1 si salio todo bien, 0 otherwise
*/
function obtenerPublicidad()
{
if(player_debug) alert("obtenerPublicidad :: entrada");

	var oXml = new ActiveXObject("Microsoft.XMLDOM");
	var sResponseText = "";
	
	var sRequest = "servicio=PUBLICIDAD_SPOT";

	sResponseText = unescapeText(FWK.loadApi(APP_llamador,"publicidad","&servicio=publicidad_spot"));
	if(player_debug) alert("obtenerPublicidad :: obtuve ["+sResponseText+"]");

	oXml.async = false;	
	oXml.loadXML(sResponseText);
	var oRespuesta = oXml.selectNodes("banner");
	
	if (oRespuesta.length > 0)
	{
		if(player_debug) alert("obtenerPublicidad :: hay "+oRespuesta.length+" banners");
		var oNodo;
		oRespuesta = oRespuesta.item(0);
		var oPublicidad = new Array();
		
		for (var i = 0; i < oRespuesta.childNodes.length; i++)
		{
			oNodo = oRespuesta.childNodes.item(i);
			oPublicidad[(oNodo.nodeName).toLowerCase()] = oNodo.nodeTypedValue;
		}
		if(player_debug) alert("obtenerPublicidad :: saliendo!");
		return oPublicidad;


	}
	else
		return 0;
}
/*
** accionBanner
** Esta funcion se encarga de realizar una accion sobre el banner
** Recibe:
**					sAccion		string		Codigo de la accion
** Devuelve:
**					1 si pudo, 0 otherwise
*/
function accionBanner(sAccion)
{
if(player_debug) alert("accionBanner :: entrada");
	var oFrame = obtenerReferenciaPlayer("publicidad");
	
	var oDocument = oFrame?oFrame.document:null;
	
	try
	{	
		if (oDocument)
		{		
			
			if (oDocument.readyState != "complete")
			{				
				window.setTimeout(function () {accionBanner(sAccion)},1500);
				return 0;
			}
			
			var aObjects = oDocument.getElementsByTagName("OBJECT");
			
			if (aObjects)
			{
				switch (sAccion)
				{
					case "start":						
						aObjects[0].GotoFrame(3);
						aObjects[0].play();
						break;
					case "stop":
						aObjects[0].GotoFrame(15);
						aObjects[0].play();
						break;
				}
			}
			return 1;
		}
		else
			return 0;
	}
	catch(e){return 0;}
}
function setUrl(oPlayer,url)
{
if(player_debug) alert("setUrl :: entrada");
	if (oPlayer.playState > 1 && oPlayer.playState != 10)
	{
		window.setTimeout((function(){setUrl(oPlayer,url);}),2000);
		return;
	}
	else
	{
		oPlayer.url = url;
	}
}
function ajustarMaterial(oMaterial,tamanio)
{
if(player_debug) alert("ajustarMaterial :: entrada");
	var oNewMaterial = shallowCopy(oMaterial);
	
	if (oNewMaterial["titulo"].length > tamanio)
	{
		oNewMaterial["titulo"] = oNewMaterial["titulo"].substring(0,tamanio)+"...";
	}
	
	return oNewMaterial;
}

// ??C?mo Javascript no va a tener un shallowCopy??, por favor!!
function shallowCopy(oArray)
{
if(player_debug) alert("shallowCopy :: entrada");
	var oNewObject = new Array();
	 
	for (var i in oArray)
	{
		oNewObject[i] = oArray[i];
	}
	
	return oNewObject
}

function getStatusUsuario()
{
	var iRnd=new Date().getTime();
	var sRet=unescapeText(FWK.loadApi("player_contenidos|principal|principal|principal","get_status_usuario","&rnd="+iRnd));
	if(FWK.debug){
			alert("El retorno del getStatusUsuario es:"+sRet);
	}
	return sRet;
}

//======================================================================
// PARCHE SECTION.
//======================================================================
var MOSTRARHTML_previo=1;
function mostrarMensajeDownload(oMaterial){
	var html_base="";
	var k,v;	
	if(document.getElementById("region_mensajedescarga_body")){	
		player_Stop();
		if(document.getElementById("region_mensajedescarga_body").innerHTML==""){
			document.getElementById("region_mensajedescarga_body").innerHTML=FWK.loadApp("html_estatico|principal|principal|principal","&principal[html]=mensaje_descarga.html");
		}
		html_base=document.getElementById("region_mensajedescarga_body").innerHTML;
		if(oMaterial){			
			for(var i in oMaterial){
					k=i;
					v=oMaterial[i];
					html_base=html_base.replace(new RegExp("\{\@"+k.toUpperCase()+"\}","g"),v);
					html_base=html_base.replace(new RegExp(escape("\{\@"+k.toUpperCase()+"\}"),"g"),v);
			}
			var estimado="";
			if(oMaterial["duracion"]){				
				estimado=calcularRemoteFileSize(oMaterial["duracion"],oMaterial["id_encodeo"],oMaterial["url_material_hostayvdwl"],oMaterial["url_material"]);
				html_base=html_base.replace(new RegExp("\{\@ESTIMADO\}","g"),estimado);
				html_base=html_base.replace(new RegExp(escape("\{\@ESTIMADO\}"),"g"),estimado);
			}			
		}
		
		document.getElementById("region_mensajedescarga").innerHTML=html_base;		
		document.getElementById("region_player").style.display="none";
		document.getElementById("region_mensajedescarga").style.display="block";		
	}
}
/**/
var modalidad_filesize="aproximado"; //exacto|aproximado
function calcularRemoteFileSize(duracion,calidad,dominio,url){
	switch(modalidad_filesize){
		case "exacto":
			OHTTP=getHttp();
			return getRemoteFileSize(dominio+url,OHTTP);
		break;
		case "aproximado":
		default:
			return aproxRemoteFileSize(duracion,calidad);
		break;				
	}
	return 0;
}
function aproxRemoteFileSize(duration,quality){
	var iRet=0;
	var aTmp;
	var iTmp;
	if(duration){
		aTmp=duration.split(/:/,3);
		/*
		iTmp=aTmp[0]*3600+aTmp[1]*60+aTmp[2];
		iTmp=iTmp*quality/1024;
		iTmp=iTmp/8;
		iTmp=iTmp*1.1;
		*/
		if(FWK.debug)
			alert("Duracion:"+aTmp[0]+"h"+aTmp[1]+"m"+aTmp[2]+"s quality:"+quality);		
		/*ESTA FORMULA YA CAMBIO :(
		iRet=((((aTmp[0]*3600+aTmp[1]*60+aTmp[2])*quality)/1024)/8)*1.1;
		iRet=iRet/1000;
		iRet=iRet.toFixed(1);	
		*/
		//bitrate de video (en MB) /8 * duración= MB y multiplicarlo por 1,1. El resultado final debería ser MB y no mbps.		
		iRet=(((parseInt(quality)/8)*(parseInt(aTmp[0])*3600+parseInt(aTmp[1])*60+parseInt(aTmp[2])))*1.1)/1024;
		iRet=iRet.toFixed(1);
	}
	return iRet;
}
function getRemoteFileSize(url,ohttp){
	ohttp.open("HEAD",url,false);
	ohttp.send(null);
	return ohttp.getResponseHeader("Content-Length");
}
function getHttp(){
	var oHTTP;
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		    OHTTP = new XMLHttpRequest();
		    OHTTP.overrideMimeType('text/xml');
		} else if (window.ActiveXObject) { // IE
		    try{
			OHTTP=new ActiveXObject("Msxml2.XMLHTTP");
		    }catch(e){
			try{
			    OHTTP= new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
			}
		    }
		}
		return OHTTP;
}
/**/

function ocultarMensajeDownload(){
	if(document.getElementById("region_mensajedescarga_body")){	
		if(document.getElementById("region_player").style.display!="block"){
			document.getElementById("region_mensajedescarga").style.display="none";
			document.getElementById("region_player").style.display="block";	
		}
	}
}
function boton_downloaddirecto_yamostremensaje(){
	boton_downloaddirecto("yamostremensaje");
}

function boton_downloaddirecto(info)
{
	mostrarPlayer();
	var oMaterial;
	var idContenido = goCMaterial["id_contenido"];
	var nIdEncodeo  = goCMaterial["id_encodeo"];
	oMaterial = obtenerMaterialDwl(idContenido,nIdEncodeo,2);
	//alert ("oMaterial_id_encodeo" + oMaterial["id_encodeo"]);
	//alert ("oMaterial_encodeos_streaming" + oMaterial["encodeos_streaming"]);
	//alert ("oMaterial_encodeos_download" + oMaterial["encodeos_download"]);
	/*Actualizar botones encodeos*/
	actualizarBotonesEncodeo ( oMaterial["id_encodeo"], oMaterial["encodeos_streaming"], oMaterial["encodeos_download"] );
	
	saveCookieMaterial(oMaterial["id_material"]);
	
	if(document.getElementById("region_playerlogin")){
		document.getElementById("region_playerlogin").style.display="none";
	}		
	if (getStatusUsuario() != "logueado"){	
			mostrarLogin(false,boton_downloaddirecto);
			return;
	}
	if(oMaterial){
			if(oMaterial["comprado"]!="S"){
					vtc_irComprarPlayer(vtc_packinfo(null,null,idContenido,oMaterial["precio"],oMaterial["moneda"],oMaterial["comprado"],oMaterial["adicionales"],nIdEncodeo,2,null,null),boton_downloaddirecto);
					return;
			}
	}	
	if(info){
		if(info=='yamostremensaje'){
			ocultarMensajeDownload();
		}else{
			mostrarMensajeDownload(oMaterial);			
			return;
		}
	}else{
			mostrarMensajeDownload(oMaterial);			
			return;	
	}
	if(!flujoDescargaActiveX(boton_downloaddirecto_yamostremensaje)){
		return;
	}	
	/*DESCARGA DE LICENCIA Y LLAMADA AL DOWNLOADER*/
	var sDatos=FWK.loadApi("player_contenidos|player|player|videos","get_datos_download","&id_material="+goCMaterial["id_material"]+"&id_contenido="+goCMaterial["id_contenido"]+"&id_encodeo="+nIdEncodeo);
	if (FWK.debug) 
		alert("sDatos->" + sDatos);
	var aDatos=sDatos.split("%|%");
	if (aDatos)
	{
		if (aDatos[1])
		{
			aDatos[1] = aDatos[1].replace (/[\| ]+/g,'_');
			aDatos[1] = aDatos[1].replace (/([0-9])\.([0-9])/g,"$1$2");
			//Se agregó el encodeo al nombre del file a bajar para que no se pisen el de 1MB y 3MB
			aDatos[1] = aDatos[1] + "_" + nIdEncodeo;
		}
	}
	// -------------------------------------------------------------------------
	// a lo mejor, descargo la licencia..... quien sabe? -----------------------
		sUrl="?id_material="+oMaterial["id_material"]+"&id_contenido="+oMaterial["id_contenido"]+"&id_encodeo="+nIdEncodeo;
		cargarLicenciado(sUrl);
	// -------------------------------------------------------------------------
		try
		{			
				if (versionActiveX) {	
						//if(MOSTRARHTML_previo){
						//	top.downloader.document.location.href = "/scripts/app/framework.php?FRAME=downloader";
						//	FWK.loadAppInto(DIVVTC,"html_estatico|principal|principal|principal","&principal[html]=downloader_prevdescargar.html","noocultarplayer");
						//	mostrarLogin(true);
						//	return;
						//}else{
						//	ocultarLogin(true);
							//var oDownloader = getDownloader("downloader");
							//if (oDownloader.object != null){
							if (top.downloader.oDownloader.object != null){
								//if (oDownloader.newDownload(goCMaterial["id_material"]) != null) {
								//if (top.downloader.oDownloader.newDownload(goCMaterial["id_material"]) != null) {
								//if (top.downloader.oDownloader.newDownload(oMaterial["id_material"]) != null) {
								//	browseDownloader("downloader");
								//}							
								top.downloader.oDownloader.newDownload(oMaterial["id_material"]);
								browseDownloader("downloader");
							}else{
								//top.downloader.document.location.href = "/scripts/app/framework.php?FRAME=downloader";
								//esperarCargaObjetoActiveX(goCMaterial["id_material"]);
								esperarCargaObjetoActiveX(oMaterial["id_material"]);
								return;
							}
						//}
				} else {
						//tempOrden="http://http.cuatrocabezastv.com//Downloader/scripts/Download.aspx?file=/multimediav81/"+aDatos[0]+"&titulo="+aDatos[1]+"&album="+aDatos[2]+"&posicion="+aDatos[3];
						tempOrden="http://esdc06//Downloader/scripts/Download.aspx?file=/"+aDatos[0]+"&titulo="+aDatos[1]+"&album="+aDatos[2]+"&posicion="+aDatos[3];
						if(FWK.debug){
							alert("Descargo:"+tempOrden);
						}
						document.location=tempOrden;				
				}			
		}			
		catch (e) { }
	// -------------------------------------------------------------------------
	
}
function esperarCargaObjetoActiveX(id_material,contador){
	//var oDownloader = getDownloader("downloader");
	if(!contador)
		contador=0;
	top.status="Esperando activeX ("+contador+") para ["+id_material+"]";
	//if (oDownloader.estaCargado()){
	if (top.downloader.oDownloader.estaCargado()){
		//if (oDownloader.newDownload(goCMaterial["id_material"]) != null) {
		if (top.downloader.oDownloader.newDownload(goCMaterial["id_material"]) != null) {
			browseDownloader("downloader");
		}							
	}else{
		if(contador<10)
			setTimeout("esperarCargaObjetoActiveX("+id_material+","+(contador+1)+")",1000);	
	}
}
/**
 * Activa o desactiva el shuffle del player
 * @param	bool	bValue	(Optional) Si viene seteado se fuerza ese estado, sino se hace el inverso al estado actual
 */
function setShuffle(bValue) {
	if (bValue != undefined && bValue != null)	{ //Vino seteado
		gbShuffle = bValue;
	} else {
		gbShuffle = !gbShuffle;
	}
	
}

/**
* Modificado por Marcelo Martinovic
*/
function repetir()
{
	if(gbRepetir == true){
		gbRepetir = false;
	} else {
		gbRepetir = true;
	}
	//alert("FN repetir:" + gbRepetir);
	
}


/**
 *
 */
function mostrarMensajeNoHabilitado(){
	//alert("NO ESTA HABILITADO");
	FWK.loadAppInto(DIVVTC,"html_estatico|principal|principal|principal","&principal[html]=mensaje_contenidonohabilitado.html","noocultarplayer");
	mostrarLogin(true,undefined,false);	
}
function ocultarMensajeNoHabilitado(){
	ocultarLogin();
}


//Habilita o deshabilita los botones de encodeo por cada contenido. Por ejemplo, si el contenido está disponible sólo para 128k, se deshabilitan los botones de 350k y 1MB
function actualizarBotonesEncodeo (iEncodeoActual, sEncodeosStreaming, sEncodeosDownload)
{
	var sOnOff;
	sEncodeos = sEncodeosStreaming + ',' + sEncodeosDownload;
	//128
	if (sEncodeos.match('128'))
	{
		sOnOff = 'off';
		if (iEncodeoActual == 128) sOnOff = 'on';
		cargarImagenEncodeo ("imagen_encodeo_bajo", "player_calidad128_" + sOnOff + ".gif");
		actualizarBotonEncodeo ("boton_encodeo_bajo", false);
	}
	else
	{
		cargarImagenEncodeo ("imagen_encodeo_bajo", "player_calidad128_disabled.gif");
		actualizarBotonEncodeo ("boton_encodeo_bajo", true);
	}
	//350
	if (sEncodeos.match('350'))
	{
		sOnOff = 'off';
		if (iEncodeoActual == 350) sOnOff = 'on';
		cargarImagenEncodeo ("imagen_encodeo_alto", "player_calidad350_" + sOnOff + ".gif");
		actualizarBotonEncodeo ("boton_encodeo_alto", false);
	}
	else
	{
		cargarImagenEncodeo ("imagen_encodeo_alto", "player_calidad350_disabled.gif");
		actualizarBotonEncodeo ("boton_encodeo_alto", true);
	}
	//1024
	if (sEncodeos.match('1024'))
	{
		sOnOff = 'off';
		if (iEncodeoActual == 1024) sOnOff = 'on';
		cargarImagenEncodeo ("imagen_download_1mb", "player_calidad1m_" + sOnOff + ".gif");
		actualizarBotonEncodeo ("boton_download_1mb", false);
	}
	else
	{
		cargarImagenEncodeo ("imagen_download_1mb", "player_calidad1m_disabled.gif");
		actualizarBotonEncodeo ("boton_download_1mb", true);
	}
	//3072
	if (sEncodeos.match('3072'))
	{
		sOnOff = 'off';
		if (iEncodeoActual == 3072) sOnOff = 'on';
		cargarImagenEncodeo ("imagen_download_3mb", "player_calidad3m_" + sOnOff + ".gif");
		actualizarBotonEncodeo ("boton_download_3mb", false);
	}
	else
	{
		cargarImagenEncodeo ("imagen_download_3mb", "player_calidad3m_disabled.gif");
		actualizarBotonEncodeo ("boton_download_3mb", true);
	}		
} //End Function actualizarBotonesEncodeo

function actualizarBotonEncodeo (sNombre, bDisabled)
{
	var oBoton;
	oBoton = document.getElementById(sNombre);
	if (oBoton)
		oBoton.disabled = bDisabled;
}

function cargarImagenEncodeo (sDivImagen, sArchivoImagen)
{
	var oImagen;
	oImagen = document.getElementById(sDivImagen);
	if (oImagen)
		oImagen.src = gsImagenes + sArchivoImagen;
}
/**
 *
 */
function playerAsyncCreate(cual){
	if(document.getElementById(cual)){
		return document.getElementById(cual);
	}else{
		document.getElementById("PLAYER_cargado").innerHTML=document.getElementById("PLAYER_nocargado").innerHTML.replace(/NOPARSE/g,"");
		if(document.getElementById(cual)){
			obtenerReferenciaPlayer("player").settings.volume=50;
			return document.getElementById(cual);
		}
	}	
}
