// Copyright (C) 2005 David Caldwell, All Rights Reserved. -*- c -*-
function login()
{this.div=document.getElementById("login");this.state="idle";if(this.is_logged_in()){this.user=Cookie.list["greenfelt_user"];this.session=Cookie.list["greenfelt_session"];}
this.update_div();if(URL.param.user&&URL.param.user!=this.user){this.logout();this.user=doc.id("user").value=URL.param.user;doc.id("pass").focus();}}
login.prototype.set_user=function(user){Cookie.set("greenfelt_user",this.user=user,"30d");}
login.prototype.set_session=function(session){Cookie.set("greenfelt_session",this.session=session,"30d");}
login.prototype.is_logged_in=function(){return Cookie.list["greenfelt_session"]&&Cookie.list["greenfelt_user"];}
login.prototype.set_error=function(message){this.error=message;this.logout();};login.prototype.logout=function(){this.set_user(undefined);this.set_session(undefined);this.update_div();};login.prototype.on_login_f=function(){};login.prototype.on_login=function(f){if(f){var old_f=this.on_login_f;this.on_login_f=function(){old_f();f();};}else
this.on_login_f();}
login.prototype.authenticate=function(user,pass,create,after){if(this.state=="authenticating")return;var old_state=this.state;this.state="authenticating";this.update_div();loadText("login.cgi?user="+escape(user)+"&pass="+escape(rot13(pass))+(create?"&create=1":""),wrap(this,function(text,error){var m;if(text==undefined){this.error=sprintf("network error: %j",error);}else if(m=text.match(/OK[\r\n]user=(.+)[\r\n]session=(\d+)/)){this.set_user(m[1]);this.set_session(m[2]);this.error=undefined;this.on_login();}else
this.error=text;this.state=old_state;this.update_div();if(after)after();}));}
login.prototype.update_div=function(){var me=this;while(this.div.firstChild)
this.div.removeChild(this.div.firstChild);if(this.state=="creating"){}else if(this.state=="authenticating"){this.div.appendChild(doc.text("Authenticating... Please wait..."));}else if(this.is_logged_in()){doc.appendTo(this.div,doc.el("input",{type:"button",id:"logout",value:("Logout \""+this.user+"\""),onclick:function(){me.logout();}}));}else{if(this.error){var span;this.div.appendChild(span=document.createElement("span").appendChild(document.createTextNode("* "+this.error+" * ")).parentNode);span.style.paddingRight="15px";span.style.color="red";}
var u,p,f;doc.appendTo(this.div,doc.el("input",{type:"button",value:"New User",id:"new_user",onclick:function(){me.create_dialog();}}),u=doc.el("input",{type:"text",size:"10",id:"user",className:"disabled",value:"Username",onfocus:function(){if(u.className)u.className=u.value="";},onblur:function(){if(u.value==""){u.className="disabled";u.value="Username";}}}),p=doc.el("input",{type:"password",size:"10",id:"pass",style:{display:"none"},onchange:function(){if(!u.className&&u.value!=""&&p.value!="")me.authenticate(u.value,p.value);},onfocus:function(){p.className=p.style.display="";f.style.display="none";},onblur:function(){if(p.value==""){p.style.display="none";f.style.display="";}}}),f=doc.el("input",{type:"text",size:"10",id:"fake_pass",className:"disabled",value:"Password",onfocus:function(){p.style.display="";p.focus();}}));function gen_return_wrapper(input,extra){plat.register_key_events(input,function(event){if(event.key=="return"){if(extra)extra();if(input.onchange)input.onchange();return false;}});}
gen_return_wrapper(u,function(){f.focus();});gen_return_wrapper(p);}}
login.prototype.create_dialog=function(){if(this.state=="creating")return;this.state="creating";this.update_div();var alert=new_alert(doc.el("div",{},doc.el("p",{},doc.text("Thanks for joining Green Felt. Please enter a login name and a password. "+
"The login name will be what you use to log in to green felt and what "+
"you will be known as to other users (in high score tables, etc.)."+
"")),doc.el("ul",{id:"error",style:{color:"orange"}}),doc.el("table",{},doc.el("tr",{},doc.el("td",{border:"none"},doc.text("Login Name:")),doc.el("td",{},doc.el("input",{type:"text",size:"20",id:"new_user"}))),doc.el("tr",{},doc.el("td",{},doc.el("label",{'for':"new_password"},doc.text("Password:"))),doc.el("td",{},doc.el("input",{type:"password",size:"10",id:"new_password"}))),doc.el("tr",{},doc.el("td",{},doc.el("label",{'for':"new_password2"},doc.text("Verify Password:"))),doc.el("td",{},doc.el("input",{type:"password",size:"10",id:"new_password2"})))),doc.el("input",{type:"button",value:"Create New User",id:"ok"}),doc.el("input",{type:"button",value:"Cancel",id:"cancel"})),{title:"Create a new user"});var me=this;doc.id("ok").onclick=function(){var error=doc.id("error");while(error.firstChild)
error.removeChild(error.firstChild);if(!doc.id("new_user").value)error.appendChild(doc.el("li",{},doc.text("Missing a Login Name!")));if(!doc.id("new_password").value)error.appendChild(doc.el("li",{},doc.text("Missing a Password!")));if(doc.id("new_password").value!=doc.id("new_password2").value)
error.appendChild(doc.el("li",{},doc.text("Passwords don't match!")));if(!error.firstChild){error.appendChild(doc.el("li",{},doc.text("Creating user. Please wait...")));doc.id("ok").disabled=true;doc.id("cancel").disabled=true;me.authenticate(doc.id("new_user").value,doc.id("new_password").value,true,function(){while(error.firstChild)
error.removeChild(error.firstChild);if(me.error)
error.appendChild(doc.el("li",{},doc.text(me.error)));else{document.body.removeChild(alert);me.state="idle";me.update_div();}
doc.id("ok").disabled=false;doc.id("cancel").disabled=false;});}
return false;};doc.id("cancel").onclick=function(){me.state="idle";me.update_div();alert.parentNode.removeChild(alert);return false;};}
var Login=new login;