/**
 * CachedImage class
 */
function CachedImage(source) {
    this.CachedImage = function(source) {
        var image;

        image = new Image();
        image.setAttribute('src',  source);
    }

    this.CachedImage(source);
}

/**
 * Rollover class
 */
function Rollover(id) {
    this.Rollover = function(id) {
        this.element = xGetElementById(id);
        this.element.rollover = this;
        this.basename = this.element.getAttribute("src");
        this.overname = this.basename.substring(0, this.basename.length-4) +
                "_over" + this.basename.substring(this.basename.length-4);
        this.element.onmouseover = this.over;
        this.element.onmouseout = this.out;
        this.cache = new CachedImage(this.overname);
    }

    this.over = function(event) {
        var self = this; if(!xDef(self.element)) { self = this.rollover; }
        self.element.setAttribute("src", self.overname);
    }
    
    this.out = function(event) {
        var self = this; if(!xDef(self.element)) { self = this.rollover; }
        self.element.setAttribute("src", self.basename);
    }

    this.Rollover(id);
}

/**
 * Unfold utility
 */
function unfold(id) {
    var element = xGetElementById(id);

    if(!xDef(element.fold)) { element.fold = 1; }
    if(element.fold) {
        showmenu(element);
    } else {
        element.style.visibility = 'hidden';
        element.style.position = 'absolute';
        element.fold = 1;
    }
}

/**
 * showmenu utility
 */
function showmenu(element) {
    element.style.position = 'relative';
    element.style.visibility = 'inherit';
    element.fold = 0;
}