/*
This is to be included in any HTML file
It will create the objQueryStringParameters, which has as properties all of the querystring parameters
It will also create the include for event.jsp

~*~*~*~*~USAGE~*~*~*~*~
1. Include this file in the <HEAD>
2. call initializeEventObject() after the <BODY> tag
3.use the included functions to find the necessary info.

*/

//create Object for QueryString Parameters
var objQueryStringParameters = new Object();

if(location.search.length>1) {
	objQueryStringParameters.tmpPairs=location.search.substring(1).split("&");
	for (var i in objQueryStringParameters.tmpPairs) {
		var pairsplit=objQueryStringParameters.tmpPairs[i].split("=")
		if (pairsplit[0].length>0) objQueryStringParameters[pairsplit[0]]=unescape(pairsplit[1]);
	}
}

objQueryStringParameters.tmpPairs=null;
delete objQueryStringParameters.tmpPairs;

//obtain eventxxxx object from event.jsp
function getEventObject (objQueryStringParameters) {
	if (!objQueryStringParameters || !objQueryStringParameters.eventid) return null;
	var objEventObject = window["event"+objQueryStringParameters.eventid];
	//eval ("objEventObject = event"+objQueryStringParameters.eventid+";")
	return objEventObject;
}

//obtain session object based on session id
function getEventSessionObjectFromQueryString (objQueryStringParameters, objEventObject) {
	if (!objQueryStringParameters || !objQueryStringParameters.sessionid || !objEventObject) return null;
	return getEventSessionObjectById (objQueryStringParameters.sessionid, objEventObject);
}

//obtain session object based on session id
function getEventSessionObjectById (intSessionId, objEventObject) {
	if (!intSessionId || !objEventObject) return null;
	var sessionObj = null;
	for (var i in objEventObject.session) {
		if (objEventObject.session[i].id==intSessionId) {
			sessionObj=objEventObject.session[i];
		}
	}
	return sessionObj;
}

//create the URL for the event.jsp include
function getJspIncludeUrl(objQueryStringParameters) {
	if (!objQueryStringParameters || !objQueryStringParameters.eventid) return null;
	var now = new Date();
	var ms = now.getTime();
	var cacheinterval=(Math.round(ms/10000));//the url will be unique for 10 seconds
	var eventjsphostname=objQueryStringParameters.eventjsphostname?objQueryStringParameters.eventjsphostname:document.location.hostname
	var strEventURL=document.location.protocol+"//"+eventjsphostname+"/eventRegistration/includes/event.jsp?"
	+"eventid="+objQueryStringParameters.eventid
	+"&filter=eventsessionmediaplayerpresentationlogondemand"
	+"&cacheinterval="+cacheinterval;
	if (objQueryStringParameters.key) strEventURL+="&key="+objQueryStringParameters.key;
	//alert(strEventURL)
	return strEventURL;
}

//write the event.jsp include to the document
function writeJspInclude(objQueryStringParameters) {
	var strJspIncludeUrl=getJspIncludeUrl(objQueryStringParameters);
	if (strJspIncludeUrl)  {
		return '<script type="text/javascript" language=JavaScript src="'+strJspIncludeUrl+'"><\/script>'
	} else {
		return "";
	}
}

//to be called after the <BODY> element
function initializeEventObject() {
	objEventObject = getEventObject (objQueryStringParameters);
	objSessionObject = getEventSessionObjectFromQueryString (objQueryStringParameters, objEventObject);
}

var objEventObject = null;
var objSessionObject = null;
	
document.write(writeJspInclude(objQueryStringParameters));

//Function to find mediaurl object in mediaurl array
function findMediaURLobject(code,categorycode) {
	var mediaURLobject=null;
//	alert(objSessionObject.mediaurl);
	for (var i in objSessionObject.mediaurl) {
		if (objSessionObject.mediaurl[i].active && (code==false || objSessionObject.mediaurl[i].code==code) && (categorycode==false || objSessionObject.mediaurl[i].categorycode==categorycode)) {
			mediaURLobject=objSessionObject.mediaurl[i];
		}
	}
//	alert(mediaURLobject);
	return mediaURLobject;
}

