function initVesselTypeFilter(displayLabels) {
    var subGroup = $("input[class='subgroup-radios']:checked").val().toLowerCase().replace(' ', '');

    $("input[class='subgroup-radios']").click(function() {


// *****  Added this so that user doesn't lose categories when clicking on an already selected radio button.
        //alert("previously selected: "+ previouslySelectedRadioValue);
        //alert("clicked: " + $(this).val());

        //if not already set give it the checked value and store in the window
/*        if (window.previouslySelectedRadioValue == null) {
            window.previouslySelectedRadioValue = $("input[class='subgroup-radios']:checked").val();
        }*/

        // if the values are the same then return out of this, nothing has changed.
        if (window.previouslySelectedRadioValue == $(this).val() || window.previouslySelectedRadioValue == null) {
            return;
        }

        //set the current value as previous for comparison on future changes
        window.previouslySelectedRadioValue = $(this).val();

// *****

        var group = $("input[name=parameters['FL1_GROUP']]").val();
        var subGroup = $("input[class='subgroup-radios']:checked").val().toLowerCase().replace(/ /g, '');
        var categories = $("#categories-" + subGroup).clone().attr('id', 'categories').attr("name", "parameters['FL1_CATEGORIES']");

        //  Container channel categories are shared among all sub types.  Don't update when switching sub type, i.e don't lose the selected categories
        if (group != "Container") {
            $("#categories").replaceWith(categories);
            var options = {};
            if (displayLabels.contains(subGroup)) options.displayLabel = false;
            categories.jSelect(options);
        }
    });

    var options = {};
    options.preSelectAll = false;
    if (displayLabels.contains(subGroup)) options.displayLabel = false;
    $("#categories").jSelect(options);
}

function initFleetList(o) {
    var defaults = {
        jTable: '.jTable'
    }
    o = $.extend(defaults, o);

    $('#filters').hide();
    //$("#hideShowColumns").hide();
    $('#available-filters').hide();
    $('#toggle-add-filter').show();
    $('.remove-filter').show();
    $(o.jTable + " th[title='" + $('#sortColumn').val() + "']").addClass($('#sortOrder').val().toLowerCase());

    $('#active-filters-list input').each(function() {
        var id = $(this).val();
        $('#' + id + "-filter").appendTo('#active-filters');
        $('#' + id + '-select-filter').remove();        
    });

    sortOptions($('#select-filter'));

    $('#filters select.show-value').change(function () {
        var str = "";
        $('option:selected', this).each(function () {
            str += $(this).text() + ", ";
        });
        if (str.length == 0) {
            str = "Please select options. Hold down the <em>CTRL</em> key to select multiple options.";
        } else {
            str += '<a href="#' + this.id + '" title="Clear values" class="clear-filter"><em>clear</em></a>';
        }
        $('#' + this.id + '-value').html(str);
    }).change();
    $('#add-filter-link').click(function() {
        var filter = $('#select-filter').val();
        $('#' + filter + '-filter').appendTo('#active-filters');

        $('#' + filter + '-select-filter').remove();

        $('#active-filters-list').append('<input type="hidden" value="' + filter + '" name="activeFilters" id="' + filter + '-active-filter" />');

        // added by RDC - 12/11/09 - if the user selects all the filters, hide the select drop-down selection
        // and notify the user... This is switched back by default whenever a filter is removed from the active-filters list (see below).
        hideFilterSelectIfNoMoreFilters();
        return false;
    });

    initRemoveFilter();

    $('a.clear-filter').live("click", function() {
        //var filter = $(this).attr('href').replace("#","");
        var filter = $(this).attr('href').substr($(this).attr('href').indexOf("#") + 1);
        $('#' + filter).val('');
        $('#' + filter + '-value').html("Please select options. Hold down the <em>CTRL</em> key to select multiple options.");
        return false;
    });

    $('#results-filter-form a.toggle-div').click(function() {
        $(this).toggleClass('div-on');
        $($(this).attr('href')).toggle();
        if ($(this).hasClass('replace-html')) {
            var el = !$(this).hasClass('replace-toggler') ? $(this) : $($(this).attr('href') + '-toggler');
            var name = $(el).attr('name');
            $(el).attr('name', $(el).html());
            $(el).html(name);
            if ($(".addFilterSubBox label").text() == "Select filter to add") {
                $("#select-filter").show(); // this is here for IE6 because the drop-down bleeds onto the page even though its parent div is hidden...
            }
        }
        return false;
    });
    $('#remove-filters-link').click(function() {
        $('#vessel-type-filter-form').submit();
        return false;
    });

    initPager();

    //when submiting form reset page number
    $('.filterPanel input[type="submit"][value="Search"]').click(function(){
        $('input[name="pageNumber"]').val(1);
    });

    $(o.jTable).jTable(null, function(el, sortOrder) {
        var sortColumn = $(el).attr('title');
        $('#sortColumn').val(sortColumn);
        $('#sortOrder').val(sortOrder);
        $('#ordering-input').val(sortColumn + "|" + sortOrder);
        $('input[name="pageNumber"]').val(1);          
        $('#results-filter-form').submit();
    }, updateColumnsCookie);
    hideFilterSelectIfNoMoreFilters(); // checks if all the filters have been added - useful if search is re-run
    //$('th[title=All]').addClass('All');
    $('th[title=All]').width('50%');
}

