{% 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 %}
];

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

function update_nodes(deployment_select, node_select_id) {
    deployment_id = $(deployment_select).val();
    html = "<option value=''>---------</option>\n";
    for (i in deployment_nodes) {
        dn = deployment_nodes[i];
        if (dn[0] == deployment_id) {
            html = html + '<option value="' + dn[1] + '">' + dn[2] + '</option>\n'
        }
    }
    //console.log(html);
    $("#"+node_select_id).empty().append(html);
}

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

function sliver_deployment_changed(deployment_select) {
   /* the inscrutable jquery selector below says:
      find the closest parent "tr" to the current element
      then find the child with class "field-node"
      then find the child with that is a select
      then return its id
    */
    nodes_select_id = $($(deployment_select).closest('tr')[0]).find('.field-node select')[0].id;
    update_nodes(deployment_select, nodes_select_id);
    flavors_select_id = $($(deployment_select).closest('tr')[0]).find('.field-flavor select')[0].id;
    update_flavors(deployment_select, flavors_select_id);
}

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 %}

