
var EnLogin=Class.create({initialize:function(k,lForm,err_fn,notice_fn,succ_fn){this.ver=1;this.key=k;this.loginerr=err_fn;this.noticefn=notice_fn;if(succ_fn)this.succfn=succ_fn;this.loginCounter=0;this.loginLimit=5;this.loginapi='/login/login_api.php';this.loginForm=lForm;this.loginForm.observe('submit',this.doEventLogin.bindAsEventListener(this));var href=new String(window.location.href);this.para=href.toQueryParams();try{delete this.para[href];}catch(e){}
if(this.para.rpasswd&&this.para.encypt)
{this.paraAuth=true;$(this.loginForm.password).observe('click',this.monPasswordInput.bindAsEventListener(this));$(this.loginForm.password).observe('keydown',this.monKeyboardPassInput.bindAsEventListener(this));}
this.para.ver=this.ver;},setPreLoginFn:function(cb_fn)
{this.preLoginFn=cb_fn;},doEventLogin:function(event)
{event.stop();var c=true;if(this.preLoginFn)c=this.preLoginFn(lForm);if(!c)return;var lForm=event.element();this.doLogin(lForm);return false;},doLogin:function(lForm)
{var passwd=$F(lForm['password']);this.para.email=$F(lForm['email']);if(!this.para.email||this.para.email=="邮箱/手机号/其他用户名")
{this.noticefn('请输入用户账号');return;}
if(!passwd)
{this.noticefn('请输入密码');return;}
if(!this.paraAuth)
{this.para.rpasswd=this.enp(passwd);this.para.encypt=this.key;}
var extra_input=['code','url','remember','rcode','rpkey','diarykey','invisible_mode'];for(var i=0;i<extra_input.length;i++)
{var s=extra_input[i];if(lForm[s])
{var input_val=$F(lForm[s]);if(input_val)
{this.para[s]=input_val;}}}
this.loginCounter++;new Ajax.Request(this.loginapi,{method:'post',onSuccess:this.procLogin.bind(this),onException:this.connectionError.bind(this),onFailure:this.serverError.bind(this),postBody:Object.toQueryString(this.para)});$('btn_dl').disable();},procLogin:function(resp)
{var obj=resp.responseJSON;if(obj.loc)
{if(this.succfn)
{this.succfn(obj.loc);}
else
{window.location=obj.loc;}}
else if(obj.encryptKey)
{this.key=obj.encryptKey;if(this.loginCounter>this.loginLimit)
{this.systemHalt();return;}
this.doLogin(this.loginForm);}
else if(obj.errno)
{this.loginerr(this.para,obj.errno);}
$('btn_dl').enable();},monPasswordInput:function(evt)
{if(this.paraAuth)
{this.paraAuth=false;delete this.para.rpasswd;delete this.para.encypt;}
if(this.loginForm.password.value.length>0)
{this.loginForm.password.value='';}
$(this.loginForm.password).stopObserving('click');},monKeyboardPassInput:function(evt)
{if(this.paraAuth)
{this.paraAuth=false;delete this.para.rpasswd;delete this.para.encypt;}
$(this.loginForm.password).stopObserving('keydown');},connectionError:function(resp)
{$('btn_dl').enable();this.systemHalt();},serverError:function(resp)
{$('btn_dl').enable();this.systemHalt();},systemHalt:function()
{},f:function(s,x,y,z)
{switch(s){case 0:return(x&y)^(~x&z);case 1:return x^y^z;case 2:return(x&y)^(x&z)^(y&z);case 3:return x^y^z;}},rotl:function(x,n)
{return(x<<n)|(x>>>(32-n));},tohs:function(str)
{var s="",v;for(var i=7;i>=0;i--){v=(str>>>(i*4))&0xf;s+=v.toString(16);}
return s;},h:function(msg)
{var K=[0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6];msg+=String.fromCharCode(0x80);var l=msg.length/4+2;var N=Math.ceil(l/16);var M=new Array(N);for(var i=0;i<N;i++){M[i]=new Array(16);for(var j=0;j<16;j++){M[i][j]=(msg.charCodeAt(i*64+j*4)<<24)|(msg.charCodeAt(i*64+j*4+1)<<16)|(msg.charCodeAt(i*64+j*4+2)<<8)|(msg.charCodeAt(i*64+j*4+3));}}
M[N-1][14]=((msg.length-1)*8)/Math.pow(2,32);M[N-1][14]=Math.floor(M[N-1][14])
M[N-1][15]=((msg.length-1)*8)&0xffffffff;var H0=0x67452301;var H1=0xefcdab89;var H2=0x98badcfe;var H3=0x10325476;var H4=0xc3d2e1f0;var W=new Array(80);var a,b,c,d,e;for(var i=0;i<N;i++){for(var t=0;t<16;t++)W[t]=M[i][t];for(var t=16;t<80;t++)W[t]=this.rotl(W[t-3]^W[t-8]^W[t-14]^W[t-16],1);a=H0;b=H1;c=H2;d=H3;e=H4;for(var t=0;t<80;t++){var s=Math.floor(t/20);var T=(this.rotl(a,5)+this.f(s,b,c,d)+e+K[s]+W[t])&0xffffffff;e=d;d=c;c=this.rotl(b,30);b=a;a=T;}
H0=(H0+a)&0xffffffff;H1=(H1+b)&0xffffffff;H2=(H2+c)&0xffffffff;H3=(H3+d)&0xffffffff;H4=(H4+e)&0xffffffff;}
return this.tohs(H0)+this.tohs(H1)+this.tohs(H2)+this.tohs(H3)+this.tohs(H4);},bh:function(ar)
{var charHex=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');var str="";var len=ar.length;for(var i=0,tmp=len<<2;i<tmp;i++)
{str+=charHex[((ar[i>>2]>>(((i&3)<<3)+4))&0xF)]+
charHex[((ar[i>>2]>>((i&3)<<3))&0xF)];}
return str;},sl:function(s,w)
{var len=s.length;var v=[];for(var i=0;i<len;i+=4){v[i>>2]=s.charCodeAt(i)|s.charCodeAt(i+1)<<8|s.charCodeAt(i+2)<<16|s.charCodeAt(i+3)<<24;}
if(w){v[v.length]=len;}
return v;},en:function(p)
{if(p==""){return"";}
var v=this.sl(p,true);var k=this.sl(this.key,false);if(k.length<4){k.length=4;}
var n=v.length-1;var z=v[n],y=v[0],de=2654435769;var mx,e,p,q=Math.floor(6+52/(n+1)),sum=0;while(0<q--){sum=sum+de&0xffffffff;e=sum>>>2&3;for(p=0;p<n;p++){y=v[p+1];mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);z=v[p]=v[p]+mx&0xffffffff;}
y=v[0];mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);z=v[n]=v[n]+mx&0xffffffff;}
return this.bh(v);},uen:function(str){str=(str+'').toString();return encodeURIComponent(str).replace(/!/g,'%21').replace(/'/g,'%27').replace(/\(/g,'%28').replace(/\)/g,'%29').replace(/\*/g,'%2A').replace(/%20/g,'+').replace(/~/g,'%7E');},enp:function(p)
{return this.h(this.en(this.uen(p)));}});var EnFormLogin=Class.create(EnLogin,{doEventLogin:function(event)
{var lForm=event.element();if(this.preLoginFn)
{var ret=this.preLoginFn(lForm);if(ret==false)
{event.stop();return false;}}
var fields=['encypt','rpasswd','ver'];for(var i=0;i<fields.length;i++)
{var el=fields[i];if(!lForm[el])
{lForm.appendChild(new Element('input',{'type':'hidden','name':el}))}}
if(!this.paraAuth)
{lForm.encypt.value=this.key;lForm.rpasswd.value=this.enp(lForm.password.value);}
else
{lForm.encypt.value=this.para.encypt;lForm.rpasswd.value=this.para.rpasswd;}
lForm.ver.value=this.ver;lForm.password.value=new Array(lForm.password.value.length+1).join('*');return true;}});