function initPager(){
    /* [rdc] removed the use of illegal attr 'data-page' */
    /* [pa] this is not an illegal attribute in html5 using # and href is not consistent accros browsers personally think it is fine to use data-XXX to attach aditional data tot he tag if required as this is complaint with html5 specification */
    /*$('.ui-pager a').click(function(){
        var uiPager = $(this).closest('.ui-pager');
        var pageNumber = $(this).attr('data-page');
        $('input[name="pageNumber"]',uiPager).val(pageNumber);
        $(this).closest('form').submit();
        return false;
    });*/

    $('.ui-pager a').click(function(){
        var uiPager = $(this).closest('.ui-pager');
        var pageNumber = $(this).attr('href').split("#")[1];
        $('input[name="pageNumber"]',uiPager).val(pageNumber);
        $(this).closest('form').submit();
        return false;
    });

    $('select[name="resultsPerPage"]').change(function(){
        var uiPager = $(this).closest('.ui-pager');
        $('input[name="pageNumber"]',uiPager).val(1);        
        $(this).closest('form').submit();
    });

    $('.ui-selector').change(function(){
        var form = $(this).closest('form');
        var table = $('.jTable', form);
        var inputs = $('tbody input.selectable', table);
        if($(this).is(':checked')){
            $(inputs).attr('checked', 'checked');
        } else{
            $(inputs).removeAttr('checked');
        }
    });
}

function initRemoveFilter(){
    $('.remove-filter a').click(function() {
        var id = $(this).attr('href').replace("#", "");
        $('#' + id + '-filter input').val('');
        $('#' + id + '-filter select').val('').change();
        $('#' + id + '-filter').appendTo('#available-filters');

        var optgroupId = $(this).attr('data-optgroup-id');
        var option = '<option value="' + id + '" id="' + id + '-select-filter">' + $(this).attr('name') + '</option> ';
        if(isDefined(optgroupId)){
            $('#' + optgroupId).append(option);
        } else{
            $('#select-filter').prepend(option);
        }

        $('#' + id + '-active-filter').remove();

        //reorder options
        sortOptions($('#select-filter'));

        showFilterSelectIfFiltersAvailable();
        return false;
    });
}

function sortOptions(parent){
    var objects = new Array();
    var optgroups = $(parent).children('optgroup');
    if(isDefined(optgroups)){    
        $(optgroups).each(function(){
            sortOptions($(this));
            objects.push(new Opt($(this).attr('label'), $(this)));
        });
    }
    var options = $(parent).children('option');
    if(isDefined(options)){
        $(options).each(function(){
            objects.push(new Opt($(this).text(), $(this)));
        });
    }
    objects.sort(compareOptionText);
    $(objects).each(function(){
        parent.append(this.content);
    });
}

function compareOptionText(a,b) {
    return a.text!=b.text ? a.text<b.text ? -1 : 1 : 0;
}

function Opt(text, content){
    this.text = text;
    this.content = content;
}

