﻿/* 

Deltan PDA
2008 Steve Breslin

The scroller-control code was borrowed (and moderately modified) from:
Aaron Boodman's ypSimpleScroll, as modified by Sergi Meseguer
http://www.java2s.com/Code/JavaScript/GUI-Components/Customscrollbar2.htm

*/

baseScroller.prototype.scrollUp = function(count) { this.startScroll('up', count) }
baseScroller.prototype.scrollDown = function(count) { this.startScroll('down', count) }

baseScroller.updateFrequency = 10
baseScroller.ie = document.all ? 1 : 0
baseScroller.ns4 = document.layers ? 1 : 0
baseScroller.dom = document.getElementById ? 1 : 0
baseScroller.mac = navigator.platform == "MacPPC"
baseScroller.mo5 = document.getElementById && !document.all ? 1 : 0


baseScroller.prototype.startScroll = function(dir, count) {
    if (this.loaded){
        if (this.animationTimer) window.clearTimeout(this.animationTimer)
        this.overrideScrollAngle(dir)
        this.speed = this.origSpeed
        this.lastTime = (new Date()).getTime() - this.y.updateFrequency
        this.animationTimer = window.setTimeout(this.gRef + ".scroll('"+dir+"','"+count+"')", this.y.updateFrequency)
    }
}

baseScroller.prototype.endScroll = function() {
    if (this.loaded){
        window.clearTimeout(this.animationTimer)
        this.animationTimer = 0;
        this.speed = this.origSpeed
    }
}

baseScroller.prototype.overrideScrollAngle = function(dir) {
    if (this.loaded) {
        this.fy = dir == 'up' ? -1 : 1
        this.stopV = dir == 'up' ? 0 : this.scrollH
    }
}

/*
baseScroller.prototype.scrollTo = function(stopV, aniLen) {
    if (this.loaded){
        if (stopV != this.scrollTop ) {
            if (this.animationTimer) window.clearTimeout(this.animationTimer)
            this.lastTime = (new Date()).getTime()
            this.fy = (stopV - this.scrollTop)
            this.stopV = stopV
            this.speed = fy / aniLen * 1000
            window.setTimeout(this.gRef + ".scroll()", this.y.updateFrequency)
        }
    }
}
*/

baseScroller.prototype.jumpTo = function(nx, ny) { 
    if (this.loaded){
        ny = Math.min(Math.max(ny, 0), this.scrollH)
        this.scrollTop = ny
        if (this.y.ns4) this.content.moveTo(-nx, -ny)
        else {
            this.content.style.top = -ny + "px"
        }
    }
}

baseScroller.prototype.scroll = function(dir, count) {
    this.animationTimer = window.setTimeout(this.gRef + ".scroll('"+dir+"','"+count+"')", this.y.updateFrequency)
    var nt = (new Date()).getTime()
    var d = Math.round((nt - this.lastTime) / 1000 * this.speed)
    if (d > 0) {
        var ny = d * this.fy + this.scrollTop
        var yOut = (ny >= this.scrollTop && ny >= this.stopV) || (ny <= this.scrollTop && ny <= this.stopV)
        if (nt - this.lastTime != 0 && (this.fy == 0 || yOut) ) {
            this.jumpTo(this.stopH, this.stopV)
            this.endScroll()
        }
        else {
            this.jumpTo(0, ny)
            this.lastTime = nt
        }
        // update dragger position:
        if(dir=='down')    theThumb[count].style.top = parseInt(((theThumb[count].maxY-theThumb[count].minY) *
                                                            this.scrollTop/this.stopV)+theThumb[count].minY) + "px";
        if(dir=='up')      theThumb[count].style.top = parseInt(((theThumb[count].maxY-theThumb[count].minY) *
                                                            this.scrollTop/this.scrollH)+theThumb[count].minY) + "px";
    }
}

function baseScroller(id, left, top, width, height, speed) {
    var y = this.y = baseScroller
    if (document.layers && !y.ns4) history.go(0)
    if (y.ie || y.ns4 || y.dom) {
        this.loaded = false
        this.id = id
        this.origSpeed = speed
        this.animationTimer = false
        this.op = ""
        this.lastTime = 0
        this.clipH = height
        this.clipW = width
        this.scrollTop = 0
        this.scrollLeft = 0
        this.gRef = "baseScroller_"+id
        eval(this.gRef+"=this")
        var d = document
        d.write('<style type="text/css">')
        d.write('#' + this.id + 'Container { left:' + left + 'px; top:' + top + 'px; width:' + width +
                        'px; height:' + height + 'px; clip:rect(0 ' + width + ' ' + height + ' 0); overflow:hidden; }')
        d.write('#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; }')
        d.write('#' + this.id + 'Content { px; top:' + (-this.scrollTop) + 'px; width:' + width + 'px; }')
        // (zgtc) fix to overwrite p/div/ul width (would be clipped if wider than scroller in css):
        d.write('#' + this.id + 'Container p, #' + this.id + 'Container div {width:' + parseInt(width-10) + 'px; }')
        d.write('</style>')
    }
}

baseScroller.prototype.load = function() {
    var d, lyrId1, lyrId2
    d = document
    lyrId1 = this.id + "Container"
    lyrId2 = this.id + "Content"
    this.container = this.y.dom ? d.getElementById(lyrId1) : this.y.ie ? d.all[lyrId1] : d.layers[lyrId1]
    this.content = obj2 = this.y.ns4 ? this.container.layers[lyrId2] : this.y.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
    this.docH = Math.max(this.y.ns4 ? this.content.document.height : this.content.offsetHeight, this.clipH)
    this.docW = Math.max(this.y.ns4 ? this.content.document.width : this.content.offsetWidth, this.clipW)
    this.scrollH = this.docH - this.clipH
    this.scrollW = this.docW - this.clipW
    this.loaded = true
    this.scrollTop = Math.max(Math.min(this.scrollTop, this.scrollH),0)
    this.jumpTo(0, this.scrollTop)
}


var theThumb = []; var theScroll = []; var thumbTravel = []; var ratio = [];

function instantiateScroller(count, id, left, top, width, height, speed){
    if(document.getElementById) {
        theScroll[count] = new baseScroller(id, left, top, width, height, speed);
    }
}

function changeImage(anImage, newSource) {
   document.images[anImage].src = newSource;
}

function createDragger(count, handler, root, thumb, minX, maxX, minY, maxY){
        var buttons = '<div class="up" id="up' + count + '" onmousedown="theScroll[' + count + '].scrollUp(\'' + count +
                              '\'); changeImage(\'upimg' + count + '\', \'./img/up_full_lit.png\'); return false;" onmouseup="theScroll[' + count +
                              '].endScroll(); changeImage(\'upimg' + count + '\', \'./img/up_arrowlit.png\');" onmouseout="theScroll[' + count +
                              '].endScroll(); changeImage(\'upimg' + count + '\', \'./img/up_unlit.png\');" onmouseover="changeImage(\'upimg' + count +
                              '\', \'./img/up_arrowlit.png\'); return false;" onclick="return false;"><img name="upimg' + count +
                              '" src="./img/up_unlit.png" width="15" height="40"></div><div class="dn" id="dn' + count +
                              '" onmousedown="theScroll[' + count + '].scrollDown(\'' + count + '\'); changeImage(\'downimg' + count +
                              '\', \'./img/down_full_lit.png\'); return false;" onmouseup="theScroll[' + count +
                              '].endScroll(); changeImage(\'downimg' + count + '\', \'./img/down_arrowlit.png\');" onmouseout="theScroll[' + count +
                              '].endScroll(); changeImage(\'downimg' + count +
                              '\', \'./img/down_unlit.png\');" onmouseover="changeImage(\'downimg' + count +
                              '\', \'./img/down_arrowlit.png\'); return false;" onclick="return false;"><img name="downimg' + count +
                              '" src="./img/down_unlit.png" width="15" height="40"></div><div class="thumb" id="' + thumb +
                              '" onmouseover="thumbUpdate(\''+thumb+'\', \'over\')" onmouseout="thumbUpdate(\''+thumb+'\', \'out\')"><img name="' + thumb +
                              'image" src="./img/thumb_unlit.png" width="15" height="67"></div>';

        document.getElementById(root).innerHTML = buttons + document.getElementById(root).innerHTML;

        theThumb[count]  = document.getElementById(thumb);
        var thisup = document.getElementById("up"+count);
        var thisdn = document.getElementById("dn"+count);
        theThumb[count].style.left = parseInt(minX+15) + "px";
        thisup.style.left = parseInt(minX+15) + "px";
        thisdn.style.left = parseInt(minX+15) + "px";
        theThumb[count].style.border =0;
        theThumb[count].style.top = parseInt(minY) + "px";
        thisup.style.top = 0 + "px";
        thisdn.style.top = parseInt(minY+maxY) + "px";
        theScroll[count].load();

        Drag.init(theThumb[count], null, minX+15, maxX+15, minY, maxY-27);
        
        // the number of pixels the thumb can travel vertically (max - min)
        thumbTravel[count] = theThumb[count].maxY - theThumb[count].minY;

        // the ratio between scroller movement and thumbMovement
        ratio[count] = theScroll[count].scrollH / thumbTravel[count];

        theThumb[count].onDrag = function(x, y) {
            theScroll[count].jumpTo(null, Math.round((y - theThumb[count].minY) * ratio[count]));
        }
}

var Drag = {

    obj : null,

    init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
    {
        o.onmousedown    = Drag.start;

        o.hmode            = bSwapHorzRef ? false : true ;
        o.vmode            = bSwapVertRef ? false : true ;

        o.root = oRoot && oRoot != null ? oRoot : o ;

        if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
        if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
        if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
        if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

        o.minX    = typeof minX != 'undefined' ? minX : null;
        o.minY    = typeof minY != 'undefined' ? minY : null;
        o.maxX    = typeof maxX != 'undefined' ? maxX : null;
        o.maxY    = typeof maxY != 'undefined' ? maxY : null;

        o.xMapper = fXMapper ? fXMapper : null;
        o.yMapper = fYMapper ? fYMapper : null;

        o.root.onDragStart    = new Function();
        o.root.onDragEnd    = new Function();
        o.root.onDrag    = new Function();
    },

    start : function(e)
    {
        var o = Drag.obj = this;
        e = Drag.fixE(e);
        var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
        var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
        o.root.onDragStart(x, y);

        o.lastMouseX    = e.clientX;
        o.lastMouseY    = e.clientY;

        if (o.hmode) {
            if (o.minX != null)    o.minMouseX    = e.clientX - x + o.minX;
            if (o.maxX != null)    o.maxMouseX    = o.minMouseX + o.maxX - o.minX;
        } else {
            if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
            if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
        }

        if (o.vmode) {
            if (o.minY != null)    o.minMouseY    = e.clientY - y + o.minY;
            if (o.maxY != null)    o.maxMouseY    = o.minMouseY + o.maxY - o.minY;
        } else {
            if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
            if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
        }

        document.onmousemove    = Drag.drag;
        document.onmouseup    = Drag.end;
        thumbUpdate(o.id, 'down');
        return false;
    },

    drag : function(e)
    {
        e = Drag.fixE(e);
        var o = Drag.obj;

        var ey    = e.clientY;
        var ex    = e.clientX;
        var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
        var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
        var nx, ny;

        if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
        if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
        if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
        if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);

        nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
        ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));

        if (o.xMapper)        nx = o.xMapper(y)
        else if (o.yMapper)    ny = o.yMapper(x)

        Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
        Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
        Drag.obj.lastMouseX    = ex;
        Drag.obj.lastMouseY    = ey;

        Drag.obj.root.onDrag(nx, ny);
        return false;
    },

    end : function()
    {
        document.onmousemove = null;
        document.onmouseup   = null;
        Drag.obj.root.onDragEnd(    parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
                                    parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
        thumbUpdate(Drag.obj.id, 'up');
        Drag.obj = null;
    },

    fixE : function(e)
    {
        if (typeof e == 'undefined') e = window.event;
        if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
        if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
        return e;
    }
};

var browser=false; // string: 'IE' or 'Opera' (or remains false for other browsers)

function init() {
    createDragger(0, "handle0", "root0", "thumb0", 405, 405, 42, 300);
    createDragger(1, "handle1", "root1", "thumb1", -108, -108, 42, 300);

    if(-1 != navigator.userAgent.indexOf("Opera")) {
        browser = 'Opera';
    }
    else if(-1 != navigator.userAgent.indexOf("MSIE")) {
        browser = 'IE';
    }

    /* initialize mouse wheel scrolling event-capture */
    if (browser=='Opera' || browser =='IE') {
         getId('scroll0Container').onmousewheel = wheel0; 
         getId('scroll1Container').onmousewheel = wheel1;
    }
    else if (window.addEventListener) {
        /* Firefox or IE6/IE7 */
        getId('scroll0Container').addEventListener('DOMMouseScroll', wheel0, false);
        getId('scroll1Container').addEventListener('DOMMouseScroll', wheel1, false);
    }

    /* set the topmenu by calling menuClick on 'Introduction' */
    menuReset(0, 0);
}

