var PLAYER = null;
// var currentlyPlaying = null;
var currentTopicTitle = null;
var currentTopicKey = null;

function storeInUserState(name, value, valueType) {
	var parameters = {name: name, value: value};
	if ( valueType != null ) {
		parameters.value_type = valueType;
	}
  new Ajax.Request("/store_in_user_state", { method: 'post', parameters: parameters });
}

function storeInSession(name, value) {
  new Ajax.Request("/store_in_session", { method: 'post', parameters: {name: name, value: value} });
}

function storeCurrentTopic(topicId) {
  new Ajax.Request("/store_current_topic", { method: 'post', parameters: {id: topicId} });
}

function storeCurrentLesson(lessonId) {
  new Ajax.Request("/store_current_lesson", { method: 'post', parameters: {id: lessonId} });
}

function updateCourseBreadcrumbs(courseTitle, courseKey, topicTitle, topicKey, lessonTitle) {
	var breadcrumbsHtml = "<a class='course-breadcrumb' href=\"javascript:backToTopics('" + escapeQuotes(courseTitle) + "', '" + courseKey + "')\" title='Show topics for this course'>" + courseTitle + "</a>";
	var sepHtml = "<span class='course-breadcumb-sep'>&raquo;</span>";
	if ( topicTitle != null ) {
		if ( lessonTitle == null ) {
			breadcrumbsHtml += sepHtml + "<span class='course-breadcrumb active'>" + topicTitle + "</span>";
		}
		else {
			breadcrumbsHtml += sepHtml + "<a class='course-breadcrumb' href=\"javascript:showLessons('" + escapeQuotes(courseTitle) + "', '" + courseKey + "', '" + escapeQuotes(topicTitle) + "', '" + topicKey + "')\" title='Show lessons for this topic'>" + topicTitle + "</a>";
			breadcrumbsHtml += sepHtml + "<span class='course-breadcrumb active'>" + lessonTitle + "</span>";
		}
	}
	var breadcrumbsElement = $('course-breadcrumbs');
	breadcrumbsElement.update(breadcrumbsHtml);
}

function hidePresentation() {
	$('presentation-window').src = '';
	$('presentation-box').hide();
	// $('topics-back-to-topics-link').hide();
	$('course-box').show();
}

function stopVideo() {
  if (PLAYER != null) {
    PLAYER.stop();
		PLAYER = null;
  }
}

function showVideos() {
  $$('.leftbox-repframe').first(function(elem){ elem.show(); });
}

function hideVideos() {
  stopVideo();
  $$('.leftbox-repframe').each(function(elem){ elem.hide(); });
  $$('.leftbox').each(function(elem){ elem.show(); });
	$('leftbox-player').hide();	
}

function toggleVideo(courseKey, topicKey, vidUrl, lessonId) {
	hidePresentation();
  hideVideos();
  
  $$('.leftbox').each(function(elem){ elem.hide(); });
  $('leftbox-player').show();

  // currentlyPlaying = {courseKey: courseKey, topicKey:topicKey, vidUrl:vidUrl, lessonId:lessonId};

  PLAYER = flowplayer("player",
    {
      src: "/swf/flowplayer-3.1.1.swf",
      wmode: 'transparent'
    },
    {
      clip: {
        url:vidUrl, autoStart:false, autoBuffering:true,
        onStart: function() {learnerBeganWatching(lessonId)},
        onFinish: function() {learnerCompletedWatching(lessonId)}
      },
      canvas: {backgroundGradient: 'none'}
    }
  );
}

function showTopics(courseKey, topicKey) {
	$('topic-menu-header').show();
	$('lesson-menu-header').hide();

	hidePresentation();
  hideVideos();

	$(courseKey+'-body').show();
	$(courseKey+'-rep-frame').show();
	$(courseKey + '-topic-selector').show();
	
	if ( topicKey ) {
		$(topicKey +'-body').hide();
		$(topicKey + '-lesson-selector').hide();
	}
}

function showLessons(courseTitle, courseKey, topicTitle, topicKey) {
	updateCourseBreadcrumbs(courseTitle, courseKey, topicTitle, topicKey);
	
	$('topic-menu-header').hide();
	$('lesson-menu-header').show();

	hidePresentation();
  hideVideos();

  $(courseKey+'-body').hide();
  $(topicKey+'-body').show();

  $(courseKey + '-topic-selector').hide();
  $(topicKey + '-lesson-selector').show();

	currentTopicTitle = topicTitle;
	currentTopicKey = topicKey;
}

function backToTopics(courseTitle, courseKey) {
	updateCourseBreadcrumbs(courseTitle, courseKey);
	showTopics(courseKey, currentTopicKey);
}

function learnerBeganWatching(lessonId) {
  new Ajax.Request("/watches/create", { method: 'post', parameters: {lesson_id: lessonId} });
}

function learnerCompletedWatching(lessonId) {
  new Ajax.Request("/watches", { method: 'put', parameters: {lesson_id: lessonId} });
}

function showDescription(lessonElement, courseKey, topicKey, lessonId, lessonsMenu) {
	lessonElement = $(lessonElement);
	var offset = lessonElement.positionedOffset();
	var offsetTop = offset.top;
	if ( getInternetExplorerVersion() != 7.0 ) {
		// For some reason, IE7 appears to automatically adjust the offset top of the lesson element when the lesson
		// menu is scrolled.  This is not the behavior in IE8, Firefox or Safari, so we need to manually adjust the offset top.
		lessonsMenu = $(lessonsMenu);
		offsetTop -= lessonsMenu.scrollTop;
	}

	var lessonDescriptionElement = $(courseKey + '-' + topicKey + '-' + lessonId + '-description');
	lessonDescriptionElement.setStyle({top: offsetTop + 'px'});
	lessonDescriptionElement.show();
}

function hideDescription(lessonElement, courseKey, topicKey, lessonId) {
	var lessonDescriptionElement = $(courseKey + '-' + topicKey + '-' + lessonId + '-description');
  lessonDescriptionElement.hide();
}

function LaunchPresentation(bChromeless, bResize, playerUrl) {
	$('topic-menu-header').hide();
	$('lesson-menu-header').hide();
	$('course-box').hide();
	$('presentation-window').src = playerUrl;
	$('presentation-box').show();
}

function onLoadPresentationFrame() {
	var iframe = $('presentation-window');
	var script = iframe.contentWindow.document.createElement('script'); 
	script.type = 'text/javascript'; 
	script.src = '/javascripts/flash_integration.js'
	iframe.contentWindow.document.getElementsByTagName('head')[0].appendChild(script);	
}

function launchCurrentAssessment() {
	document.location.href = "/current_assessment";
}

// Taken from: http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx
function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

function escapeQuotes(str) {
	var regex = new RegExp("\"", "g");		// escape double quotes
	str = str.replace(regex, '\\"');
	
	regex = new RegExp('\'', "g");			// escape single quotes
	str = str.replace(regex, "\\'");
	
	return str
}