tsunami

log in
history

Old Query Designer Checkbox javascript

Luke Breuer

// Checkboxes follow the below order:
//   unchecked -> checked (ascending sort) -> checked (descending sort) -> unchecked
// Checkboxes get a number such that the lowest number was the earliest checked and the numbers
//   are always consecutive from '1'.  The suffix 'D' is appended if the sort is descending.
function OnSortClick(e, that)
{
    that = that || this;
    
    var label = that.nextSibling;
    
    var jqf = GetJQF(that);
    
    if (jqf.Sort > 0 && !(jqf.Flags & QueryFieldFlags.SortDesc))
    {
        label.innerHTML += 'D';
        jqf.Flags |= QueryFieldFlags.SortDesc;
        
        SetJQF(that, jqf);
        return false; // cancel uncheck
    }
    
    var checkboxes = GetNthInput('checkbox', 1, true);
    
    // we weren't just SortDesc, so we're removing this sort;
    //   we probably need to change other numbers
    if (!this.checked)
    {
        var removedSortLevel = jqf.Sort;
        
        if (removedSortLevel < checkboxes.length + 1)
        {
            for (var i = 0; i < checkboxes.length; i++)          
            {
                if (checkboxes[i] == that)
                    continue;
            
                var label2 = checkboxes[i].nextSibling;
                var jqf2 = GetJQF(checkboxes[i]);
                
                if (jqf2.Sort >= removedSortLevel)
                {
                    label2.innerHTML = --jqf2.Sort + (jqf2.Flags & QueryFieldFlags.SortDesc ? 'D' : '');
                    SetJQF(checkboxes[i], jqf2);
                }
            }
        }
        
        jqf.Sort = 0;
        jqf.Flags &= ~QueryFieldFlags.SortDesc;
        label.innerHTML = '';
        SetJQF(that, jqf);
    }
    else
    {       
        label.innerHTML = jqf.Sort = checkboxes.length;
        SetJQF(that, jqf);
    }
}