function wheel0(event) {
    return wheel(0, event);

}
function wheel1(event) {
    return wheel(1, event);
}

/* This handles mouse wheel scrolling.
 * The design is to make the scroll faster if the mouse commands are stacked.
 * (Commands stack if we get passed a new command while we're processing the current one,
 * and the new command tells us to do what we're already doing. (As opposed to cancelling commands,
 * which tell us to switch direction and proceed as usual.)
 */

var stacksize = 0;
var curDir;

baseScroller.prototype.mousewheelScroll = function(dir, side) {
    if (dir == curDir) {
        ++stacksize;
    }
    else {
        stacksize = 1;
        curDir = dir;
    }
        if (this.animationTimer) window.clearTimeout(this.animationTimer)
        this.overrideScrollAngle(dir)
        this.speed = this.origSpeed *stacksize *stacksize *4 /* making it modified by stacksize^2 feels about right. */
        this.lastTime = (new Date()).getTime() - this.y.updateFrequency
        this.animationTimer = window.setTimeout(this.gRef + ".mousewheelScroller('"+dir+"','"+side+"')", this.y.updateFrequency)
}

baseScroller.prototype.mousewheelScroller = function (dir, side) {
    var nt = (new Date()).getTime()
    var d = Math.round((nt - this.lastTime) / 1000 * this.speed)
    if (d > 0) {
        var ny = (d * this.fy + this.scrollTop)
        var yOut = (ny >= this.scrollTop && ny >= this.stopV) || (ny <= this.scrollTop && ny <= this.stopV)
        if (nt - this.lastTime != 0 && (this.fy == 0 || yOut) ) {
            this.jumpTo(this.stopH, this.stopV)
            this.endScroll()
        }
        else {
            this.jumpTo(0, ny)
            this.lastTime = nt
        }
        // update dragger position:
        if(dir=='down')    theThumb[side].style.top = parseInt(((theThumb[side].maxY-theThumb[side].minY) *
                                                            this.scrollTop/this.stopV)+theThumb[side].minY) + "px";
        if(dir=='up')      theThumb[side].style.top = parseInt(((theThumb[side].maxY-theThumb[side].minY) *
                                                            this.scrollTop/this.scrollH)+theThumb[side].minY) + "px";

        /* reset any stacked-up mousewheel commands, in case it was the mousewheel which fired this scroll action. */
        stacksize = 0;
        curDir = false;
        this.scrollTop = this.scrollTop
    }
}

var scrolltimer;

function mousewheelHandler(side, delta) {
    /* reset the scrolltimer, which is essentially an */
    if(scrolltimer) {
        window.clearTimeout(scrolltimer);
        scrolltimer = false;
    }
    delta = (delta > 0 ? 'up' : 'down');

    theScroll[side].mousewheelScroll(delta, side);
    scrolltimer = window.setTimeout("theScroll[" + side + "].endScroll()", 150);

}

/*
 * Event handler for mouse wheel event.
 */
function wheel(side, event){
        var delta = 0;
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
                /** In Opera 9, delta differs in sign as compared to IE.
                 */
                if (window.opera)
                    delta = delta;
        } else if (event.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -event.detail/3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta)
                mousewheelHandler(side, delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault)
                event.preventDefault();
	event.returnValue = false;
}

var curDown=false; // thumb0, thumb1, or 0 for false (no thumb being dragged)
var over=0; // 1 for true (mouse hovers over a thumb), 0 for false (it's not over)

/* We centralize the thumb-update code here, especially because it fires off
 * two different areas of code: from onmouseover/onmouseout in the main
 * buttons declaration, and in the drag code for the dragger (that's where the
 * drag is engaged and disengaged).
 *
 * so, four stats: down, over, out, up
 *
 * unfortunately, different browsers work differently.
 *
 * basically, if a thumb is being dragged, and the mouse moves off the thumb,
 * IE sends two signals, the first of which is correct, and a second which fires
 * off the new element (although it calls the thumb-element's handler -- yes, very
 * confusing and buggy).
 *
 * then, if the mouse moves back onto the thumb (the thum still being dragged),
 * IE sends two more signals, the first of which is wrong; the second correct.
 *
 * also, if it the mouse passes over the *other* thumb, the the foreign element
 * fires the mouseover of the currently-active element, so it looks like we're
 * hovering now over the *active* thumb, when in fact we're hovering over the
 * *other* thumb. anyway, these problems called for some separate IE-only handling.
 */
function thumbUpdate(thumbid, stat) {


    if(stat == 'over' || stat == 'out') {

        if(curDown) { /* one of the thumbs is currently down */

            /* if it's an event involving the *other* thumb, ignore the event. */
            if(thumbid != curDown)
                return;

            /* IE requires special handling, if the thumb is currently being dragged. */
            if(browser=='IE') {
                if(window.event.srcElement.name != thumbid+'image') {

                    /* the event fired on a spurious event: the currently-active thumb
                     * is not the source element.
                     */
                    return;
                }
            }

            /* no need to *visually* update: since 'down' dominates, so we update the stat and
             * we're done. 
             */
            over=(stat=='over' ? 1 : 0);
            return;
        }
        /* our normal handling if neither thumb is currently being dragged. */
        over = (stat=='over' ? 1 : 0);
        changeImage(thumbid+'image', (over == 1 ? './img/thumb_arrowlit.png' : './img/thumb_unlit.png'));
        return false;
    }

    if(stat == 'up') {
        counter = 0; // reset the counter
        curDown = false; // reset the marker for the thumb currently being dragged.
        changeImage(thumbid+'image', (over == 1 ? './img/thumb_arrowlit.png' : './img/thumb_unlit.png'));
        return;
    }

    /* stat is 'down': we remember which thumb, and we update the image. */
    curDown = thumbid;
    changeImage(thumbid+'image', './img/thumb_full_lit.png');
    return;
}

function getId(id) {
    return document.all ? document.all[id] : document.getElementById(id);
}

function changeBg(id, bg) {
    getId(id).style.backgroundImage = "url(" + bg + ")";
}

function getInnerHTML(id) {
    return getId(id).innerHTML;
}

function writeDiv(id, content) {
    getId(id).innerHTML = content;
}

function getCurContent(id) {
    return getId(id).innerHTML;
}

// menuTitles tells us the titles of the tabs.
var menuTitles = new Array();
    menuTitles[0] = "导言";
    menuTitles[1] = "起源";
    menuTitles[2] = "超空间";
    menuTitles[3] = "顶点";
    menuTitles[4] = "准备";
    menuTitles[5] = "撤离";

// menuWordWidth tells us each word's respective pixel width.
var menuWordWidth = new Array();
    menuWordWidth[0] = 40 // the pixel-width of the word "Introduction"
    menuWordWidth[1] = 40
    menuWordWidth[2] = 57
    menuWordWidth[3] = 40
    menuWordWidth[4] = 40
    menuWordWidth[5] = 40

var curTop = 0; // The 'currently selected' tab.

/*

menuClick
=========

total space in the flat part of the tabs: 339

To figure out the "flat padding" of each tab:

. add the word-pixels together.
. subtract that from 339
. divide that value by 5.

That is the menu's "common padding value". Each tab gets that much
padding. Note that we round this, so the last tab is not exact. so, the
last tab gets whatever is left over.

A tab's width is the common padding value plus the tab's word's pixel count.

The first div is 18 pixels + the first tab's flat width + the 5 pixel spacer.

The second, third, and fourth divs are 5spacer+ the tab's flat width +5spacer.

This last entry handles "rounding", so its width is: 415 minus "what's
come already" -- so, 415 minus the widths of tabs 1 through 4, and minus
58 (the total space taken by the spacers).

So, "what's come already" plus the last tab is 415.

*/

function getMenuPadding(collapsed) {

    /* reconstruct the tabs, and write the value to the "tabs" div. */

    var counter = 0;
    for(var tabNumber = 0 ; tabNumber <= 5 ; ++tabNumber) {
        if(tabNumber != collapsed) {
            /* we'll be adding menu[tabNumber] to the tabs, so add the word's width to pixelcount */
            counter += menuWordWidth[tabNumber];
        }
    }

    /* At this point, pixelcount = the horizontal space taken by the words on the five tabs.
     *
     * We will now redefine: pixelcount = the remaining tab-space on the flat area of the tabs,
     * the "padding" area around the words on the tabs.
     */
    counter = 328 - counter;

    /* Now what we *really* want to know is how much padding per tab, so we divide pixelcount
     * by 5 and that's the padding. (If a tab's padding is 10, then there will be 5 pixels on
     * either side of the word.)
     */
    return Math.round(counter / 5);
}

function getTargetWidths(collapsed, padding) {

    var totalWidth = 0;
    var retArray = new Array;
    for(var tabNumber = 0 ; tabNumber <= 5 ; ++tabNumber) {
        var cur = 0;
        if(tabNumber == collapsed)
            cur = 5;
        else
            cur = menuWordWidth[tabNumber] + padding;
        if(tabNumber==0) {
            cur += 23;
            totalWidth += cur;
        }
        else if(tabNumber==5) {
            cur = 415 - totalWidth;
        }
        else {
            cur += 10;
            totalWidth += cur;
        }
        retArray[tabNumber] = cur;
    }
    return retArray;
}

var curWidthArray;

function menuReset(collapsed, inactive) {

    var padding = getMenuPadding(collapsed);

    curWidthArray = getTargetWidths(collapsed, padding);

    var val = '';

    for(var tabNumber = 0 ; tabNumber <= 5 ; ++tabNumber) {

        var thisWidthTotal = curWidthArray[tabNumber];

        if(tabNumber == inactive)
        val += '<div id="menu' + tabNumber + '" style="float: left; width: ' + thisWidthTotal + 'px; background-image:url(\'./img/navi_background_bottom_lit.gif\')">';

        else
        val += '<div id="menu' + tabNumber + '" style="margin-top:0px;float: left; text-align: center; width: ' + thisWidthTotal +
                 'px;" onmouseover="changeBg(\'menu' + tabNumber + '\', \'./img/navi_background_bottom_lit.gif\'); return false;"' +
                      'onmouseout="changeBg(\'menu' + tabNumber + '\', \'./img/navi_background_bottom_unlit.gif\'); return false;"' +
                      'onclick="menuClick(' + tabNumber + '); return false;">';

        if(tabNumber==0) {
            val += '<div style="width: 18px; float: left;"><img src="./img/navi_cap_left.gif" width="18" height="18" border="0" /></div>';
        }
        else if(tabNumber==1) {
            val += '<div style="width: 5px; float: left;"><img src="./img/navi_split_left_light.gif" width="5" height="18" border="0" /></div>';
        }
        else {
            val += '<div style="width: 5px; float: left;"><img src="./img/navi_split_left.gif" width="5" height="18" border="0" /></div>';
        }

        if(tabNumber==0) {
            val += '<div style="width: 5px; float: right;"><img src="./img/navi_split_right_light.gif" width="5" height="18" border="0" /></div>';
        }
        else if(tabNumber==5) {
            val += '<div style="width: 18px; float: right;"><img src="./img/navi_cap_right.gif" width="18" height="18" border="0" /></div>';
        }
        else {
            val += '<div style="width: 5px; float: right;"><img src="./img/navi_split_right.gif" width="5" height="18" border="0" /></div>';
        }

        if(tabNumber != collapsed && tabNumber != inactive)
        val += menuTitles[tabNumber];

        val += '</div>';
    }

    /* Then we just write val to the 'tabs' div. */
    writeDiv('tabs', val);

    /* Update the top bar. */
    topBarUpdate();

    /* update the left-hand page */
    loadLeft(curTop);
}


var oldTop = 0;

function menuClick(tab) {

    oldTop = curTop;

    curTop = tab;

    menuReset(oldTop, curTop);

    menuAnimateInit();

    /* Update the top bar. */
    topBarUpdate();

    /* update the left-hand page */
    loadLeft(curTop);
}

var targetWidthArray;
var animStart;
var contractable;
function menuAnimateInit() {

    contractable = new Array;

    targetWidthArray = getTargetWidths(curTop, getMenuPadding(curTop));
    for(var tab = 0 ; tab < 6 ; tab++) {
        if(curWidthArray[tab] > targetWidthArray[tab]) {
            contractable.push(tab);
        }
    }
    animStart = (new Date()).getTime();
    setTimeout(menuAnimate,10);

}