function initSimpleJGrid() {
    //$("#hideShowColumns").hide();
    $(".jTable th[title='" + $('#sortColumn').val() + "']").addClass($('#sortOrder').val().toLowerCase());
    $('#results-filter-form a.toggle-div').click(function() {
        $(this).toggleClass('div-on');
        $($(this).attr('href')).toggle();
        if ($(this).hasClass('replace-html')) {
            var el = !$(this).hasClass('replace-toggler') ? $(this) : $($(this).attr('href') + '-toggler');
            var name = $(el).attr('name');
            $(el).attr('name', $(el).html());
            $(el).html(name);
        }
        return false;
    });

    initPager();

    $('.jTable').jTable(null, function(el, sortOrder) {
        $('#sortColumn').val($(el).attr('title'));
        $('#sortOrder').val(sortOrder);
        $('#advanced-sorting-input').val('false');           
        $('#results-filter-form').submit();
    });
}

function initFilters() {
    $('#filters').hide();
    $('#available-filters').hide();
    $('#toggle-add-filter').show();
    $('.remove-filter').show();

    $('#active-filters-list input').each(function() {
        $('#' + $(this).val() + "-filter").appendTo('#active-filters');
    });

    /*    $('#filters select.show-value').change(function () {
     var str = "";
     $('option:selected', this).each(function () {
     str += $(this).text() + ", ";
     });
     if (str.length == 0) {
     str = "Please select options. Hold down the <em>CTRL</em> key to select multiple options.";
     } else {
     str += '<a href="#' + this.id + '" title="Clear values" class="clear-filter"><em>clear</em></a>';
     }
     $('#' + this.id + '-value').html(str);
     }).change();*/

    $('select.show-value').change(function () {
        var str = "";
        $('option:selected', this).each(function () {
            str += $(this).text() + ", ";
        });
        if (str.length == 0) {
            str = "Please select options. Hold down the <em>CTRL</em> key to select multiple options.";
        } else {
            str += '<a href="#' + this.id + '" title="Clear values" class="clear-filter"><em>clear</em></a>';
        }
        $('#' + this.id + '-value').html(str);
    }).change();

    $('#add-filter-link').click(function() {
        var filter = $('#select-filter').val();
        $('#' + filter + '-filter').appendTo('#active-filters');

        $('#' + filter + '-select-filter').remove();

        $('#active-filters-list').append('<input type="hidden" value="' + filter + '" name="activeFilters" id="' + filter + '-active-filter" />');

        // added by RDC - 12/11/09 - if the user selects all the filters, hide the select drop-down selection
        // and notify the user... This is switched back by default whenever a filter is removed from the active-filters list (see below).
        hideFilterSelectIfNoMoreFilters();
        return false;
    });

    /*$('#add-filter-link').click(function() {
     var filter = $('#select-filter').val();
     $('#' + filter + '-filter').appendTo('#active-filters');
     $('#' + filter + '-select-filter').remove();
     $('#active-filters-list').append('<input type="hidden" value="' + filter + '" name="activeFilters" id="' + filter + '-active-filter" />');
     return false;
     });*/

    $('.remove-filter a').click(function() {
        var filter = $(this).attr('href').replace("#", "");
        $('#' + filter + '-filter input').val('');
        $('#' + filter + '-filter select').val('').change();
        $('#' + filter + '-filter').appendTo('#available-filters');
        $('#select-filter').append('<option value="' + filter + '" id="' + filter + '-select-filter">' + $(this).attr('name') + '</option> ');
        $('#' + filter + '-active-filter').remove();
        showFilterSelectIfFiltersAvailable();
        return false;
    });

    /*    $('#filters a.clear-filter').live("click", function() {
     var filter = $(this).attr('href').substr($(this).attr('href').indexOf("#") + 1);
     $('#' + filter).val('');
     $('#' + filter + '-value').html("Please select options. Hold down the <em>CTRL</em> key to select multiple options.");
     return false;
     });*/

    $('a.clear-filter').live("click", function() {
        var filter = $(this).attr('href').substr($(this).attr('href').indexOf("#") + 1);
        $('#' + filter).val('');
        $('#' + filter + '-value').html("Please select options. Hold down the <em>CTRL</em> key to select multiple options.");
        return false;
    });

    $('#results-filter-form a.toggle-div').click(function() {
        $(this).toggleClass('div-on');
        $($(this).attr('href')).toggle();
        if ($(this).hasClass('replace-html')) {
            var el = !$(this).hasClass('replace-toggler') ? $(this) : $($(this).attr('href') + '-toggler');
            var name = $(el).attr('name');
            $(el).attr('name', $(el).html());
            $(el).html(name);
        }
        return false;
    });

}

