var saving = 0;
var recently_used = [];
var top_of_deck_size = 6;
var adjustment_directions = {
    'right':1,
    'wrong':-1,
    'neutral':0};

function update_knowledge_meter(){
    var known = 0;
    jQuery.each(cards, function(){
	if(this.knowledge>0.75){
	    known = known + 1;
	}
    });
    var percent = known/cards.length;
    percent = Math.ceil(percent*100);
    $('#knowledge_meter img').attr('src', 'http://chart.apis.google.com/chart?cht=gom&chd=t:'+percent+'&chs=171x90&chl='+percent+'%');
}


//change the knowledge rating for the card
function adjust_card(card, direction){
    var card_id = card.card_id;
    var card_knowledge = parseFloat(card.knowledge);
    if((card_knowledge < 0)||(card_knowledge>1)){
	card_knowledge = 1;
    }else{
	if(direction<0){
	    card_knowledge = 0.5*card_knowledge;
	}
	if(direction>0){
	    card_knowledge = card_knowledge + ((1-card_knowledge)*0.6);
	}
    }
    card.knowledge = card_knowledge;
    $.ajax({
	type: "GET",
	url: "/layout-json/card/update_knowledge/",
	data: "card_id="+card_id+"&card_knowledge="+card_knowledge
    });
}


function knowledge_compare(a, b){
    if(recently_used.inArray(a.card_id)){
	if(recently_used.inArray(b.card_id)){
	    return recently_used.inArray(b.card_id) - recently_used.inArray(a.card_id)
//	    return a.knowledge - b.knowledge;
	}else{
	    return 1;
	}
    }else if(recently_used.inArray(b.card_id)){
	return -1;
    }
    return a.knowledge - b.knowledge
}


Array.prototype.inArray = function (value) {
    var i;
    for (i=0; i < this.length; i++) {
	if (this[i] == value) {
	    return i+1;
	}
    }
    return false;
};

function update_cards(){
    $('#cards').empty();
    jQuery.each(data.cards, function(i, card) {
        var card_template = $("#glossary_card_template").clone().appendTo('#cards').attr('id', 'glossary_card_'+card.card_id);
	card_template.find('dt').html(card.card_front);
	card_template.find('dd').html(card.card_back);
	log(card);
	if(card.deleted==1){
	    card_template.find('.undelete_card').click(function(){undelete_card(card.card_id)});
	    card_template.find('.delete_card').hide();
	}else{
	    card_template.find('.delete_card').click(function(){delete_card(card.card_id)});
	    card_template.find('.undelete_card').hide();
	}
    });
    window.scrollTo(0,9999999);
    saving = saving -1;
    update_saving();
}

function update_saving(){
    if(saving>0){
	$('#all_saved').hide();
	$('#saving_count').text(saving);
	$('#currently_saving').show();
    }else{
	$('#currently_saving').hide();
	$('#all_saved').show();
    }
}


$(document).ready(function() {
    $('#available_tags_header').click(function(){
	$('#available_tags').toggle();
    });

    function save_card(){
	    var card_front = $('#add_card #add_card_card_front').val();
	    var card_back = $('#add_card #add_card_card_back').val();

	    if(card_front=='') {
		$("#add_card_card_front").focus();  
		return 0;
	    }
	    if(card_back=='') {
		$("#add_card_card_back").focus();  
		return 0;
	    }
	    $('#add_card #add_card_card_front').val('');
	    $('#add_card #add_card_card_back').val('');
	    $("#add_card_card_front").focus();

	    saving = saving + 1;
	    update_saving();
	    jQuery.getJSON('/layout-json/decks/add_card', 
			   {'deck_id':data.deck.deck_id,
			    'card_front':card_front,
			    'card_back':card_back
			   },
			   function(new_data){
			       data.cards = new_data.cards;
			       update_cards();
			   }
			  );

    };


    function set_next_add_card(){
	$('.save_card').focus(function(){
		save_card();
	});
	$('.save_card').click(function(){
		save_card();
	});
    }//set_next_add_card()
    set_next_add_card();
    
    $('#input_side_order').change(function(){
	$('#card_front').css('visibility', 'visible');
	$('#card_back').css('visibility', 'visible');
	new_card();
    });


    var card;
    var flipped = 0;
    function new_card(){
	//shuffle deck
	cards.sort(knowledge_compare);
	cards.sort(
		   function() {
		       return 0.5 - Math.random()
			   }
		   );
	//sort by knowledge

	card = cards[0];
	recently_used.push(cards[0].card_id);
	if(cards.length/2<top_of_deck_size){
	    top_of_deck_size = Math.floor(cards.length/2)
	}
	if(recently_used.length > top_of_deck_size){
	    recently_used.shift();
	}
	flipped = 0;
	var hide_back = 1;
	if($('#input_side_order').val()=='back-front'){
	    hide_back = 0;
	}else if($('#input_side_order').val()=='random'){
	    hide_back = Math.floor(Math.random()*2);
	}
	if(hide_back){
	    $('#card_back').css('visibility', 'hidden');
	}else{
	    $('#card_front').css('visibility', 'hidden');
	}
	$('.response').css('visibility', 'hidden');
	$('.response, .response_text').css('visibility', 'hidden');
	$('#flip').css('visibility', 'visible');
	update_knowledge_meter();
	$('#front_content').html(card.card_front);
	$('#back_content').html(card.card_back);
	$('#knowledge_rating').html(card.knowledge);

    }
    if(window.cards !==undefined){
	$('#card_front').css('visibility', 'visible');
	$('#card_back').css('visibility', 'visible');
	new_card();
    }
    

    function response(r_type){
	if(!flipped) return;
	adjust_card(card, adjustment_directions[r_type]);

	new_card();
	update_knowledge_meter();
    }

    function flip(){
	flipped = 1;
	$('#card_front').css('visibility', 'visible');
	$('#card_back').css('visibility', 'visible');
	$('.response, .response_text').css('visibility', 'visible');
	$('#flip').css('visibility', 'hidden');
    }


    $('#input_reset').click(function(){
	jQuery.getJSON('/layout-json/decks/reset', 'deck_id='+data.deck.deck_id, function(fetched_data){
	    window.location.reload();
	} )
    });

    function update_page(){
	alert('hello');
    }

    $('.response').click(function(){
	response($(this).attr('id'));
    });
    $('#flip').click(function(){
	flip();
    });

    shortcut.add("1",function() {
	response('right');
    },
		 {
		     'type':'keydown',
		     'disable_in_input':true
		 }	 
		);
    shortcut.add("2",function() {
	response('wrong');
    },
		 {
		     'type':'keydown',
		     'disable_in_input':true
		 }	 
		);

    shortcut.add("3",function() {
	response('neutral');
    },
		 {
		     'type':'keydown',
		     'disable_in_input':true
		 }	 
		);

    shortcut.add("f",function() {
	flip();
    },
		 {
		     'type':'keydown',
		     'disable_in_input':true
		 }	 
		);
    shortcut.add("4",function() {
	flip();
    },
		 {
		     'type':'keydown',
		     'disable_in_input':true
		 }	 
		);

});


function delete_card(card_id){
    $.ajax({
	type: "GET",
	url: "/layout-json/card/delete/",
	data: "card_id="+card_id
    });
    $('#glossary_card_'+card_id).hide('fast');
}
function undelete_card(card_id){
    $.ajax({
	type: "GET",
	url: "/layout-json/card/undelete/",
	data: "card_id="+card_id
    });
    $('#glossary_card_'+card_id).hide('fast');
}