function menuAnimate() {

    var contraction = 0;
    var amount = 0;
    var flag = 0;

    for(var x = contractable.length ; x >=0 ; x--) {
        var cur = contractable[x];
        if(curWidthArray[cur] == targetWidthArray[cur]) // it's done contracting
            contractable.splice(x,1); // remove it from the list of contractables
        else {
            amount = Math.round(( ( (new Date()).getTime() - animStart ) / 500 ) * (curWidthArray[cur] - targetWidthArray[cur]));
            contraction += amount;
            curWidthArray[cur] -= amount;
            getId('menu' + cur).style.width = curWidthArray[cur];
            flag = 1;
        }
    }
    for(var cur = 0 ; cur < 6 ; cur++) {
        var diff = targetWidthArray[cur] - curWidthArray[cur];
        if(diff > 0) {
            if(contraction < diff) {
                curWidthArray[cur] += contraction;
                getId('menu' + cur).style.width = curWidthArray[cur];
                contraction = 0;
                break;
            }
            else {
                curWidthArray[cur] += diff;
                getId('menu' + cur).style.width = curWidthArray[cur];
                contraction -= diff;
            }
        }
    }
    if(contractable.length >0)
        setTimeout(menuAnimate,20);
    else
        menuAnimateEnd();
}

function menuAnimateEnd() {
    var val = '';

    if(oldTop==0) {
        val += '<div style="width: 18px; float: left;"><img src="./img/navi_cap_left.gif" width="18" height="18" border="0" /></div>';
    }
    else if(oldTop==1) {
        val += '<div style="width: 5px; float: left;"><img src="./img/navi_split_left_light.gif" width="5" height="18" border="0" /></div>';
    }
    else {
        val += '<div style="width: 5px; float: left;"><img src="./img/navi_split_left.gif" width="5" height="18" border="0" /></div>';
    }

    if(oldTop==0) {
        val += '<div style="width: 5px; float: right;"><img src="./img/navi_split_right_light.gif" width="5" height="18" border="0" /></div>';
    }
    else if(oldTop==5) {
        val += '<div style="width: 18px; float: right;"><img src="./img/navi_cap_right.gif" width="18" height="18" border="0" /></div>';
    }
    else {
        val += '<div style="width: 5px; float: right;"><img src="./img/navi_split_right.gif" width="5" height="18" border="0" /></div>';
    }

    val += menuTitles[oldTop];

    writeDiv('menu' + oldTop, val);
}

function topBarUpdate() {
    topBarScrollDown();
}

var animCounter = 0;
var topAnim = false;

function topBarScrollDown() {
    if(topAnim) {
        clearTimeout(topAnim);
        topAnim = false;
    }
    if(++animCounter < 16) {
        getId('menuTopContent').style.marginTop = animCounter+"px";
        topAnim = setTimeout(topBarScrollDown, 10);
    }
    else {
        writeDiv('menuTopContent', menuFrames[curTop]);
        animCounter = 0;
        topAnim = setTimeout(topBarScrollUp, 10);
    }
}

var menuFrames = new Array;
    menuFrames[0] = '<div style="width:0; float: left;"><img src="./img/midline.gif" width=40 height=18/></div>' +
                    '<div style="position:absolute; left:1; margin-top:-4px; margin-left:8px;width:40px;">导言</div>' +
                    '<div style="position:absolute; top:1; left:36;"><img src="./img/top_menu_frame_right.gif"/></div>'

    menuFrames[1] = '<div style="position:absolute; top:1; left:70; width=9"><img src="./img/top_menu_frame_left.gif"/></div>' +
                    '<div style="width:1; position:absolute; left:75; float: left;"><img src="./img/midline.gif" width=36 height=18/></div>' +
                    '<div style="position:absolute; left:79; margin-top:-4px; margin-left:0px;width:36px;">起源</div>' +
                    '<div style="position:absolute; top:1; left:107;"><img src="./img/top_menu_frame_right.gif"/></div>'

    menuFrames[2] = '<div style="position:absolute; top:1; left:144; width=9"><img src="./img/top_menu_frame_left.gif"/></div>' +
                    '<div style="width:1; position:absolute; left:149; float: left;"><img src="./img/midline.gif" width=50 height=18/></div>' +
                    '<div style="position:absolute; left:152; margin-top:-4px; margin-left:1px;width:44px;">超空间</div>' +
                    '<div style="position:absolute; top:1; left:195;"><img src="./img/top_menu_frame_right.gif"/></div>'

    menuFrames[3] = '<div style="position:absolute; top:1; left:231; width=9"><img src="./img/top_menu_frame_left.gif"/></div>' +
                    '<div style="width:1; position:absolute; left:236; float: left;"><img src="./img/midline.gif" width=36 height=18/></div>' +
                    '<div style="position:absolute; left:236; margin-top:-4px; margin-left:4px;width:28px;">顶点</div>' +
                    '<div style="position:absolute; top:1; left:268;"><img src="./img/top_menu_frame_right.gif"/></div>'

    menuFrames[4] = '<div style="position:absolute; top:1; left:303; width=9"><img src="./img/top_menu_frame_left.gif"/></div>' +
                    '<div style="width:1; position:absolute; left:308; float: left;"><img src="./img/midline.gif" width=36 height=18/></div>' +
                    '<div style="position:absolute; left:311; margin-top:-4px; margin-left:1px;width:40px;">准备</div>' +
                    '<div style="position:absolute; top:1; left:340;"><img src="./img/top_menu_frame_right.gif"/></div>'

    menuFrames[5] = '<div style="position:absolute; top:1; left:372; width=9"><img src="./img/top_menu_frame_left.gif"/></div>' +
                    '<div style="width:1; position:absolute; left:377; float: left;"><img src="./img/midline.gif" width=39 height=18/></div>' +
                    '<div style="position:absolute; left:366; margin-top:-4px; margin-left:15px;width:50px;">撤离</div>'

function topBarScrollUp() {
    if(topAnim) {
        clearTimeout(topAnim);
        topAnim = false;
    }
    if(++animCounter < 16) {
            getId('menuTopContent').style.marginTop = 17-animCounter+"px";
            topAnim = setTimeout(topBarScrollUp, 10);
    }
    else animCounter = 0;
}

function loadLeft(item) {
    /* Update the left page. */
    writeDiv('scroll0Content', '<br>' + texts[item] + '<br><br>');

    /* reset the scroller and thumb for new content (because it is a different page-length) */
    theThumb[0].root.onDrag(0, 0);
    theThumb[0].style.top='42px';
    theScroll[0].load();
    ratio[0] = theScroll[0].scrollH / thumbTravel[0];

    /* if item is "Introduction," update the right-hand page also.
     * otherwise it's fine if the left and right are out of sync.
     */
    if(item < 6)
        loadTitleImage(item);
}

function loadTitleImage(item) {
    if(item == 0)
        writeDiv('scroll1Content', '<div style="position:absolute; top:40; left:5"><img src="./img/pavilion_logo.gif" ="100"></div>');

    /* reset the scroller and thumb for new content (because it is a different page-length) */
    theThumb[1].root.onDrag(0, 0);
    theThumb[1].style.top='42px';
    theScroll[1].load();
    ratio[1] = theScroll[1].scrollH / thumbTravel[1];
}

function loadRight(item) {
    /* Update the right page. */
    writeDiv('scroll1Content', '<br>' + texts[item] + '<br><br>');

    /* reset the scroller and thumb for new content (because it is a different page-length) */
    theThumb[1].root.onDrag(0, 0);
    theThumb[1].style.top='42px';
    theScroll[1].load();
    ratio[1] = theScroll[1].scrollH / thumbTravel[1];
}

function colorFont(id, newcolor) {
    getId(id).style.color=newcolor;
}


var texts = new Array();
texts[0] = "<font size=4>《吉星秘史》展览</font><br><br>\
《吉星秘史》展览，是一考古成果的展示。所展出的记录和实物之年代，涵盖了自有史料之始的上古，至远渡他乡、方舟断信的时代。\
<br><br><font color='white'>太史阁</font>\
<br><br>欢迎光临执银河牛耳的考古研究院——太史阁。为庆祝本院建立一百周年，我们特筹备了《吉星秘史》展览。\
<br><br><font color='white'>展览</font>\
<br><br>本书（注：即显示在浏览者眼前的页面）是特为诸位贵客编写的。旨在将太史阁逾百年搜罗纂辑、复旧索新，苦功所得之古代资料，重现于诸位面前。\
<br><br>这一时代的历史本就鲜为人所知，而其为人所知者也是支离破碎。当年浩大的远渡计划本就侵蚀了我们的力量，而失去方舟更是雪上加霜。我们固然生还了，代价却是将一切关乎“从前”的知识，都牺牲给了眼前的急需。\
<br><br>以下的文字将带领诸位走过历史。自上溯的极限——早期的星际开发史，承以星际航行的发展，而至新星（德尔塔）的膨胀，终于悲壮的远渡。本书的记载，描绘了迄今为止最完整的远渡前的浩瀚史景。\
<br><br><font color='white'>——新德尔塔历662年，德尔塔纪年8049年</font> \
<br><br>注解：有关纪年法：吉奥迪莎的历法是每15月1年，平均每月30天（分别近似于吉奥迪莎的公转和自转周期）。在多次修正后终于制出了在自转和公转间保持统一的完善日历（1吉奥迪莎年有448.39吉奥迪莎日。）该历法与银河标准历有冲突，这是因为标准历的制定基于新德尔塔星的公转与自转周期。在本书中，我们沿用了吉奥迪莎历。";

texts[1] = "<font size=4>忘却的起源</font><br><br>\
<font color=\"white\">德尔塔历3500年</font><br><br>人们普遍推测，第一批外来殖民者（也可能是第一批进化成文明物种的原住民）在这段时间当中创造了吉奥迪莎文明。但不幸的是，目前几乎没有资料可以证明这一点。\
 <br><br>我们目前找不到关于这个时期的任何文物，只能在稍晚一些的文物中找到少量线索，但这些线索都过于粗略，对于我们了解这段历史没有什么帮助。这段缺失的吉奥迪莎星文明发展史——也就是“失落的时代”——成了我们文明起源的未解之谜。\
<br><br><div style=\"color:white;\">德尔塔历6645年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(11);\" class=\"handcursor\">0148意外事故调查报告</span><br><br>\
<div id=\"t1\" style=\"color:black;\">\
我们知道在这个时候德尔塔文明已经出现了科学技术上的突破，开发太空飞行器来探索邻近星系。我们估计吉奥迪莎的人口已达38亿。\
 </div></div>\
<br><div style=\"color:white;\" >德尔塔历6715年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(12);\" class=\"handcursor\">反物质存储设备审查</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
第一艘装备了反物质引擎的德尔塔太空飞船离开了吉奥迪莎轨道飞往特里迪莎——德尔塔星系的第三颗行星。特里迪莎是一颗在离吉奥迪莎的恒星——德尔塔星大约150光分的轨道上运行的类木行星。德尔塔文明史上首次的远距离星际科学探索用了大约一年的时间，其目的是测试反物质能源飞船冲出吉奥迪莎轨道的可行性。这次探索也证明了德尔塔政府试图提高公众对于反物质发电的接受度。</div></div>";

texts[2] = "<font size=4>超空间之旅</font><br><br>\
<div style=\"color:white;\">德尔塔历6736年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(13);\" class=\"handcursor\">鲁姆悼词</span><br><br>\
<div id=\"t3\" style=\"color:black;\">\
 吉奥迪莎轨道空间站的科学家们在先进反物质安全容器的保护下研究粒子加速器，却意外的使黑洞膨胀到大大超过预期的尺寸。虽然实验导致很多杰出的吉奥迪莎科学家的牺牲，但人们由此开创了新的物理学分支：层际空间动力学。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历6757年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(14);\" class=\"handcursor\">通讯器残史</span><br><br>\
<div id=\"t4\" style=\"color:black;\">\
 两个位于吉星两端的大学，通过合作，第一次实现了可靠量子超光速信息传输，也即“量子相位逆转(QPI)”。短短一代人的时间，利用这种技术制造出来的小型连接通讯装置便代替了吉奥迪莎的很多通讯网络。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历6833年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(15);\" class=\"handcursor\">突破超空间</span><br><br>\
<div id=\"t5\" style=\"color:black;\">\
 安放有首台超空间引擎的空间站开始在吉奥迪莎的轨道上建造。第一台投入实用的超空间驱动器就放置在引擎的核心中，这是科学家们一个世纪努力的结晶。这台引擎是德尔塔整个时代科技进步的巅峰，标志着星际时代的来临。\
 </div></div>";

