
// Function to pass the current visualiser file (specified in the
// 'hidden_visualiser_controls' form in a hidden input) to the visualiser client
// via a PHP script loaded in a hidden inline frame called 'visualiser_controller_frame'.
function send_file_to_visualiser(force)
{
    if ( ! force && ! automatic_visualiser_updates_enabled() )
        return;
    
    var visualiser_file = get_compatible_element('visualiser_file').value;
    
    var visualiser_command_file = get_compatible_element('visualiser_command_file');
    
    var url = '/visualiser_controls/send_file_to_visualiser.php?' +
               'visualiser_file=' + visualiser_file;
    
    if ( visualiser_command_file )
        url += "&visualiser_command_file=" + visualiser_command_file.value;
    
    get_compatible_element('visualiser_controller_frame').src = url;
}


// Function to enable automatic visualiser updates (by recording the 'on' setting
// in a cookie).
function toggle_enable_visualiser_updates()
{
    if ( ! automatic_visualiser_updates_enabled() )
        set_visualiser_cookie("on");
}


// Function to disable automatic visualiser updates (by recording the 'off'
// setting in a cookie).
function toggle_disable_visualiser_updates()
{
    if ( automatic_visualiser_updates_enabled() )
        set_visualiser_cookie("off");
}


// Function to toggle the automatic visualiser updates setting according to the
// current value of the checkbox. I.e. if it is now checked, enable the updates,
// otherwise disable them.
function toggle_visualiser_updates(checkbox)
{
    if ( is_checked(checkbox) )
        toggle_enable_visualiser_updates();
    else
        toggle_disable_visualiser_updates();
}


// Helper function to record the specified automatic updates setting in a
// long-term browser cookie. The value should be either 'on' or 'off'.
function set_visualiser_cookie(value)
{
    var next_year = new Date();
    next_year.setFullYear(next_year.getFullYear() + 1); // get date for one year later
    
    document.cookie = "use_relibase_visualiser=" + value +
                      "; expires=" + next_year.toGMTString() +
                      "; path=/";
}


// Helper function to determine whether automatic visualiser updates are currently
// enabled or disabled by checking the value in the browser cookie.
function automatic_visualiser_updates_enabled()
{
    if ( get_cookie_value('use_relibase_visualiser') == "on" )
        return true;
    
    return false;
}

// Function to return visualiser id for current page
function get_visualiser_id()
{
    var visualiser_id_element = get_compatible_element( "VisualiserID" );
    return visualiser_id_element.value;
}

// Function to enable embedded visualiser (by recording the 'on' setting
// in a cookie).
function toggle_enable_embedded_visualiser()
{
    if ( ! embedded_visualiser_enabled() )
        set_embedded_visualiser_cookie("on");
}


// Function to disable embedded visualiser (by recording the 'off'
// setting in a cookie).
function toggle_disable_embedded_visualiser()
{
    if ( embedded_visualiser_enabled() )
        set_embedded_visualiser_cookie("off");
}


// Function to toggle the embedded visualiser setting according to the
// current value of the checkbox. I.e. if it is now checked, enable the updates,
// otherwise disable them.
function toggle_embedded_visualiser(checkbox)
{
    if ( is_checked(checkbox) )
    {
        toggle_enable_embedded_visualiser();
    }
    else
    {
        toggle_disable_embedded_visualiser();
    }
    
    var elements = new Array( 'AstexViewer_' + get_visualiser_id(),
                              "AstexViewerController_" + get_visualiser_id(),
                              "AstexViewerSizeControls" );
    
    for (var i = 0; i < elements.length; i++)
    {
        toggle_element_display( elements[i] );
    }
}


// Helper function to record the specified embedded visualiser setting in a
// long-term browser cookie. 
function set_embedded_visualiser_cookie_key_value(key, value)
{
    var next_year = new Date();
    next_year.setFullYear(next_year.getFullYear() + 1); // get date for one year later
    
    document.cookie = key + "=" + value +
                      "; expires=" + next_year.toGMTString() +
                      "; path=/" ;
}

// Helper function to record the specified embedded visualiser setting in a
// long-term browser cookie. The value should be either 'on' or 'off'.
function set_embedded_visualiser_cookie(value)
{
    set_embedded_visualiser_cookie_key_value( "use_relibase_embedded_visualiser", value )
}


// Helper function to determine whether embedded visualiser is currently
// enabled or disabled by checking the value in the browser cookie.
function embedded_visualiser_enabled()
{
    if ( get_cookie_value('use_relibase_embedded_visualiser') == "off" )
        return false;
    
    return true;
}

// Function to change the embedded visualiser size settings.
function change_embedded_visualiser_size(display_type)
{
    var width  = parseFloat( get_compatible_element("embedded_visualiser_width").value );
    var height = parseFloat( get_compatible_element("embedded_visualiser_height").value );
    var minimum = 250;

    if ( width < minimum || height < minimum )
    {
        alert("Visualiser width and height must be at least " + minimum );
        return;
    }
    
    set_embedded_visualiser_cookie_key_value( "relibase_embedded_visualiser_" + display_type + "_width", width );
    set_embedded_visualiser_cookie_key_value( "relibase_embedded_visualiser_" + display_type + "_height", height );
    
    var av = get_compatible_element( 'AstexViewer_' + get_visualiser_id() );
    av.width = width;
    av.height = height;
    
    // Adjust size of controller in protein view
    if ( display_type == "protein" )
    {
        var avc = get_compatible_element( 'AstexViewerController_' + get_visualiser_id() );
        avc.width = width;
    }
    
}

function av_execute(command)
{
    var av = get_compatible_element( 'AstexViewer_' + get_visualiser_id() );

    // alert( command );
    av.execute(command);
    window.status = command;
}

// This would need to recieve the list of ids that
// needed highlighting, bt the effect would be
// to mark the atom ids in the cluster
// with transparent spheres
function js_highlight_waters(sel, ids)
{
    if( is_checked(sel) )
    {
        av_execute("transparency 196 id " + ids + ";")
        av_execute("display spheres on id " + ids + ";")
    }
    else
    {
        av_execute("display spheres off id " + ids + ";")
    }
}

function js_toggle_waters( form_name )
{
    // Toggle checkbox settings
    toggle_checkboxes( form_name );

    var f = get_compatible_element(form_name);
    
    // Apply current setting of checkboxes.
    for (var i = 0; i < f.length; i++)
    {
        var e = f.elements[i];
 
        if (e.type == "checkbox")
        {
            var id_array = e.id.split("_");
            id_array[0] = ''; // omit type indicator
            var ids = id_array.join(' ');
            js_highlight_waters( e, ids );
        }
    }
}

function js_highlight_wmplc(sel, water_ids, other_ids, name )
{
    js_highlight_waters( sel, water_ids );
    if( is_checked(sel) )
    {
        // -contact option is unreliable as some atoms have radius adjusted in stick mode.
        // -distance option uses absolute distances
        av_execute( "label %i id " + water_ids + " " + other_ids + ";" );
        var command = "distance -mode nbpairs -from { id " + water_ids + " " + other_ids + " } -to {  id " + water_ids + " " + other_ids + " } -contact 3.6 -dmax 3.6 -colour white -on 0.2 -off 0.2 -radius -1.0 -format %.3f -name " + name + ";"
        av_execute( command );
    }
    else
    {
        av_execute( "label clear id " + water_ids + " " + other_ids + ";" );
        av_execute( "distance -delete " + name + ";");
    }
}



