﻿var waittext = '';
var cascadeloading = false;
function loadCascade(ddl,parentvalue)
{
    cascadeloading = true;
    ddl.options.length = 0;
    ddl.options[0] = new Option(waittext, '', true, true) 
    ddl.disabled = true;
    var params = new SOAPClientParameters();
    if (parentvalue && ddl.wsparameter != '')
    {
        params.add(ddl.wsparameter, parentvalue);
    }
    ddl.update = function(data) { updateCascade(ddl,data); }
    SOAPClient.invoke(ddl.wsurl, ddl.wsmethod, params, true, ddl.update);
}
function hookChangeEvent(ddl)
{
    if (ddl.child != '')
    {
        var childDDL = document.getElementById(ddl.child);
        if (childDDL && childDDL.tagName == 'SELECT') 
        { 
            ddl.onchange = function() { loadCascade(childDDL,this.value); } 
        }
    }
}
function updateCascade(ddl,wsdata)
{
    resetCascade(ddl);
    if (wsdata.name != 'ERROR')
    {  
        for(var i = 0; i < wsdata.length; i++)
        {
            if (wsdata[i].ID == ddl.selectedvalue) 
            { ddl.options[ddl.options.length] = new Option(wsdata[i].Name, wsdata[i].ID, false, true); }
            else
            { ddl.options[ddl.options.length] = new Option(wsdata[i].Name, wsdata[i].ID, false, false); }
        }
        hookChangeEvent(ddl);
        ddl.selectedvalue = '';
    }
    cascadeloading = false;
    ddl.disabled = false;
    disableChildren(ddl);
}
function disableChildren(ddl)
{
    if (ddl.child != '')
    {
        var childDDL = document.getElementById(ddl.child);
        if (childDDL && childDDL.tagName == 'SELECT')
        {
            if (childDDL.selectedvalue == '' && ddl.defaultvalue)
            {
                resetCascade(childDDL);
                childDDL.disabled = true;
                disableChildren(childDDL);
            }
            else
            {
                loadCascade(childDDL,ddl.value);
            }
        }
    }
}
function resetCascade(ddl)
{
    ddl.options.length = 0;
    if (ddl.defaultvalue && ddl.defaulttext)
    {
        //usage: new Option([text[, value[, defaultSelected[, selected]]]]) 
        ddl.options[0] = new Option(ddl.defaulttext, ddl.defaultvalue, true, false);
    }
}