texts[3] = "<font size=4>顶点计划</font><br><br>\
<div style=\"color:white;\">德尔塔历6875年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(16);\" class=\"handcursor\">德雷克的讣闻</span><br><br>\
<div id=\"t6\" style=\"color:black;\">\
 顶点计划——第一次能进行超空间飞行的载人飞船——对公众公开。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历6930年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(17);\" class=\"handcursor\">奥尼尔的信件</span><br><br>\
<div id=\"t7\" style=\"color:black;\">\
 以核聚变产生动力的定点计划1号装载了一个超空间引擎和8名机组成员从吉奥迪莎起飞。在离吉奥迪莎3百万公里远的空间，飞船启动了超空间引擎，飞船随即从德尔塔的深空遥测范围中消失。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历6932年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(18);\" class=\"handcursor\">顶点计划新闻报道</span><br><br>\
<div id=\"t8\" style=\"color:black;\">\
 顶点计划1号重现于德尔塔星6亿公里的太空。在成功完成了对两个恒星系的考察之后，飞船生命维持系统的一个故障提前结束了顶点计划1号的首次冒险，平安返回了吉奥迪莎。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7005年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(19);\" class=\"handcursor\">招募手册</span><br><br>\
<div id=\"t9\" style=\"color:black;\">\
 对德尔塔恒星系的探索活动现在到达了一个高峰。在移民潮的强力推动下，很多德尔塔空间站和殖民地都出现了显著的人口增长，空间站生活文化开始被大众所接受。查登特21号——最大且最奇特的殖民地之一——一直备受争议。作为一个庞大的德尔塔军事综合体，查登特21号竟然建在了巨型气体行星特里迪莎的一个小而荒凉的卫星上。建造这样一个基地并非易事，查登特21号的建造者们的目的仍是一个谜。目前没有任何证据表明吉奥迪莎面临外部威胁。\
 </div></div>";

texts[4] = "<font size=4>出德尔塔记</font><br><br>\
<div style=\"color:white;\">德尔塔历7205年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(20);\" class=\"handcursor\">聊天记录</span><br><br>\
<div id=\"t10\" style=\"color:black;\">\
 德尔塔的科学家们观察了到他们恒星磁层的不规则变动。这种恒星磁极性反转现象通常每12年发生一次，而这次则比预要早得多。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7208年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(21);\" class=\"handcursor\">眼之殇</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 德尔塔科学家们进一步的分析确认德尔塔内部的核聚变已经加快。恒星半径以每年0.1%的速度增长，这会导致恒星内氢原子的消耗的增加。这就意味着离主恒星半径增长到使吉奥迪莎不再适宜人居住只剩下不到500年的时间。\
 <br><br>我们预计吉奥迪莎的人口现在已经超过了100亿。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7209年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(22);\" class=\"handcursor\">根本解决方案</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 德尔塔政府宣布背水一战，他们把一小部分德尔塔人送上大型宇宙飞船。在找到新的家园之前，这艘船——也就是使命一号，将成为数代吉奥迪莎人的家。\
 </div></div>";

texts[5] = "<font size=4>吉星陨落</font><br><br>\
<div style=\"color:white;\">德尔塔历7354年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(23);\" class=\"handcursor\">方舟声明</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 环绕于吉奥迪莎的使命一号完成了。生态系统一切正常，它正静静地等待普通民众的到来。另一方面，吉奥迪莎上出奇地安静。虽然理论上命中注定的人民会为了登船资格而闹的不可开交，但没有迹象表明有大规模的恐慌和动乱。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7369年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(24);\" class=\"handcursor\">战斗人员通信记录</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 使命一号载着充足的旅客和船员离开了吉奥迪莎，向着英仙座悬臂进发了。据报道当时确实发生过一些社会动乱，但都被吉奥迪莎武装力量所镇压。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7378年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(25);\" class=\"handcursor\">弗林特指挥官的最后一次通话</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 吉奥迪莎失去了和使命一号的联络。从此，这艘方舟的命运就永远成了一个谜。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7379年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(26);\" class=\"handcursor\">汤普森的刻字</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 所有的飞船都被改装成适宜长距离星际旅行。紧接着，剩余的德尔塔政府和军队又开展了一次撤离行动。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7380年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(27);\" class=\"handcursor\">一个幸存者的记录</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 在那次撤离中，500艘各式各样的飞船组成的舰队载着5万多德尔塔人飞离了吉奥迪莎，驶入未知的宇宙。很难想象他们当时回望吉奥迪莎时是何等的痛苦，下面还有近百亿活生生的生命将随着吉奥迪莎的毁灭而灰飞烟灭。\
 </div></div>\
<br><div style=\"color:white;\">德尔塔历7382年 &nbsp >> &nbsp &nbsp \
<span style=\"text-decoration:underline\" onClick=\"loadRight(28);\" class=\"handcursor\">斯威夫特日记摘要</span><br><br>\
<div id=\"t2\" style=\"color:black;\">\
 大撤离的舰队失去了与吉奥迪莎的联络。\
 </div></div>";

texts[11] = "事故背景：飞船0148号 \
<br><br>星舰指挥模块测试和生命支持模块接合复审 \
<br><br>摘要：<BR> \
对星舰指挥模块各子系统的大量测试表明：该系统在严格的测试环境下达到了对其性能和可靠性的最低要求。 \
<br><br>星舰指挥模块：<BR> \
0148号飞船上的星舰指挥模块是飞船的通信和控制中心，因此该模块也是此次任务的重点。指挥模块与生命支持模块接合之后，飞船可为6名与任务有关的作业环境中的机组人员提供生命支持。而标准的三级冗余备份配置则能随时接管所有的控制和生命支持系统。因此，人们认为飞船也就没有配备逃生载具的必要了，只有灾难性的事故才能使飞船失能，逃生载具在这种严重的事故当中起不到什么作用。  \
<br><br>关于基体结构，参考 飞行检查组.4.18文件，关于控制台屏幕，参考 飞行检查组.4.19文件。 \
<br><br>星舰指挥模块和生命支持模块的接合是在该年年末完成的。当时在通电自检模块的接合上出现了一些设计上的缺陷，不过后来技术人员发现了这些缺陷并予以修正，这些内容在调查委员会所写的记录和工作日志上都可以找到。由于找不到能够导致0148号飞船失事的已知原因，调查委员会决定对星舰指挥模块和生命支持模块展开一次全面的检查，尽力确定爆炸发生的原因，该爆炸看上去是发生在飞船机腹翼梁右侧靠近氧气筒舱挂点的地方。因为以前同样配置的飞船都没有出现过事故，所以这次的分析重点区域放在以下几组零部件上：\
<blockquote> \
a) 挂载机构（fig. 5.1）<BR> \
b) 挂载物紧固机构（fig. 5.2）<BR> \
c) 氧气筒仓（fig. 5.4）<BR> \
d) 右机腹翼梁（fig. 5.5）<BR> \
</blockquote> \
调查将特别着重于制造工艺和材料的使用，以便决定是否要修订最低安全标准规范以及确认其它同系列船只是否存在同样缺陷。这次分析将结合对设计过程的审查以及每个提到系统的测试记录的审查来一起完成。万一调查没有什么特别的发现，委员会将有权扩大调查的范围来查找其它潜在因素。 \
<br><br>这次检查预计将于下季度末完成，调查的整个过程将由委员会主席切尔夫领导。基于GP-101号政策文件，所有结果都将在经过审计总署的检查后对公众公布。 \
<br><br>考虑到事故的性质和所涉及的人员伤亡，委员会还将展开一次对列表里每个项目所有生产环节的安全及人员检查，同样的检查也会应用于星舰指挥模块及生命支持模块的所有装配环节上。这些非常规的检测将由调查组长布伦森负责，所有的发现都将作为保密内容提交给委员会。";

texts[12] = "呈报公共安全委员。德尔塔历6715年 \
<br><br>执行摘要 \
<br><br>为了应对公众对于反物质可能引起重大事故的抗议，同时也为了回应你处的要求，我们已开始对一个位于夸德拉纳的反物质储存设施进行安全检查。该检查的原则目标是确保公众的健康和安全在任何时候都能得到很好的保证，同时向公众传达可靠信息：公共安全部门和设施管理部门是如何处理他们所关心的事情的。 \
<br><br>审查已于德尔塔6714年末开始，大概要花费6个埃隆（1埃隆约为一个月）时间。 \
<br><br>审查将依据由公共安全策略与管理局以及危险物质存储与处置文档所定义的标准安全管理实例来进行。这样可以保证相关法律法规中的所有规定都会被包含在内。 \
<br><br>审查期间，相关人员将对关于设施维护人员的策略进行重新审查，以便其符合以上文件。所有策略都被视为符合之前提及的规范文档和法律规定。需要重新审查的还有维护人员们在完成任务的过程中的工作流程以及这些流程与指定策略的符合程度。所有维护人员都必须具有丰富的专业知识并十分熟悉相关工作流程，能够写出符合其所受安全培训（培训内容取决于公司政策和政府法规的要求）的书面文档。在此还要说明一点：对工作组成员的安全培训应比对核聚变发电站雇员的培训频率更高、层次更深。 \
<br><br>最后，此次审查必须包含对于厂房设备的评估，同时还要建立一个安全机制来提供足够的冗余备份以便应对突发事故。这些内容也要以核聚变发电站的标准为评估标准。\
<br><br>每个反物质存储模组都有3层冗余备份机制，具有99.99%的无错测试记录。任何时候，出错层都会在紧急状况下用不到四个小时便可以备份替换。因此，如果要发生一次灾难性事故，就必须让三层冗余备份系统在四个小时内完全失效。除了主模组，存储设施的其他地方也都体现了三层冗余备份的思想：加热、制冷、能源、结构支撑和保安系统都有多重保障。我们的报告将会根据这些调查结果提出：反物质存储设备是吉奥迪莎上最安全和运作的最好的危险物质存贮设施。灾难性事故的发生概率只有约0.000014%。我们建议让公众知道公共安全局认为反物质存储设置并无危险性，并且还应根据我们的调查结果来指定一项公众教育计划，以减少公众的恐惧。同时，我们建议让设施附近的居民重新回到他们的居住地。所有关于玩忽职守和设备损坏的报告都被证明是因无知和恐惧而产生的谣言。 \
<br><br>我们希望这次备受关注和期待的特里迪莎远航的成功能有效地改变公众的态度。这真的是一次鼓舞人心的远航，就像人们说的——“有史以来最长的竞速”。以反物质作为动力来源的飞船在长距离航行上的可行性已被广泛认可，因此我们有理由相信这次反物质能源的实际应用将大大提高人们对于反物质能源的接受程度。";

