138
 
<?xml version="1.0" encoding="<X-FC-ITEM DATA[Charset]>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--^Bookmark/138 8.3R4 H=<X-FC-REQUEST-TIME HEADER> LS=<X-FC-REQUEST-TIME LOGIN.START> L=<X-FC-REQUEST-TIME LOGIN> OS=<X-FC-REQUEST-TIME OPEN.START> O=<X-FC-REQUEST-TIME OPEN> T=<X-FC-REQUEST-TIME>--><!--#if expr="@length('$USETICKETAUTH') == 0"--><!--#set var="USETICKETAUTH" value="0"--><!--#endif--><!--#if expr="$USETICKETAUTH == 0 && <X-FC-SERVER USEDSLOGIN> == 0 && !$SUPPRESSDIGESTLOGIN && (<X-FC-SERVER VERSION> > 10250 || '<X-FC-ITEM DATA[Charset]>' == 'ISO-8859-1')"--><!--#set var="USEDIGESTLOGIN" value="1"--><!--#if expr="@length('$ENABLEAUTHSAVING') == 0"--><!--#set var="ENABLEAUTHSAVING" value="0"--><!--#endif--><!--#if expr="<X-FC-SERVER VERSION> >= 10250"--><!--#set var="USEDIGESTLOGIN" value="2"--><!--#endif--><!--#else--><!--#set var="USEDIGESTLOGIN" value="0"--><!--#set var="ENABLEAUTHSAVING" value="0"--><!--#endif-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<X-FC-ITEM DATA[Charset]>"/><!--#if expr="$USEDIGESTLOGIN"-->
<meta http-equiv="Refresh" content="285;URL=/Login"/><!--#endif-->
<title><X-FC-FIELD LANG.141.4 STRING></title><!--#if expr="@length($GLOBALSTYLES)"-->
<link rel="stylesheet" type="text/css" href="<!--#echo var="GLOBALSTYLES"-->"/><!--#else-->
<style type="text/css">
<!--
body{margin:0px;}
.title{font-size:<X-FC-FIELD PREFS.5651 DEFAULT=LANG.49.5651.11 FONTSIZE>pt;color:<X-FC-FIELD PREFS.5652 DEFAULT=LANG.49.5652.11 RGB>;text-decoration:none;font-family:<X-FC-FIELD PREFS.5650 DEFAULT=LANG.49.5650.9 STRING>;}
.button{font-size:<X-FC-FIELD PREFS.5646 DEFAULT=LANG.49.5646.11 FONTSIZE>pt;color:<X-FC-FIELD PREFS.5647 DEFAULT=LANG.49.5647.11 RGB>;text-decoration:none;font-family:<X-FC-FIELD PREFS.5645 DEFAULT=LANG.49.5645.9 STRING>;}
.forms{font-size:<X-FC-FIELD PREFS.5696 DEFAULT=LANG.49.5696.11 FONTSIZE>pt;color:<X-FC-FIELD PREFS.5697 DEFAULT=LANG.49.5697.11 RGB>;text-decoration:none;font-family:<X-FC-FIELD PREFS.5695 DEFAULT=LANG.49.5695.9 STRING>;}
.gt{font-size:<X-FC-FIELD PREFS.5671 DEFAULT=LANG.49.5686.11 FONTSIZE>pt;color:<X-FC-FIELD PREFS.5687 DEFAULT=LANG.49.5687.11 RGB>;text-decoration:none;font-family:<X-FC-FIELD PREFS.5685 DEFAULT=LANG.49.5685.9 STRING>;}
-->
</style><!--#endif--><!--#if expr="$USEDIGESTLOGIN"-->
<script type="text/javascript">
<!--
var HD=new String("0123456789abcdef");<!--#rem
The following functions are necessary since various browser developers have failed to implement arithmetic operations on unsigned 32-bit numbers correctly
AND(a,b)        == a&b
OR(a,b) == a|b
XOR(a,b)        == a^b
NOT(a)          == ~a
ADD(a,b)        == a+b
LS(a,s) == a<<s
RS(a,s) == a>>s
-->
function AND(a,b){
var hb=(a>=0x80000000)&&(b>=0x80000000);
var r=0;
if(a>=0x80000000)a-=0x80000000;
if(b>=0x80000000)b-=0x80000000;
r=a&b;
if(hb)
r+=0x80000000;
return r;
}
function OR(a,b){
var hb=(a>=0x80000000)||(b>=0x80000000);
var r=0;
if(a>=0x80000000)a-=0x80000000;
if(b>=0x80000000)b-=0x80000000;
r=a|b;
if(hb)
r+=0x80000000;
return r;
}
function XOR(a,b){
var hb=((a>=0x80000000)&&(b<0x80000000))||((a<0x80000000)&&(b>=0x80000000));
var r=0;
if(a>=0x80000000)a-=0x80000000;
if(b>=0x80000000)b-=0x80000000;
r=a^b;
if(hb)
r+=0x80000000;
return r;
}
function NOT(a){
var b=0x80000000;
var n=0;
while(b>=1){
if(a>=b)
        a-=b;
else
        n+=b;
b=b/2;
}
return n;
}
function ADD(a,b){
var n=0;
if(a>=0x80000000){
++n;
a-=0x80000000;
}
if(b>=0x80000000){
++n;
b-=0x80000000;
}
a+=b;
if(n==1){
        if(a>=0x80000000)
                a-=0x80000000;
        else
                a+=0x80000000;
}
return a;
}
function LS(a,s){
for(var i=0;i<s;i++){
if(a>=0x80000000)
        a-=0x80000000;
a=a*2;
}
return a;
}
function RS(a,s){
for(var i=0;i<s;i++){
if(a%2)
        a-=1;
a=a/2;
}
return a;
}<!--#rem
function H1
converts the high nibble of the byte c into a hex character
-->
function HEX1(c){return HD.substr((c>>4)&0x0F,1);}<!--#rem
function H2
converts the low nibble of byte c into a hex character
-->
function HEX2(c){return HD.substr(c&0x0F,1);}<!--#if expr="$USEDIGESTLOGIN == 2"--><!--#rem
SHA1 State variables
-->
var PD=new Array(0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var H=new Array();
var B=new Array();
var KV=new Array();
KV[0]=0x5A827999;
KV[1]=0x6ED9EBA1;
KV[2]=0x8F1BBCDC;
KV[3]=0xCA62C1D6;
var TL=0;
var BL=0;
function K(n){
return KV[Math.floor(n / 20)];
}
function S(v,n){
return OR(LS(v,n),RS(v,32-n));
}
function f(n,B,C,D){
switch(Math.floor(n/20)){
case 0:return OR(AND(B,C),AND(NOT(B),D));
case 2:return OR(OR(AND(B,C),AND(B,D)),AND(C,D));
default:return XOR(XOR(B,C),D);
}
}<!--#rem
EC(I,L,O)       Encode (Input, Length, Output)
Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4.
-->
function EC(I,L,O){
var i, j;
for(i=0,j=0;j<L;i++,j+=4){
        O[j]=AND(RS(I[i],24),0xFF);
        O[j+1]=AND(RS(I[i],16),0xFF);
        O[j+2]=AND(RS(I[i],8),0xFF);
        O[j+3]=AND(I[i],0xFF);
}
}<!--#rem
DC(I,L,O)       Decode(Input, Length, Output)
Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4.
-->
function DC(I,L,O){
var i, j;
for (i=0,j=0;j<L;i++,j+=4){
        O[i]=0;
        O[i]=ADD(O[i],LS(I[j],24));
        O[i]=ADD(O[i],LS(I[j+1],16));
        O[i]=ADD(O[i],LS(I[j+2],8));
        O[i]=ADD(O[i],I[j+3]);
}
}<!--#rem
TF(bl)  Transform(block)
SHA1 basic transformation. Transforms state based on block.
-->
function TF(bl){
var a,b,c,d,e,t;
var W=new Array();
var i;
DC(bl,64,W);
for(i=16;i<80;i++){
        W[i]=S(XOR(XOR(XOR(W[i-3],W[i-8]),W[i-14]),W[i-16]),1);
}
a=H[0];b=H[1];c=H[2];d=H[3];e=H[4];
for(i=0;i<80;i++){
        t=ADD(ADD(ADD(ADD(S(a,5),f(i,b,c,d)),e),W[i]),K(i));
        e=AND(d,0xFFFFFFFF);
        d=AND(c,0xFFFFFFFF);
        c=AND(S(b,30),0xFFFFFFFF);
        b=AND(a,0xFFFFFFFF);
        a=AND(t,0xFFFFFFFF);
}
H[0]=ADD(H[0],a);
H[1]=ADD(H[1],b);
H[2]=ADD(H[2],c);
H[3]=ADD(H[3],d);
H[4]=ADD(H[4],e);
}<!--#rem
CA(d, di, s, si, l)     CopyArray (Destination, Destination Index, Source, Source Index, Length)
-->
function CA(d,di,s,si,L){
for(i=0;i<L;i++)
        d[di+i]=s[si+i];
}<!--#rem
UD(I,L)         Update (Input, Length)
SHA1 block update operation. Continues an SHA1 message-digest operation, processing another message block, and updating the context.
-->
function UD(I,L){
var i=0;
TL+=L;
if(BL){
        if(64-BL>L)
                i=L;
        else    
                i=64-BL;
        CA(B,BL,I,0,i);
        BL+=i;
        if(BL<64)
                return;
        TF(B);
        BL=0;
}
while(L-i>=64){
        CA(B,0,I,i,64);
        i+=64;
        TF(B);
}
CA(B,0,I,i,L-i);
BL=L-i;
}<!--#rem
F()     Final ()
SHA1 finalization. Ends an SHA1 message-digest operation, writing the the message digest and zeroizing the context.
-->
function F(){
var D=new Array();
var R="";
if(BL<55)
        CA(B,BL,PD,0,59-BL);
else{
        if(BL<64)
                CA(B,BL,PD,0,64-BL);
        TF(B);
        CA(B,BL,PD,1,58);
}
B[59]=AND(RS(AND(TL,0xE0000000),29),0xFF);
TL=LS(TL,3);
B[60]=AND(RS(TL,24),0xFF);
B[61]=AND(RS(TL,16),0xFF);
B[62]=AND(RS(TL,8),0xFF);
B[63]=AND(TL,0xFF);
TF(B);<!--#rem
Store state in digest-->
EC(H,20,D);
for(i=0;i<20;i++){
        R+=String(HEX1(D[i]));
        R+=String(HEX2(D[i]));
}
return R;
}<!--#rem
SHA1(C,P)       SHA1(challenge, password)
computes the SHA-1 digest of the given password
-->
function SHA1(C,P){
var c=new Array()
var p=new Array();
var u;
var s,d;<!--#rem
Transfer challenge string to challenge byte array-->
for(s=0;s<C.length;s++)
        c[s]=C.charCodeAt(s);<!--#rem
Convert password string to upper case, and transfer it to the password byte array as UTF-8-->
P=P.toUpperCase();
for (s=0,d=0;s<P.length;s++){
        u=P.charCodeAt(s);
        if(u<0x80){
                p[d++]=u;
        }else if(u<0x0800){
                p[d++]=OR(RS(u,6),0xC0);
                p[d++]=OR(AND(u,0x0000003F),0x80);
        }else if(u<0x00010000){
                p[d++]=OR(RS(u,12),0xE0);
                p[d++]=OR(AND(RS(u,6),0x0000003F),0x80);
                p[d++]=OR(AND(u,0x0000003F),0x80);
        }else if(u<0x00200000){
                p[d++]=OR(RS(u,18),0xF0);
                p[d++]=OR(AND(RS(u,12),0x0000003F),0x80);
                p[d++]=OR(AND(RS(u,6),0x0000003F),0x80);
                p[d++]=OR(AND(u,0x0000003F),0x80);
        }
}<!--#rem
Load magic initialization constants.-->
H[0]=0x67452301;
H[1]=0xEFCDAB89;
H[2]=0x98BADCFE;
H[3]=0x10325476;
H[4]=0xC3D2E1F0;
TL=0;
BL=0;
UD(c,c.length);
UD(p,p.length);
return F();
}<!--#rem
DP(F)   DigestPassword(Form)
Determines if an SHA1 digest can be computed for the target HTML form, and if so computes it.
-->
function DP(F){
var p=self.sp;
var E=F.elements;
if(p==null)
        p=E["password"].value;
if (E["userid"].length==0||E["password"].length==0)
        return false;
E["sha1"].value=SHA1(E["challenge"].value,p);
E["password"].value="";
return true;
}<!--#else--><!--#rem
MD5 State variables-->
/*
The following JavaScript MD5 implementation is
Copyright © 2002 Centrinity Inc. All Rights Reserved
as a derivative work of the RSA Data Security, Inc. MD5 Message-Digest Algorigthm
Copyright © 1991-2, RSA Data Security, Inc. All Rights Reserved.
*/
var S11=7;
var S12=12;
var S13=17;
var S14=22;
var S21=5;
var S22=9;
var S23=14;
var S24=20;
var S31=4;
var S32=11;
var S33=16;
var S34=23;
var S41=6;
var S42=10;
var S43=15;
var S44=21;
var PAD=new Array(0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var S=new Array();
var CN=new Array();
var B=new Array();
var D=new Array();
var HD=new String("0123456789abcdef");
<!--#rem
functions FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation. -->
function FF(a,b,c,d,x,s,ac){
<!--#rem a += (((b) & (c)) | ((~b) & (d))) + x + ac; -->
var da=false;
a=ADD(a,OR(AND(b,c),AND(NOT(b),d)));
a=ADD(a,ac);
a=ADD(a,x);
<!--#rem a = (((a) << (s)) | ((a) >> (32-(s)))); -->
a = OR(LS(a,s),RS(a,32-s));
a=ADD(a,b);
return a;
}
function GG(a,b,c,d,x,s,ac){
<!--#rem a += (((b) & (d)) | ((c) & (~d))) + x + ac; -->
a=ADD(a,OR(AND(b,d),AND(c,NOT(d))));
a=ADD(a,ac);
a=ADD(a,x);
<!--#rem a = (((a) << (s)) | ((a) >> (32-(s)))); -->
a = OR(LS(a,s),RS(a,32-s));
a=ADD(a,b);
return a;
}
function HH(a,b,c,d,x,s,ac){
<!--#rem a += ((b) ^ (c) ^ (d)) + x + ac; -->
a=ADD(a,XOR(d,XOR(b,c)));
a=ADD(a,ac);
a=ADD(a,x);
<!--#rem a = (((a) << (s)) | ((a) >> (32-(s)))); -->
a = OR(LS(a,s),RS(a,32-s));
a=ADD(a,b);
return a;
}
function II(a,b,c,d,x,s,ac){
<!--#rem a += ((c) ^ ((b) | (~d))) + x + ac; -->
a=ADD(a,XOR(c,OR(b,NOT(d))));
a=ADD(a,ac);
a=ADD(a,x);
<!--#rem a = (((a) << (s)) | ((a) >> (32-(s)))); -->
a = OR(LS(a,s),RS(a,32-s));
a=ADD(a,b);
return a;
}
<!--#rem EC(I, L, O)
Encode (Input, Length, Output)
Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4.
-->
function EC(I,L,O){
var i, j;
for(i=0,j=0;j<L;i++,j+=4){
        O[j]=AND(I[i],0xFF);
        O[j+1]=AND(RS(I[i],8),0xFF);
        O[j+2]=AND(RS(I[i],16),0xFF);
        O[j+3]=AND(RS(I[i],24),0xFF);
}
}
<!--#rem DC(I,L,O)
Decode(Input, Length, Output)
Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4.
-->
function DC(I,L,O){
var i, j;
for (i=0,j=0;j<L;i++,j+=4){
        O[i]=0;
        O[i]=ADD(O[i],I[j]);
        O[i]=ADD(O[i],LS(I[j+1],8));
        O[i]=ADD(O[i],LS(I[j+2],16));
        O[i]=ADD(O[i],LS(I[j+3],24));
}
}
<!--#rem TF(bl)
Transform(block)
MD5 basic transformation. Transforms state based on block.
-->
function TF(bl){
var a=S[0],b=S[1],c=S[2],d=S[3];
var x=new Array();
DC(bl,64,x);
<!--#rem Round 1 -->
a=FF(a,b,c,d,x[0],S11,0xd76aa478);
d=FF(d,a,b,c,x[1],S12,0xe8c7b756);
c=FF(c,d,a,b,x[2],S13,0x242070db);
b=FF(b,c,d,a,x[3],S14,0xc1bdceee);
a=FF(a,b,c,d,x[4],S11,0xf57c0faf);
d=FF(d,a,b,c,x[5],S12,0x4787c62a);
c=FF(c,d,a,b,x[6],S13,0xa8304613);
b=FF(b,c,d,a,x[7],S14,0xfd469501);
a=FF(a,b,c,d,x[8],S11,0x698098d8);
d=FF(d,a,b,c,x[9],S12,0x8b44f7af);
c=FF(c,d,a,b,x[10],S13,0xffff5bb1);
b=FF(b,c,d,a,x[11],S14,0x895cd7be);
a=FF(a,b,c,d,x[12],S11,0x6b901122);
d=FF(d,a,b,c,x[13],S12,0xfd987193);
c=FF(c,d,a,b,x[14],S13,0xa679438e);
b=FF(b,c,d,a,x[15],S14,0x49b40821);
<!--#rem Round 2 -->
a=GG(a,b,c,d,x[1],S21,0xf61e2562);
d=GG(d,a,b,c,x[6],S22,0xc040b340);
c=GG(c,d,a,b,x[11],S23,0x265e5a51);
b=GG(b,c,d,a,x[0],S24,0xe9b6c7aa);
a=GG(a,b,c,d,x[5],S21,0xd62f105d);
d=GG(d,a,b,c,x[10],S22,0x2441453);
c=GG(c,d,a,b,x[15],S23,0xd8a1e681);
b=GG(b,c,d,a,x[4],S24,0xe7d3fbc8);
a=GG(a,b,c,d,x[9],S21,0x21e1cde6);
d=GG(d,a,b,c,x[14],S22,0xc33707d6);
c=GG(c,d,a,b,x[3],S23,0xf4d50d87);
b=GG(b,c,d,a,x[8],S24,0x455a14ed);
a=GG(a,b,c,d,x[13],S21,0xa9e3e905);
d=GG(d,a,b,c,x[2],S22,0xfcefa3f8);
c=GG(c,d,a,b,x[7],S23,0x676f02d9);
b=GG(b,c,d,a,x[12],S24,0x8d2a4c8a);
<!--#rem Round 3 -->
a=HH(a,b,c,d,x[5],S31,0xfffa3942);
d=HH(d,a,b,c,x[8],S32,0x8771f681);
c=HH(c,d,a,b,x[11],S33,0x6d9d6122);
b=HH(b,c,d,a,x[14],S34,0xfde5380c);
a=HH(a,b,c,d,x[1],S31,0xa4beea44);
d=HH(d,a,b,c,x[4],S32,0x4bdecfa9);
c=HH(c,d,a,b,x[7],S33,0xf6bb4b60);
b=HH(b,c,d,a,x[10],S34,0xbebfbc70);
a=HH(a,b,c,d,x[13],S31,0x289b7ec6);
d=HH(d,a,b,c,x[0],S32,0xeaa127fa);
c=HH(c,d,a,b,x[3],S33,0xd4ef3085);
b=HH(b,c,d,a,x[6],S34,0x4881d05);
a=HH(a,b,c,d,x[9],S31,0xd9d4d039);
d=HH(d,a,b,c,x[12],S32,0xe6db99e5);
c=HH(c,d,a,b,x[15],S33,0x1fa27cf8);
b=HH(b,c,d,a,x[2],S34,0xc4ac5665);
<!--#rem Round 4 -->
a=II(a,b,c,d,x[ 0],S41,0xf4292244);
d=II(d,a,b,c,x[ 7],S42,0x432aff97);
c=II(c,d,a,b,x[14],S43,0xab9423a7);
b=II(b,c,d,a,x[ 5],S44,0xfc93a039);
a=II(a,b,c,d,x[12],S41,0x655b59c3);
d=II(d,a,b,c,x[ 3],S42,0x8f0ccc92);
c=II(c,d,a,b,x[10],S43,0xffeff47d);
b=II(b,c,d,a,x[ 1],S44,0x85845dd1);
a=II(a,b,c,d,x[ 8],S41,0x6fa87e4f);
d=II(d,a,b,c,x[15],S42,0xfe2ce6e0);
c=II(c,d,a,b,x[ 6],S43,0xa3014314);
b=II(b,c,d,a,x[13],S44,0x4e0811a1);
a=II(a,b,c,d,x[ 4],S41,0xf7537e82);
d=II(d,a,b,c,x[11],S42,0xbd3af235);
c=II(c,d,a,b,x[ 2],S43,0x2ad7d2bb);
b=II(b,c,d,a,x[ 9],S44,0xeb86d391);
S[0]=ADD(S[0],a);
S[1]=ADD(S[1],b);
S[2]=ADD(S[2],c);
S[3]=ADD(S[3],d);
}
<!--#rem CA(d, di, s, si, l)
CopyArray (Destination, Destination Index, Source, Source Index, Length)
-->
function CA(d,di,s,si,L){
for(i=0;i<L;i++)
        d[di+i]=s[si+i];
}
<!--#rem UD(I,L)
Update (Input, Length)
MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context.
-->
function UD(I,L){
var i,n,pl;
var T=new Array();
<!--#rem Compute number of bytes mod 64 -->
n=AND(RS(CN[0],3),0x3F);
<!--#rem Update number of bits -->
if ((CN[0]+=LS(L,3))<LS(L,3))
        CN[1]++;
CN[1]+=RS(L,29);
pl=64-n;
<!--#rem Transform as many times as possible. -->
if(L>=pl){
        CA(B,n,I,0,pl);
        TF(B);
        for(i=pl;i+63<L;i+=64){
                CA(T,0,I,i);
                TF(T);
        }
        n=0;
}else
        i=0;
<!--#rem Buffer remaining input -->
CA(B,n,I,i,L-i);
}
<!--#rem F()
Final ()
MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context.
-->
function F(){
var b=new Array();
var i,p;
var R="";
<!--#rem Save number of bits -->
EC(CN,8,b);
<!--#rem Pad out to 56 mod 64.-->
i=((CN[0]>>3)&0x3F);
p=(i<56)?(56-i):(120-i);
UD(PAD,p);
<!--#rem Append length (before padding)-->
UD(b,8);
<!--#rem Store state in digest-->
EC(S,16,D);
for(i=0;i<16;i++){
        R+=String(HEX1(D[i]));
        R+=String(HEX2(D[i]));
}
return R;
}
<!--#rem MD5(C,P)
MD5(challenge, password)
computes the MD5 digest of the given password
-->
function MD5(C,P){
var c=new Array()
var p=new Array();
var i;
for(i=0;i<C.length;i++)
        c[i]=C.charCodeAt(i);
for (i=0;i<P.length;i++)
        p[i]=P.charCodeAt(i);
CN[0]=0;
CN[1]=0;
<!--#rem Load magic initialization constants.-->
S[0]=0x67452301;
S[1]=0xEFCDAB89;
S[2]=0x98BADCFE;
S[3]=0x10325476;
UD(c,c.length);
UD(p,p.length);
return F();
}
<!--#rem
DP(F)   DigestPassword(Form)
Determines if an MD5 digest can be computed for the target HTML form, and if so computes it.
JavaScript doesn't support any charset except UTF-16 for its string functions (while IS won't allow you to log in using Unicode).  So we disable the MD5 calculation for all
non ISO-8859-1 charsets. We can get away with ISO-8859-1 because it matches the first 256 entries of UTF-16
-->
function DP(F){
var p=self.sp;
var E=F.elements;
if(p==null)
        p=E["password"].value;
if (E["userid"].length==0||E["password"].length==0)
        return false;
E["md5"].value=MD5(E["challenge"].value,p);
E["password"].value="";
return true;
}<!--#endif-->
var sp=null;<!--#if expr="$ENABLEAUTHSAVING"--><!--#rem
lc      LoadCredentials
checks for cookie saved credentials and pre-fills the login form with them
-->
function lc(){
var C=document.cookie;
var t=null;
var s=C.indexOf("fc1=");
var e;
var c;
if(s!=-1){
        var D=new Date();
        D.setTime(D.getTime() + 7776000000);
        s+=4;
        e=C.indexOf(';',s);
        if(e==-1)
                e=C.length;
        t=C.substring(s,e)
        if(t.length){
                document.cookie = "fc1="+t+";expires="+D.toGMTString();
                document.forms["LOGINFORM"].elements["userid"].value=dp(t);
                s=C.indexOf("fc2=");
                if(s!=-1){
                        s+=4;
                        e=C.indexOf(';',s);
                        if(e==-1)
                                e=C.length;
                        t=C.substring(s,e);
                        if(t.length){
                                document.cookie = "fc2="+t+";expires="+D.toGMTString();
                                self.sp=dp(t);
                                document.forms["LOGINFORM"].elements["password"].value="************";
                        }
                }
        }
}
}<!--#rem
sc      SaveCredentials
Saves the current contents of the form in a cookie.  May pop up a warning dialog if attempt to save pw.

-->
function sc(F){
var u=F.elements["userid"].value;
var p=self.sp;
if(sp==null)
        p=F.elements["password"].value;
if(u.length){
        var D=new Date();
        D.setTime(D.getTime() + 7776000000);
        if(p.length){<!--#if expr="<X-FC-FIELD LANG.7539.1 LENGTH>"-->
                if(confirm("<X-FC-FIELD LANG.7539.1 STRING>")){<!--#else-->
                if(1){<!--#endif-->
                        document.cookie = "fc1="+ep(u)+";expires="+D.toGMTString();
                        document.cookie = "fc2="+ep(p)+";expires="+D.toGMTString();
                        sp=p;
                        F.elements["password"].value="************";
                }
        }else{  
                document.cookie = "fc1="+ep(u)+";expires="+D.toGMTString();
                document.cookie = "fc2=;expires="+D.toGMTString();
        }
}
}<!--#rem
cc      ClearCredentials
Clears any cookie saved credentials
-->
function cc(F){
var D=new Date();
D.setTime(D.getTime() + 7776000000);
F.elements["userid"].value="";
F.elements["password"].value="";
document.cookie = "fc1=;expires="+D.toGMTString();
document.cookie = "fc2=;expires="+D.toGMTString();
}<!--#rem
ep      EncodePassword
Extremely simple scramble algorithm to provide minimal protection for saved password cookies.  Note that this is effectively security by obscurity and will only serve to discourage rank amateurs.
-->
function ep(p){
var pa=new Array();
var sa=new Array();
var oa="";
var s="<X-FC-SERVER NAME>";
var i=0;
var cs=0;
for(i=0;i<13;i++){
        sa[i]=s.charCodeAt(i%s.length);
        if(cs==0)
                sa[i]=sa[i]%256;
}
pa[0]=p.length;
for(i=0;i<p.length;i++) {
        pa[i+1]=p.charCodeAt(i);
        if(pa[i+1]>255)
                cs=1;
}
for(i=p.length;i<13;i++)
        pa[i+1]=Math.floor(Math.random()*(cs==1?65535:255));
for(i=0;i<13;i++){
        if(i%2){
                pa[i]=pa[i]+sa[i];
                if(cs)
                        pa[i]=pa[i]%65536;
                else
                        pa[i]=pa[i]%256;
        }else{
                pa[i]=pa[i]-sa[i];
                if(pa[i]<0 && cs)
                        pa[i]+=65536;
                else if(pa[i]<0)
                        pa[i]+=256;
        }
}
if(cs){
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(RS(AND(pa[(i+2)%13],0x00F0),4),0x000F));
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(RS(AND(pa[(i+11)%13],0xF000),12),0x000F));
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(RS(AND(pa[(i+5)%13],0x0F00),8),0x000F));
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(pa[(i+1)%13],0x000F));
}else{
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(pa[(i+7)%13],0x0F));
for(i=0;i<13;i++)
        oa+=HD.charAt(AND(RS(AND(pa[(i+4)%13],0xF0),4),0x0F));
}
return oa;
}<!--#rem
ep      DecodePassword
Decodes a userID/password encoded using EncodePassword
-->
function dp(e){
var pa=new Array();
var sa=new Array();
var cs=(e.length==52?1:0);
var s="<X-FC-SERVER NAME>";
var i=0;
var p="";
for(i=0;i<13;i++){
        sa[i]=s.charCodeAt(i%s.length);
        if(cs==0)
                sa[i]=sa[i]%256;
}
for(i=0;i<13;i++)
        pa[i]=0;
if(cs){
for(i=0;i<13;i++)
        pa[(i+2)%13]+=(0x0010*parseInt(e.charAt(i),16));
for(i=13;i<26;i++)
        pa[(i+11)%13]+=(0x1000*parseInt(e.charAt(i),16));
for(i=26;i<39;i++)
        pa[(i+5)%13]+=(0x0100*parseInt(e.charAt(i),16));
for(i=39;i<52;i++)
        pa[(i+1)%13]+=(parseInt(e.charAt(i),16));
}else{
for(i=0;i<13;i++)
        pa[(i+7)%13]+=(parseInt(e.charAt(i),16));
for(i=13;i<26;i++)
        pa[(i+4)%13]+=(0x10*parseInt(e.charAt(i),16));
}
for(i=0;i<13;i++)
        pa[i]+=(cs==1?65536:256);
for(i=0;i<13;i++){
        if(i%2)
                pa[i]=pa[i]-sa[i];
        else
                pa[i]=pa[i]+sa[i];
}
for(i=0;i<13;i++)
        pa[i]=pa[i]%(cs?65536:256);
for(i=1;i<(pa[0]+1);i++)
        p+=String.fromCharCode(pa[i]);
return p;
}<!--#endif-->
//-->
</script><!--#endif-->
</head>
<body dir="<X-FC-FIELD LANG.7500 DEFAULT="ltr" STRING>" bgcolor="<X-FC-FIELD PREFS.5601 DEFAULT=LANG.49.5601.11 RGB>" onload="<!--#if expr="$ENABLEAUTHSAVING"-->lc();<!--#endif-->self.focus();
document.forms['LOGINFORM'].elements['userid'].focus();document.forms['LOGINFORM'].elements['userid'].select();">
<form name="LOGINFORM" action="/Login" method="post" enctype="application/x-www-form-urlencoded"<!--#if expr="$USEDIGESTLOGIN"--> onsubmit="return DP(this);"<!--#endif-->>
<input type="hidden" name="charset" value="<X-FC-ITEM DATA[Charset]>"/>
<input type="hidden" name="origurl" value="<!--#echo var="SRVR_ERR_RESOURCE"--><!--#if expr="@length($SRVR_ERR_RESOURCE_ARGS)"-->?<!--#echo expr="@split($SRVR_ERR_RESOURCE_ARGS,'&')"--><!--#while expr="@length($SRVR_ERR_RESOURCE_ARGS)"-->&amp;<!--#echo expr="@split($SRVR_ERR_RESOURCE_ARGS,'&')"--><!--#endwhile--><!--#endif-->"/><!--#if expr="$USEDIGESTLOGIN"-->
<input type="hidden" name="challenge" value="<!--#echo var="HTTP_LOGIN_CHALLENGE"-->"/><!--#if expr="$USEDIGESTLOGIN == 2"-->
<input type="hidden" name="sha1" value=""/><!--#else-->
<input type="hidden" name="md5" value=""/><!--#endif--><!--#endif-->
<table bgcolor="<X-FC-FIELD PREFS.5601 DEFAULT=LANG.49.5601.11 RGB>" align="center" cellpadding="2" cellspacing="0" border="0" width="100%">
<tr>
        <td bgcolor="<X-FC-FIELD PREFS.5603 DEFAULT=LANG.49.5603.11 RGB>" colspan="3"><img src="/Icons/0" alt="" width="1" height="1" border="0"/></td>
