var debug;
var __tools = 
{
	'table': function(lessonData)
	{
		debug = lessonData;
		var that = this; //lololol
		var $table = $('<table></table>', {'id': 'tbl', 'cellspacing': '0'});
		$.each(lessonData, function(index, value)
		{
			$table.append(that.tableRow(value['Lesson'], index % 2 == 0, index == Object.size(lessonData) - 1));
		});
		return $table;
	},
	
	'tableRow': function(rowData, alt, last)
	{
		var $row = $('<tr></tr>');
		var flavor = alt ? 'pepper' : 'salt';
		var addLast = last ? '_last' : '';
		var c1ClassName = 'tbl_row_' + flavor + addLast;
		var c2ClassName = 'tbl_time_' + flavor + addLast;
		var $cell1 = $('<td></td>', {'className': c1ClassName});
		var $link = $('<a></a>', {'href': this._linkPrefix+'lessons/play/'+rowData['id']+'/'}).append(rowData['title']);
		var $div = $('<div></div>', {'className': flavor}).append(rowData['description']);
		$cell1.append($link, $div);
		var time = rowData['length'].split(':');
		var mins = time[1];
		var secs = time[2];
		$cell2 = $('<td></td>', {'className': c2ClassName}).append(mins + ' min. ' + secs + ' sec. ');
		$row.append($cell1, $cell2);
		return $row;
	},
	
	'_index': function(linkPrefix, params)
	{
		this._linkPrefix = linkPrefix;
		this._params = params;
		var extraUrl = '';
		var test;
		if (test = window.location.href.match(/\/page:\d+/))
			extraUrl = 'page:' + test[0].split(':')[1];
		this.actuallyLoadTheTable(extraUrl);		
	},
	
	'_play': function(linkPrefix, params)
	{
		var that = this;
		$(function()
		{
			$('#LessoncommentPlayForm').submit(function()
			{
				$.post(linkPrefix + 'lessoncomments/ajaxAdd', 
					{
						'data[Lessoncomment][lesson_id]': $('#LessoncommentLessonId').val(),
						'data[Lessoncomment][name]': $('#LessoncommentName').val(),
						'data[Lessoncomment][body]': $('#LessoncommentBody').val()
					}, function(data, textStatus)
					{
						if (textStatus === 'success')
						{
							if (data['Lessoncomment'] !== 'error')
							{
								$comment = that.createComment(data['Lessoncomment']['name'], data['Lessoncomment']['created'], data['Lessoncomment']['body']);
								$('#comments').prepend($comment);
								$comment.fadeIn('slow');
								$('#commentCount').html(parseInt($('#commentCount').html()) + 1);
								$('#LessoncommentName').val('');
								$('#LessoncommentBody').val('');
								$('#noComments').remove();
								
							}
							else
							{
								that.loadFail(that.commentFailMessage);
							}
						}
						else
						{
							that.loadFail(that.commentFailMessage);
						}
					}, 'json');
				return false;
			});
		});
	},
	
	'createComment': function(commenter_name, date, comment)
	{
		$comment = $('<div></div>', {'className': 'comment hide'});
		$name = $('<strong></strong>').append(commenter_name);
		$time = $('<abbr></abbr>', {'title': date, 'css': {'fontStyle': 'italic'}}).append('Just Now');
		$byline = $('<p></p>').append($name, ', ', $time);
		$body = $('<p></p>').append(comment);
		$comment.append($byline, $body);
		return $comment;
	},
	
	'loadTable': function(extraUrl)
	{
		var that = this; //lolcode
		$('#lesson_table').slideUp(250, function() 
		{
			$('#lesson_table_busy').show();
			$(this).html('');
			that.actuallyLoadTheTable(extraUrl);
		});
		
	},
	
	'actuallyLoadTheTable': function(extraUrl)
	{
		var that = this; //lol
		$.get(that._linkPrefix + 'lessons/ajaxLessons/'+extraUrl, {}, function(data, textStatus)
		{
			if (textStatus == 'success')
			{
				$(function()
				{
					that._params = data['_params'];
					delete data._params;
					$table = that.table(data);
					var pag = that.paginationLinks();
					
					var link = 
						window.location.protocol + 
						'//' + 
						window.location.hostname + 
						that._linkPrefix + 
						'lessons/index/page:' + 
						that._params['paging']['Lesson']['page'];
					
					var $lttp = $('<a></a>', {'href':link, 'className': 'linkHere'}).append('Link to this page');
					var $pagDiv = $('<div></div>', {'className': 'pagination'});
					pag.each(function(){$pagDiv.append(this);});
					$('#lesson_table').append($pagDiv, $table, $lttp);
					//while (!ok2goDown);
					$('#lesson_table').slideDown(250);
				});
			}
			else
			{
				that.loadFail(that.loadFailMessage);
			}
			$('#lesson_table_busy').hide();
		}, 'json');
	},
	
	'paginationLinks': function()
	{
		var that = this; //lolcode
		var links = {};
		var numbers = [];
		var paging = this._params['paging']['Lesson'];
		var $back = $('<a></a>', {'className': 'hidden pagination back'}).append('&laquo; Back');
		var $next = $('<a></a>', {'className': 'hidden pagination next'}).append('&raquo; Next');;
		if (paging['prevPage'])
			$back = $('<a></a>', {'href': this._linkPrefix+'lessons/index/page:'+(paging['page'] - 1), 'className': 'pagination back'}).append('&laquo; Back');
		if (paging['nextPage'])
			$next = $('<a></a>', {'href': this._linkPrefix+'lessons/index/page:'+(paging['page'] + 1), 'className': 'pagination next'}).append('Next &raquo;');
		for (var i = 0; i<paging['pageCount']; ++i)
		{
			var firstNum = i * paging['options']['limit'] + 1;
			var lastNum = firstNum + paging['options']['limit'] - 1;
			firstNum = firstNum < 1 ? 1 : firstNum;
			lastNum = lastNum > paging['count'] ? paging['count'] : lastNum;
			if (paging['page'] == i+1)
				$link = $('<span></span>').append(firstNum + '-' + lastNum);
			else
			{
				$link = $('<a></a>', 
				{
					'href': this._linkPrefix+'lessons/index/page:' + (i + 1), 
					'className': 'pagination number'
				}).append(firstNum + '-' + lastNum);
			}
				
			numbers.push($link);
			numbers.push($('<span></span>', {'className': 'pagination separator'}).append(' | '));
		}
		numbers.pop();
		links['back'] = $back;
		links['next'] = $next;
		links['numbers'] = numbers;
		var flat = [$back, $next].concat(numbers);
		var toReturn = $(flat).each(function() { $(this). click(function(e)
		{
			if (this.tagName != 'A') return false;
			var extraUrl = 'page:';
			extraUrl += this.href.match(/\/page:\d+/)[0].split(':')[1];
			that.loadTable(extraUrl);
			return false;
		});});
		return toReturn;
	},
	
	'loadFail': function(message)
	{
		alert(message);
	}, 
	'loadFailMessage': 'Sorry, we were unable to load the lesson table at this time. Please try again later.',
	'commentFailMessage': 'Sorry, we were unable to add your comment. Please Make sure you have filled out both fields and try again.'
};