texts[13] = "<font color='white'>本文复原自当时的全球广播数据单元（今藏于太史阁），讲述了层际空间动力学之父——物理学家哈佛·鲁姆的伟大事迹。 \
<br><br>鲁姆博士是一位理论物理学家，由于他在物理领域为科学进步作出的重大成就，于德尔塔历6736年获身后追授的“太学博士”荣誉。以下是哈佛·鲁姆博士悼词全文。</font> \
<br><br>科学前进的历程告诉我们：没有牺牲，就没有前进。一年前的今天，在那场现代科学探索历史上最惨烈的事故中，我失去了十四名同事，十四位友人，十四名同行。其中有一位，是同我以挚友相称的，哈佛·鲁姆。今晚，为了纪念他们，我们齐聚在这里。 \
<br><br>曾记得，我和鲁姆第一次在大学相遇的时候，都还是青涩的研究生，都抱着对理论力学的无限热情。因为我们二人和其他同学不同，我们在晦涩的理论和数学世界中从来都是孤身一人，于是很快就结成了至交。我们一起完成了博士论文，把我们的友情带入到研究领域。他热情洋溢的介绍信帮助我获得了我第一个研究工作，虽然写得有点言过其实。一年后，他把他的一个助手介绍给我，这位美丽的女子，没有拒绝我笨拙的求爱，最终成为了我的妻子，我儿子的母亲。他主持了我儿子的命名仪式，为了对他表示尊敬，我们把儿子取名为哈佛。 \
<br><br>尽管悲剧发生前，在我的生命中，几乎没有什么哪件事离开过他的帮助。但是现在，我欠他一切一切，比往日多太多太多。 \
<br><br>在那危机袭来的时刻，他的英雄气概，他的壮举，千言万语也说不尽。不用说，在座诸位都已经通过上行线路，亲耳听到、亲眼见到了现场。大家应该和我一样，都深深地知道，此刻，我们这些站在大家眼前的幸存者们，应该如何向我们那十四位朋友，向他们英勇的牺牲致敬。而其中，最为伟大的是鲁姆。正是因为他欣然献出了生命，我们才得以生还。 \
<br><br>我们都知道其中的风险，没人晓得黑洞里面有什么，更没人真正实验过黑洞膨胀。但是这就是我们的课题，这就是我们建立研究空间站的原因。即使在我最疯狂的梦中，我也不曾期望过自己有机会去经历一场宇宙冒险，去经历一场我生命中最最刺激的冒险。将近两年的时间里，我们监造了近轨空间站，并且进行了第一次实验。空间站远离人群，已经是对那起事故的最好预防。如果我们就把实验站放在吉奥迪莎，那后果只怕难以名状。 \
<br><br>在奇点（黑洞中心）形成的第一时刻，我们就对实验如此无限制的超过我们的预期感到很不安。哈佛第一个意识到奇点的威力，同时也发现了它紊乱的危险。一切都出乎意料，一切都没有先兆。读数表上反物质前进长度的曲率简直是一个科学奇迹，我看着，就想起了从前的那些奇迹。在那一瞬间，我们明白了自己的愚蠢。我们决无可能限制住这个奇点，保护壳根本不可能顶得住。 \
<br><br>他下令撤离，把我推向逃生舱，说道：“想想你老婆，想想小哈佛，他要有爸爸呀。我尽量给它顶住。快走！” \
<br><br>他竟然维持住了黑洞，即便只有短短几分钟，也真是奇迹了。上行线路，也维持到最后一刻。他尽全力完成了实验，他最后的努力让我们的朋友死的不是那么徒然。\
<br><br>一年来，我处在政府审判、公众谴责的中心，每天愁眉苦脸，为那些好朋友们的逝去而悲痛。前不久，我终于得以一睹那些最后时刻传来的资料，亲眼看看哈佛、上行线路和空间站被吞没的最后时刻。我们的科学家分析了数据以后，惊讶得连自己的计算也不敢相信。在那短短的时间里，哈佛奋力的维持了黑洞，同时也第一个意识到，我们创造出了第一个小尺寸、有导向的层际空间事件。 \
<br><br>或许在他离去的时刻，他并没有料到，但就在那一刻，他为我们文明的进步做出了前无古人的贡献。经由他的牺牲，我们发现了一个新原理，而在此原理基础上建造出的引擎，也必将是前无古人。";

texts[14] = "<font color='white'>下文解压并重建自一重要的古代数据单元，此数据单元中包含了大量被损坏的数据碎片，主要是一些恒星历6762年的多媒体文件。  \
<br><br>这份数据单元由帕内尔家族从其藏品中捐出，如今正在太史阁展出。其中只有一篇复原文档完好无损，全文摘录如下：</font> \
<br><br>爬出量子通讯的泥潭 \
<br><br>五年之内，量子相位逆转通讯装置已经扩展到军用和科研之外的商业领域，变得稀松平常。一年之前谁又能想到这些小小的可有可无的通讯器能使我们的生活发生如此翻天覆地的变化？你能在任何地方任何角落看到它们——量子相位逆转通讯器，甚至比“通讯器”还要有名的多。这股半植入式语音识别新潮流改变了现代通讯的面貌，然而作为旁观者，怀疑论者们谈到这突破性的科技时总是觉得完全于己无关。超光速通讯的存在无论仅仅是一场科技秀，或者只是一时的消费狂潮，这都任需看将来的情况，但是我们已经看到这些昂贵的小玩意已经完完全全的成为了全球的趋势，更是一种文化现象。 \
<br><br>许多开发者预言接下来的几年将会看到量子相位逆转通讯的衰落，但是直到现在它仍然被认为是我们最先进的通讯系统。来自私人的投资将会使传输质量和数据容量得到不断的改进,促使对全球大量通讯基础设施的更新。 \
<br><br>在相当短的时间内，通讯器已经开始代替很多现存的无线通讯系统，它不需要大型通讯卫星，也不需要信号路由器，更不需要很多星球上还留有的通讯基础设施。 \
<br><br>不久，科技所展示的信号直通功能将会使剩余的通讯基础设施完全被废弃。 \
<br><br>出于某些理由的担心，政府代理急需去解决对未注册地下通讯系统缺乏监视这一主要问题。 \
<br><br>政府已经在力劝数位私人部门开发者坚持使用现行中继系统，但是一些公司已经开始开发了他们自己的封闭系统，和大学和军队的相似。这些封闭系统虽然完全不会出现错误，但是只限于单一的设备对设备的通讯，主要是由于它们非常常用而且完全可靠。从一个通讯器到另外一个通讯器的传播如果不通过中继站的话是不能被截取的，对于政府来说是一个非常严重的安全隐患。 \
<br><br>公众对非法使用科技的关注迫使政府拟定法规细则，从颁发所有权证到禁止信号直通，但是到目前为止通讯器还是享受着无限制的自由。当有人请政府代表发表意见时，他们总是强调为了安全的考虑，政府非常有必要对通讯进行监控。似乎吉奥迪莎人通过伟大的科技进步变得更进的时候，同样的安全问题会缠绕着他们。";

texts[15] = "<font color='white'>下文复原自吉奥迪莎文献馆仅剩的藏品，这份数据单元最后出现是在一场黑市古玩拍卖会上。很遗憾，当局没能得到拍卖单上列出的许多货物。</font> \
<br><br>我们爱着星空。<BR>\
爱那闪电，那扑面的暴风<BR>\
那天界的故事，启发我们的童蒙<BR>\
那神话，同那传奇<BR>\
还有那希望，来自苍穹。\
<br><br>最遥远的群星，是我们的仰望，<BR>\
却未能追上它们的脚步。\
<br><br>我们固然也爱这星球。<BR>\
曾经在山谷中漫游，<BR>\
在土地上耕作，畅饮碧色清流，<BR>\
但夕阳过后，仍凝望夜空的奇秀。\
<br><br>最遥远的群星，是我们的追求，<BR>\
何时能追上它们的脚步？\
<br><br>黑暗中，刹那闪电照亮。<BR>\
一叶漂泊，在漆黑海上，<BR>\
远岛是所向。\
<br><br>我们开拓，最远的路途。<BR>\
求索希冀，不畏道长且阻，<BR>\
到风烛残年，耗费毕生尘与土，<BR>\
终走完，追梦长路。\
<br><br>最遥远的群星，是我们的征途，<BR>\
仍须努力，追赶它们的脚步。";

texts[16] = "理查德·德雷克在上个埃隆逝世于雷尔泽的家中，享年97岁。作为一个工程师和物理学家，他为历史性的顶点1号计划工作而名垂青史册。 \
<br><br>理查德幼年时被德雷克家收养，他觉得他的童年过的很开心。他的养父托马斯·德雷克是个天文学家，受其养父的影响，理查德十分喜爱星空，同时对太空航行充满了激情。这激情伴随他的成长越来越强烈，以致最后到达一种如痴如醉的程度。 \
<br><br>在他年轻时，理查德梦想参加著名的吉奥迪莎大学的天体物理学项目，但无力支付学费，他在早期学习中更多地表现出疯狂的想像力而不是学术潜力。所以，当他作为一个乡村小学院的优秀毕业生毕业后，理查德转而申请到吉奥迪莎空间探索管理局（GSEA）实习。他最初的申请被GSEA所拒，但他决定继续申请。他的坚持终于有了回报：在6854年，他最终被项目组录取。他在GSEA漫长的职业生涯开始了。 \
<br><br>他的天赋很快便显露出来，职位也稳步提升，后来成为了GSEA的最高研究员之一。6866年，他最终成为参与顶点计划的科学家之一，该计划是史上第一次载人超空间飞行。直到9年后这个计划才对公众公开。 \
<br><br>理查德的工作是使顶点计划像它所设计的那样成功。他领导的研究小组负责设计顶点计划1号的舰体，确保它能支持生命承受超空间旅行的严酷环境。其它部件，例如引擎和导航系统，都采用独立研发，但舰体必须能完美地和它们组合在一起。设计上的一个小小的失误或错误都将危及整个机组人员的生命。 \
<br><br>他手下的研究员说，每当计划碰到障碍，需要一些新改进时，总是理查德·德雷克找到了办法。他的创新能力和无限激情带领整个小组前进，使得计划非常成功。在6875年，GSEA最终对世界公布了这个计划。当他所做的数目庞大的改进被公开后，整个科学界震动了。一年后，理查德·德雷克被授予吉奥迪莎大学天体物理学荣誉博士学位。 \
<br><br>理查德.德雷克博士最终于6899年从顶点计划退休，他为此献出了生命中最好的年华。不幸的是，他的心脏在顶点计划的历史性航行提上日程之前两年停止了跳动。作为那个时代最伟大的技术家之一，人们将永远铭记他。 \
<br><br><font color='white'>[记录结束。]</font>";

texts[17] = "<font color='white'>[这是一封吉利亚·奥尼尔写给格温多林·杰夫斯的私人信件的数字记录，大约写于德尔塔纪年6931年]</font>\
<br><br>亲爱的格温，\
<br><br>抱歉经常写信打扰你，但你的来信是使我脑袋不至于变成两半的唯一东西。自从他走了以后，这房子就空旷了许多——我从来没有像现在一样感到那么孤单。\
<br><br>甚至现在快过去一年了，我还很难面对他可能永远不再回来的现实。他就像是鬼魂出现在我生活中；每天我都觉得他就在角落里。每次敲门声响起，或者HT终端有个来电，我觉得——只是有一会——可能是他。但当然不可能是他了。我真是个傻瓜。\
<br><br>我要求的很过分吗？我只是想和他多待一分钟就满意了。一秒钟也可以！只要他回来和我待一会，我也就无憾了。我只要知道他现在一切都好就好了。但他的新“情妇”很苛刻和可恶，疯狂占有他的时间。自从他进入超空间之后，我们将比世界上任何两个人分开的距离都要远。想到这里我就感觉心里一片冰凉。\
<br><br>在詹姆士刚被选为8名勇士之一时，我多么为他感到高兴。我们甚至举行了一个小小的胜利庆祝，只有我们俩。但现在……现在我希望他没有去。离开他那么久很痛苦，但最糟糕的是什么都不知道。太痛苦了！不知道他是活是死，不知道他在想我还是只想着任务……\
<br><br>我感觉像一个古老故事中的倒霉女人，成日成夜地站在灯塔中，失神地看着海洋的尽头，但不知道她已经成为了寡妇。\
<br><br>噢，姑妈，顶点计划1号真的会回来吗？科学家们坚持至少还要一年我们才能得出结论，但我不认为我能坚持那么久。我的心脏坚持不了一年，还是那样的生活。请再告诉我一遍一切都会好的。\
<br><br>深爱你的，\
<br><br>吉尔\
<br><br><font color='white'>[记录结束。]\
<br><br>[编者注：顶点计划1号在6932年末重新出现，圆满地完成了里程碑式的第一次超空间跳跃。船长詹姆斯·奥尼尔终于安全地回到吉奥迪莎他的妻子身边，他的功绩也将永载史册。]</font>";

texts[18] = "今早，明亮的橙色恒星从吉奥迪莎的东方地平线上升起，将它的光辉照耀在全银河第一批星际旅行者身上。\
<br><br>我们知道，20多年前我们吉奥迪莎轨道上的反物质储存设施发生了严重的事故，使我们文明损失了14个最杰出的科学家。但他们的牺牲没有白费。他们的死推动了人类历史上最伟大的科学发现艰难前行，他们创造的指向性奇点极大地改变了我们文明的技术极限，他们创造了一个通向超空间的微小通道。通过探索这个在他们时代理解甚少的现象，他们携手超越了常规的时空界限，进入了超空间的无限领域。第一次为我们文明提供了机会，去突破恒星系的约束，穿越无尽虚空，到达群星闪耀的地方。\
<br><br>此后在不到一代人的时间里，顶点计划启动了。作为政府支持的计划，顶点计划代表了德尔塔工程技术的颠峰，一个以中等超光速推动载人飞船超越星际限制的引擎诞生了。\
<br><br>两年前，我们屏住呼吸，崇敬地看着从德尔塔星舰顶点计划1号发回千家万户的实况画面。整个吉奥迪莎星都几乎一片安静，看着数百万英里虚空之外顶点计划1号的船体开始模糊，飞船超空间引擎发出的引力场扭曲了从遥远的德尔塔恒星射来的光芒。几秒钟之后，顶点计划1号，承载着吉奥迪莎的厚望，发出明亮的闪光，从空间中消失，进入超空间的虚无中。\
<br><br>今天，两年过去了，在吉奥迪莎沉睡的半球上空，群星自己开始舞动和闪耀，然后一个超空间奇点的出口开始凝聚。突然一阵蓝光爆闪，顶点计划1号出现在了空间中。德尔塔文明的首架星际飞船回家了。\
<br><br>如帕.D.爱森，GDG新闻 ";

