/**
 * @author griley
 */

var talkTitleResult;

function getTranscript(language) {
	var transcriptCallback = {success: onGetTranscriptSuccess, failure: onGetTranscriptFailure, scope: this};
	var req = YAHOO.util.Connect.asyncRequest('GET', YAHOO.Tools.printf('/talks/subtitles/id/{0}/lang/{1}/format/html',talkID,language), transcriptCallback, null);
	showLoadAnimation();
}

function showTranscript() {
	aboutFadeOut.animate();
}
function restoreAboutHTML() {
	transcriptFadeOut.animate();
}

function showLoadAnimation() {
	var anim = document.getElementById('loadingTranscriptAnim');
	anim.style.display = 'inline';
}

function hideLoadAnimation() {
	var anim = document.getElementById('loadingTranscriptAnim');
	anim.style.display = 'none';
}

/*
 * 
 * This method is a subscriber to the aboutFadeOut animation and will 
 * paint the transcript and fade it in.
 * 
 */
function onAboutFadeOutComplete() {
	document.getElementById('aboutThisTalk').style.display = 'none';
	transcriptFadeIn.animate();
	document.getElementById('transcript').style.display = 'block';
}

function onTranscriptFadeOutComplete() {
	document.getElementById('transcript').style.display = 'none';
	aboutFadeIn.animate();
	document.getElementById('aboutThisTalk').style.display = 'block';
}

/* **************************
 * 
 *  callbacks for getting transcript
 *  
 *  *************************
 */
function onGetTranscriptSuccess(oResponse){
	document.getElementById('transcriptText').innerHTML = oResponse.responseText;
	hideLoadAnimation();
}

// callback function when call to service fails
function onGetTranscriptFailure(oResponse) {
	document.getElementById('transcriptText').innerHTML = 'Unable to retrieve transcript<br /> status=' + oResponse.status + ' - ' + oResponse.statusText;
}

/* **************************
 * 
 *  callbacks for getting language specific talk info
 *  
 *  *************************
 */
function onTalkTitlesByLanguageSuccess(oRequest, oResponse, oPayload) {
	talkTitleResult = oResponse.results[0];
	taglineFadeOut.animate();
	altHeadlineFadeOut.animate();
	attributionTextFadeOut.animate();
}

function onAltHeadlineFadeOutComplete() {
	document.getElementById('altHeadline').innerHTML = talkTitleResult.altheadline;
	altHeadlineFadeIn.animate();
}

function onAttributionTextFadeOutComplete() {
	document.getElementById('attributionText').innerHTML = talkTitleResult.attributionText;
	attributionTextFadeIn.animate();
}

function onTaglineFadeOutComplete() {
	var taglineElem = document.getElementById('tagline');
	taglineElem.innerHTML = talkTitleResult.tagline;
	if (talkTitleResult.isRTL == 1) {
		taglineElem.style.direction = 'rtl';
		taglineElem.style.textAlign = 'right';
	}
	else {
		taglineElem.style.direction = 'ltr';
		taglineElem.style.textAlign = 'left';
	}
	taglineFadeIn.animate();
}

function onTalkTitlesByLanguageFailure(oResponse) {
	alert('Unable to retrieve titles for the specified language=' + oResponse.status + ' - ' + oResponse.statusText);
}

function initTranscript() {
	// animations to be used when showing transcripts and titles
	aboutFadeOut = new YAHOO.util.Anim('aboutThisTalk', {opacity:{from:1,to:0}}, .25); 
	aboutFadeIn = new YAHOO.util.Anim('aboutThisTalk', {opacity:{from:0,to:1}}, .25); 
	aboutFadeOut.onComplete.subscribe(onAboutFadeOutComplete);
	
	transcriptFadeOut = new YAHOO.util.Anim('transcript', {opacity:{from:1,to:0}}, .25);
	transcriptFadeIn = new YAHOO.util.Anim('transcript', {opacity:{from:0,to:1}}, .25);
	transcriptFadeOut.onComplete.subscribe(onTranscriptFadeOutComplete);
	
	taglineFadeOut = new YAHOO.util.Anim('tagline', {opacity:{from:1,to:0}}, .25);
	taglineFadeIn = new YAHOO.util.Anim('tagline', {opacity:{from:0,to:1}}, .25);
	taglineFadeOut.onComplete.subscribe(onTaglineFadeOutComplete);
	altHeadlineFadeOut = new YAHOO.util.Anim('altHeadline', {opacity:{from:1,to:0}}, .25);
	altHeadlineFadeIn = new YAHOO.util.Anim('altHeadline', {opacity:{from:0,to:1}}, .25);
	altHeadlineFadeOut.onComplete.subscribe(onAltHeadlineFadeOutComplete);
	attributionTextFadeOut = new YAHOO.util.Anim('attributionText', {opacity:{from:1,to:0}}, .25);
	attributionTextFadeIn = new YAHOO.util.Anim('attributionText', {opacity:{from:0,to:1}}, .25);
	attributionTextFadeOut.onComplete.subscribe(onAttributionTextFadeOutComplete);

	
	// set up json datasources
	dsGetTalkTitleByLanguage = new YAHOO.util.DataSource(YAHOO.Tools.printf('/talks/titles/id/{0}/',talkID));
	dsGetTalkTitleByLanguage.responseType = YAHOO.util.DataSource.TYPE_JSON; 
	dsGetTalkTitleByLanguage.responseSchema = {
		resultsList: "response",
		fields: ['tagline','altheadline','attributionText','isRTL']
	};
}

/*
 * this function will interface with the video player to seek to a specified time
 */
function seekVideo(t) {
	var videoSWF = document.getElementById('streamingPlayerSWF');
	videoSWF.seekVideo(t);
}

// this function called by the player when subtitles are swithed on
function onPlayerLoadSubtitles(languageCode,shareURL) {
	try {
		addthis.update('share', 'url', shareURL);
	} catch(e){};
	if (languageCode != currentLanguageCode) {
		currentLanguageCode = languageCode;
		var talkTitleByLanguageCallback = {success: onTalkTitlesByLanguageSuccess, failure: onTalkTitlesByLanguageFailure, scope: this};
		dsGetTalkTitleByLanguage.sendRequest(YAHOO.Tools.printf('lang/{0}',languageCode), talkTitleByLanguageCallback);
	}
}

// this function called by the player when link to "display issues" clicked.
function onPlayerSubtitleHelp() {
	window.open('/translate/subtitlehelp','','width=570,height=510,left='+(screen.availWidth/2-376)+',top='+(screen.availHeight/2-216)+'');
}

// this function called to set the in-page ad
function onPageAd(adCode) {
	var adDiv = document.getElementById('adSpace');
	adDiv.innerHTML = adCode;
}