var uname = readCookie("sync_uname") || ""; var session = readCookie("sync_session") || ""; var api = WEB_URL + "/api/json/"; var loggedin = false; if(uname && session) { var loginstr = "name=" + uname + "&session=" + session; var url = api + "login?" + loginstr + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { onLogin(); } }); } function onLogin() { $("#cpwusername").val(uname); $("#ceusername").val(uname); $("#accountnav li")[0].innerHTML = "Logged in as " + uname; $("#register").hide(); loggedin = true; $("#login").text("Logout"); createCookie("sync_uname", uname, 7); createCookie("sync_session", session, 7); } function makeTabCallback(tabid, paneid) { return function() { $("#accountnav li").each(function() { $(this).removeClass("active"); }); $(tabid).parent().addClass("active"); $(".span7").each(function() { $(this).css("display", "none"); }); $(paneid).css("display", ""); }; } $("#register").click(makeTabCallback("#register", "#registerpane")); $("#pwchange").click(makeTabCallback("#pwchange", "#changepwpane")); $("#pwreset").click(makeTabCallback("#pwreset", "#pwresetpane")); $("#email").click(makeTabCallback("#email", "#changeemailpane")); $("#profile").click(makeTabCallback("#profile", "#profilepane")); $("#profile").click(function() { if(uname != "") { $.getJSON(api + "getprofile?name=" + uname + "&callback=?", function(data) { if(data.success) { $("#profiletext").val(data.profile_text); $("#profileimg").val(data.profile_image); } else { $("
").addClass("alert alert-error") .text("Failed to retrieve profile: " + data.error) .insertBefore($("#profilepane form")); } }); } }); $("#registerbtn").click(function() { $("#registerpane").find(".alert-error").remove(); $("#registerpane").find(".error").removeClass("error"); var name = $("#regusername").val(); var pw = $("#regpw").val(); var pwc = $("#regpwconfirm").val(); var err = false; if(!name.match(/^[a-z0-9_]{1,20}$/i)) { $("
").addClass("alert alert-error") .text("Usernames must be 1-20 characters long and contain only a-z, 0-9, and underscores") .insertAfter($("#regusername").parent().parent()); err = true; } if(pw == "") { $("
").addClass("alert alert-error") .text("Password must not be blank") .insertAfter($("#regpw").parent().parent()); $("#regpw").parent().parent().addClass("error"); err = true; } if(pw != pwc) { $("
").addClass("alert alert-error") .text("Passwords do not match") .insertAfter($("#regpwconfirm").parent().parent()); $("#regpwconfirm").parent().parent().addClass("error"); err = true; } if(err) { return; } // Input valid, try registering var url = api + "register?" + [ "name=" + name, "pw=" + pw ].join("&") + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { uname = name; session = data.session; onLogin(); $("
").addClass("alert alert-success") .text("Registration successful") .insertBefore($("#registerpane form")); $("#regpw").val(""); $("#regusername").val(""); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#registerpane form")); } }); }); $("#loginbtn").click(function() { $("#loginpane").find(".alert-error").remove(); $("#loginpane").find(".alert-success").remove(); if($("#loginpw").val() == "") { $("
").addClass("alert alert-error") .text("Please provide a password") .insertAfter($("#loginpw").parent().parent()); $("#loginpw").parent().parent().addClass("error"); return; } uname = $("#loginusername").val(); var loginstr = "name=" + uname + "&pw=" + $("#loginpw").val(); var url = api + "login?" + loginstr + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { session = data.session; onLogin(); $("
").addClass("alert alert-success") .text("Login successful") .insertBefore($("#loginpane form")); $("#loginpw").val(""); $("#loginusername").val(""); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#loginpane form")); } }); }); $("#cpwbtn").click(function() { $("#changepwpane").find(".alert-error").remove(); $("#changepwpane").find(".alert-success").remove(); $("#changepwpane").find(".error").removeClass("error"); var name = $("#cpwusername").val(); var oldpw = $("#cpwoldpw").val(); var newpw = $("#cpwnewpw").val(); var newpwc = $("#cpwconfirm").val(); var err = false; if(oldpw == "") { $("
").addClass("alert alert-error") .text("Password must not be empty") .insertAfter($("#cpwoldpw").parent().parent()); $("#cpwoldpw").parent().parent().addClass("error"); err = true; } if(newpw == "") { $("
").addClass("alert alert-error") .text("Password must not be empty") .insertAfter($("#cpwnewpw").parent().parent()); $("#cpwnewpw").parent().parent().addClass("error"); err = true; } if(newpw != newpwc) { $("
").addClass("alert alert-error") .text("Passwords do not match") .insertAfter($("#cpwconfirm").parent().parent()); $("#cpwconfirm").parent().parent().addClass("error"); err = true; } if(err) { return; } // Input valid, try changing password var url = api + "changepass?" + [ "name=" + name, "oldpw=" + oldpw, "newpw=" + newpw ].join("&") + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { $("
").addClass("alert alert-success") .text("Password changed.") .insertBefore($("#changepwpane form")); uname = name; session = data.session; onLogin(); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#changepwpane form")); } }); }); $("#cebtn").click(function() { $("#changeemailpane").find(".alert-error").remove(); $("#changeemailpane").find(".alert-success").remove(); var name = $("#ceusername").val(); var pw = $("#cepw").val(); var email = $("#ceemail").val(); if(pw == "") { $("
").addClass("alert alert-error") .text("Please provide a password") .insertAfter($("#cepw").parent().parent()); $("#cepw").parent().parent().addClass("error"); return; } if(!email.match(/^[a-z0-9_\.]+@[a-z0-9_\.]+[a-z]+$/)) { $("
").addClass("alert alert-error") .text("Invalid email") .insertAfter($("#ceemail").parent().parent()); $("#ceemail").parent().parent().addClass("error"); return; } if(email.match(/.*@(localhost|127\.0\.0\.1)/i)) { $("
").addClass("alert alert-error") .text("Nice try, but no.") .insertAfter($("#ceemail").parent().parent()); $("#ceemail").parent().parent().addClass("error"); return; } email = escape(email); var url = api + "setemail?" + [ "name=" + name, "pw=" + pw, "email=" + email ].join("&") + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { $("
").addClass("alert alert-success") .text("Email updated") .insertBefore($("#changeemailpane form")); uname = name; session = data.session; onLogin(); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#changeemailpane form")); } }); }); $("#rpbtn").click(function() { $("#rpbtn").text("Sending..."); $("#pwresetpane").find(".alert-error").remove(); $("#pwresetpane").find(".alert-success").remove(); var name = $("#rpusername").val(); var email = $("#rpemail").val(); email = escape(email); var url = api + "resetpass?" + [ "name=" + name, "email=" + email ].join("&") + "&callback=?"; $.getJSON(url, function(data) { $("#rpbtn").text("Send Reset"); if(data.success) { $("
").addClass("alert alert-success") .text("Password reset link issued. Check your email.") .insertBefore($("#pwresetpane form")); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#pwresetpane form")); } }); }); $("#profilesave").click(function() { $("#profilepane").find(".alert-error").remove(); $("#profilepane").find(".alert-success").remove(); var img = $("#profileimg").val(); img = escape(img).replace(/\//g, "%2F") .replace(/&/g, "%26") .replace(/=/g, "%3D") .replace(/\?/g, "%3F"); var url = api + "setprofile?" + [ "name=" + uname, "session=" + session, "profile_image=" + img, "profile_text=" + escape($("#profiletext").val()) ].join("&") + "&callback=?"; $.getJSON(url, function(data) { if(data.success) { $("
").addClass("alert alert-success") .text("Profile updated.") .insertBefore($("#profilepane form")); } else { $("
").addClass("alert alert-error") .text(data.error) .insertBefore($("#profilepane form")); } }); }); $("#login").click(function() { if(!loggedin) { makeTabCallback("#login", "#loginpane")(); } else { uname = ""; session = ""; eraseCookie("sync_uname"); eraseCookie("sync_session"); $("#accountnav li")[0].innerHTML = "Not Logged In"; $("#register").show(); $("#login").text("Login"); loggedin = false; } }); function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(";"); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==" ") c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }