String.prototype.trim = function(){
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

window.$ = function(target) {
    return document.getElementById(target);
}

DM.Viewer = {
    
    sanitizeImages: function(container, maxWidth){
        container = $(container);
        
        if(container != null && container.childNodes.length > 0){
            var images = container.getElementsByTagName('img');            
            for(var i=0; i<images.length; i++){
                
                var image = new Image();
                image.src = images[i].src;
                
                if(image.width > maxWidth){
                    images[i].style.width = maxWidth + 'px';
                }
            }
        }
    },
    
    Sidebar: {
        toggle: function(headerId){
            var targetId = headerId.substring(4);
            var elt = $(targetId);
        
            if(elt.style.display == 'none'){
                if(navigator.userAgent.indexOf('MSIE') != -1 )    
                    elt.style.display = 'block';
                else
                    elt.style.display = 'table-cell';
            }
            else {
                elt.style.display = 'none';    
            }        
        }
    },
    
    Text: new FM(8, DM.Config.viewer),    
    
    Search: {
        
        suppressMenu: false,
        query: "",
        
        start: function(){
            var searchForm = $(DM.Config.searchForm);
            var keywords = '';
            var restriction = [ ];
            var uri = DM.Config.searchUri + '/';
            
            for(var i=0; i<searchForm.elements.length; i++){
                var field = searchForm.elements[i];
                if(field.name == 'q'){
                    if(DM.Viewer.Search.query)
                        keywords = field.value.trim();
                    else
                        keywords = '*';                    
                }
                else if(field.name == 'c' && field.checked == true){
                    restriction.push(field.value.trim());
                }
            }

            if(keywords.length > 0){
                uri += encodeURIComponent(keywords);
                if(restriction.length > 0){
                    uri += '/' + restriction.join(',');
                }
                location.href = uri;
            }
        },
        
        showCategories: function(){
            var menu = $(DM.Config.searchMenu);
            var query = $(DM.Config.searchBox);
            
            if(!DM.Viewer.Search.suppressMenu){        
                menu.style.display = 'block';
            }
            if(!DM.Viewer.Search.query){
                query.value = '';
            }            
            DM.Viewer.Search.suppressMenu = false;                
        },
        
        hideCategories: function(){
            var menu = $(DM.Config.searchMenu);
            var query = $(DM.Config.searchBox);
            
            menu.style.display = 'none';
            if(!DM.Viewer.Search.query){
                query.value = 'search';
            } 
            DM.Viewer.Search.suppressMenu = true;
        }
    }
}

function FM(initSize, targetEltId, metric){

    this.defaultSize    = initSize;
    this.currentSize    = initSize;
    this.metric         = metric || 'pt'; 
    this.targetEltId    = targetEltId;

    this.increase = function(){
        if( this.currentSize < 14 ){
            this.currentSize += 1;
            $(this.targetEltId).style.fontSize = this.currentSize + this.metric;
        }
    }
    this.decrease = function(){   
        if( this.currentSize > 6 ){
            this.currentSize -= 1;
            $(this.targetEltId).style.fontSize = this.currentSize + this.metric;
        }
    } 
    this.rescue = function(){   
            this.currentSize = this.defaultSize;
            $(this.targetEltId).style.fontSize = this.currentSize + this.metric;
    }
}


