function spawn(expr, qty, reversed) {
    var spawnee = [expr];
    for (s = 1; s < qty; s++) {
        spawnee[s] = expr + spawnee[s - 1];
    }
    if (reversed) {
        return spawnee.reverse();
    } else {
        return spawnee;
    }
}

function mw_breadcrumbs(divider, isImage, root, defDoc, altTitle, L2R) {
    if (!divider) {
        divider = ":";
    }
    var m = location.toString(), h = "";
    m = m.substring(m.indexOf("/") + 1);
    m = m.split("/");
    var howmany = spawn("../", m.length, true);
    (defDoc) ? howmany[m.length] = "\"" + defDoc + "\"" : howmany[m.length] = "";
    var crumbs = new Array();
    var altText = (L2R) ? ">>" : "<<";
    if (isImage == 1) {
        divider = "<IMG src=\"" + divider + "\" alt = \"" + altText + "\" align=\"absmiddle\">";
    } else {
        divider = " " + unescape(divider) + " ";
    }
    if (L2R) {
        for (i = 1; i < m.length - 1; i++) {
            h += ("<A href=" + howmany[i + 2] + defDoc + ">" + unescape(m[i] + "</A>" + divider));
        }
        if (altTitle) {
            h += unescape(altTitle);
        } else {
            h += document.title;
        }
    } else {
        for (i = 1; i < m.length - 1; i++) {
            crumbs[i - 1] = (divider + "<A href=" + howmany[i + 2] + defDoc + ">") + unescape(m[i] + "</A>");
        }
        crumbs = crumbs.reverse().join(" ");
        if (altTitle) {
            h = unescape(altTitle) + crumbs;
        } else {
            h = document.title + crumbs;
        }
    }
    if (root) {
        h = h.replace(eval("/" + location.host + "/"), unescape(root));
    }
    return h;
}