<?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">
<!--138 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="@length('$ENABLEAUTHSAVING') == 0"--><!--#set var="ENABLEAUTHSAVING" 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="<X-FC-SERVER VERSION> >= 10250"--><!--#set var="USEDIGESTLOGIN" value="2"--><!--#if expr="<X-FC-SERVER VERSION> < 10514 && <X-FC-SERVER VERSION ISBUILD> < 8903"--><!--#set var="ENABLEAUTHSAVING" value="0"--><!--#endif AUTHSAVING--><!--#endif SHA1--><!--#else !DIGESTLOGIN--><!--#set var="USEDIGESTLOGIN" value="0"--><!--#set var="ENABLEAUTHSAVING" value="0"--><!--#endif DIGESTLOGIN-->
<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="$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(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,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="";
B[BL++]=0x80
if(BL<56)
CA(B,BL,PD,0,59-BL);
else{
if(BL<64)
CA(B,BL,PD,0,64-BL);
TF(B);
CA(B,0,PD,0,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 as UTF-8-->
for (s=0,d=0;s<C.length;s++){
u=C.charCodeAt(s);
if(u<0x80){
c[d++]=u;
}else if(u<0x0800){
c[d++]=OR(RS(u,6),0xC0);
c[d++]=OR(AND(u,0x0000003F),0x80);
}else if(u<0x00010000){
c[d++]=OR(RS(u,12),0xE0);
c[d++]=OR(AND(RS(u,6),0x0000003F),0x80);
c[d++]=OR(AND(u,0x0000003F),0x80);
}else if(u<0x00200000){
c[d++]=OR(RS(u,18),0xF0);
c[d++]=OR(AND(RS(u,12),0x0000003F),0x80);
c[d++]=OR(AND(RS(u,6),0x0000003F),0x80);
c[d++]=OR(AND(u,0x0000003F),0x80);
}
}<!--#rem
Transfer password string to password byte array as UTF-8-->
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.toUpperCase();
else
E["savedpw"].value="1";
if (E["userid"].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 old servers 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+";path=/;expires="+D.toGMTString();
document.forms["LOGINFORM"].elements["userid"].value=du(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+";path=/;expires="+D.toGMTString();
self.sp=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=F.elements["password"].value;
if(sp==null&&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="+eu(u)+";path=/;expires="+D.toGMTString();
document.cookie="fc2="+SHA1(u.toUpperCase(),p.toUpperCase())+";path=/;expires="+D.toGMTString();
}
}else{
document.cookie="fc1="+eu(u)+";path=/;expires="+D.toGMTString();
document.cookie="fc2=;path=/;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=;path=/;expires="+D.toGMTString();
document.cookie="fc2=;path=/;expires="+D.toGMTString();
}<!--#rem
eu EncodeUserID
Extremely simple scramble algorithm to provide minimal obfuscation for saved userid cookies. Note that this is effectively security by obscurity and will only serve to discourage rank amateurs.
-->
function eu(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
du DecodeUserID
Decodes a userID encoded using EncodeUserID
-->
function du(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>" 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-->>
<h1><X-FC-FIELD LANG.141.4 STRING></h1>
<h3><X-FC-FIELD LANG.138.1001.9 STRING> <!--#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--></h3><!--#if expr="$SRVR_ERR_FCPCODE"-->
<h5><X-FC-FIELD LANG.ERR.`$SRVR_ERR_FCPCODE` ESCAPED> [<!--#echo var="SRVR_ERR_FCPCODE"-->]</h5><!--#endif-->
<p><input type="hidden" name="charset" value="<X-FC-ITEM DATA[Charset]>"/>
<input type="hidden" name="origurl" value="<!--#echo expr="@mlescape($SRVR_ERR_RESOURCE)"--><!--#if expr="@length($SRVR_ERR_RESOURCE_ARGS)"-->?<!--#echo expr="@mlescape($SRVR_ERR_RESOURCE_ARGS)"--><!--#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=""/><!--#if expr="$ENABLEAUTHSAVING"-->
<input type="hidden" name="savedpw" value="0"/><!--#endif--><!--#else-->
<input type="hidden" name="md5" value=""/><!--#endif--><!--#endif-->
<label for="f1004"><X-FC-FIELD LANG.138.1101.9 STRING></label> <input id="f1004" type="text" name="userid" maxlength="63" value="" tabIndex="1"/><br/>
<label for="f1006"><X-FC-FIELD LANG.138.1102.9 STRING></label> <!--#if expr="$USETICKETAUTH"--><input type="password" id="f2" name="ticket" value="" tabIndex="2"
onfocus="this.select();"/><br/><!--#else--><input type="password" id="f1006" name="password" maxlength="27" value="" tabIndex="2" onfocus="this.select();" onchange="sp=null;"/><!--#endif--></p><!--#if expr="$ENABLEAUTHSAVING"-->
<p><input type="button" value="<X-FC-FIELD LANG.CMD.5.0 STRING>" onclick="sc(this.form);" tabIndex="3"/> <input type="button" value="<X-FC-FIELD LANG.CMD.21.0 STRING>" onclick="cc(this.form);" tabIndex="4"/></p><!--#endif--><!--#if expr="<X-FC-SERVER AllowAutoReg> && $ALLOWWEBAUTOREG"-->
<p><a href="/MemForm?FormID=110"><X-FC-FIELD LANG.7546.8 STRING></a></p><!--#endif-->
<p><input type="submit" name="login" value=" <X-FC-FIELD LANG.138.1008.9 STRING> "/> <input type="button" onclick="self.location.replace('/');" value=" <X-FC-FIELD LANG.7530.11 STRING> "/></p>
</form>
</body>
</html>
| ||