/** hideFilterSelectIfNoMoreFilters()
 *  checks if all the filters have been added - useful if search is re-run
 *  otherwise, the drop down is shown with no filters inside
 */

function hideFilterSelectIfNoMoreFilters() {
    if ($("#select-filter option").length == 0) {
        $("#select-filter").hide();
        $("#add-filter-link").hide();
        $(".addFilterSubBox label").css("width", "200px");
        $(".addFilterSubBox label").text("No more filters are available.");
    }
}

function showFilterSelectIfFiltersAvailable() {
    if ($("#add-filter").css("display") == "block") {
        $("#select-filter").show(); // this is here for IE6 - the drop down bleeds onto the page even though it's parent is hidden...
    }
    $("#add-filter-link").show();
    $(".addFilterSubBox label").css("width", "150px");
    $(".addFilterSubBox label").text("Select filter to add");
}

/* toggles between serious/all casualties charts */
function CasualtyTypeToggle() {
    $('#casualties-serious').hide();
    $('.switch-casualties').click(function() {
        $('#casualties .summary-content').hide();
        $($(this).attr('href')).show();
        return false;
    });
}

function vesselsDwtSummaryToggle(summaryName) {
    $('.switch-' + summaryName + 'Graph').click(function() {
        $('.' + summaryName + 'Switch').hide();
        $($(this).attr('href')).show();
        return false;
    });
}

function toggleCasualtyCounterInfo() {
    $("#counterToggle").mousedown(function() {
        $(".counterInfo").slideToggle("fast");
    })
}

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) return true;
    }
    return false;
}

function selectAllCheckbox() {
    $("#select-all").click(function()
    {
        if (this.checked) {
            $("input:checkbox[name='myVessel']").each(function()
            {
                var parent = $(this).parents('tr').get(0);
                $(parent).addClass('selected-tr');
                this.checked = true;
            });
        }
        else {
            $("input:checkbox[name='myVessel']").each(function()
            {
                var parent = $(this).parents('tr').get(0);
                $(parent).removeClass('selected-tr');
                this.checked = false;
            });
        }
    });
}

function initDownloadAsCsv(){
    $('#download-as-csv-link').click(function(){
        var totalResults = $('#total-results-input').val();
        var isOk = true;
        if(totalResults > 5000){
            isOk = confirm("Too many results. Only first 5000 will be exported. Do you want to proceed?");
        } else if(totalResults <= 0){
            alert('No Data for current selection. Please re-run your search.');
            isOk = false;
        }
        if(isOk){
            $('#view-type-input').val('csv');
            var headers = '';
            $('#columnHeaders th').each(function() {
                if($(this).is(':visible') && $(this).attr('title') != null && $(this).attr('title') != ''){
                    headers += '<input type="hidden" name="headers" value="' + $(this).attr('title') + '">\n';
                }
            });
            $('#headers-inorder').html(headers);
            $('#results-filter-form').submit();
            $('#view-type-input').val('jsp');
        }
        return false;
    });
}

function initDownloadAsExcel() {
    $('.export-excel').click(function() {
        $('#view-type-input').val('Export as Excel Document');
        var headers = '';
        $('#columnHeaders th').each(function() {
            if ($(this).is(':visible') && $(this).attr('title') != null && $(this).attr('title') != '') {
                headers += '<input type="hidden" name="headers" value="' + $(this).attr('title') + '">\n';
            }
        });
        $('#headers-inorder').html(headers);
        $('#results-filter-form').submit();
        $('#view-type-input').val('jsp');

        return false;
    });
}

function initUserLayout(){
    $('#user-layout-link').click(function(){
        var ordering = $('#ordering-input').val();
        //if ordering is null get ordering from sortColumn sortOrder fields
        if(!hasText(ordering)){
            ordering = $('#sortColumn').val() + '|' + $('#sortOrder').val();
        }
        initAjaxDialog({
            width:685,
            extract: null,
            title:$(this).attr('title'),
            dialogId: 'user-layout-dialog'
        }, {
            url:  $(this).attr('href'),
            data: { userSearchTypeCode:$('#search-type-code').val(), columns:getColumnsString($('#columnHeaders th')), order:ordering }
        });
        return false;
    });
}

function sortOptionLablels(id) {
    var options = $(id + " option");
    options.sort(function(a, b) {
        if (a.text > b.text) return 1;
        else if (a.text < b.text) return -1;
        else return 0
    });
    $(id).empty().append(options);
}
