$(document).ready(function () {

	var lesson;
	var definitions;
	var key;
	
	var correct = function (x,y) {
		$('.key .content').animate({
			color:"#31eb73"
		},233,function () {
			$('.key .content').animate({
				color:"#333"
			},550)
		});
		$('body').prepend( $('<div class="wham_correct"/>').css({'left':(x-47),'top':y-47}).fadeIn(89,function () {
			$(this).fadeOut(233, function () {
				$(this).remove();
			});
		}) );
		$('body').prepend( $('<div class="floater correct">Correct!</div>').css({'left':(x-47),'top':y-47}).fadeIn(89,function () {
			$(this).animate({
				top: y-233,
				opacity: 0
			},1597, function () {
				$(this).remove();
			});
		}) );
	}
	
	var incorrect = function (x,y) {
		$('.key .content').animate({
			color:"#ee9396"
		},233,function () {
			$('.key .content').animate({
				color:"#333"
			},550)
		});
		$('body').prepend( $('<div class="wham_wrong"/>').css({'left':(x-47),'top':y-47}).fadeIn(89,function () {
			$(this).fadeOut(233, function () {
				$(this).remove();
			});
		}) );
		$('body').prepend( $('<div class="floater wrong">Wrong!</div>').css({'left':(x-47),'top':y-47}).fadeIn(89,function () {
			$(this).animate({
				top: y-233,
				opacity: 0
			},987, function () {
				$(this).remove();
			});
		}) );
	}
	
	$('.definition').live('click',function (event) {		
		if ( $('.definitions .correct').length ) {
			load_content();
		} else {
			if ( $(this).hasClass('id'+key.id) ) {
				$(this).addClass('correct');
				correct(event.pageX,event.pageY);
				i = 0;
				$('#streak').text( parseInt($('#streak').text()) + 1 );
				$('#correct').text( parseInt($('#correct').text()) + 1 );
			} else {
				$(this).addClass('incorrect');
				$('.id'+key.id).addClass('correct');
				incorrect(event.pageX,event.pageY);
				i = (lesson.length - 2);
				$('#streak').text( 0 );
				$('#incorrect').text( parseInt($('#incorrect').text()) + 1 );
			}
			lesson.splice(i,0,key);
			
			$('.definitions .correct').append( $('<img src="/media/images/arrow.png" alt="Next" class="arrow"/>') );
			$('.definitions .incorrect').append( $('<img src="/media/images/arrow.png" alt="Next" class="arrow"/>') );
		}
	});

	var load_key = function () {
		return lesson.pop();
	}
	
	var load_definition = function () {
		n = Math.floor(Math.random()*lesson.length);
		if ($.inArray(lesson[n], definitions) != -1) {
			return load_definition();
		} else {
			return lesson[n];
		}
	}

	var load_content = function () {
		key = load_key();
		
		definitions[0] = key;
		definitions[1] = load_definition();
		definitions[2] = load_definition();
		definitions[3] = load_definition();
		$.shuffle(definitions);
		
		$('.header').html(key.key+'<a href="/word/'+key.id+'/'+key.key+'" class="read_about">Read About</a>');
		
		$('.definition').remove();
		$.each(definitions, function(index, value) {
			$('.definitions').append( $('<div class="definition big_button"/>').html(value.definition).addClass('id'+value.id) );
		});
	
	}
	
	var load_definitions = function () {
		$.shuffle(lesson);
		definitions = new Array();
		load_content();
	}

	var load_lesson = function (lesson_id) {
		lesson = get_lesson();
		if (lesson) {
			load_definitions();
		}
	}

	var get_lesson = function () {
		$.ajax({
			async: false,
			type: 'post',
			url: '/flash_cards/',
			success: function (data) {
				words = data;
			},
			dataType: "json"
		});
		return words;
	}
	if ($('.definitions').length) {
		load_lesson($('#lesson_id').val());
	}
	
	var loading_img = $('<img src="http://www.onlinelanguagehelp.com/media/images/loading.gif" alt="Loading..." class="loading" />');
	/* CAPTCHA */
	var captcha = function () {
		$('label[for=captcha]').remove();
		$('.captcha').empty();
		$('.captcha').text('').before('<label for="captcha">To make sure you\'re human, please select the flag of <a href="" target="_blank" class="flag_link"></a>:</label>');
		$('.captcha').prepend('<input type="hidden" name="flag_input" id="flag_input" />');
				  if ($('.captcha').length) {
		$.ajax({
			type: 'post',
			url: '/captcha',
			success: function (data) {
				if (data.success) {
					//window.location='/admin';
					$('.flag_link').text(data.flag.country).attr('href','http://en.wikipedia.org/wiki/Flag_of_'+data.flag.country);
					for (flag in data.flags) {
						$('.captcha').append( $('<span class="flag_option"/>').bind('click',function() {
							$('.flag_option').removeClass('selected');
							$(this).addClass('selected');
							$('#flag_input').attr('value',$('.selected img').attr('alt') );
						}).append( $('<img />').attr('src','http://www.onlinelanguagehelp.com/media/images/flags/'+data.flags[flag].translation.toLowerCase()+'.png').attr('alt',data.flags[flag].translation.toLowerCase()) ) );
					};
				} else {
					alert(data.message);
				}
			},
			dataType: "json"
		});
				  }
	}
	captcha();
	/* Site Search */
	var search_xhr;
	$('.search_results').hide();
	$('#search').focusout( function () {
		setTimeout( function () { $('.search_results').fadeOut() }, 210);
		if ($(this).val() == '') { $(this).val('Search Words and Phrases'); }
	});
	$('#search').bind('keyup', function () {
		search();
	});
	$('#search').focus( function () {
		if ($(this).val() == 'Search Words and Phrases') { $(this).val(''); }
		search();
	});
	var search = function () {
		if ($('#search').val().length > 2) {
			$('.search_results').fadeIn();
			if (search_xhr) {
				search_xhr.abort();
			}
			$('.search_results .loading').remove();
			$('.search_results').append('<img src="/media/images/loading.gif" alt="Loading..." class="loading" />');
			search_xhr = $.ajax({
				type: 'get',
				url: $('#search_form').attr('action'),
				data: $('#search_form').serialize(),
				success: function (data) {
					if (data) {
					
						$('.search_results').empty();
						if (data.glossary.length || data.questions.length) {
							if (data.glossary.length) {
								for (i in data.glossary) {
									$('.search_results').append( $('<div/>').html('<span class="result"><a href="/word/'+data.glossary[i].id+'/'+data.glossary[i].word+'">'+data.glossary[i].word+'</a> - <a href="/word/'+data.glossary[i].id+'/'+data.glossary[i].word+'">'+data.glossary[i].meaning+'</a></span>') );
								}
							}
						} else {
							$('.search_results').fadeOut();
						}
							
					}
				},
				dataType: "json"
			});
		} else {
			$('.search_results').empty();
			$('.search_results').hide();
		}
	}
	/* Contact Form */
	$('#contact').validate({
		submitHandler:function(form) {
			$('#contact input[type=submit]').after(loading_img);
			$('#contact input[type=submit]').attr('disabled','disabled');
			$.ajax({
				type: 'post',
				url: $(form).attr('action'),
				data: $(form).serialize(),
				success: function (data) {
					if (data.message == 'success') {
						$('#contact input[type=text]').val('');
						$('#contact textarea').val('');
						captcha();
						$('.success').remove();
						$(form).before($('<p class="success"/>').text(data.result));
						$('.success').hide().fadeIn("slow");
						//
					} else if (data.problem == 'captcha') {
						captcha();
						$('.captcha').append($('<label for="flag_input" generated="true" class="error">You must select the correct flag below.</label>'));
					} else {
						alert(data.message);
					}
					$('#contact input[type=submit]').removeAttr('disabled');
					$(loading_img).remove();
				},
				dataType: "json"
			});
			return false;
		},
		messages: {
			name: {
				required: 'Please use your real name.' },
			email: {
				required: 'We need an e-mail address to contact you.',
				email: 'That e-mail does not appear to be valid.',
				remote: 'That e-mail address has been registered already.' },
			subject: {
				required: 'Summarize your message for us' },
			message: {
				required: 'Tell us what is on your mind' },
			flag_input: {
				required: 'You must select the correct flag below.' }
		},
		rules: {
			email: {
				required: true,
				email: true
			},
			flag_input: {
				required: true
			}
		}
	});
	/* Suggest Form */
	$('#suggest').validate({
		submitHandler:function(form) {
			$('#suggest input[type=submit]').after(loading_img);
			$('#suggest input[type=submit]').attr('disabled','disabled');
			$.ajax({
				type: 'post',
				url: $(form).attr('action'),
				data: $(form).serialize(),
				success: function (data) {
					if (data.message == 'success') {
						$('#suggest input[type=text]').val('');
						$('#suggest textarea').val('');
						captcha();
						$('.success').remove();
						$(form).before($('<p class="success"/>').text(data.result));
						$('.success').hide().fadeIn("slow");
						//
					} else if (data.problem == 'captcha') {
						captcha();
						$('.captcha').append($('<label for="flag_input" generated="true" class="error">You must select the correct flag below.</label>'));
					} else {
						alert(data.message);
					}
					$('#suggest input[type=submit]').removeAttr('disabled');
					$(loading_img).remove();
				},
				dataType: "json"
			});
			return false;
		},
		messages: {
			word: {
				required: 'This field is required.' },
			meaning: {
				required: 'This field is required.' },
			notes: {
				required: 'This field is required.' },
			flag_input: {
				required: 'You must select the correct flag below.' }
		},
		rules: {
			flag_input: {
				required: true
			}
		}
	});
});