texts[19] = "<font color='white'>[这是吉奥迪莎军队招募手册的一段数字记录，时间是恒星历7007年。]</font>\
<br><br>更聪明、更强壮、更迅速！\
<br><br>梦想过让自己变成这样吗？\
<br><br>这不仅仅是个梦想。你完全能够让自己做到最好——你只是缺少机会去证明你自己。现在是时候了，加入吉奥迪莎武装力量（GAF）。我们将帮你开发潜力，成为你想成为的人，实现这个梦想。\
<br><br>职业<BR>\
GAF为你提供训练打造前途。作为服务的一部分，你要从几百种职业生涯中做出选择，然后从你的领域的专家那里学习知识并第一时间加以应用。一旦你加入我们，你的前途就只受你自己的愿望和毅力限制。\
<br><br>从计算机技术到医疗支持，从场论科学到飞船维修，GAF有最好的工作。不要错过成为我们当中一员的机会。\
<br><br>旅行和探索<BR>\
我们的基地遍布吉奥迪莎星各个风情迥异的地区，GAF为你提供独特的探索我们星球的机会——还有我们的文化——前所未有的机会。作为GAF的一员，你将和各种各样的人共事，可以在你梦想前往的地方服役。但我们给你旅行的机会还不止这些。\
<br><br>随着最近特里迪莎基地的建立，你的机会甚至包括陌生的卫星！你曾想过体验空间生活吗？想过在一个外星星球的迥异风景中生活吗？在GAF的职业生涯将帮助你实现。\
<br><br>教育优惠<BR>\
为了提供专家级的训练和支持你选择的职业生涯，GAF为想继续受教育深造的现役人员提供强力的激励和奖励项目。GAF将为你承担接受高等教育的所需的全部学费和杂费——甚至在你退役之后！\
<br><br>医疗保障<BR>\
我们有一个针对现役人员及家属的医疗计划，该计划可以媲美最好的企业提供的的医疗保障。除了完善的医疗覆盖，还有产假/病假制度，和对应的各种\
<br><br><font color='white'>[记录突然停止。]</font> ";

texts[20] = "<font color='white'>[一段文本聊天记录]</font> \
<br><br>+0:00 [占星者]我发誓，今天我真的看到赤道上的黑子突然消失了，然后在更高的纬度又出现了一些新的，有人注意到了吗？ \
<br><br>+1:15 [占星者] 有其他人注意到了吗？ \
<br><br>+0:30 [小可爱]嗨，检查下你的仪器吧 \
<br><br>+ 0:30 [小可爱] 昨天早上我们这观察到赤道北有3个磁结 \
<br><br>+0:30 [小可爱] 难道它们能在10小时内消失 :p \
<br><br>+0:15 [占星者] 你在仪器前面吗? 你现在在观察吗？ \
<br><br>+0:30 [占星者] 我现在就在观察，它们就那样消失了 \
<br><br>+0:15 [小可爱] 不在，我坐在家里看昨天的数据 \
<br><br>+0:15 [占星者] 要知道我做的第一件事情就是清除所有观察数据并重新校准 \
<br><br>+0:15 [流浪剑客] 我很乐意用十分钟去确认下 \
<br><br>+0:30 [流浪剑客] 本来以为今天又是漫长的一天 :) \
<br><br>+1:30 [占星者] 南高纬又出现两个黑子 \
<br><br>+0:30 [流浪剑客] 你们留点让我观察啊！ \
<br><br>+1:00 [流浪剑客] 你们应该明白，如果我能够确认这现象的话那么我们很可能迎来了新的周期…… \
<br><br>+0:30 [小可爱] 不要兴奋的那么早，如果现象没有持续下去的话，很有可能只是个短暂不规则现象 \
<br><br>+0:30 [小可爱] 这个周期才开始八年 \
<br><br>+3:30 [占星者] 两极活动加剧 \
<br><br>+0:30 [占星者] 你们到底在搞什么！ \
<br><br>+0:30 [小可爱] 别急...两极活动加剧指的是？\
<br><br>+1:00 [占星者] 我是说我在南极观察到三个新黑子，北极有一个 \
<br><br>+0:30 [流浪剑客] 太阳你等着…… \
<br><br>+1:00 [流浪剑客] 我来了哈…… \
<br><br>+2:30 [流浪剑客] 我确认高纬度出现了黑子, 数量是…… \
<br><br>+0:30 [流浪剑客] 7南5北1赤道 \
<br><br>+0:15 [小可爱] 兄弟们你们是不是在开我玩笑啊…… \
<br><br>+0:30 [占星者] 小可爱去拿仪器观察下吧 \
<br><br>+0:30 [占星者] 你在说什么啊 \
<br><br>+0:30 [流浪剑客] 对若尔说：你在吗？ 快来看啊，一生只此一次 :) \
<br><br>+0:30 [流浪剑客] 谁是若尔？ \
<br><br>+0:30 [流浪剑客] 他在当地大学上学，能够使用大学里面的设备 \
<br><br>+1:30 [若尔] 流浪剑客我到了，等我几分钟来开启实验室仪器 \
<br><br>+2:30 [占星者] 兄弟们快点吧，我想死 \
<br><br>+0:30 [流浪剑客] 两分钟过去了，放他一马吧……呃，北半球又出现两个新的黑子 \
<br><br>+3:30 [占星者] 南半球的数字增加了一个。赤道的一个黑子似乎要燃尽了。你能确定它消失的轨迹吗？ \
<br><br>+0:15 [流浪剑客] 该死，是的。小可爱你还在怀疑吗？\
<br><br>+0:30 [小可爱] 若尔你在哪？ \
<br><br>+0:15 [若尔] 约翰逊学院，海因里希太阳观测台 \
<br><br>+0:30 [流浪剑客] 就是吧，我都告诉过你了 囧 \
<br><br>+0:30 [小可爱] 嗨，好吧，我会全盘接受的 \
<br><br>+1:00 [若尔] 位置确定，太阳黑子现在的情况是：北半球9个，南半球6个，赤道0 \
<br><br>+0:30 [小可爱] 好吧，伙计，你们让我对此很感兴趣，但是我要早走一步啦 \
<br><br>+0:30 [小可爱] 45分钟后就回来 \
<br><br>+0:15 *** 小可爱已经离开*** \
<br><br>+0:30 [占星者] 到底怎么回事？ \
<br><br>+0:30 [星光侠] 什么也没发生 \
<br><br>+0:15 [流浪剑客] 你难住我了，望远镜观测只是我的业余爱好 \
<br><br>+0:15 [流浪剑客] 啊！？什么事情都没发生是什么意思？\
<br><br>+0:15 [若尔] 伙计们，现在就定言还太早，我想这可能是不规则现象吧。我好希望自己有时间啊，那么我一定会去深入证明的…… \
<br><br>+0:15 [若尔] 不过我还能观察大约半个小时吧，但是之后我要去上课了 \
<br><br>+0:15 [若尔] 我会在这里给我教授留个便条的。 \
<br><br>+0:15 [星光侠] 我的意思是：就因为最近磁结的变化，你们就以为自己跳入了一个新的周期了吗 \
<br><br>+0:15 [星光侠] 认真点，退一步，观察一段时间吧，在你们想出名之前 \
<br><br>+0:30 [占星者] 轻松点，星光侠。我可从来没有说过周期改变的话，我只是想知道其他人是否观察到一样的现象 \
<br><br>+0:15 [星光侠] 这时你们应该去查查黑子变化周期的资料。如果不那样做你们肯定不会找到任何有用的东西。 \
<br><br>+0:30 [占星者] 它们没有在纬度上变化，它们只离开了两极！ \
<br><br>+0:15 [占星者] 你看了吗？ \
<br><br>+0:30 [星光侠] 不需要看我就知道会怎么样 \
<br><br>+0:30 [流浪剑客] 不管怎么样，无视他 \
<br><br>+0:30 [流浪剑客] 也许我们该花些时间等小可爱找到些参考资料 \
<br><br>+0:30 [占星者] 现象看起来好像逐渐停止了，可能只是暂时的 \
<br><br>+7:30 [流浪剑客] 我实在想不出什么东西了，占星者你呢？ \
<br><br>+2:30 [占星者] 我发现了一个大概有10年的周期，就是在恒星历5562年中的，没有更短的太阳周期的记录了 \
<br><br>+0:15 [星光侠] 5562年！即使那事是真的，现在的数据也值得怀疑。当时人们用的什么工具？接地透镜和直接观测？！他们难道是瞎子吗？ \
<br><br>+0:30 [流浪剑客] 对星光侠说：继续无视 \
<br><br>+0:30 [流浪剑客] 唉，这是个1643年前的记录了！ \
<br><br>+0:30 [流浪剑客] 占星者，如果你是对的话，那么我们观察到了一些新东西…… \
<br><br>+0:30 [流浪剑客] 我要和你抢着上报纸 :p \
<br><br>+0:15 [占星者] 等等，我从来没有说过任何关于周期改变了的话，我们都只是业余爱好者。我们等下若尔和小可爱吧 \
<br><br>+1:00 [若尔] 兄弟们我还在，接着上面的谈吧 :)  即使困难重重，我很肯定我们能够解决掉，占星者加油！\
<br><br>+0:30 [占星者] 谢谢 :)  \
<br><br>+0:30 [若尔] 它看起来确实已经停止了，我也要去上课了 拜拜 \
<br><br>+0:15 ***若尔已经离开*** \
<br><br>+0:15 [星光侠] 太阳磁场周期是所有太阳活动的能量来源，如果周期发生了改变，太阳上是不可能只有黑子而没什么明显变化的。 \
<br><br>+0:30 [流浪剑客] 为什么他妈的不可能？ \
<br><br>+0:15 [流浪剑客] 真应该完完全全无视你 :( \
<br><br>+0:15 [星光侠] 因为我们很了解我们的太阳，我们能预测几年内的重大自然事件 \
<br><br>+0:30 [占星者] 要等多久小可爱才会来啊？ \
<br><br>+1:00 [流浪剑客] 他会忙20分钟左右吧，不知道那之后他是否会登录 \
<br><br>+0:30 [占星者] 就这样吧，我要去吃点东西了，开始写我的论文 :p \
<br><br>+0:30 [流浪剑客] 嗨，我会留下来继续观察，看看是否有其他出现 \
<br><br>+22:00 [占星者] 有新的进展吗？ \
<br><br>+0:30 [流浪剑客] 欢迎回来，南半球出现了两个新的黑子，他们看起来好像移动到离赤道更近的地方了，我眼睛都快看瞎了 :) \
<br><br>+0:15 [流浪剑客] 小可爱和若尔什么消息也没有 \
<br><br>+0:30 [星光侠] 那么就是说不规则现象已经开始消失了，周期恢复正常了 \
<br><br>+0:30 [流浪剑客] 我并没有那样说 \
<br><br>+1:00 ***小可爱已经加入*** \
<br><br>+0:15 [流浪剑客] 说曹操，曹操就到 \
<br><br>+0:30 [小可爱] 占星者你第一次观察到是在什么时候？ \
<br><br>+0:30 [小可爱] 流浪剑客你呢？ \
<br><br>+0:30 [占星者] 太好了哦，小可爱现在相信我了 :p \
<br><br>+0:30 [星光侠] 根据这两份报告判断，黑子已经回到了赤道区域 \
<br><br>+0:30 [小可爱] 根据它们可以判断，但是剩下的报告也还没有查看，我们去尝试去确定移动的次数吧 \
<br><br>+0:15 [星光侠] 什么移动？有记录的历史中没有移动发生，没有移动的可能 \
<br><br>+0:30 [占星者] 没问题，小可爱你要我把报告传过去吗？ \
<br><br>+0:30 [小可爱] 黑子的运动中存在一个从赤道移动到北半球和南半球的趋势 \
<br><br>+0:15 [小可爱] 我们已经不需要去假设了 \
<br><br>+0:30 [小可爱] 就像我说的那样，我们准备从黑子移动的起始开始观察，这样我们就能从头到尾记录下异常的轨迹 \
<br><br>+0:30 [小可爱] 传过来吧，占星者太棒了，不要写忘记你的名字，我相信你的数据，流浪剑客你的也是，如果你能传给我的话。 \
<br><br>+0:30 [占星者] 传好了，谢谢 \
<br><br>+0:15 [流浪剑客] 好了，同谢！\
<br><br>+0:30 [小可爱] 伙计，谢谢你们 \
<br><br>+3:00 [流浪剑客] 那么结论是什么 \
<br><br>+1:30 [小可爱] 还在分析，但是看起来赤道的黑子在形成后9小时左右就消失了 \
<br><br>+0:30 [小可爱] 占星者观察的时候差不多是新的黑子形成的时候，现在还不知道形成黑子的原因 \
<br><br>+0:15 [星光侠] 结论就是黑子是不稳定的，让由于挥发性而造成黑子下沉时，磁共振从赤道向两极移动 \
<br><br>+0:15 [星光侠] 往往最简单的方法是正确的方法 \
<br><br>+0:15 [流浪剑客] 我们试着无视他，但是一点用都没有 :( \
<br><br>+0:30 [小可爱] 我想要看看你的计算，是什么样的能量使赤道北部的黑子磁结散开，并且在两极聚拢一打黑子 \
<br><br>+0:15 [小可爱] 我倒要看看能否产生“挥发性”的数学表达 \
<br><br>+0:15 [流浪剑客] 哦，你能看的到哦 :) \
<br><br>+0:30 *** 若尔已经加入*** \
<br><br>+0:15 ***弗雷德里希已经加入*** \
<br><br>+0:15 [若尔] 大家好，我把我的教授带来了，他有一些消息 \
<br><br>+0:15 [星光侠] 终于能看到一些比较合理的发言了 \
<br><br>+0:30 [弗雷德里希] 大家早上好，我是约翰逊学院的弗雷德里希博士，我已经仔细检查过史蒂文的报告了，我有一些信息和大家分享 \
<br><br>+0:15 [小可爱] 你好教授，我是伯德天文台的弗兰克·科文顿博士 \
<br><br>+0:30 [弗雷德里希] 太好了，确认过数据吗？ \
<br><br>+0:30 [小可爱] 到目前为止我们所作的都是确认变化的次数 \
<br><br>+0:30 [弗雷德里希] 那应该和我们的数据吻合的很好，你能把它发给我吗？一读完史蒂文的报告我们就检查过黑子的极性了 \
<br><br>+0:15 [星光侠] 浪费资源，浪费时间，这个周期就和我们所说的一样是稳定的 \
<br><br>+0:15 [弗雷德里希] 磁极性已经反转了。 \
<br><br>+0:30 [小可爱] 好了，数据发送完毕 \
<br><br>+0:15 [弗雷德里希] 但是从已经掌握的数据来看它们燃尽的速度比现代理论允许的要快的多。 \
<br><br>+0:30 [星光侠] 不可能。我们恒星历史上没有8年的周期 \
<br><br>+0:15 [小可爱] 教授，现在还没有找到原因 \
<br><br>+0:30 [弗雷德里希] 谢谢你的数据，科文顿博士。但是我有另一个不情之请。你能给我演示下反光 \
<br><br><font color='white'>[记录在这里突然终止了。]</font>";


