var Site = {
	setup : function(){
		Movies.setup();
		$('ul.Tabs li a').click(Site.tabClick);
		$('form.Votes input').click(Site.voteSumbit);
	},
	tabClick : function(e){
		var id = $(this).attr('href');
		$(this).parents('ul.Tabs').children('li').removeClass('Active');
		$(this).parents('ul.Tabs').siblings('.TabBody').removeClass('Active').filter(id).addClass('Active');
		$(this).parent().addClass('Active');
		return false;
	},
	voteSumbit : function(e){
		var val = -1;
		var checked = this.checked;
		$('form.Votes input').each(function(){ this.checked = false; });
		this.checked = checked;
		if(this.checked){
			val = this.value;
		}

		var postTo = $(this).parents('form').attr('action') + '&output=json';
		$.post(postTo, { vote : val }, Site.voteComplete);
	},
	voteComplete : function(data){
		var results = eval('(' + data + ')');
		if(results.type == 'good'){
			$('form.Votes h2.good').html(results.totalgood.toString());
			$('form.Votes h2.bad').html(results.totalbad.toString());
		}else if(results.type == 'login'){
			alert('You need an account to do this.  Try logging in!');
			$('form.Votes input').each(function(){ this.checked = false; });
		}
	}
}

var Movies = {
	endpoint : '/movies.phtml',
	setup : function(){
		$('.MoreMovies h4 a').click(function(){
			$(this).parents('.MoreMovies').toggleClass('collapsed').toggleClass('expanded');
			Movies.load($(this).parents('.MoreMovies').find('.MovieList ul'), '', 1);
			return false;
		})
		for(var i = 65; i <= 90; i++){
			$('.MoreMovies .Filters').html(
				$('.MoreMovies .Filters').html() +
				' <a href="#' +
				String.fromCharCode(i) + '">' + String.fromCharCode(i) + '</a>'
				);
		}
		$('.MoreMovies .Filters a').click(
			function(){
				var link = $(this).attr('href');
				var text = link.substr(link.indexOf('#') + 1);
				if(text == 'all') text = '';
				if(text == 'num') text = '#';
				var container = $(this).parents('.MovieList').children('ul');
				Movies.load(container, text, 1);
				return false;
			});
	},
	addToList : function(select, id, name){

		var options = select[0].options;
		var exists = false;

		//look at this awesome way of making sure it gets selected
		while(!exists){
			for(var i = 0; i< options.length; i++) {
				if (options[i].value == id) {
					options[i].selected = true;
					exists = true;
					break;
				};
			}

			if(!exists){
				select.append(
					$('<option value="' + id + '">' + name + '</option>')
				);
			}
		}
	},
	load : function(container, filter, page){
		var url = Movies.getEndpoint(filter, page);
		$.getJSON(url,
		function(data){
			container.empty();
			var movies = data.movies;
			for(var i = 0; i < movies.length; i++){
				var link = $('<a>' + movies[i].title + '</a>')
					.attr('href', movies[i].id)
					.click(function(){
						var name = $(this).html();
						var id = $(this).attr('href');
						Movies.addToList($(this).parents('.Field').children('select'),id, name);
						return false;
					});
				container.append($('<li></li>').append(link));
			}
			container.parents('.MoreMovies').find('.PageLinks').remove();
			if(data.page_count > 1){
				pagelinks = $('<div class="PageLinks"</div>').appendTo(container.parents('.MoreMovies'));
				pagelinks.append('<a href="#prev" class="Page Prev">&lt; <span>Previous Page</span></a><a href="#next" class="Page Next"><span>Next Page</span> &gt;</a>')
					.children('a').click(
						function(){
							var newpage = 1;
							if($(this).attr('href') == '#prev'){
								newpage = data.page - 1;
							}else{
								newpage = data.page + 1;
							}
							if(newpage > data.total_pages || newpage < 1) return false;
							if(newpage != data.page){
								Movies.load(container, filter, newpage);
							}
							return false;
						}
					).each(function(){
						var href = $(this).attr('href');
						if(
							(href == '#prev' && data.page <= 1)
						||
							(href == '#next' && data.page >= data.page_count)
						){
							$(this).addClass('inactive');
						}
					});
			}
		});
	},
	getEndpoint : function(filter, page){
		return Movies.endpoint + '?filter=' + escape(filter) + '&page=' + page;
	}
}
$(document).ready(Site.setup);
