More than a year ago I posted an article about how to change the default view in an associated view. The most common requirement was changing the history view to display all records instead of the last 30 days, which still is the default in CRM 4.0. I haven't had time to update the code yet and the good thing is that I don't even have to. Jonathan Briggs from SoftArtisans sent me the complete solution for CRM 4.0 and it's an even better solution than the old 3.0 implementation, because it only loads the view when selecting the history view, instead of doing it while loading the form.

The basic setup hasn't changed that much, so you can still use the previous article for a detailed explanation of the code and instead of repeating everything, I simply post Jonathan's code:
 

/**************************************************************
* Change the default view of a view selection combo box
**************************************************************/
SetDefaultView = function(viewCombo, viewName, appGrid) {

    /* If the view has already been set, we don't need to do it again. */
    if (viewCombo.value != viewName) {

        /* Set the new view */
        viewCombo.value = viewName;

        /* Call RefreshGridView to run the code in the DHTML control.
         * Without this call, only the selection in the combo box changes,
         * but not the content of the grid */
       
appGrid.RefreshGridView();
    }
}

/**************************************************************
* Event handler. Called whenever the ready state of the
* areaActivityHistoryFrame changes.
**************************************************************/
areaActivityHistoryFrame_OnReadyStateChange = function() {

    /* Waiting until the frame has finished loading */
    if (this.readyState == "complete") {

        /* This is the frame we're interested in */
        var frame = document.frames("areaActivityHistoryFrame");

        /* And this is the view combo box */
        var viewCombo = frame.document.getElementById("actualend");

        /* This is the AppGridFilterContainer control we need to refresh the view */
        var appGrid = frame.document.getElementById("AppGridFilterContainer");

        /* The view combo box uses a style sheet that references a HTML
         * control. We have to wait until the htc file is loaded,
         * otherwise the call to FireOnChange in the SetDefaultView
         * method will fail. */
       
if (viewCombo.readyState == "complete") {

            /* If the control already has finished loading, we can
             * directly set the new view. */
           
SetDefaultView(viewCombo, "All", appGrid);
        }

        else {
            /* Otherwise we have to register another event handler
            * waiting until all of the include files used by the
            * combo box are loaded as well. */
           
viewCombo.onreadystatechange = function() {
                if (this.readyState == "complete") {
                    SetDefaultView(this, "All", appGrid);
                }
            }
        }
    }
}

/* Set a new onclick event for the History navigation element
 * This is where we register the onreadystatechange event handler */

if (document.getElementById('navActivityHistory') != null) {
    document.getElementById('navActivityHistory').onclick = function() {
        loadArea('areaActivityHistory');
        document.frames('areaActivityHistoryFrame').document.onreadystatechange = areaActivityHistoryFrame_OnReadyStateChange;
    }
}

I tested the implementation and it worked like a charm. Thanks Jonathan for sharing this.