texts[21] = "眼之殇\
<br><br>吉奥迪莎怀抱中<br>\
德尔塔剧烈闪耀， <br>\
千双射电望远镜的盲眼<br>\
记录分析了她的光和能量。\
<br><br>除了这古老的机器，所有人浑浑噩噩， <br>\
在大德尔塔的内核深处 <br>\
混沌已经悄然降临。\
<br><br>一颗太阳侦察卫星 <br>\
静静漂浮在高空轨道， <br>\
记录下紫外线恐怖景象 <br>\
宣告德尔塔的死亡。 <br><br>\
当卫星长出了翅膀； <br>\
人们惶惶终日； <br>\
恐怖的图像做出了预言 <br>\
预言了文明的终结。 <br><br>\
小太阳黑子正在形成。\
<br><br>后世可知 <br>\
灾变前最后的先兆。\
<br><br>巨大耀斑拉起逝去星球之弦 <br>\
射出死亡 <br>\
洗刷整个世界。\
<br><br>——艾碧盖尔·鲁宾斯，桂冠诗人，德尔塔7208年";

texts[22] = "<font color='white'>从少量残余政府文档数据单元中破解的这份演说是我们学会最宝贵的文档，这份演说是在使命一号正式揭幕的仪式上通过整个德尔塔通讯系统向全部德尔塔人现场直播的。这份演说代表着德尔塔历史上最重要的时刻之一，也是我们文明的最关键的时刻之一。</font>\
<br><br>四千年前，我们的祖先，第一次踏上吉奥迪莎这片光辉的土地，带领我们走上了一条通向和平启蒙的路，这是人生中最伟大的自由。四千年后，我们繁荣昌盛，势不可挡。我们大步走过前人从未想过的路。今天，吉奥迪莎成为了我们先进科技和繁荣昌盛的圣约，但是就在这样一个非常时刻，我们，我们的文明已经处在了一个非常危险的环境中。为了我们伟大的过去和未来，我们文明一定会继续闪耀下去。命运把我们领向一个黑暗而危险的道路，但是我们能够忍耐，我们一定会走过去。因为，通向重生的路就深深埋藏在我们的心中——我们的精神和勇气。 \
<br><br>一年之前，当太阳陨落的残酷事实被确认的时候，我们伟大的诗人鲁宾斯写下了我们的疑惑，唱出了我们的绝望。从那时到现在，我们一直把它放在自己的内心深处，这首绝望的诗歌已经变成了我们的圣歌，为死去的人们而唱，为我们不灭的精神而唱。 \
<br><br>今天，我充满希望的再次来到你们面前。希望能够拯救我们的人们，希望我们伟大的文明能够挣脱出德尔塔的束缚，再见了我们深爱的炙热的星星——在群星中我们总会找到我们新的家园。 \
<br><br>德尔塔人民会在远离我们文明摇篮的地方找到我们的避难所。我们吉奥迪莎人是骄傲不屈的民族。我们一定会活下去。 \
<br><br>今天，我正式宣布使命号正在吉奥迪莎上空的同步轨道上建造。这艘大型飞船装备了长距离的超空间推进驱动器，它将带领我们的人民穿越宇宙重重的迷雾，达到银河的另一端——我们的新家园。 \
<br><br>建造这艘方舟——使命一号是个艰巨的任务，需要数代的德尔塔科学家、航天员、工程师们付出鲜血和汗水，需要二百多年才能建成。使命一号完成后，其会包含一个完整的自给自足的生态系统，满载乘客和工作人员，飞离德尔塔星系，和我们死去的恒星永别。 \
<br><br>我们的人民会再次找到自己的目标。我们会拯救自己的未来。我们一定会活下去。 \
<br><br>乔诺·艾文瑞斯总统，大吉奥迪莎第87任总统";

texts[23] = "<font color='white'>[本文记录的是7354年吉奥迪莎空间探索委员会的一次新闻发布会]</font> \
<br><br>鲁姆空间研究中心——作为空间探索和星际旅行的政府主管机构，吉奥迪莎空间探索委员会（GSEA）今天宣布了使命一号的正式竣工，这也标志着这个人类历史上耗时最长，最具意义的项目终于顺利完成了。 \
<br><br>GSEA人事处秘书长马克·库珀说：“我在此荣幸地宣布，使命一号正式竣工。所有检查都表现正常，运行轨道稳定，方舟是适宜人居住的。我很高兴能在有生之年见证这个伟大工程的成功。” \
<br><br>使命一号的建成标志着人类历史上又一个里程碑。虽然这个几乎所有国家都参与其中的工程花费了150年才告竣工，但我们都知道这个等待是值得的。这艘方舟不但能够星际旅行，它更是承载了一百一十万人类文明的种子。 \
<br><br>为什么我们要造那么巨大的一艘宇宙飞船呢？库珀先生如是说：“德尔塔人都是斗士。当我们面对灾难时，我们不会放弃。我们要团结一致，努力创造，最终一定会活下去。” \
<br><br><center>* * * </center>\
<br>关于吉奥迪莎空间探索委员会： \
<br><br>自6812年成立以来，吉奥迪莎空间探索委员会已经在空间探索和星际旅行领域取得了无数卓越成就。GSEA继承了哈佛·鲁姆的衣钵，始终不渝地探索着宇宙，星体，让我们更多的了解我们自己。它的许多科研成果也已被广泛地用于民用，大大地提高了我们的生活质量。GSEA将继续探索宇宙，提高我们对它的认识，并永远服务德尔塔人民。 \
<br><br><font color='white'>[记录结束。]</font>";

