{% extends 'admin/change_form.html' %}
{% block extrahead %}
{{ block.super }} 
<script>
deployment_nodes = [
{% for dn in deployment_nodes %}
   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
{% endfor %}
];

deployment_flavors = [
{% for dn in deployment_flavors %}
   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
{% endfor %}
];

deployment_images = [
{% for dn in deployment_images %}
   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
{% endfor %}
];

site_login_bases = [
{% for s in site_login_bases %}
  [{{ s.0 }}, "{{ s.1 }}"],
{% endfor %}
];

function option_html(val, text, selected) {
    if (selected) {
        return '<option value="' + val + '" selected>' + text + '</option>\n';
    } else {
        return '<option value="' + val + '">' + text + '</option>\n';
    }
}

function update_nodes(deployment_select, flavor_select, node_select) {
    deployment_id = $(deployment_select).val();
    node_id = $(node_select).val();
    flavor_name = $(flavor_select).children(":selected").text()
    html="";
    for (i in deployment_nodes) {
        // this is for EC2, where the node hostnames imply the flavor.
        dn = deployment_nodes[i];
        if ((dn[0] == deployment_id) && (dn[2].lastIndexOf(flavor_name,0) === 0)) {
            html = html + option_html(dn[1], dn[2], dn[1]==node_id);
        }
    }
    if (!html) {
        // now try it without the flavor hostname prefix matching
        for (i in deployment_nodes) {
            dn = deployment_nodes[i];
            if (dn[0] == deployment_id) {
                html = html + option_html(dn[1], dn[2], dn[1]==node_id);
            }
        }
    }
    html = "<option value=''>---------</option>\n" + html;
    node_select.empty().append(html);
}

function update_flavors(deployment_select, flavor_select) {
    deployment_id = $(deployment_select).val();
    flavor_id = $(flavor_select).val();
    html = "<option value=''>---------</option>\n";
    for (i in deployment_flavors) {
        dn = deployment_flavors[i];
        if (dn[0] == deployment_id) {
            html = html + option_html(dn[1], dn[2], dn[1] == flavor_id);
        }
    }
    flavor_select.empty().append(html);
}

function update_images(deployment_select, image_select) {
    deployment_id = $(deployment_select).val();
    image_id = $(image_select).val();
    html = "<option value=''>---------</option>\n";
    for (i in deployment_images) {
        dn = deployment_images[i];
        if (dn[0] == deployment_id) {
            html = html + option_html(dn[1], dn[2], dn[1] == image_id);
        }
    }
    image_select.empty().append(html);
}

function sliver_deployment_changed(any_control) {
   /* This function handles someone changing the deployment control
      in the add-sliver line. It updats the flavors and nodes dialogs
      accordingly.
   */

   /* the inscrutable jquery selector below says:
      find the closest parent "tr" to the current element
      then find the child with class "field-deployment"
      then find the child with that is a select
      then return it's id
      then turn it into a jquery object
    */
    deployment_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-deployment select')[0].id);
    node_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-node select')[0].id);
    flavor_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-flavor select')[0].id);
    image_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-image select')[0].id);
    update_nodes(deployment_select, flavor_select, node_select);
    update_flavors(deployment_select, flavor_select);
    update_images(deployment_select, image_select);
}

function sliver_flavor_changed(any_control) {
    /* this is like sliver_flavor changed, but does not update the flavors
       control
    */
    deployment_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-deployment select')[0].id);
    node_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-node select')[0].id);
    flavor_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-flavor select')[0].id);
    update_nodes(deployment_select, flavor_select, node_select);
}

function update_slice_prefix(site_select, slice_name_id) {
    site_id = $(site_select).val();
    slice_prefix="";
    for (i in site_login_bases) {
        if (site_login_bases[i][0] == site_id) {
            slice_prefix=site_login_bases[i][1]+"_";
        }
    }
    $("#"+slice_name_id).val(slice_prefix); 
}
</script>

{% endblock %}

