var quick_options = {
    dataType: 'json',
    beforeSubmit: quick_showRequest,
    success: quick_showResponse
};

var current_task = "";



$(document).ready(function() {

    //select first task
    select_task("first");

    var search_text = $('#nav-search-input').val()
    $('#nav-search-input').focus(function() {
        if ($('#nav-search-input').val() == search_text) {
            $('#nav-search-input').val("");
        }
    });
    $('#nav-search-input').blur(function() {
        if ($('#nav-search-input').val() == "") {
            $('#nav-search-input').val(search_text);
        }
    });
    
    $('#nav-search-form').submit(function(e) {
        if ($('#nav-search-input').val() == search_text) {
            e.preventDefault();
            $('#nav-search-input').focus();
        }
    });
    
    
    // select all links
    $('.select-checkboxes').click(function(e) {
        e.preventDefault();
        $('td.checkbox input[type="checkbox"]').attr('checked', true);
    });
    $('.unselect-checkboxes').click(function(e) {
        e.preventDefault();
        $('td.checkbox input[type="checkbox"]').attr('checked', false);
    });
    
    $('.unselect-checkboxes').click(function(e) {
        e.preventDefault();
        $('td.checkbox input[type="checkbox"]').attr('checked', false);
    });
    
    //close alert messages
    $('#alert-messages').click(function(e) {
        $('#alert-messages').hide();
    });
    
    if ($('#alert-messages').length > 0) {
        var t=setTimeout("hide_messages()",5000);
    }
    
    //quick add stuff
    if ($('#quick-add').length > 0) {
        $('#quick-add-submit').click(function(e) {
            $('#quick-add-form').ajaxForm(quick_options);
        });
    }
    
    $('#quick-add-link').click(function(e) {
        e.preventDefault();
        if ($('#quick-add').css('display') == "none") {
            show_quick_add();
        }
        else {
            $('#quick-add').hide();
        }
    });
    
    
    //select order
    var loc = window.location + "";
    
    try {
        var filters = loc.split("order:")[1].split("/")[0].split(":");
        var order = filters[0];
        var direction = filters[1];
    }
    catch(err) {
        var order = "priority";
        var direction = "up";
    }
    
    $('.order-down').hide();
    $('.reverse').hide();
    
    if (direction == "down") {
        var direction_opposite = "up";
    }
    else {
        var direction_opposite = "down";
    }
    
    $('.'+order+'-'+direction).hide();
    $('.'+order+'-'+direction_opposite).show();
    $('.'+order+'-'+direction_opposite+' .reverse').show();
    
    if (direction == "up") {
        $('.'+order+'-'+direction_opposite+' .reverse').text("↑");
    }
    else {
        $('.'+order+'-'+direction_opposite+' .reverse').text("↓");
    }
    
    $('.'+order+'-'+direction_opposite).mouseover(function(e) {
        if ($('.'+order+'-'+direction_opposite+' .reverse').text() == "↓") {
            $('.'+order+'-'+direction_opposite+' .reverse').text("↑");
        }
        else {
            $('.'+order+'-'+direction_opposite+' .reverse').text("↓");
        }
    });
    
    $('.'+order+'-'+direction_opposite).mouseout(function(e) {
        if ($('.'+order+'-'+direction_opposite+' .reverse').text() == "↓") {
            $('.'+order+'-'+direction_opposite+' .reverse').text("↑");
        }
        else {
            $('.'+order+'-'+direction_opposite+' .reverse').text("↓");
        }
    });
    
    
});

function hide_messages() {
    $('#alert-messages').fadeOut("slow")
}

var selectedInput = null;

//keyboard shortcuts

//show quick add
$(document).bind('keyup', {combi:'q', disableInInput: true}, show_quick_add);

//set focus on search box
$(document).bind('keyup', {combi:'f', disableInInput: true}, function(){ $('#nav-search-input').focus(); });
$(document).bind('keyup', {combi:'s', disableInInput: true}, function(){ $('#nav-search-input').focus(); });

//go to new task form
$(document).bind('keyup', {combi:'n', disableInInput: true}, function(){ window.location=$('#add-button').attr('href'); });

//go back
$(document).bind('keyup', {combi:'b', disableInInput: true}, function(){ parent.history.back(1); });


//select task in list

$(document).bind('keydown', {combi:'z', disableInInput: true}, function(){

    select_task("next");
});

$(document).bind('keydown', {combi:'x', disableInInput: true}, function(){
    select_task("previous");
});

//previous page
$(document).bind('keydown', {combi:'Shift+z', disableInInput: true}, function(){
    if ($('#pagination-previous-page').attr("href")) {
        window.location = $('#pagination-previous-page').attr("href");
    }
});

//next page
$(document).bind('keydown', {combi:'Shift+x', disableInInput: true}, function(){
    if ($('#pagination-next-page').attr("href")) {
        window.location = $('#pagination-next-page').attr("href");
    }
    
});

