$.escape = function(str) {
	return str ? 
		str.replace(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;').replace(/"/g,'&quot;')
		: '';
}


function getMediaId(elem) {
	return parseInt($(elem).parents('div.item').children('a.item_anchor').attr('id').replace('mid',''),10);
}

function trackEvent(name) {

		_gaq && _gaq.push(['t2._trackEvent', 'Videos', name, 'none']);
}


$(function() {
	
	var LOADING_HTML = '<div class="inner"><img src="/images/small-spinner-fb.gif" /> Loading...</div>';
	
	$('a.action').click(function() {
		
		trackEvent( this.className.replace(/active|action|\s+/g,'')); 
		
		if( LOGGED_IN && $(this).hasClass('star') || $(this).hasClass('star_active') ) 
			return;
		$(this).parents('.properties').find('.active').not(this).click();
	});
	
	// favorite stars 
	$('a.star, a.star_active').click(function(e){
	e.preventDefault();
	if(!LOGGED_IN) {
		$(this).toggleClass('active');
		$(this).parents('.item').find('.message_container').empty()
			.append($('#star_no_user').clone().show())[$(this).hasClass('active') ? "show" : "hide"]();
		return;
	}
	var media_id = getMediaId(this);
	var was_fav = $(this).hasClass('star_active');

	$(this)
		.removeClass("star star_active")
		.addClass(was_fav ? 'star' : 'star_active');
	 $.post("services/videos_ajax.php",
		{ action:"set_favorite", "media_id":media_id, is_favorite:(was_fav?0:1) },
		function(data){
			return;
		});
	});

	// download link
	$('a.ipod').click(function(e) {
		e.preventDefault();
			$(this).toggleClass('active');
		var id = getMediaId(this);
		$("#download_container_"+id).toggle();
	});

	// assign to students 
	$('a.assign').click(function(e){
		e.preventDefault();
		var id = getMediaId(this);
		$('a.assign.active').not(this).click();
		$(this).toggleClass('active');
		$(this).parents('.item')
			.find('.form_container')
			.append(
				$('#assign_form').show()
			 )[$(this).hasClass('active') ? "show" : "hide"]()
			.find('input[name="media_id"]').attr('value',id);
	});
	
	// lesson
	var lesson_cache = {};
	$('a.lesson').click(function(e) {
		e.preventDefault();
		var id = getMediaId(this);
			$(this).toggleClass('active');
			var $container = $(this).parents('.item').find('.lesson_container');
		if(lesson_cache[id]) {
			$('span',this).toggle();
			$container.toggle();
		} else {
			$(this).hasClass('active') ? $container.html(LOADING_HTML).fadeIn(2000) : $container.hide();
			$.get('lessons.php',{"media_id":id,"output":"ajax"},function (data,status) {
					$container.html(data).show();
					lesson_cache[id] = true;
			});
		}
	});
	// transcript
	var trans_cache = {};
	$('a.trans').click(function(e) {
		e.preventDefault();
		var id = getMediaId(this);
			$(this).toggleClass('active');
			var $container = $(this).parents('.item').find('.trans_container');
		if(trans_cache[id]) {
			$container.toggle();
		} else {
			$(this).hasClass('active') ? $container.html(LOADING_HTML).show() : $container.hide();
			$.get('services/videos_ajax.php',{"action":"show_transcript","media_id":id,"output":"ajax"},function (data,status) {
					$container.html(data).show();
					trans_cache[id] = true;
			});
		}
	});
	// video information
	var info_cache = {};
	$('a.information').click(function(e) {
		e.preventDefault();
		var id = getMediaId(this);
			$(this).toggleClass('active');
			var $container = $(this).parents('.item').find('.info_container');
		if(info_cache[id]) {
			$container.toggle();
		} else {
			$(this).hasClass('active') ? $container.html(LOADING_HTML).show() : $container.hide();
			$.get('services/videos_ajax.php',{"media_id":id,"output":"ajax","action":"info"},function (data,status) {
					$container.html(data).show();
					info_cache[id] = true;
			});
		}
	});
	// comment form
	
	var $comment_form = $('#comment_form');
	$comment_form.find('form').submit(function(e) {
		e.preventDefault();
		$.post(
			'services/videos_ajax.php?media_id=' + $comment_form.find('#comment_media_id').val() + '&action=post_comment',
			{ 'comment': $comment_form.find('#comment_area').val() },
			function(data) {
				
				$comment_form.find('#comment_area').val('')
				var html = Templates.comment(data);
				$comment_form
					.closest('.item')
					.find('ul.comments')
					.append( $(html).fadeIn() );
			
			},
			'json'
		);
		return false;
	});
	// comment display
	var comment_cache = {};
	$('a.comments').click(function(e) {
		e.preventDefault();
		var id = getMediaId(this);
		$(this).toggleClass('active');
		var $container = $(this).parents('.item').find('.comment_container');
		if(comment_cache[id]) {
			$container
				.append(
					$comment_form.find('#comment_media_id').val(id).end().show()
				)
				.toggle();
		} else {
			$(this).hasClass('active') ? $container.html(LOADING_HTML).show() : $container.hide();
			$.get(
				'services/videos_ajax.php',
				{"media_id":id,"output":"ajax","action":"get_comments",'no_cache':Math.random() },
				function (data) {
					data = eval( '(' + data + ')');
					var html = Templates.comments(data);
					$container
						.html(html)
						.append(
							$comment_form.find('#comment_media_id').val(id).end().show()
						)
						.show();
					comment_cache[id] = true;
				});
		}
	});
	
	// points / score history
	$('a.points').click(function(e) {
		e.preventDefault();
		$(this).toggleClass('active');
		if(!LOGGED_IN) {
			$(this).parents('.item').find('.message_container').empty()
							.append($('#points_no_user').clone().show())[$(this).hasClass('active') ? "show" : "hide"]();
			return;
		}
		var id = getMediaId(this);
		var $container = $(this).parents('.item').find('.points_container');
		$(this).hasClass('active') ? $container.html(LOADING_HTML).show() : $container.hide();
		$(this).hasClass('active') && $.get('services/videos_ajax.php',{"media_id":id,"output":"ajax","action":"score_information"},function (data,status) { 
				$container.html(data).show();
		});
			
	});

});
var Templates = {
	comment: function(c) {
		return [
			'<li>',
			'<div class="comment_head">',
				'<img src="' + c.gravatar_url + '" width="35" height="35" />',
				'<span class="display_name">' + $.escape(c.display_name) +'</span>',
				'<span class="is_employee">' + (c.show_employee_indicator ? '(Yabla Staff)' : '') +'</span>',
				'<span class="display_date">' + $.escape(c.display_date) +'</span>',
				'<span class="moderation">' + (c.moderation_queue ? 'In Moderation Queue' : '') +'</span>',
			'</div>',
			'<div class="display_comment">' + $.escape(c.comment) + '</div>',
			'</li>'].join('');
		
	},
	comments: function(data) {
		var html = '<ul class="comments">';
		if(!data.length) {
			html += [
				'<li>',
				'<div class="comment_head">',
				(LOGGED_IN ? 
					'<span class="display_name">No Comments. Be the first to comment!</span>' :
					'<span class="display_name">No Comments.</span>'),
				'</div>',
				'</li>'
				].join('');
		} else { 
			
			for(var i=0,l=data.length;i < l;i++) {
				html += this.comment(data[i]);
			}
			
		}
		html += '</ul>';
		return html;
	},
	assignment: function(data) {
		html = '<tr id=ass_'+ data.media_id + '_' + data.class_id + '>'
			+ '<td>'
			+ '<span class="label">Assigned for:</span> <a href="myyabla_manage_class.php?class_id='+data.class_id+'">'+data.class_name+'</a>'
			+ '</td>'
			+ '<td>'
			+ '<span class="label">Due:</span> <span>'+ data.due_date + '</span>'
			+ '</td>'
			+ '<td>'
			+ '<span class="label">Goal</span> ' + data.goal
			+ '</td>'
			+ '<td class="da"><a href="" class="delete_assign">delete</a></td>'
			+ '</tr>';
		return html
		
	},
	assignment_container: function() {
		return '<div class="teacher_assign"><table class="layout"><tbody></tbody></table></div>';
	}
	
}
$('a.dword').live("click",function(e){
	e.preventDefault();
	showDefinition(this);
});
$(function() {
	$('#assign_form form').submit(function(e) {
		var $f = $(this);
		var d = $(this).find('[name=due_date_display]');
		if(d.val() == '') {
			d.addClass('error');
			return false;
		}
		$f.find('#create_assign')
			.attr('disabled',true)
			.after('<img src="/images/small-spinner.gif" class="spin" />');
		$.post('services/videos_ajax.php',
			$(this).serialize(),
			function(data) {
				$f.find('#create_assign')
					.attr('disabled',false);
				$f.find('.spin').remove();
				data = eval( '(' + data + ')' );
				var c = $f.closest('.item').find('.teacher_assign');
				if(!c.length) {
					$f.closest('.item').find('.properties').before( Templates.assignment_container() );
					c = $f.closest('.item').find('.teacher_assign');
				}
				c.find('#ass_' + data.media_id + '_' + data.class_id).remove();
				var $e = $(Templates.assignment(data));
				c.find('tbody').append($e);
				$e.css('background-color','#4F4').animate( { 'background-color': '#FFF' }, 3000);
				
			}
		);
		
		return false;
	});
	$('[name=due_date_display]').change(function(e) {
		$(this).removeClass('error');
	});
	$('.delete_assign').live('click',function(e) {
		e.preventDefault();
		var $r = $(this).closest('tr');
		var p = $r.attr('id').split('_');
		$.post('services/videos_ajax.php',
			{
				action: 'delete_assignment',
				media_id: p[1],
				class_id: p[2]
			},
			function(data) {
				if(data) {
					$r.fadeOut()
				}
			}
		)
	});
});

function showDefinition(anchor) {
	var $dm = $('#def_modal');
	if(!$dm.length) {
		$dm = initDefinitionWindow();
	}
	var $a = $(anchor);
	var o = $a.offset();
	$(document).width()/2 
	$dm.css(
		{
		top:o.top,
		left:$(document).width()/2 > o.left ? o.left + $a.width() +15: o.left - $dm.width() -5 
		}
	);
	var $dmi = $('#def_modal_content').empty().html('loading...');
	$dm.show(); 
	$.get('services/videos_ajax.php',{"action":"get_definition","word":$a.text()},function(data) {
		$dmi.html(data);
		$dm.show(); 
	});
	
}
function initDefinitionWindow() {
	$('body').append('<div id="def_modal"><div id="def_modal_inner"><div class="close"><img src="/images/close_icon.gif" class="close" /></div><div id="def_modal_content"> </div></div></div>');
	var $dm = $('#def_modal').hide();
	// definition should dissappear if body is clicked
	$('body').click(function(e){
		if(e.target && !$(e.target).hasClass('dword')) {
			$dm.hide();
		}
	});
	return $dm;
}
