$.tablesorter.addParser({
    id: 'justNumbers',
    is: function(screen) {
        return false;
    },
    format: function(s) {
        var number = s.toLowerCase().replace(/\D/, '');

        return $.tablesorter.formatFloat(number);
    },
    type: 'numeric'
});

$.tablesorter.addParser({
    id: "shortDateNordic",
    is: function(s) {
        return false;
    },
    format: function(s) {
        var date = new Date(s.replace(/(\d{1,2})[\.\-](\d{1,2})[\.\-](\d{2,4})/, "$2/$1/$3"));
        if (date.getFullYear() < 1950){
            date.setFullYear(date.getFullYear() + 100, date.getMonth(), date.getDate());
        }
                
        var value = date.getTime();
        
        return $.tablesorter.formatFloat(value);
    },
    type: "numeric"
});

$(function() {
    $.validator.addMethod(
        "dateEx", 
        function(value, element) {
            return this.optional(element) || /^([\d]{1,2}[./-]){2}[\d]{2,4}$/.test(value);
        }, 
        "* Not a valid date"
    );

    $("#start").datepicker(GetDatePickerOptions());
    $("#end").datepicker(GetDatePickerOptions());

    $("#arrivals").tablesorter({
        headers: {
            2: { sorter: 'shortDateNordic' },
            3: { sorter: 'justNumbers' },
            4: { sorter: 'shortDateNordic' },
            5: { sorter: 'justNumbers' },
            6: { sorter: 'justNumbers' },
            7: { sorter: 'justNumbers' },
            8: { sorter: 'justNumbers' },
            9: { sorter: 'justNumbers' },
            10: { sorter: 'justNumbers' }
        }
    });

    SortTable();

    FillBoxes();

    ValidationSetup();
})

function GetDatePickerOptions() {
    return {
        dateFormat: 'dd.mm.yy',
        firstDay: 1
    }
}

function SortTable() {
    var table = $("#arrivals");

    if (table.find("tr").length <= 1) {
        return;
    }

    table.trigger("update");
    table.trigger("sorton", [[[2, 0], [3, 0]]]);
}

function FillBoxes() {
    $("#start").val($.jqURL.get('start'));
    $("#end").val($.jqURL.get('end'));

    FillSelectedPorts();
}

function FillSelectedPorts() {
    var qs = $.jqURL.qs();
    if (!qs) {
        return;
    }

    var ports = [];
    var parameters = qs.split('&');
    for (var i = 0; i < parameters.length; i++) {
        var pair = parameters[i].split('=');

        if (pair[0] == 'ports' && pair[1]) {
            ports.push(pair[1]);
        }
    }

    $("#portsList option").each(function(i, item) {
        var option = $(item);
        if ($.inArray(option.val(), ports) > -1) {
            option.attr("selected", "selected");
        }
    });
}

function ValidationSetup() {
    $("#searchForm").validate({
        rules: {
            start: "dateEx",
            end: "dateEx"
        }
    });
}

