// JavaScript Document
var ensembleAPIUrl = 'http://ensemble.syr.edu/app/simpleapi/';
var loaderHTML = '<div id="loader"><img src="/videoarchive/images/ajax-loader.gif" alt="Loading..." style="border: none; margin-top: 3px;" align="absmiddle" /> Loading...</div>';
var websiteID = 'xzBF24apPk2VNqW8G_2XFA';
var siteURL = 'http://ensemble.syr.edu';

function initEEEShowcase() {
	getRandomVideo(ensembleAPIUrl + 'video/list.json/' + websiteID + '?orderBy=videoDate&orderByDirection=desc&resultsCount=25');
}

function AjaxRequest(url,successCallBack, loaderCallBack) {

	var theURL = url + '&ran=' + Math.floor(Math.random() * 100001);
	//document.write(theURL);
	new Ajax.Request(theURL,
	  {
		method:'get',
		crossSite: true,
		onUninitialized: loaderCallBack,
		onLoading: loaderCallBack,
		onLoaded: loaderCallBack,
		onSuccess: successCallBack,
		onFailure: throwFailure,
		onException: throwExp
	  });	
}

function getRandomVideo(myurl) {
	AjaxRequest(myurl,getFeaturedVideo,featuredVideoLoader);
}

function showFeaturedVideo(videoID) {
	AjaxRequest(ensembleAPIUrl + 'video/show.json/' + videoID + "?orderBy=videoID",writeFeaturedVideo,featuredVideoLoader);
}

function featuredVideoLoader() {
	$("randomVideo").innerHTML = loaderHTML;
}

function getFeaturedVideo() {
	
	if ( typeof(data) != "undefined" && typeof(data.videos) != "undefined" && data.videos.errors) {
		var myTemplate = new Template(
		'<div id="errors">#{errorMessage}</div>');

		data.videos.errors.each((function(e) {
			var show = {errorMessage: e.message};
			Element.insert($("errorBox"),myTemplate.evaluate(show));
		}).bind(this));
		
	}
	else {
		var count = 0;
		var videoIndex;
		
		count = $A(data.videos.video).length;
        videoIndex = Math.floor(Math.random() * count);

        var v;
        if (count == 1) v = data.videos.video;
        else v = data.videos.video[videoIndex];

		showFeaturedVideo(v.videoID);

	}
}

function writeFeaturedVideo() {
	
	if (typeof(data) != "undefined" && typeof(data.videos) != "undefined" && data.videos.errors) {
        var myTemplate = new Template('<div id="errors">#{errorMessage}</div>');

        data.videos.errors.each((function(e) {
            var show = {errorMessage: e.message};

            Element.insert($(this.resultsContainer), {'bottom': myTemplate.evaluate(show)});
        }).bind(this));
    }
    else {
		
        var videoTitle = data.videos.videoInformation.primaryTitle;
        var videoID = data.videos.videoInformation.videoID;
        var videoPreviewImages = '';
		
		var randomVideoTemplate = new Template(
		'<a href="/videoarchive/video.asp?vid=#{videoID}">' +
			'<img src="#{previewImage}" alt="#{videoTitle}" style="border: none; width: 180px;" />' +
		'</a>' +
		'<br />' +
		'<a href="/videoarchive/video.asp?vid=#{videoID}" style="font-weight:bold; margin-top: 8px;display: block">#{videoTitle}</a>');
		
        if ($A(data.videos.videoImages).length > 1) {
            data.videos.videoImages.each((function(e) {
                if (e.imageType.toLowerCase() == 'preview') {
                    if( videoPreviewImages != "" ) videoPreviewImages +=',';
					// could concatenate to get multiple images; but didnt here
                    videoPreviewImages = e.imageUrl;
                }
            }).bind(this));
			
        }
        else {
            videoPreviewImages = data.videos.videoImages.imageURL;
        }
		
		$("randomVideo").innerHTML = "";
		var show = {videoID: videoID, videoTitle: videoTitle, previewImage: videoPreviewImages};
		Element.insert($("randomVideo"),randomVideoTemplate.evaluate(show));

	}
}

function throwExp(req,exception) {
	alert('The request had a fatal exception thrown.\n' + exception);
	return true;
}

function throwFailure(req){
	alert('Error: ' + req.status + "\n" + req.statusText); 
	return true;
}