var current_table = 0;
function select_task(select) {
    
    switch(select) {
    case "next":
        var next_task = $(current_task).next();
        if (next_task.length == 0) {
            if ($('table.list:eq('+(current_table+1)+')').length > 0) {
                current_table++;
                next_task = $('table.list:eq('+current_table+') tr:first');
            }
        }
        set_task(next_task);
        break;
      
    case "previous":
        var next_task = $(current_task).prev().not('.loading-task');
        if (next_task.length == 0) {
            if ($('table.list:eq('+(current_table-1)+')').length > 0) {
                current_table--;
                next_task = $('table.list:eq('+current_table+') tr:last');
            }
        }
        set_task(next_task);
        break;
      
    case "first":
        current_table = 0;
        current_task = $('table.list:eq(0) tr').not('.loading-task')[0];
        $(current_task).children('td.arrow').children('img').show();
        break;
    }
}


function set_task(obj) {
    if (obj.length > 0) {
        var new_location = $(obj).children('td.arrow');
        //alert($(obj).children('td.arrow'));
        $(current_task).children('td.arrow').children('img').appendTo(new_location);
        current_task = obj;
        
        var top = $(window).scrollTop();
        var window_height = $(window).height();
        var fold = $(window).height() + top;
        var elem_top = $(obj).offset().top
        
        if (fold - elem_top < 50) {
            var obj_offset = elem_top - window_height + 150;
            $.scrollTo({top:obj_offset+'px', left:0}, 0);
        }
        else if (elem_top - top < 50) {
            var obj_offset = elem_top - 150;
            $.scrollTo({top:obj_offset+'px', left:0}, 0);
        }
    }
}

//check checkbox
$(document).bind('keyup', {combi:'c', disableInInput: true}, function(){
    var checkbox = $(current_task).children(".checkbox").children("input")[0];
    $(checkbox).attr("checked", !$(checkbox).attr("checked"))
});

//go to selected task
$(document).bind('keyup', {combi:'v', disableInInput: true}, function(){
    var location = $(current_task).children(".title").children("a")[0];
    if (location) {
        window.location=location;
    }
});

//edit selected task
$(document).bind('keyup', {combi:'e', disableInInput: true}, function(){
    edit_task();
});
$(document).bind('keyup', {combi:'m', disableInInput: true}, function(){
    edit_task();
});


function edit_task() {
    url = $(current_task).children(".title").children("a")[0];
    
    if (url) {
        var location = url + "edit/";
    }
    else {
        url = $('#task-content h1 .edit a').attr("href");
        var location = url;
    }
    
    if (location) {
        window.location=location;
    }

}


//lose focus from input boxes
$(document).bind('keyup', 'Esc', function(event){
    var target = findElement(event.currentTarget), 
        jTarget = $(target),
        ids = jTarget.attr('hkId');
    var elem = $(event.target);
    
    if (jTarget.is("input") || jTarget.is("textarea") || elem.is("input") || elem.is("textarea")) {
        elem.blur();
    }
});

function findElement(elem){
    if (!$(elem).attr('hkId')){
        if ($.browser.opera || $.browser.safari){
            while (!$(elem).attr('hkId') && elem.parentNode){
                elem = elem.parentNode;
            }
        }
    }
    return elem;
};




//other functions

function show_quick_add() {
    if ($('#quick-add').css('display') == "none") {
        $('#quick-add-form').hide();
        $('#quick-add').show();
        $('#quick-add-form').fadeIn();
        $('#quick-add-input').focus();
    }
    else {
        $('#quick-add-input').focus();
    }
}

function quick_showRequest(formData, jqForm, options) {
    if ($('#quick-add-input').val() == "") {
        $('#quick-add-input').focus();
        return false; 
    }
    else {
        select_task(0);
        if ($('#task-list-form').css('display') == "none") {
            $('#task-list-form').fadeIn();
            $('#empty-notice').hide();
        }
        $('.loading-task:first').clone().insertAfter('.loading-task:last');
        $('.loading-task:last').fadeIn();
        $('#quick-add-input').val("")
        return true; 
    }
}

function quick_showResponse(responseText, statusText)  {
    if (responseText.errors == true) {
        response = '<tr class="hidden" id="new-broken"><td class="arrow"></td><td class="checkbox"></td><td class="status"></td><td class="title"><span class="error-text">Sorry, there has been a problem adding the task: "'+responseText.title+'". Please try again later</span></td><td class="assigned-to"></td><td class="due"></td></tr>';
    }
    else {
        response = '<tr class="hidden" id="new-'+responseText.id+'"><td class="arrow"></td><td class="checkbox"><input type="checkbox" name="task" value="'+responseText.id+'" /></td><td class="status"><span class="status-todo">To do</span></td><td class="title"><a href="'+responseText.url+'" title="'+responseText.title+'">'+responseText.title+'</a></td><td class="assigned-to"></td><td class="due"></td></tr>';
        
    }
    $('.loading-task:last').fadeOut(function(){
        $(this).remove();
        $('.loading-task:last').after(response);
        if (responseText.errors == false) {
            $('#list-count').text(parseInt($('#list-count').text())+1);
            $('#new-'+responseText.id).fadeIn();
            set_task($('#new-'+responseText.id));
        }
        else {
            $('#new-broken').fadeIn();
            $('#new-broken').attr("id", "");
        }
    });
}

