【 tulaoshi.com - Web开发 】
                             
                            http://www.masswerk.at/jsuix/
// JS/UIX v0.44 
// (c) mass:werk (N.Landsteiner) 2003 
// all rights reserved 
// term gui 
var conf_term_x=102; 
var conf_term_y=34; 
var conf_kbd_offset=34; 
var termImgPath='jsuix_support/'; 
var termDiv='termDiv'; 
var termBgColor='#181818'; 
var termFrameColor='#555555'; 
var termPageColor='#222222'; 
var conf_repeat_delay1=320; 
var conf_repeat_delay2=170; 
var termKbdDiv='termKbdDiv'; 
var termKbdBgColor='#222222'; 
var keycapspath='jsuix_support/keycaps/'; 
var termSubDivs=false; 
var termLayers=false; 
var termDocNS4=null; 
var termStringStart=''; 
var termStringEnd=''; 
var termKbdDocNS4=null; 
var termKbdOn=false; 
var keycapsShift=false; 
var keycapsCpslk=false; 
var keycapsShiftRef=new Array(); 
var keycapsCpslkRef=new Array(); 
var termSpecials=new Array(); 
termSpecials[0]=' '; 
termSpecials[1]='$'; 
termSpecials[2]=' '; 
termSpecials[3]='?'; 
termSpecials[4]='#'; 
termSpecials[32]=' '; 
termSpecials[34]='"'; 
termSpecials[38]='&'; 
termSpecials[60]=''; 
termSpecials[62]=''; 
termSpecials[127]='◊'; 
var termStyles=new Array(1,2,4,8); 
var termStyleOpen=new Array(); 
var termStyleClose=new Array(); 
termStyleOpen[1]='SPAN CLASS="termReverse"'; 
termStyleClose[1]='/SPAN'; 
termStyleOpen[2]='U'; 
termStyleClose[2]='/U'; 
termStyleOpen[4]='I'; 
termStyleClose[4]='/I'; 
termStyleOpen[8]='STRIKE'; 
termStyleClose[8]='/STRIKE'; 
// buttons UI 
var termImgNames=new Array('left_lo', 'left_hi', 'right_lo', 'right_hi', 'delete_lo', 'delete_hi', 'esc_lo', 'esc_hi', 'kbd_show_lo', 'kbd_show_hi', 'kbd_hide_lo', 'kbd_hide_hi'); 
var termImages=new Array(); 
function termImgPreload(path,imgnames) { 
    for (var i=0; iimgnames.length; i++) { 
        var n=imgnames[i]; 
        termImages[n]=new Image(); 
        termImages[n].src=path+n+'.gif' 
    } 
} 
if (document.images) termImgPreload(termImgPath,termImgNames); 
function termSetImg(n,v) { 
    if (document.images) { 
        var img=(termLayers)? termDocNS4.images['term_'+n] : document.images['term_'+n]; 
        var stat=(v)? '_hi' : '_lo'; 
        img.src=termImages[n+stat].src 
    } 
} 
// UI keyboard 
// key maps (200=left shift, 202=right shift, 204=CpsLock) 
var termKeyMap= [ 
    [96,49,50,51,52,53,54,55,56,57,48,45,61,8], 
    [27,113,119,101,114,116,121,117,105,111,112,91,93,13], 
    [204,97,115,100,102,103,104,106,107,108,59,39,35], 
    [200,92,122,120,99,118,98,110,109,44,46,47,30,202], 
    [32,28,31,29] 
]; 
var termKeyMapShift=[ 
    [126,33,34,35,36,37,94,38,42,40,41,95,43,8], 
    [27,81,87,69,82,84,89,85,73,79,80,123,125,13], 
    [204,65,83,68,70,71,72,74,75,76,58,34,64], 
    [200,124,90,88,67,86,66,78,77,60,62,63,30,202], 
    [32,28,31,29] 
]; 
var termKeyMapCpslk=[ 
    [96,49,50,51,52,53,54,55,56,57,48,45,61,8], 
    [27,81,87,69,82,84,89,85,73,79,80,91,93,13], 
    [204,65,83,68,70,71,72,74,75,76,59,39,35], 
    [200,92,90,88,67,86,66,78,77,44,46,47,30,202], 
    [32,28,31,29] 
]; 
var termKeyWdth=[ 
    [35,35,35,35,35,35,35,35,35,35,35,35,35,69], 
    [55,35,35,35,35,35,35,35,35,35,35,35,35,0], 
    [65,35,35,35,35,35,35,35,35,35,35,35,35], 
    [49,35,35,35,35,35,35,35,35,35,35,35,35,54], 
    [252,35,35,35] 
]; 
var keycapsImgNames=new Array(200,201,202,203,204,205); 
function termKeyCaps(k) { 
    if ((k28) && (k=32) && (repeatTimer)) clearTimeout(repeatTimer); 
    if (k==204) { 
        keycapsCpslk=(!keycapsCpslk); 
        var cnr=(keycapsCpslk)? 205:204; 
        termKbdSetImg(204,cnr) 
    } 
    else if ((k==200) || (k==202)) { 
        keycapsShift=(!keycapsShift); 
        var m=(keycapsShift)? 1:0; 
        termKbdSetImg(200,200+m); 
        termKbdSetImg(202,202+m) 
    } 
    else { 
        var ch=0; 
        if (keycapsShift) { 
            ch=keycapsShiftRef[k] 
            keycapsShift=false; 
            termKbdSetImg(200,200); 
            termKbdSetImg(202,202) 
        } 
        else if (keycapsCpslk) ch=keycapsCpslkRef[k] 
        else ch=k; 
        keyHandler({which:ch,jsuix_remapped:true}) 
    } 
} 
function termKbdSetImg(n,v) { 
    if (document.images) { 
        var img=(termLayers)? termKbdDocNS4.images['key'+n] : document.images['key'+n]; 
        img.src=termImages[v].src 
    } 
} 
function termSetKbdButton(v) { 
    if (document.images) { 
        var img=(termLayers)? termDocNS4.images.term_kbd_show : document.images.term_kbd_show; 
        var n=(termKbdOn)? 'kbd_hide' : 'kbd_show'; 
        var stat=(v)? '_hi' : '_lo'; 
        img.src=termImages[n+stat].src 
    } 
} 
function termKbdShow() { 
    if (termKbdOn) { 
        setDivVisibility(termKbdDiv,0); 
        termKbdOn=false; 
        termSetKbdButton(0) 
    } 
    else { 
        termImgPreload(keycapspath,keycapsImgNames); 
        keycapsShift=false; 
        keycapsCpslk=false; 
        var s='TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"n'; 
        s+='TRTD WIDTH="7" BGCOLOR="'+termPageColor+'"IMG SRC="'+keycapspath+'spacer.gif" WIDTH="7" HEIGHT="2"/TDn'; 
        s+='TD BGCOLOR="'+termPageColor+'"'+termMakeKbd()+'/TDn'; 
        s+'TD WIDTH="7" BGCOLOR="'+termPageColor+'"IMG SRC="'+keycapspath+'spacer.gif" WIDTH="7" HEIGHT="2"/TDTRn'; 
        s+='TRTD HEIGHT="10" COLSPAN="3" BGCOLOR="'+termPageColor+'"IMG SRC="'+keycapspath+'spacer.gif" WIDTH="2" HEIGHT="10"/TD/TRn'; 
        s+='/TABLE'; 
        writeElement(termKbdDiv,s); 
        setDivXY(termKbdDiv,conf_term_x,conf_term_y+conf_kbd_offset+conf_rows*conf_rowheigt); 
        if (termLayers) termKbdDocNS4=document.layers[termKbdDiv].document; 
        termKbdOn=true; 
        setDivVisibility(termKbdDiv,1); 
        termSetKbdButton(0) 
    } 
} 
function termMakeKbd() { 
    var s='TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"n'; 
    for (var i=0; itermKeyMap.length; i++) { 
        s+='TRTD NOWRAP HEIGHT="39" VALIGN="top" NOWRAP BGCOLOR="'+termKbdBgColor+'"'; 
        for (var k=0; ktermKeyMap[i].length; k++) { 
            var kc=termKeyMap[i][k]; 
            keycapsShiftRef[kc]=termKeyMapShift[i][k]; 
            keycapsCpslkRef[kc]=termKeyMapCpslk[i][k]; 
            if (kc==13) { 
                s+='A HREF="javas'+'cript:termKeyCaps(13)" onfocus="if(this.blur)this.blur()"IMG SRC="'+keycapspath+'13_1.gif" HSPACE="0" VSPACE="0" ALIGN="top" BORDER="0" WIDTH="47" HEIGHT="39"/A'; 
                continue 
            }; 
            if (kc==32) s+='IMG SRC="'+keycapspath+'spacer.gif" WIDTH="139" HEIGHT="35" HSPACE="1" VSPACE="1" ALIGN="top"' 
            else if (kc==28) { 
                s+='IMG SRC="'+keycapspath+'spacer.gif" WIDTH="23" HEIGHT="35" HSPACE="1" VSPACE="1" ALIGN="top"'; 
                s+='A HREF="javasc'+'ript:cursorKbdLeft()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet('left',1)" onmouseup="repeatClear()"IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"/A'; 
                continue 
            } 
            else if (kc==29) { 
                s+='A HREF="javasc'+'ript:cursorKbdRight()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet('right',1)" onmouseup="repeatClear()"IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"/A'; 
                continue 
            } 
            else if (kc==8) { 
                s+='A HREF="javasc'+'ript:termKbdBackspace()" onfocus="if(this.blur)this.blur()" onmousedown="repeatSet('backspace',1)" onmouseup="repeatClear()"IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"/A'; 
                continue 
            } 
            s+='A HREF="javas'+'cript:termKeyCaps('+kc+')" onfocus="if(this.blur)this.blur()"IMG SRC="'+keycapspath+kc+'.gif" NAME="key'+kc+'" HSPACE="1" VSPACE="1" ALIGN="top" BORDER="0" WIDTH="'+termKeyWdth[i][k]+'" HEIGHT="35"/A'; 
            if (kc==35) s+='A HREF="javas'+'cript:termKeyCaps(13)" onfocus="if(this.blur)this.blur()"IMG SRC="'+keycapspath+'13_2.gif" HSPACE="0" VSPACE="0" ALIGN="top" BORDER="0" WIDTH="37" HEIGHT="36"/A'; 
        }; 
        s+='/TD/TRn'; 
    }; 
    s+='/TABLE'; 
    return s 
} 
// term UI 
function termHide() { 
    if (repeatTimer) clearTimeout(repeatTimer); 
    if (termKbdOn) termKbdShow(); 
    setDivVisibility(termDiv,0) 
} 
function makeTerm() { 
    window.status='Building terminal ...'; 
    termLayers=(document.layers)? true:false; 
    termSubDivs=(navigator.userAgent.indexOf('Gecko')0); 
    var s=''; 
    s+='TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1"n'; 
    s+='TRTD BGCOLOR="'+termFrameColor+'" COLSPAN="2"TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2"TRTD  BGCOLOR="'+termBgColor+'"TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"n'; 
    var rstr=''; 
    for (var c=0; cconf_cols; c++) rstr+=' '; 
    for (var r=0; rconf_rows; r++) { 
        var id=((termLayers) || (termSubDivs))? '' : ' ID="term_'+r+'"'; 
        s+='TRTD NOWRAP HEIGHT="'+conf_rowheigt+'"'+id+' CLASS="term"'+rstr+'/TD/TRn'; 
    }; 
    s+='/TABLE/TD/TRn'; 
    s+='/TABLE/TD/TRn'; 
    s+='TRnTD VALIGN="middle" BGCOLOR="'+termPageColor+'"TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1"TRn'; 
    s+='TDA HREF="javasc'+'ript:termKbdShow()" onmouseover="termSetKbdButton(1); window.status='show/hide full graphic keyboard'; return true" onmouseout="termSetKbdButton(0); window.status=''; return true" onfocus="if(this.blur)this.blur()"IMG SRC="'+termImgPath+'kbd_show_lo.gif" NAME="term_kbd_show" WIDTH="73" HEIGHT="19" BORDER="0" HSPACE="5" ALT="show/hide keyboard"/A/TD/TR/TABLE/TDn'; 
    s+='TD ALIGN="right"TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1"TRn'; 
    s+='TDA HREF="javasc'+'ript:cursorKbdLeft()" onmouseover="termSetImg('left',1); window.status='left'; return true" onmouseout="termSetImg('left',0); window.status=''; return true" onfocus="if(this.blur)this.blur()" TITLE="cursor left" onmousedown="repeatSet('left',1)" onmouseup="repeatClear()"IMG SRC="'+termImgPath+'left_lo.gif" NAME="term_left" WIDTH="23" HEIGHT="23" ALT="cursor left" BORDER="0"/A/TDn'; 
    s+='TDA HREF="javasc'+'ript:cursorKbdRight()" onmouseover="termSetImg('right',1); window.status='right'; return true" onmouseout="termSetImg('right',0); window.status=''; return true" onfocus="if(this.blur)this.blur()" TITLE="cursor right" onmousedown="repeatSet('right',1)" onmouseup="repeatClear()"IMG SRC="'+termImgPath+'right_lo.gif" NAME="term_right" WIDTH="23" HEIGHT="23" ALT="cursor right" BORDER="0"/A/TDn'; 
    s+='TDA HREF="javasc'+'ript:termKbdBackspace()" onmouseover="termSetImg('delete',1); window.status='backspace'; return true" onmouseout="termSetImg('delete',0); window.status=''; return true" onfocus="if(this.blur)this.blur()" TITLE="backspace" onmousedown="repeatSet('backspace',1)" onmouseup="repeatClear()"IMG SRC="'+termImgPath+'delete_lo.gif" NAME="term_delete" WIDTH="23" HEIGHT="23" ALT="backspace" BORDER="0"/A/TDn'; 
    s+='TDA HREF="javasc'+'ript:termKbdEsc()" onmouseover="termSetImg('esc',1); window.status='esc'; return true" onmouseout="termSetImg('esc',0); window.status=''; return true" onfocus="if(this.blur)this.blur()" TITLE="esc"IMG SRC="'+termImgPath+'esc_lo.gif" NAME="term_esc" WIDTH="23" HEIGHT="23" ALT="esc" BORDER="0"/A/TDn'; 
    s+='/TR/TABLE/TD/TRn'; 
    s+='/TABLEn'; 
    if (termLayers) { 
        for (var r=0; rconf_rows; r++) { 
            s+='LAYER NAME="term_'+r+'" TOP="'+(3+r*conf_rowheigt)+'" LEFT="3" CLASS="term"/LAYERn' 
        }; 
        termDocNS4=document.layers[termDiv].document; 
        termStringStart='TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"TRTD NOWRAP HEIGHT="'+conf_rowheigt+'" CLASS="term"'; 
        termStringEnd='/TD/TR/TABLE'; 
    } 
    else if (termSubDivs) { 
        for (var r=0; rconf_rows; r++) { 
            s+='DIV ID="term_'+r+'" STYLE="position:absolute; top:'+(3+r*conf_rowheigt)+'px; left: 3px;" CLASS="term"/DIVn' 
        }; 
        termStringStart='TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"TRTD NOWRAP HEIGHT="'+conf_rowheigt+'" CLASS="term"'; 
        termStringEnd='/TD/TR/TABLE'; 
    }; 
    writeElement(termDiv,s); 
    setDivXY(termDiv,conf_term_x,conf_term_y); 
    setDivVisibility(termDiv,1); 
    window.status='' 
} 
function termDisplay(r) { 
    var s=termStringStart; 
    var curStyle=0; 
    for (var i=0; iconf_cols; i++) { 
        var c=term[r][i]; 
        var cs=termStyle[r][i]; 
        if (cs!=curStyle) { 
            if (curStyle) { 
                for (var k=termStyles.length-1; k=0; k--) { 
                    var st=termStyles[k]; 
                    if (curStyle&st) s+=termStyleClose[st]; 
                } 
            }; 
            curStyle=cs; 
            for (var k=0; ktermStyles.length; k++) { 
                var st=termStyles[k]; 
                if (curStyle&st) s+=termStyleOpen[st]; 
            } 
        }; 
        s+= (termSpecials[c])? termSpecials[c] : String.fromCharCode(c); 
    }; 
    if (curStyle0) { 
        for (var k=termStyles.length-1; k=0; k--) { 
            var st=termStyles[k]; 
            if (curStyle&st) s+=termStyleClose[st]; 
        } 
    }; 
    s+=termStringEnd; 
    writeElement('term_'+r,s,termDocNS4) 
} 
function termGuiReady() { 
    ready=true; 
    if (termGuiElementReady(termDiv, self.document)) { 
        for (var r=0; rconf_rows; r++) { 
            if (termGuiElementReady('term_'+r,termDocNS4)==false) { 
                ready=false; 
                break 
            } 
        } 
    } 
    else ready=false; 
    return ready 
} 
function cursorKbdLeft() { 
    keyHandler({which:28}) 
} 
function cursorKbdRight() { 
    keyHandler({which:29}) 
} 
function termKbdBackspace() { 
    keyHandler({which:8}) 
} 
function termKbdEsc() { 
    keyHandler({which:27}) 
} 
function termKbdClear() { 
    if ((!cnslLock) && (!cnslRawMode)) cnslReset(); 
} 
// UI-button repeat 
function repeatSet(cmd,on) { 
    if (repeatTimer) clearTimeout(repeatTimer); 
    repeatTimer=setTimeout('repeatDo("'+cmd+'")',conf_repeat_delay1); 
} 
function repeatClear() { 
    if (repeatTimer) clearTimeout(repeatTimer); 
} 
function repeatDo(cmd) { 
    if (repeatTimer) clearTimeout(repeatTimer); 
    if (cmd=='left') cursorKbdLeft() 
    else if (cmd=='right') cursorKbdRight() 
    else if (cmd=='backspace') termKbdBackspace(); 
    repeatTimer=setTimeout('repeatDo("'+cmd+'")',conf_repeat_delay2); 
} 
// basic dynamics 
function writeElement(e,t,d) { 
    if (document.layers) { 
        var doc=(d)? d : self.document; 
        doc.layers[e].document.open(); 
        doc.layers[e].document.write(t); 
        doc.layers[e].document.close() 
    } 
    else if (document.getElementById) { 
        var obj=document.getElementById(e); 
        obj.innerHTML=t 
    } 
    else if (document.all) { 
        document.all[e].innerHTML=t 
    } 
} 
function setDivXY(d,x,y) { 
    if (document.layers) { 
        document.layers[d].moveTo(x,y) 
    } 
    else if (document.getElementById) { 
        var obj=document.getElementById(d); 
        obj.style.left=x+'px'; 
        obj.style.top=y+'px' 
    } 
    else if (document.all) { 
        document.all[d].style.left=x+'px'; 
        document.all[d].style.top=y+'px' 
    } 
} 
function setDivVisibility(d,v) { 
    if (document.layers) { 
        document.layers[d].visibility= (v)? 'show':'hide'; 
    } 
    else if (document.getElementById) { 
        var obj=document.getElementById(d); 
        obj.style.visibility= (v)? 'visible':'hidden'; 
    } 
    else if (document.all) { 
        document.all[d].style.visibility= (v)? 'visible':'hidden'; 
    } 
} 
function termGuiElementReady(e,d) { 
    if (document.layers) { 
        var doc=(d)? d : self.document; 
        return ((doc) && (doc.layers[e]))? true:false 
    } 
    else if (document.getElementById) { 
        return (document.getElementById(e))? true:false 
    } 
    else if (document.all) { 
        return (document.all[e])? true:false 
    } 
    else return false 
} 
//eof