texts[24] = "<b>格式——通信记录<br> \
内容——私人的<br> \
发送人——陶尼罗 M. 赛斯托洛尔 军士 341120-3<br> \
第三警卫团一营二连一排<BR> \
应接收人——吉尼亚·赛斯托洛尔 （知名人士）<BR> \
与发送人关系——配偶<BR> \
发送地——劳瓦，LMS宇航中心<BR> \
审查级别——一级</b> \
<br><br>[记录开始于：21:30 -- 4.09.7369]<BR> \
嗨，吉尼 \
<br><br>长话短说。我只想告诉你我刚接到命令要出发了，没有其他说明，只知道三小时之内就要走。他们说会通知家属的，但我还是想亲口告诉你，你可能已经收到了官方的通知…我只想说我一直很想你。不用为我担心，我们很快会再见面的。 \
<br><br>爱你的，陶<br> \
[记录结束于：21:31 -- 4.09.7369] \
<br><br>[记录开始于：09:07 -- 7.09.7369]<BR> \
嗨，吉 \
<br><br>他们总算允许我们再发消息了，但只限于声音，而且有些还会被审查器过滤，所以别介意。你大概已经听说了，那晚整个团都出发了，包括重型装备。我不确定这些家伙到底有没有意识到我们已经远离训练范围了，但我可以看到一些[此处被过滤]在那树着。不管怎么说看来我们是在守卫一个在[此处被过滤]的空的星港。下次再聊。 \
<br><br>想你的，陶<br> \
[记录结束于：09:09 -- 7.09.7369] \
<br><br>[记录开始于：14:56 -- 13.09.7369]<BR> \
亲爱的，又是我 \
<br><br>收到你的录音真高兴！我搞不清楚他们到底在搞什么，除了一些军人和后勤人员，我还没见过其他人。但他们每天把我的任务都计划的满满的。你猜巡查星港的围栏要花多少时间？相信我，吉，你不会想知道的。但我还是要说：已经六天了！哈，这就是你的英雄这六天做的事。每天划个范围，在围栏边巡查。有时我们为了找点乐子就走到离围栏几百码远的[此处被过滤]，看着墙，在个洞里坐坐。哎，这就是士兵的生活…… \
<br><br>没时间了，以后再聊，陶<br> \
[记录结束于：09:12 -- 13.09.7369] \
<br><br>[记录开始于：09:12 -- 18.09.7369]<BR> \
嘿，吉尼 \
<br><br>在光荣的[此处被过滤]又是一个好天，又要在洞里坐一天，我靠…… \
<br><br>以后再聊<br> \
[记录结束于：09:12 -- 18.09.7369] \
<br><br>[记录开始于：02:48 -- 19.09.7369]<BR> \
<br><br>我必须说快点，亲爱的，我们已经在占用二排的时间了。今天我们被叫去疏导人群了。我们的位置暴露了，人群正从各个方向源源不断的涌来。还好到目前为止没出什么事。显然他们都是来看热闹的，并不是反对者。 \
<br><br>不好意思我有点慌，以后再聊，陶<br> \
[记录结束于：02:49 --19.09.7369] \
<br><br>[记录开始于：15:01 -- 21.09.7369]<BR> \
嘿，吉 \
<br><br>这三天事开始多起来了。那些来围观的人开始在封锁线外安营扎寨了，我们的军官[此处被过滤]。其中有些人直接走到了检查点来要求登上使命一号。真不知道他们怎么想的，我们不得不扣留了其中两个不肯回去的。他们两个居然以为和士兵干一架就可以上船。还算好那些士兵脑子还比较冷静，只是稍微教训了他们一下。真是白痴。还有，亲爱的，我有个坏消息要告诉你。就因为要维持外面的持续，我们的通讯时间被减少了。我们现在被从预备队转到了战斗编制，也就是说每月三次的通讯时间现在只有两次了。 \
<br><br>对不起，亲爱的，但这真的不是我能左右的。请务必继续发消息给我，你的留言对我越发重要了。陶<br> \
[记录结束于：15:03 -- 21.09.7369] \
<br><br>[记录开始于：08:59 -- 04.10.7369]<BR> \
嗨，吉 \
<br><br>这几个礼拜局势越来越严峻了。虽然目前为止我们还没开过枪，但气氛相当紧张。有三个人分别试图突破封锁线，其中一个还真的拿了个切割器到了围栏。这白痴如果有个一般的老式线割器大概就成了。他三点左右还在说焊接器可以有多种用途，呵呵。最可怕的是开一条到[此处被过滤]的路。我们必须强制赶走200码范围内的大约三百个民众。这么看来，被选中的人马上就会来了。 \
<br><br>爱你的，陶 <br> \
[记录结束于：09:03 -- 04.10.7369] \
<br><br>[记录开始于：09:45 -- 18.10.7369]<BR> \
嘿，吉尼 \
<br><br>但愿你安然无恙！人群突然就涌向了我们，一开始我还不相信会有暴动的谣言。他们一定是听说了城市里发生的事情，因为他们差不多就在那之后马上行动了。真不知道谁走漏了消息。我甚至不知道被选中的人已经在这里了。上次我还只是听说被选中的人随时可能到。这么看来这些人在我们到这之后就到了。我还听说他们开始用选中的人替换驾驶员，悄悄地安排进一般的补给船。有一次，一整排的增援部队到了我们这里，后来才知道他们都是被选中的。成千上万被选中的人已经来了一个多月了，我甚至觉得他们在我们到这里之前已经来了。真不知道我们的安保系统是怎么搞的。反正这事一传开（据说被选中的人已经被转移到发射地点了），外面驻扎的人群就开始聚集了，我们也进入了高度戒备状态。一群军官试图去劝阻和安抚人群，但最后我们不得不派了一个连去把他们解救回来。三小时后他们开始围攻了，而我们[此处被过滤][此处被过滤]。我手下死了三个。然后我就听说你可能在老家的暴动中被逮捕了。反正这真是混乱的一天。但吉尼，一切都已经过去了。我们清除了那些营地，还把封锁线扩到了一千米。现在这儿已经是无人区了，任何擅自闯入的人都会被打死。 \
<br><br>爱你的，陶，千万保重<br> \
[记录结束于：09:50 -- 18.10.7369] \
<br><br>[记录开始于：23:35 -- 02.11.7369]<BR> \
嗨，吉 \
<br><br>谢谢你的留言。我相信老爸和罗比肯定可以保证你的安全。听说你肯去他们那里我真的是松了口气。几周来这里的情况一直很紧张。人群撤退了，但现在我们还处于僵持中。我不是很肯定，但我猜那些闹事人群的头被[此处被过滤]。我发誓我看到他们其中的一些人乘坐为被选中人准备的专用车到了这里。反正我们现在就是在为在陆地上的被选中人提供必要的保护。目前看来他们都还是一群比较高尚的人。我一直在保护他们免于被杀，还没机会和他们谈谈。 \
<br><br>注意安全，然后替我向爸爸妈妈问好，陶<br> \
[记录结束于：23:37 -- 02.11.7369] \
<br><br>[记录开始于：09:57 -- 19.11.7369]<BR> \
吉 \
<br><br>不好意思，我迟到了。我刚刚必须去掩护中校。他的警卫在封锁线外被袭击了，他也不幸中弹。我们把他们都救回来了但估计他要在医院里康复好几天。当然，这也意味着我们必须回去扫清那个区域，难免还会交火。幸运的是这些人没什么真正的武器，要不然我们麻烦就大了。另一方面，我和一些被选中的人聊了会儿。老实说，他们真的不一样。我也不知道我心目中他们应该是什么样的人，但他们就是不一样。他们都很……谦逊，我只能这么形容。我不知道他们到底是怎么被选中的，但他们都看得比较远。同时，他们对自己要做的事情都很执着，没有人偷懒，这点所有军队里的人都有目共睹。我一开始以为会是一群高智商的人和战斗机飞行员，但现在看来他们都是些好人，都很清楚自己应该做什么。老实说，自从了解了他们以后，对于自己保卫星港的任务我感觉好多了。 <br> \
[记录结束于：09:59 -- 19.11.7369] \
<br><br>[记录开始于：15:02 -- 09.12.7369]<BR> \
嗨，吉尼 \
<br><br>一切都要结束了。差不多24小时后方舟就要启航了，我们也可以回家了。这到底算什么！必须先挂了，以后再聊。 <br> \
[记录结束于：09:59 -- 19.11.7369] \
<br><br>[记录开始于：15:02 -- 09.12.7369]<BR> \
吉 \
<br><br>好了，他们走了。你应该马上就能看到报道了。他们提早了17个钟头，而且没有任何解释。我们根本不知道他们已经准备好了，我们本以为地面上还有一些被选中的人。看来这些人都是特种部队扮的，我就知道肯定有这种秘密行动。我们连一点警告都没收到！我当时在录一个消息，突然警笛大作，我们都马上跑到了各自的岗位。同样的，没有任何解释，我们站了18个钟头！后来有传言说使命一号上出了点故障。最终解除警报的命令下来了，然后就听说他们已经成果启航了。反正这整个行动从一开始就很奇怪，最后的结局也就没什么出乎意料的了。不管怎么说，我总算可以马上回家了。想到马上就要见到你了我就无比的高兴。 \
<br><br>爱你的，陶<br> \
[记录结束于：21:28 -- 10.12.7369]";

texts[25] = "来自舰队管理总长弗林特指挥官的消息： \
<br><br>正如大家所知的，我们和使命一号的通信越来越不稳定了，而且在过去几埃隆里延时越来越严重。昨天我们收到了来自她的最后一条消息。所以我们有把握相信我们只能再向她发送三天的消息了。 \
<br><br>所以说，请大家在两个正常日之内以舰船为单位把要发送的消息都集中到各自的指挥官那里去。而且考虑到这将是一次集中的发送，请大家务必控制信息的长度。 \
<br><br>以下是舰队管理部发给使命一号的信息：\
<br><br>在此请允许我引用一句伟大的诗句：“路漫漫其修远兮”。七年啦，你将在群星中展开新的征程。虽然家乡已永远离你而去，但请不要犹豫，义无反顾地去追求新的希望。\
<br><br>愿神指引你通向新家园的道路，在那养育子孙后代。你的事迹将永垂不朽，而我们也将永远为你祈祷，愿我们能再相见。 \
<br><br>我们必须节哀，这难以置信的损失反而坚定了我们继续奋斗的信念。我们也将开始新的征程，在那蕴含了祖先们梦想的群星中探索。我们定会找到新的家园，来延续我们的文明和吉奥迪莎精神。 \
<br><br>指挥官约书亚·弗林特";

texts[26] ="<font color='white'>近期人们在一艘当时的撤离船上鉴别出了一些刻字。作为一个被遗弃在吉奥迪莎上的工人，他表达了这样的心声：\
<br><br>这篇文章被刻在了主体结构的夹层中：</font>\
<br><br>我叫爱德华·汤普森。虽然我参与建造了三艘飞船（包括这艘），但还是将被遗弃在吉奥迪莎。前些日子我还在为这件事而愤怒，一想到我的后代将生活在这种被恒星灼烧的世界中我就忍不住痛哭流涕。而今天我觉得有必要留下点什么，留下点比这三艘幸存的船更有意义的东西。 \
<br><br>以下是我的家庭成员： \
<blockquote>\
爱德华·汤普森<br>\
瑞吉娜·汤普森<BR>\
艾瑞克·汤普森<BR>\
莎拉·汤普森\
</blockquote>\
<br>我们被遗弃了，但请记住我们。";

texts[27] = "德尔塔历7380年<BR> \
航记 79.20 \
<br><br>是我说服了11个家庭加入了这个把这艘矿船改装成具有星际旅行能力飞船的计划。真不知道我当时是怎么想的，团队里所有14岁以上的人都已经连续几个月每天睡眠时间不超过4、5个小时了。 \
<br><br>如果我们失败了我就要承担责任，而我们也将永远被留在这个水生火热的世界中。现在的情况确实很糟，只有8个月就要撤离了，而我们连超空间跃迁引擎都还没装好。如果我们赶不上进度的话我们升空后就追不上大部队了，而这是我不想看到的。我还没准备对所有人说明，但事实是我们在大部分情况下肯定要依赖舰队的补给。 \
<br><br>一个好消息是奥莱恩给每个隔仓都装备了生命维持和温度调节系统，这样我们就不会那么拥挤了。 \
<br><br>德尔塔历7380年<BR> \
航记 80.3 \
<br><br>只有最后一个月的时间了。超空间跃迁引擎已经就绪，控制板上的指示灯都还暗着。生命维持系统一切正常，而我们正在忙碌地装载各种补给。有些混蛋在找各种机会搞偷渡，但门口军队的检查给他们造成了相当大的麻烦。这倒让我觉得我应该尽量把挖矿机器人带上，因为我们不管到哪都用得到原材料。我们一定不能在一开始就掉队。 \
<br><br>德尔塔历7380年<BR> \
航记 80.5 \
<br><br>出发已经一个月了，目前为止一切还算正常。值勤班次排的很长，几本上都没什么休息时间，老实说就算我有孙子一起来帮忙人手也不够。舰队指挥官让我们尽量待在一起。目前只有一艘船出过故障，而且很快就解决了。";



texts[28] = "<font color='white'>在进行了7年持续的通信后，舰队和吉奥迪莎的通信突然无故中断。所有试图重新连接的尝试都已失败告终。到底是什么造成了这种和使命一号类似的通信中断到目前为止还不得而知。\
<br><br>在那次大撤离中发行了几本书，有一本的内容取自舰队上将雅科夫·亚历山迪尔·斯威夫特的航行日志，而其中就有关于和吉奥迪莎上最后联络的内容。这个日志在斯威夫特去世后不久就发行了，其中还包括了几段对上将个人日记的直接引用。在大撤离时期，这本书在整个舰队里广泛地流传着。它已成了当时文学作品的典范。</font>\
<br><br>20.15.7387\
<br><br>谣言已经在舰队里传开了，我必须在不安的情绪恶化前做点什么。我们受到了来自方方面面的太多压力，有要维持预定发射日期的，要做末日祭奠的，还有要保证被否决的人不可以上船。那些愤怒且绝望的人宁可看到我们的文明被摧残也不愿被遗弃。临时政府已经做出了决定，整个舰队都要从轨道空间站里装载最后的补给和燃料然后驶向特里迪莎背阳面的训练区域，做好最后的跃迁准备。命令下发时，大家的惊讶之情溢于言表，因为时间给的很紧，有些原本还打算最后回家一次的人都还没来得及和亲朋好友道别。 \
<br><br>跃迁命令由舰队管理系统统一发布，当时有一小部分军官对此举表示了质疑，但我还是这么决定了。我们进行了几次演习，几个月的训练也总算到头了，每个人都是好样的。最后我们只保留了最精简的船员，让其他人都回床休息。每艘船都和管理系统连接，跃迁命令会统一发布。几分钟后就要开始跃迁准备了，已经没有人可以再阻止什么了。\
<br><br>这都已经是七年前的事了，但大家还没有原谅我。我不止一次的提醒大家这次行动的重要性，如果这支舰队没了后果将不堪设想。但那么多年了，大家还是觉得这是种背叛。大家还是恨我……这大概就是幸存者的内疚心理吧。我情愿他们都恨我，也不要和自己过不去。他们的家人都被遗弃了，而他们也仅仅是侥幸逃脱。当时每个人都被要求做出抉择，要么上船，要么留下，除了直系亲属谁都不能带。军方也是想尽量避免像使命一号的选举造成的那种决裂的局面。\
<br><br>我必须在谣言完全传开前做一个声明。这个舰队随着时间的推移已经越来越团结了，对此我也很欣慰。同时正像预想和期望的那样，有很多新生儿诞生了。但即使我再怎么和下属强调，谣言总还是流传的那么快。\
<br><br>我不怪他们，因为我不该对他们隐瞒任何事情。但有时我希望他们能忽略一些东西，毕竟现实总是那么残酷。这些年来大家都很不容易，特别是吉奥迪莎传来的消息越来越糟糕。暴动，爆炸，大规模自杀，政治动乱也只是时间问题了。我希望大家能不要那么在意从吉奥迪莎传来的消息，但这只是自欺欺人。如果不是因为使命一号已经遇到过类似的问题了，我大概会往最坏的情况猜测，而现在我可以假设我们是碰到了和方舟（指使命一号）一样的通信问题。情况也并没有那么糟，我想我们大概只是受到了某种未知现象的影响。我会在第一次换岗时宣布这个消息，毕竟大家从我这听到消息要比听谣言好。 \
<br><br>我会告诉大家我已经知道的情况和我的推测。但愿这样就足够了。";