</tr>
<tr>
        <td bgcolor="<X-FC-FIELD PREFS.5603 DEFAULT=LANG.49.5603.11 RGB>" colspan="3"><table cellpadding="0" cellspacing="0" border="0">
        <tr>
                <td>&nbsp;</td>
                <td><img src="/Icons/32404" alt="" title="Add Bookmark in FirstClass" width="<X-FC-RESOURCE ICON.32404 WIDTH>" height="<X-FC-RESOURCE ICON.32404 HEIGHT>" border="0"/></td>
                <td>&nbsp;</td>
                <td class="title" nowrap="nowrap">Add Bookmark in FirstClass</td>
        </tr>
        </table></td>
</tr>
<tr>
        <td bgcolor="<X-FC-FIELD PREFS.5603 DEFAULT=LANG.49.5603.11 RGB>" colspan="3"><img src="/Icons/0" alt="" width="1" height="1" border="0"/></td>
</tr>
<tr>
        <td colspan="3"><img src="/Icons/0" width="1" height="3"></td>
</tr>
<tr>
        <td class="gt">&nbsp;</td>
        <td class="gt" colspan="2" align="left">You are adding a Bookmark on the Server <!--#if expr="<X-FC-FIELD SITEPREF.5523 DEFAULT=LANG.49.5523.9 LENGTH>"--><X-FC-FIELD SITEPREF.5523 DEFAULT=LANG.49.5523.9 STRING><!--#else--><X-FC-SERVER NAME><!--#endif-->. Enter the login information for the account where the Bookmark will be saved.</td>