//Function to find value in eventinfo array
function findEventInfo(typecode,category) {
	for (var i in objEventObject.eventinfo) {
		if ((typecode==false || objEventObject.eventinfo[i].typecode==typecode) && (category==false || objEventObject.eventinfo[i].category==category) && (typecode || category)) {
			return true;
		}
	}
	return false;
}

//Function to find value in eventinfo array
function getEventInfoObject(typecode,category) {
	for (var i in objEventObject.eventinfo) {
		if ((typecode==false || objEventObject.eventinfo[i].typecode==typecode) && (category==false || objEventObject.eventinfo[i].category==category) && (typecode || category)) {
			return objEventObject.eventinfo[i];
		}
	}
	return null;
}

//Function that combines findEventInfo() and findMediaURL()
function findActiveMediaURLobject(code,categorycode,defaultvalue) {
	if (!findEventInfo(code,categorycode)) return defaultvalue;
//	alert(findEventInfo(code,categorycode));
	var mediaURLobject=findMediaURLobject(code,categorycode);
//	alert(mediaURLobject);
	if (mediaURLobject) {
		return mediaURLobject;
	} else {
		return defaultvalue;
	}
}

//returns sub array of media url array that is restricted by code and category
function getMediaUrlSubArray(code,categorycode) {
	var arrSubArray = new Array();
	for (var i in objSessionObject.mediaurl) {
		var objMediaUrl = objSessionObject.mediaurl[i];
		if (objMediaUrl.active && (code==false || objMediaUrl.code==code) && (categorycode==false || objMediaUrl.categorycode==categorycode)) {
			if(objMediaUrl.active) arrSubArray[arrSubArray.length] = objMediaUrl;
		}
	}
	if (arrSubArray.lenght==0) return null;
	return arrSubArray;
}

//Function that combines findEventInfo() and findMediaURL()
function findActiveMediaURL(code,categorycode) {

	var mediaURLobject = findActiveMediaURLobject(code,categorycode,null);
	
	if (mediaURLobject && mediaURLobject.url) return mediaURLobject.url
	
	return null;
}

//Function that returns the status of the session of the session [live, pre-live, etc.]
function findSessionStatus() {
	if (!nowdate) return null;
	if (!objSessionObject) return null;
	if (!objSessionObject.archiveenddate || !objSessionObject.archivestartdate || !objSessionObject.enddate || !objSessionObject.startdate) return null;
	
	if (nowdate>objSessionObject.archiveenddate) {
		return "expired";
	} else if (nowdate>objSessionObject.archivestartdate) {
		return "ondemand";
	} else if (nowdate>objSessionObject.enddate) {
		return "postlive";
	} else if (nowdate>objSessionObject.startdate) {
		return "live";
	} else if (objSessionObject.startdate>nowdate) {
		return "prelive";
	}
	
	return null;
}

//Function that returns a converts a date object based on hour offset to a particular timezone
function convertToTimezone(objDate,intHourOffset) {
	if (!objDate || !intHourOffset) return null;
	
	var objDateUTC=new Date(objDate.getUTCFullYear(),objDate.getUTCMonth(),objDate.getUTCDate(),objDate.getUTCHours(),objDate.getUTCMinutes(),objDate.getUTCSeconds(),objDate.getUTCMilliseconds());
		var intDateUTCtimestamp = objDateUTC.getTime();
		var intOffsetMS = (intHourOffset)*60*60*1000;
		var intNewDatetimestamp = intDateUTCtimestamp + intOffsetMS;
	return new Date(intNewDatetimestamp);

}

function getDisplayElementByValue(value) {
    for (var i in objSessionObject.displayplayer) {
		if (objSessionObject.displayplayer[i].displayElementValue==value) {
			return objSessionObject.displayplayer[i];
		}
	}
    return null;
}

function getPlayerWidth() {
    var props = getDisplayElementByValue("Player Console Properties");
    try {
        return props.displayElementOptions[0].displayOptionValue;
    } catch(err) { }
    return null;
}

function getPlayerHeight() {
    var props = getDisplayElementByValue("Player Console Properties");
    try {
        return props.displayElementOptions[1].displayOptionValue;
    } catch(err) { }
    return null;
}