jQuery(function(){

	var $ = jQuery;
	
	// config variables
	var config = {
		question: 1,
		level: 1,
		success: 1,
		total_questions : 21,
		total_levels : 7,
		full : 340,
		levels : nextlevel = {
			1 : 3,
			2 : 6,
			3 : 9,
			4 : 12,
			5 : 15,
			6 : 18,
			7 : 21
		},
		questions_per_level : per_level = {
			1 : 3,
			2 : 3,
			3 : 3,
			4 : 3,
			5 : 3,
			6 : 3,
			7 : 3
		}, 
		filler : 190
	};
	
	var mission = {
	
		question : config.question,
		
		level : config.level,

		// Randomize arrays
		shuffle : function(arr) {
			for(
				var j, x, i = arr.length; i;
				j = parseInt(Math.random() * i),
				x = arr[--i], arr[i] = arr[j], arr[j] = x
			);
			return arr;
		},
		
		// Image preloader
		preload : function(){
			for(var i = 0; i<arguments.length; i++)
			{
				$("<img>").attr("src", arguments[i]);
			}
		},
	
		// external links
		links : function(){
			
			
			$('#tweet-this').live("click", function() {
			
				var tweets = [
					'http://twitter.com/home?status=I am playing Mission: Pneumonia. Can your Community Health Worker Help Save the Children? http://bit.ly/j98AT%20%23WPD',
					'http://twitter.com/home?status=I am playing Mission: Pneumonia by Save the Children. Do you accept your Mission: Pneumonia? http://bit.ly/j98AT%20%23WPD',
					'http://twitter.com/home?status=I am playing Mission: Pneumonia by Save the Children. Test your pneumonia IQ. http://bit.ly/j98AT%20%23WPD'];
					
				tweets = mission.shuffle(tweets)
				
				$(this).attr("href",tweets[0]);				

			});

			$('a[rel="external"]').live("click", function() {
				window.open( $(this).attr('href') );
				return false;
			});
		},
		
		// load questions
		questions : function(){
		
			// next question links
			$("#next-level a").live("click", function(){

				mission.nextQuestion();
										
				return false;

			});
			
			$("#next-success a").live("click", function(){
				
				if (mission.success > 3)
				{
				
					window.location = "/?comp="+mission.level;
					
					return false;
				}
				else
				{

					mission.nextSuccess();
					
					return false;
					
				}
				
			});

			// Skip question
			$("#skip a").live("click", function(){
				
				$.blockUI({
					css: { backgroundColor: 'transparent', border: 'none' },
					message: '',
					overlayCSS:  { backgroundColor: '#26ABDB', opacity: .7 },
					fadeOut:  4000
				});

				$.ajax({
					type : "POST",
					url : "app/process.php",
					dataType : "json",
					data: {
						action : "skip",
						level : mission.level,
						question : mission.question
					}
				});

				mission.nextQuestion();
										
				return false;

			});

				
			// answer questions
			$("#question ul a").live("click", function(){
			
				var answer = $(this).attr("rel");
				
				$("#question").fadeOut("slow", function(){
				
				$.ajax({
					type : "POST",
					url : "app/process.php",
					dataType : "json",
					data: {
						action : "answer",
						answer : answer,
						level : mission.level,
						question : mission.question
					},
					success : function(data){
						if (data.error === false && data.answer === true)
						{
							mission.getUrl("questions/"+mission.level+"/"+mission.question+"/right.html?time="+new Date().getTime());
						}
						else
						{
							mission.getUrl("questions/"+mission.level+"/"+mission.question+"/wrong.html?time="+new Date().getTime());		
						}
					},
					cache : false
				});
				
				});

				return false;				
			
			});
	
		},
		
		updateProgress : function(){

			var current_question = (mission.getLevel() == 1) ? mission.question : (mission.question - config.levels[mission.level - 1]);
		
			$("#progress-filler").css("width", ((current_question / config.questions_per_level[mission.getLevel()]) * config.full) + "px");
			
			$("#progress .current").text(current_question);
		},
		
		nextLevel : function(){
		
			if (mission.question == config.levels[mission.level])
			{
				$("#question").fadeOut("slow", function(){
					
					mission.success = 1;

					mission.nextSuccess();

				});

				return true;
			}
			else
			{
				return false;
			}
			
		},
		
		nextSuccess : function(){
		
			$("#skip a").hide();
		
			$("#question").fadeOut("slow", function(){
			
				$("#question").css("background-image","none");
		
				mission.getUrl("success/"+mission.level+"/"+mission.success+".html?time="+new Date().getTime());
			
				mission.success = mission.success + 1;
	
			});
			
		},
		
		nextQuestion : function(){
		
			$("#skip a").show();
		
			if (mission.nextLevel() === true)
			{
				return false;
			}
			
			mission.question = mission.question + 1;
			
			if (mission.question > config.total_questions)
			{
				$("#question").fadeOut("slow", function(){
			
					$("#question").css("background-image","none");
					
					var results = ['donate.html', 'donate2.html', 'petition.html'];
					
					results = mission.shuffle(results);
		
					mission.getUrl("slides/"+results[0]+"?time="+new Date().getTime());

				});
			}
			else
			{
				$("#question").fadeOut("slow", function(){
					
					$("#question").css("background-image","none");
					
					$.historyLoad(mission.level+"/"+mission.question);
					
				});

			}
			
			mission.updateProgress();
			
			return false;			
			
		},
				
		getUrl : function(url){
			
			//$("#footer #vicks").remove();
			
			$.blockUI({
				css: { backgroundColor: 'transparent', border: 'none' },
				message: '<div id="loading"><img src="/assets/images/loading.gif" /></div>',
				overlayCSS:  { backgroundColor: '#26ABDB', opacity: .7 },
				fadeOut:  4000
			});
						
			$("#questionWrapper").load(url).oneTime("1s", function(){
				$("#question").show();
				//mission.vicks();
			});
	
		},
		
		// load mission
		init : function(){
			
			// Block UI
			$().ajaxStop($.unblockUI);
		
			// Set external links
			mission.links();
			
			// Set question actions
			mission.questions();	
			
			$.historyInit(mission.load, "play.php");
			
			// Preload first set of images			
			mission.preload(
				"questions/1/1/question.gif",
				"questions/1/2/question.gif",
				"questions/1/3/question.gif",
				"questions/1/4/question.gif",
				"questions/1/5/question.gif",
				"questions/1/6/question.gif",
				"questions/1/7/question.gif"
			);

		},
		
		/*vicks : function(){
			if ($("#question #vicks").length > 0)
			{
				$("#question #vicks").appendTo("#footer .wrapper").show();
			}
		},*/
		
		getLevel : function(){
			return mission.level;
		},
		
		setLevel : function(level){
			mission.level = level;
		},
		
		getQuestion : function(){
			return mission.question;
		},
		
		setQuestion : function(question){
			mission.question = question;
		},
		
		load : function(hash){
		
			if(hash) {

				hash = hash.split("/");
				
				mission.setLevel(Number(hash[0]));
				
				$("#progress .total").text(config.questions_per_level[mission.getLevel()]);
				
				if (hash[1]){
					mission.setQuestion(Number(hash[1]));
				}else{
					if (mission.level == 1)
					{
						mission.setQuestion(1);				
					}
					else
					{
						mission.setQuestion(config.levels[hash[0] - 1] + 1);
					}
				}
				
				$("#question").fadeOut("slow", function(){
					
					$("#question").css("background-image","none");
					
					mission.getUrl("questions/"+mission.level+"/"+mission.question+"/index.html?time="+new Date().getTime());
					
					mission.updateProgress();
					
				});
				
			}else{
			
				mission.updateProgress();
				
				$("#progress .total").text(config.questions_per_level[mission.getLevel()]);

				mission.getUrl("questions/"+mission.level+"/"+mission.question+"/index.html?time="+new Date().getTime());
			
			}

			return false;
			
		}
	};

	mission.init();

});