</tr>
<tr>
        <td colspan="3"><img src="/Icons/0" width="1" height="5"></td>
</tr>
<tr>
        <td class="gt">&nbsp;</td>
        <td><img src="/Icons/24079" alt="" title="<X-FC-FIELD LANG.138.0.25 STRING>" width="<X-FC-RESOURCE ICON.24079 WIDTH>" height="<X-FC-RESOURCE ICON.24079 HEIGHT>" border="0"/></td>
        <td><table cellpadding="2" cellspacing="0" border="0">
        <tr>
                <td align="right" class="gt" nowrap="nowrap"><label for="f1"><X-FC-FIELD LANG.138.1101.9 STRING></label></td>
                <td><input class="forms" id="f1" type="text" name="userid" size="40" maxlength="15" value="" tabindex="1"/></td>
                <td width="100%"><img src="/Icons/0" width="1" height="1"></td>
        </tr>
        <tr>
                <td align="right" class="gt" nowrap="nowrap"><label for="f2"><X-FC-FIELD LANG.138.1102.9 STRING></label></td>
                <td><!--#if expr="$USETICKETAUTH"--><input class="forms" type="password" id="f2" name="ticket" size="40" maxlength="12" value="" tabindex="2" onfocus="this.select();"/><!--#else--><input class="forms" type="password" id="f2" name="password" size="40" maxlength="12" value="" tabindex="2" onfocus="this.select();" onchange="sp=null;"/><!--#endif--></td>
                <td width="100%"><img src="/Icons/0" width="1" height="1"></td>
        </tr>
        <tr>
                <td colspan="3"><img src="/Icons/0" alt="" width="1" height="1" border="0"/></td>
        </tr>
        <tr>
                <td class="gt">&nbsp;</td>
                <td nowrap="nowrap"><input class="button" type="submit" name="login" value=" Login and Add Bookmark "/>&nbsp;<input class="button" type="button" onclick="self.close();" value=" Cancel "/></td>
                <td width="100%"><img src="/Icons/0" width="1" height="1"></td>
        </tr>
        </table></td>
</tr>
<tr>
        <td colspan="3"><img src="/Icons/0" alt="" width="1" height="1" border="0"/></td>
</tr>
</table>
</form><!--#if expr="$SRVR_ERR_FCPCODE"-->
<script type="text/javascript">
<!--
alert("<X-FC-FIELD LANG.ERR.`$SRVR_ERR_FCPCODE` ESCAPED> [<!--#echo var="SRVR_ERR_FCPCODE"-->]");
//-->
</script><!--#endif-->
</body>
<!--*138 T=<X-FC-REQUEST-TIME>-->
</html>