
dw_writeStyleSheet = function(file, screen) {
    var css = '<link rel="stylesheet" href="' + file + '"';
    if (screen !== false) {
        css += ' media="screen"';
    }
    document.write(css + ' />');
}

// slower, may flash unstyled ?
function dw_addLinkCSS(file, screen) {
    if ( !document.createElement ) return;
    var el = document.createElement("link");
    el.setAttribute("rel", "stylesheet");
    el.setAttribute("type", "text/css");
    if (screen !== false) {
        el.setAttribute("media", "screen");
    }
    el.setAttribute("href", file);
    document.getElementsByTagName('head')[0].appendChild(el);
}
/////////////////////////////////////////////////////////////////////

// Example class names: load_wn_knm1, load_wn_knm2_t2
scrollmainObj.prototype.setUpLoadLinks = function(controlsId) {
    var sboxId = this.id; var el = document.getElementById(controlsId); 
    var links = el.getElementsByTagName('a');
    var cls, parts;
    for (var i=0; links[i]; i++) {
        cls = scrollmainObj.get_DelimitedClass( links[i].className );
        parts = cls.split('_');
        if ( parts[0] == 'load' && parts[1] == sboxId && parts.length > 2 ) {
            // no checks on knmId, horizId
            var knmId = parts[2]; var horizId = parts[3]? parts[3]: null;
            dw_Event.add( links[i], 'click', function (sboxId, knmId, horizId) {
                return function (e) {
                    scrollmainObj.col[sboxId].load(knmId, horizId);
                    if (e && e.preventDefault) e.preventDefault();
                    return false;
                }
            }(sboxId, knmId, horizId) ); // see Crockford js good parts pg 39
        }
    }
}

scrollmainObj.prototype.setUpScrollControls = function(controlsId, autoHide, axis) {
    var sboxId = this.id; var el = document.getElementById(controlsId); 
    if ( autoHide && axis == 'v' || axis == 'h' ) {
        scrollmainObj.handleControlVis(controlsId, sboxId, axis);
        dw_Scrollbar_Co.addEvent( this, 'on_load', function() { scrollmainObj.handleControlVis(controlsId, sboxId, axis); } );
        dw_Scrollbar_Co.addEvent( this, 'on_update', function() { scrollmainObj.handleControlVis(controlsId, sboxId, axis); } );
    }
    
    var links = el.getElementsByTagName('a'), cls, eType;
    for (var i=0; links[i]; i++) { 
        cls = scrollmainObj.get_DelimitedClass( links[i].className );
        eType = scrollmainObj.getEv_FnType( cls.slice(0, cls.indexOf('_') ) );
        switch ( eType ) {
            case 'mouseover' :
            case 'mousedown' :
                scrollmainObj.handleMouseOverDownLinks(links[i], sboxId, cls);
                break;
            case 'scrollToId': 
                scrollmainObj.handleScrollToId(links[i], sboxId, cls);
                break;
            case 'scrollTo' :
            case 'scrollBy':
