if (!window.ccs) { window.ccs = {}; } ccs.Login = function(whoToGreet) { var self; var sessionId; var userDisplay; var loginLink = "loginUrl"; var logoutLink; var editLink; var showForm; var showForgottenPassword; var registrationLink; var isLoggedIn = false; var lastUsername; var userUUIDCookie; var emailDomain; var fromAddress; var loginModulePage; var requestURI; var resetMessage; var sectionId; var mustRememberMe; var goToGroupHomepage; var postLoginPage; var postLogoutPage; var canLoad; //Set my the loginFormFooter, to notify js that the lightbox has loaded. var whoToGreet; var upId; //Stores the id of the user profile, so it can be edited via ajax from the registration stuff. var uuid; //Stores the uuid of the user profile, so it can be edited via ajax from the registration stuff. var userId; //Stores the userId of the logged in user. var greetingSuffix; var isActive; var loginStatusEstablished = false; var goToUrl = ""; //If user clicks on a link, it can either take them there, or popup the login form. var postLoginFunction; var bypassNormalPostLoginAction = false; var modalboxWidth; var registerParams = ""; var disableModalbox = ""; function constructorFn(whoToGreet) { self = this; sessionId = getCookie("JSESSIONID"); self.canLoad = false; self.getLoggedInUser(); self.whoToGreet = whoToGreet; self.isActive = false; self.registerParams = ""; } constructorFn.prototype.setVar = function(name, value) { val = value + ""; //convert to string (may be boolean) if (val == "true" || val == "false") { eval("self." + name + " = " + value + ""); } else { value = value.replace(/'/g, "\\'"); eval("self." + name + " = '" + value + "'"); } } constructorFn.prototype.hasLoginStatusBeenEstablished = function() { return loginStatusEstablished; } constructorFn.prototype.isUserLoggedIn = function() { return isLoggedIn; } constructorFn.prototype.setCanLoad = function() { canLoad = true; } constructorFn.prototype.showThrobber = function() { if ($('loginWait')!=null)$('loginWait').style.display = "inline"; } constructorFn.prototype.hideThrobber = function() { if ($('loginWait')!=null)$('loginWait').style.display = "none"; } constructorFn.prototype.showForgotPassword = function() { self.setMsg('forgottenPassword'); } constructorFn.prototype.register = function() { if(self.registerParams) { location.href = self.registrationLink + self.registerParams; } else { location.href = self.registrationLink; } } constructorFn.prototype.hideModalBox = function() { //Goois an error if not initialized. try { Modalbox.hide(); } catch (err) {} } constructorFn.prototype.authClick = function(callback, bypassNormalPostLoginAction) { if (self.hasLoginStatusBeenEstablished()) { if (bypassNormalPostLoginAction) self.bypassNormalPostLoginAction = bypassNormalPostLoginAction; //You may just want to execute a function and leave it at that. E.g. Automark doesn't need a page reload. if (self.isUserLoggedIn()) { callback(); } else { postLoginFunction = callback; loginTop(); } } else { setTimeout(function() { self.authClick(callback); }, 500); } } constructorFn.prototype.setPostLoginFunction = function(postLoginFunction_, bypassNormalPostLoginAction) { postLoginFunction = postLoginFunction_; if (bypassNormalPostLoginAction) self.bypassNormalPostLoginAction = bypassNormalPostLoginAction; } constructorFn.prototype.logout = function(preLogout) { if (preLogout) preLogout(); deleteCookie(self.userUUIDCookie, ccs.contextPath); new Ajax.Request(ccs.contextPath + '/json/' + ccs.appName + '/' + ccs.languageCode + '/modules/login_form/logout.json', { method:'get', onSuccess: function(transport) { if (self.postLogoutPage != "" && self.postLogoutPage != null) { location.href = self.postLogoutPage; } else { location.href = ccs.contextPath; } }, onFailure: function() { // alert('Something went wrong...') } }); } constructorFn.prototype.getLoggedInUser = function(callback) { // This will see if the user is logged in, and display accordingly. var url = ccs.contextPath + '/json/' + ccs.appName + '/' + ccs.languageCode + '/modules/login_form/checkStatus.json?whoToGreet=' + whoToGreet + '&rnd=' + Math.random(); new Ajax.Request(url, { method:'get', onSuccess: function(transport) { var response = transport.responseText || "no response text"; var json = eval('(' + response + ')'); if (json.status == "") { isLoggedIn = false; } else { isLoggedIn = true; } loginStatusEstablished = true; if (callback!=null) { callback(isLoggedIn, json); } else { self.displayForm(json); } }, onFailure: function() { // alert('Something went wrong...') } }); } constructorFn.prototype.goToUrl = function(url) { goToUrl = url; if (loginStatusEstablished) { if (isLoggedIn) { location.href = url; } else { loginTop(); } } else { setTimeout(function() { self.goToUrl(url) }, 500); } } constructorFn.prototype.displayForm = function(json) { if (canLoad) { if (json.status == "") { $('statusCheck').style.display = "none"; $('notLoggedIn').style.display = "inline"; } else { self.upId = json.ids.split(".")[0] self.uuid = json.ids.split(".")[1]; self.userId = json.ids.split(".")[2]; $('statusCheck').style.display = "none"; $('logged_in_fullname').innerHTML = json.status + self.greetingSuffix; $('loggedIn').style.display = "inline"; $('notLoggedIn').style.display = "none"; } } else { setTimeout(function() { self.displayForm(json) }, 500); } } constructorFn.prototype.getLoggedInUserId = function() { return self.userId; } constructorFn.prototype.setForgotCredentialsEmail = function(emailAddress) { $('forgottenPasswordEmail').value = emailAddress; } constructorFn.prototype.changeRememberMe = function() { self.mustRememberMe = $('mustRememberMe').checked; } constructorFn.prototype.showMsgBox = function() { if (!self.isActive || $('MB_window')==null) { Modalbox.show($('loginMsgBox'), {title: "", width: self.modalboxWidth*1}); self.setActive(true); } } constructorFn.prototype.closeMsgBox = function() { Modalbox.hide(); self.setActive(false); } constructorFn.prototype.setActive = function(status) { //Used to determine if the modalbox is open or not. self.isActive = status; } constructorFn.prototype.setMsg = function(srcDiv) { window.scroll(0, 0); var src = $(srcDiv).innerHTML; if (srcDiv == 'forgottenPassword') { src = src.replace(/forgottenPasswordUsername/g, "forgottenPasswordUsername2"); src = src.replace(/forgottenPasswordEmail/g, "forgottenPasswordEmail2"); src = src.replace(/forgottenPasswordMsg/g, "forgottenPasswordMsg2"); } if (srcDiv == 'altLoginForm') { src = src.replace(/login_username_alt/g, "login_username_alt2"); src = src.replace(/login_password_alt/g, "login_password_alt2"); } $('loginMsg').innerHTML = src; if (!self.disableModalbox) { self.showMsgBox(); } } constructorFn.prototype.getParams = function(alt) { if (alt != "_alt2") alt = ""; var username; try { username = $('login_username' + alt).value; } catch (err) { } var password; try { password = $('login_password' + alt).value; } catch (err) { } var parameters = new Object(); if (password) { parameters['password'] = password; } if (username) { parameters['username'] = username; } parameters['emailDomain'] = self.emailDomain; parameters['fromAddress'] = self.fromAddress; parameters['loginModulePage'] = self.loginModulePage; parameters['remember_me'] = self.mustRememberMe; parameters['sectionId'] = self.sectionId; parameters['requestURI'] = self.requestURI; parameters['activation_link'] = ccs.registration.getActivationLink(); parameters['use_new_registration'] = ccs.registration.isRegistrationEnabled(); return parameters; } constructorFn.prototype.resetPassword = function() { self.showThrobber(); var parameters = self.getParams(); parameters['username'] = self.lastUsername; new Ajax.Request(ccs.contextPath + '/json/' + ccs.appName + '/' + ccs.languageCode + '/modules/login_form/resetPassword.json', { method:'post', parameters: parameters, onSuccess: function(transport) { var response = transport.responseText || "no response text"; var json = eval('(' + response + ')'); var status = json.status; self.hideThrobber(); $('resetPasswordDone').innerHTML = $('resetPasswordDone').innerHTML.replace(/EMAIL/, json.email); self.setMsg('resetPasswordDone'); }, onFailure: function() { // alert('Something went wrong...') } }); } constructorFn.prototype.logMeIn = function(alt) { var parameters = self.getParams(alt); if (parameters['username'] == "" || parameters['password'] == "") return; if (self.goToGroupHomepage) { parameters['goToGroupHomepage'] = "true"; } new Ajax.Request(ccs.contextPath + '/json/' + ccs.appName + '/' + ccs.languageCode + '/modules/login_form/checkUser.json', { method:'post', parameters: parameters, onSuccess: function(transport) { var response = transport.responseText || "no response text"; var json = eval('(' + response + ')'); var status = json.status; if (status == 'success') { isLoggedIn = true; var uuid = json.uuid; if (self.mustRememberMe) { setFixedCookie(self.userUUIDCookie, uuid, ccs.contextPath); } else { deleteCookie(self.userUUIDCookie, ccs.contextPath); } if (postLoginFunction !=null) { postLoginFunction(json); } if (!self.bypassNormalPostLoginAction) { setTimeout(function() { //Slight delay to ensure postLoginFunction is called. if (goToUrl != "") { location.href = goToUrl; } else if (self.postLoginPage != "" && self.postLoginPage != null) { location.href = self.postLoginPage; } else if (self.goToGroupHomepage) { location.href = json.groupHomepage; } else { location.reload(); } }, 500); } } else if (status == "incorrect_password" && (self.resetMessage != "null" && !self.resetMessage == "" && !self.resetMessage.toLowerCase() == "not set")) { self.lastUsername = parameters['username']; //Used for forgotten password, so they don't change it in the login form and set to the wrong user. $('loginMsg').innerHTML = self.resetMessage; self.showMsgBox(); } else if (status == "incorrect_username") { self.setMsg("wrongCredentials_username"); } else if (status == "incorrect_password") { self.setMsg("wrongCredentials_password") } else if (status == "not_opted_in") { $('optIn').innerHTML = $('optIn').innerHTML.replace(/EMAIL/, json.email); self.setMsg("optIn") } }, onFailure: function() { // alert('Something went wrong...') } }); } constructorFn.prototype.showResetPassword = function() { self.setMsg("resetPassword"); } constructorFn.prototype.forgottenPasswordSubmit = function(type) { var value = ''; if (type == 'username') { value = $('forgottenPasswordUsername2').value; } else { value = $('forgottenPasswordEmail2').value; } var parameters = self.getParams(); parameters['type'] = type; parameters['value'] = value; self.showThrobber(); new Ajax.Request(ccs.contextPath + '/json/' + ccs.appName + '/' + ccs.languageCode + '/modules/login_form/forgotten.json', { method:'post', parameters: parameters, onSuccess: function(transport) { var response = transport.responseText || "no response text"; var json = eval('(' + response + ')'); var status = json.status; if (status == 'true') { $('forgottenPasswordMsg2').innerHTML = $('successfulNotification').innerHTML; } else { $('forgottenPasswordMsg2').innerHTML = json.info; } self.hideThrobber(); }, onFailure: function() { self.hideThrobber(); } }); } //This was created for Kagiso - A certain parameter needs to be passed to the reigstration page if a certain link is clicked. constructorFn.prototype.setRegisterParameters = function(params) { self.registerParams = "?" + params; } return new constructorFn(whoToGreet); }