/* 
 * Contiene las funciones para los videoAd en los players de Brightcove
 */
/**
 * Funcion que se llama para parsear el XML del ad, para posteriormente tocarlo
 *  
 * @param sXML	La ruta donde se encuentra el XML, del cual se obtiene la info del ad
 */
function playQPAd(sXML) {
	//Leer XML de forma sincrona mediante AJAX
	var docAdXML = getXML(sXML);
	//Parsear XML y obtener ad, si ocurre un error, llamar la funcion endExternalAdd
	var obj = false;
	//Por si truena el parseo del XML cachamos la excepcion
	try {
		obj = getAdObject(docAdXML);
	} catch(e){
		obj=false;
	}
	if (obj) {
		callFlash("playAd",obj);
	} else {
		callFlash("endExternalAd");
	}
}
/**
 * Funcion que obtiene el XML de la ruta mencionada via XMLHttpRequest
 * @param sXMLURL	La URL al documento XML
 */
function getXML(sXMLURL) {
	try {
		var oRequest = getHttpRequest();
		oRequest.onreadystatechange = onAdResponse(oRequest) ;
		var sURL = "/getxml.php?xml_url=" + sXMLURL;
		oRequest.open("GET", sURL, false);
		oRequest.send(null);
		//FIREFOX BUG on sync request
		if (oRequest.onreadystatechange == null) {
			return onAdResponse(oRequest);
		}
	} catch (e) {
		return null;
	}
}
/**
 * Funcion que atiende la respuesta de una peticion AJAX.
 * Aqui es donde se obtiene el documento XML enviado por el server.
 * 
 * @param ajax	Un objeto XMLHttpRequest con la peticion.
 * @return	En caso de que el estado sea 4, devuelve el XML si la respuesta es 200
 *			null, en caso contrario.
 */
function onAdResponse(ajax) {
	var docXML = null;
	if (ajax.readyState==4) {
		if (ajax.status == 200) {
			return ajax.responseXML;
		} else {
			return null
		}
	}
}
/**
 * Funcion que obtiene el objeto Ad que se va a tocar
 * 
 * @param	adXML	EL documento XML de donde se obtendra la informacion
 *					para armar el objeto.
 *					
 * @return	El objeto JS con la informacion del Ad a tocar.
 * @throw	Exception	Si no existe XML, o si no cumple con el formato esperado.
 */
function getAdObject (adXML) {
	var ad = new Object();
	var nodeItems = adXML.firstChild.childNodes.length; //Numero de Items en el XML
	var currentNode = adXML.firstChild.firstChild; //El nodo inicial del XML
	//Obtenemos los atributos del nodo inicial
	if (adXML.firstChild.getAttribute("duration") !== "") { 
		ad.duration = adXML.firstChild.getAttribute("duration");
	}
	if (adXML.firstChild.getAttribute("trackStartURLs") !== "") {
		ad.trackStartURLs = adXML.firstChild.getAttribute("trackStartURLs").split(","); 
	}
	if (adXML.firstChild.getAttribute("trackMidURLs") !== "") {
		ad.trackMidURLs = adXML.firstChild.getAttribute("trackMidURLs").split(",");
	}
	if (adXML.firstChild.getAttribute("trackEndURLs") !== ""){
		ad.trackEndURLs = adXML.firstChild.getAttribute("trackEndURLs").split(",");
	}
	if (adXML.firstChild.getAttribute("trackPointURLs") !== "") {
		ad.trackPointURLs = adXML.firstChild.getAttribute("trackPointURLs").split(",");
	}
	if (adXML.firstChild.getAttribute("trackPointTime") !== "") {
		ad.trackPointTime = adXML.firstChild.getAttribute("trackPointTime");
	}
	//Obtenemos los hijos del nodo prinicpal
	for (var i = 0; i < nodeItems; i++)	{
		//checks to see if the current nodes are in our Rich Media Templates and assigns them if they exist
		if (currentNode.nodeName == "videoURL" && currentNode.firstChild) {
			ad.videoURL = currentNode.firstChild.nodeValue; 
		}
		if (currentNode.nodeName == "videoClickURL" && currentNode.firstChild) {
			ad.videoClickURL = currentNode.firstChild.nodeValue;
		}
		//movemos el apuntador al siguiente nodo.
		currentNode = currentNode.nextSibling; 
	}
	ad.type = "videoAd";
	return ad;
}
/**
 * Funcion que devuelve un objeto XMLHttpRequest
 */
function getHttpRequest() {
	var httpRequest = null;
	if (window.XMLHttpRequest) {
		httpRequest = new XMLHttpRequest();
	} else {	
		if (window.ActiveXObject) {
			var xmlVersions = new Array('MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP');
			for (var i=0; i<xmlVersions.length; i++) {
				var blnExit = false;
				try {
					httpRequest = new ActiveXObject(xmlVersions[i]);
					blnExit = true;
				} catch(e) {
					blnExit = false;
				}
				if (blnExit) {
					break;
				}
			}
		}
	}
	return httpRequest;
}