﻿// ************************************************************************************
//	RTE
// ************************************************************************************
function RTE(api)
{
	// ---------------------------------------------------------------------- properties
	this.API = api;
	this.frmLO = null;
	this.components = new Array();
	this.interval = null;
	
	// ---------------------------------------------------------------------- events
	this.onInitialize = function()
	{
	};
	this.onUIInitialize = function()
	{
	};
	
	// ---------------------------------------------------------------------- handlers
	this.hOnUIComponentLoad = function(id)
	{
		var i;
		var complete = true;
		for (i = 0; i < this.components.length; i ++)
		{
			if (this.components[i].id == id)
			{
				this.components[i].loaded = true;
				break;
			}
		}
		for (i = 0; i < this.components.length; i ++)
		{
			if (!this.components[i].loaded)
			{
				complete = false;
				break;
			}
		}
		if (complete)
		{
			for (i = 0; i < this.components.length; i ++)
			{
				this.components[i].obj.Play();
			}
		}
	};
	this.hOnUIComponentInitialize = function(id)
	{
		var i;
		var complete = true;
		for (i = 0; i < this.components.length; i ++)
		{
			if (this.components[i].id == id)
			{
				this.components[i].initialized = true;
				break;
			}
		}
		for (i = 0; i < this.components.length; i ++)
		{
			if (!this.components[i].initialized)
			{
				complete = false;
				break;
			}
		}
		if (complete)
		{
			for (i = 0; i < this.components.length; i ++)
			{
				this.components[i].obj.Refrescar();
			}
			this.onUIInitialize();
			this.hOnCurrentLOChange();
		}
	};
	this.hOnLOFinish = function()
	{
		for (var i = 0; i < this.components.length; i ++)
		{
			this.components[i].obj.hOnLOFinish();
		}
	};
	this.hOnCurrentLOChange = function()
	{
		if (this.API)
		{
			if (this.API.currentLO)
			{
				var url = this.API.currentLO.fullHref;
				if (this.API.accessManager != null)
				{
					this.HideAccessDeniedForm();
					if (this.API.accessManager.userAccessResult != "Ok")
					{
						var index = this.API.course.IndexOf(this.API.currentLO.identifier);
						if (index >= this.API.accessManager.previewInstances)
						{
							url = "about:blank";
							switch (this.API.accessManager.userAccessResult)
							{
								case "InvalidLicenseType":
									this.ShowAccessDeniedForm("InvalidUserType");
									break;
								default:
									this.ShowAccessDeniedForm(this.API.accessManager.userAccessResult);
									break;
							}
						}
					}
				}
				this.frmLO.src = url;
			}
		}
	};
	this.hOnFrmLOLoad = function()
	{
		for (var i = 0; i < this.components.length; i ++)
		{
			this.components[i].obj.hOnEntornoChange();
		}
		this.StartPlayingTracking();
	};
	
	// ---------------------------------------------------------------------- methods
	this.Initialize = function()
	{
		// api
		if (this.API)
		{
			this.API.onCurrentLOChange = CreateDelegate(this, this.hOnCurrentLOChange);
		}
		
		// content frame
		this.frmLO = document.getElementById("frm_lo");
		if (this.frmLO)
		{
			if (this.frmLO.attachEvent)
			{
				this.frmLO.attachEvent("onload", CreateDelegate(this, this.hOnFrmLOLoad));
			}
			else
			{
				this.frmLO.addEventListener("load", CreateDelegate(this, this.hOnFrmLOLoad), true);
			}
		}
		
		// event
		this.onInitialize();
	};
	
	// ---------------------------------------------------------------------- methods (navigation)
	this.Previous = function()
	{
		if (this.API)
		{
			var id = this.API.GetPreviousLOIdentifier();
			if (id != "")
			{
				this.API.SetCurrentLO(id);
			}
		}
	};
	this.Next = function()
	{
		if (this.API)
		{
			var id = this.API.GetNextLOIdentifier();
			if (id != "")
			{
				this.API.SetCurrentLO(id);
			}
		}
	};
	this.Play = function()
	{
		var rv = false;
		if (this.frmLO)
		{
			if (this.frmLO.contentWindow)
			{
				var swfLO;
				if (navigator.userAgent.indexOf("MSIE") != -1)
				{
					swfLO = this.frmLO.contentWindow.document.getElementById("lo");
				}
				else
				{
					var objs = this.frmLO.contentWindow.document.getElementsByName("lo");
					if (objs)
					{
						swfLO = objs[0];
					}
				}
				if (swfLO)
				{
					swfLO.Play();
					this.StartPlayingTracking();
					rv = true;
				}
			}
		}
		return rv;
	};
	this.Pause = function()
	{
		var rv = false;
		if (this.frmLO)
		{
			if (this.frmLO.contentWindow)
			{
				var swfLO;
				if (navigator.userAgent.indexOf("MSIE") != -1)
				{
					swfLO = this.frmLO.contentWindow.document.getElementById("lo");
				}
				else
				{
					var objs = this.frmLO.contentWindow.document.getElementsByName("lo");
					if (objs)
					{
						swfLO = objs[0];
					}
				}
				if (swfLO)
				{
					swfLO.StopPlay();
					this.StopPlayingTracking();
					rv = true;
				}
			}
		}
		return rv;
	};
	this.Repeat = function()
	{
		if (this.API)
		{
			if (this.API.currentLO)
			{
				this.LoadLO(this.API.currentLO.identifier);
			}
		}
	};
	this.LoadLO = function(identifier)
	{
		if (this.API)
		{
			this.API.SetCurrentLO(identifier);
		}
	};
	this.OpenMyNotes = function()
	{
		var url = "";
		if (this.GetCurrentLOIdentifier() != "null")
		{
			url += "RTE_Notes.aspx";
			url += "?Skin=" + Competir.Web.GetQueryStringVariable("Skin");
			url += "&CourseIdentifier=" + Competir.Web.GetQueryStringVariable("CourseIdentifier") + Competir.Web.GetQueryStringVariable("CourseID");
			url += "&Uri=" + Competir.Web.GetQueryStringVariable("Uri");
			url += "&LOIdentifier=" + this.GetCurrentLOIdentifier();
			url += "&FKInstanciaContexto=" + Competir.Web.GetQueryStringVariable("FKInstanciaContexto") + Competir.Web.GetQueryStringVariable("FKInstanciaSolucion") + Competir.Web.GetQueryStringVariable("SolutionID");
			url += "&FKInstanciaCurso=" + Competir.Web.GetQueryStringVariable("FKInstanciaCurso");
			url += "&FKInstanciaUsuario=" + Competir.Web.GetQueryStringVariable("FKInstanciaUsuario") + Competir.Web.GetQueryStringVariable("UserID");
		}
		if (url != "")
		{
			var ancho = screen.width * 50 / 100;
			var alto = screen.height * 50 / 100;
			openNamedPopup("notes", url, ancho, alto);
		}
	};
	this.OpenBrief = function()
	{
		var ancho = screen.width * 60 / 100;
		var alto = screen.height * 60 / 100;
		var printableVersionUri = this.API.course.printableVersionUri;
		if (printableVersionUri.toLowerCase().indexOf(".pdf") == -1)
		{
			var url = "RTE_Print.aspx";
			url += "?Skin=" + Competir.Web.GetQueryStringVariable("Skin");
			url += "&CourseIdentifier=" + Competir.Web.GetQueryStringVariable("CourseIdentifier") + Competir.Web.GetQueryStringVariable("CourseID");
			url += "&Uri=" + Competir.Web.GetQueryStringVariable("Uri");
			url += "&FKInstanciaContexto=" + Competir.Web.GetQueryStringVariable("FKInstanciaContexto") + Competir.Web.GetQueryStringVariable("FKInstanciaSolucion") + Competir.Web.GetQueryStringVariable("SolutionID");
			openNamedPopup("brief", url, ancho, alto);
		}
		else if (this.API)
		{
			if (this.API.course)
			{
				if (this.API.course.printableVersionUri)
				{
					var url = this.API.course.baseURI + printableVersionUri;
					openNamedPopup("brief", url, ancho, alto);
				}
			}
		}
	};
	this.OpenGuide = function()
	{
		if (this.API)
		{
			if (this.API.course)
			{
				if (this.API.course.guideUri)
				{
					var url = this.API.course.baseURI + this.API.course.guideUri;
					var ancho = screen.width * 60 / 100;
					var alto = screen.height * 60 / 100;
					openNamedPopup("guide", url, ancho, alto);
				}
			}
		}
	};
	
	// ---------------------------------------------------------------------- methods (access)
	this.ShowAccessDeniedForm = function(accessResult)
	{
		var objDiv = document.getElementById("accessForm");
		if (objDiv)
		{
			var objContainer = document.getElementById("tdContainer");
			if (objContainer)
			{
				for (var i = 0; i < objContainer.childNodes.length; i++)
				{
					objContainer.childNodes[i].style.display = "none";
				}
			}
			var objForm = document.getElementById("access" + accessResult);
			if (objForm)
			{
				objForm.style.display = "block";
				objDiv.style.display = "block";
			}
		}
	};
	this.HideAccessDeniedForm = function()
	{
		var objDiv = document.getElementById("accessForm");
		if (objDiv)
		{
			objDiv.style.display = "none";
		}
	};
	this.CancelAccessDeniedForm = function()
	{
		this.HideAccessDeniedForm();
		if (this.API)
		{
			if (this.API.previousLO)
			{
				this.LoadLO(this.API.previousLO.identifier);
			}
		}
	};
	this.Purchase = function()
	{
		if (this.API)
		{
			if (this.API.accessManager)
			{
				if (this.API.accessManager.Purchase() == "Ok")
				{
					this.Repeat();
				}
			}
		}
	};
	this.Register = function()
	{
		if (window.parentContext)
		{
			if (window.parentContext.registrationFunction)
			{
				var o = window.parentContext.registrationFunction();
			}
		}
	};
	
	// ---------------------------------------------------------------------- methods (UI)
	this.AddUIComponent = function(id)
	{
		var obj = document.getElementById(id);
		if (obj)
		{
			var c = new Object();
			c.obj = obj;
			c.id = id;
			c.width = obj.width;
			c.height = obj.height;
			c.loaded = false;
			c.initialized = false;
			this.components.push(c);
		}
	};
	this.StartPlayingTracking = function()
	{
		if (this.frmLO)
		{
			if (this.frmLO.contentWindow)
			{
				if (this.frmLO.contentWindow.document)
				{
					var swfLO;
					if (navigator.userAgent.indexOf("MSIE") != -1)
					{
						swfLO = this.frmLO.contentWindow.document.getElementById("lo");
					}
					else
					{
						var objs = this.frmLO.contentWindow.document.getElementsByName("lo");
						if (objs)
						{
							swfLO = objs[0];
						}
					}
					if (swfLO)
					{
						if (this.interval)
						{
							if (!swfLO.IsPlaying())
							{
								var frame = swfLO.CurrentFrame();
								if (frame > 1)
								{
									clearInterval(this.interval);
									this.interval = null;
									this.hOnLOFinish();
								}
							}
						}
						else
						{
							this.interval = window.setInterval(this.StartPlayingTracking, 500);
						}
					}
				}
			}
		}
	};
	this.StopPlayingTracking = function()
	{
		if (this.interval)
		{
			clearInterval(this.interval);
			this.interval = null;
		}
	};
	this.UIObjectExists = function(id)
	{
		var rv = false;
		if (document.getElementById(id))
		{
			rv = true;
		}
		return rv;
	};
	this.GetFlashObjectVariable = function(id, name)
	{
		var rv = null;
		var obj = document.getElementById(id);
		if (obj)
		{
			rv = obj.GetVariable(name);
		}
		return rv;
	};
	
	// ---------------------------------------------------------------------- methods (data)
	this.GetManifestXml = function()
	{
		var rv = null;
		if (this.API)
		{
			if (this.API.course)
			{
				rv = this.API.course.GetManifestXml();
			}
		}
		return rv;
	};
	this.GetCourseTitle = function()
	{
		var rv = document.title;
		if (this.API)
		{
			if (this.API.course)
			{
				if (this.API.course.title)
				{
					rv = this.API.course.title;
				}
			}
		}
		return rv;
	};
	this.GetProgressPercentage = function()
	{
		var rv = 0;
		if (this.API)
		{
			if (this.API.course)
			{
				rv = this.API.course.GetProgressPercentage();
			}
		}
		return rv;
	};
	this.GetPreviousLOIdentifier = function()
	{
		var rv = "null";
		if (this.API)
		{
			rv = this.API.GetPreviousLOIdentifier();
		}
		return rv;
	};
	this.GetCurrentLOIdentifier = function()
	{
		var rv = "null";
		if (this.API)
		{
			if (this.API.currentLO)
			{
				rv = this.API.currentLO.identifier;
			}
		}
		return rv;
	};
	this.GetNextLOIdentifier = function()
	{
		var rv = "null";
		if (this.API)
		{
			rv = this.API.GetNextLOIdentifier();
		}
		return rv;
	};
	this.HasPrintableVersion = function()
	{
		var rv = false;
		if (this.API)
		{
			if (this.API.course)
			{
				rv = this.API.course.hasPrintableVersion;
			}
		}
		return rv;
	};
	this.HasGuide = function()
	{
		var rv = false;
		if (this.API)
		{
			if (this.API.course)
			{
				rv = this.API.course.hasGuide;
			}
		}
		return rv;
	};
}