var PublicForms = new Class({ Implements: [Options,Events] ,options: { engagedForm: 'Login', schoolDistrictList: [], apiRootUrl: 'https://api.schooldata.net/', returnUrl: '', connectingToSchoolDistrictGroup: false, loginFormOptions: { showPasswordResetLink: true, showActivateAccountLink: true, autoInitiateSsoProcess: false, isGuardianLogin: false, isDownloadingFile: false, forceStayOnPage: true, fromLogout: false, guardianAccessText: '', forceNormalAuth: false, forceSamlAuth: false } } ,initialize: function(options) { var self = this; self.setOptions(options); self.districtSelector = new Element('select.custom-select'); self.devGuid = ''; self.showSchoolDistrictList = self.options.schoolDistrictList.length > 1; self.body = $$('body')[0]; self.forceNormalAuth = self.options.loginFormOptions.forceNormalAuth; self.forceSamlAuth = self.options.loginFormOptions.forceSamlAuth; if (self.options.engagedForm == 'GuardianLogin') { self.options.engagedForm = 'Login'; } //Animated Elements self.backgroundAnimation = $('BackgroundAnimation'); self.loginTitle = $('LoginTitle'); self.logoFlipperContainer = $('LogoFlipperContainer'); self.logoFlipperCard = $('LogoFlipperCard'); //Form Containers self.loginFormContainer = $('LoginForm_Container'); self.activateAccountFormContainer = $('ActivateAccountForm_Container'); self.passwordResetFormContainer = $('PasswordResetForm_Container'); self.unlockAccountFormContainer = $('UnlockAccountForm_Container'); //Utility Links self.utilityLinks = $('UtilityLinks'); self.utilityLinksNormalAccessButton = $('UtilityLinks_NormalAccessButton'); self.utilityLinksLoginButton = $('UtilityLinks_LoginButton'); self.utilityLinksPasswordResetButton = $('UtilityLinks_PasswordResetButton'); self.utilityLinksActivateAccountButton = $('UtilityLinks_ActivateAccountButton'); self.utilityLinksUnlockAccountButton = $('UtilityLinks_UnlockAccountButton'); self.helpInfoButton = $('UtilityLinks_HelpInfoButton'); //Login Form Elements self.loginForm = $('LoginForm'); self.loginFormMessageContainer = $('LoginForm_MessageContainer'); self.loginFormSamlAuthenticationContainer = $('LoginForm_SamlAuthenticationContainer'); self.loginFormSamlAuthenticationMessageContainer = $('LoginForm_SamlAuthenticationMessageContainer'); self.loginFormUsernameInputContainer = $('LoginForm_UsernameInputContainer'); self.loginFormPasswordInputContainer = $('LoginForm_PasswordInputContainer'); self.loginFormSubmitLogin = $('LoginForm_SubmitLogin'); self.loginFormAuthenticateWithDistrict = $('LoginForm_AuthenticateWithDistrict'); self.loginFormDistrictSelectorContainer = $('LoginForm_DistrictSelectorContainer'); //Activate Account Form Elements self.activateAccountForm = $('ActivateAccountForm'); self.activateAccountFormTermsChecked = $('ActivateAccountForm_TermsChecked'); self.activateAccountFormDistrictSelectorContainer = $('ActivateAccountForm_DistrictSelectorContainer'); self.activateAccountFormUsernameInputContainer = $('ActivateAccountForm_UsernameInputContainer'); self.activateAccountFormPasswordInputContainer = $('ActivateAccountForm_PasswordInputContainer'); self.activateAccountFormEmailInput1Container = $('ActivateAccountForm_EmailInput1Container'); self.activateAccountFormEmailInput2Container = $('ActivateAccountForm_EmailInput2Container'); self.activateAccountFormSubmitActivateAccount = $('ActivateAccountForm_SubmitActivateAccount'); //Password Reset Form Elements self.passwordResetForm = $('PasswordResetForm'); self.passwordResetFormDistrictSelectorContainer = $('PasswordResetForm_DistrictSelectorContainer'); self.passwordResetFormUsernameInputContainer = $('PasswordResetForm_UsernameInputContainer'); self.passwordResetFormSubmitPasswordReset = $('PasswordResetForm_SubmitPasswordReset'); //Unlock Account Form Elements self.unlockAccountForm = $('UnlockAccountForm'); self.unlockAccountFormDistrictSelectorContainer = $('UnlockAccountForm_DistrictSelectorContainer'); self.unlockAccountFormUsernameInputContainer = $('UnlockAccountForm_UsernameInputContainer'); self.unlockAccountFormSubmitUnlockAccount = $('UnlockAccountForm_SubmitUnlockAccount'); if (!self.isValidPlatform()) { alert('Your platform is not supported. Proceed at your own discretion.'); } if (!self.isValidBrowser()) { var content = new Element('div').adopt( new Element('div.header').adopt( new Element('h1[text=Please upgrade your browser to use Homeroom.]') ,new Element('h2[text=Your browser (' + Browser.name + ' ' + Browser.version + ') is not supported. Update your browser for more security, comfort, and the best experience on this site. Download one of these great browsers and you\'ll be on your way:]') ) ,new Element('ul.downloads').adopt( new Element('li').adopt( new Element('div.first').adopt( new Element('h4#download-chrome').adopt( new Element('a', { 'href': 'http://www.google.com/chrome' ,'target': '_blank' }).adopt( new Element('span[text=Google Chrome]') ) ) ,new Element('h5[text=Version 39+]') ) ) ,new Element('li').adopt( new Element('div').adopt( new Element('h4#download-safari').adopt( new Element('a', { 'href': 'http://www.apple.com/safari' ,'target': '_blank' }).adopt( new Element('span[text=Apple Safari]') ) ) ,new Element('h5[text=Version 6+]') ) ) ,new Element('li').adopt( new Element('div').adopt( new Element('h4#download-firefox').adopt( new Element('a', { 'href': 'http://www.firefox.com' ,'target': '_blank' }).adopt( new Element('span[text=Mozilla Firefox]') ) ) ,new Element('h5[text=Version 34+]') ) ) ,new Element('li').adopt( new Element('div.last').adopt( new Element('h4#download-ie').adopt( new Element('a', { 'href': 'http://windows.microsoft.com/ie' ,'target': '_blank' }).adopt( new Element('span[text=Internet Explorer]') ) ) ,new Element('h5[text=Version 9+]') ) ) ) ,new Element('div.footer').adopt( new Element('p', { 'html': 'See our compatibility chart.' }) ) ); var popover = new MD.Popover({ className: 'update-browser-alert' ,content: content ,width: 768 ,exclusiveImmune: true ,maskTarget: self.body ,clickOutsideToClose: false }).show(); } self.body.addClass((Browser.name + Browser.version).replace(/\./g, '')); var uri = new URI(); if (uri.getData('ReturnUrl') && uri.getData('ReturnUrl') != '') { if (/^\/homeroom\/logout/.test(uri.getData('ReturnUrl'))) { window.location = '/homeroom/login'; } } if (uri.getData('alertmessage') && uri.getData('alertmessage') != '') { var message = uri.getData('alertmessage'); var messagePopover = new MD.Popover({ content: message ,height: 75 ,width: 150 ,maskTarget: self.body ,onHide: function() { window.location = '/homeroom/'; } }).show(); messagePopover.toElement().addEvent('click', function(){ messagePopover.fireEvent('hide'); }); } self.helpInfoButton.addEvent('click', function(e){ e.stop(); var contactInfoPopover = new MD.Popover({ content: (function(){ var userSelectedDistrict = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); return new Element('div.ContactInfoMessage').adopt( new Element('h3', {html: userSelectedDistrict.text.decamelize() + ' Contact Info:'}) ,new Element('p', {html: (!userSelectedDistrict.hasOwnProperty('message') || userSelectedDistrict.message == '' ? 'Please call your IT help-desk for assistance.' : userSelectedDistrict.message)}) ); })() ,className: 'ContactInfoPopover Message' ,height: 150 ,width: 300 ,maskTarget: self.body }).show(); }); // set the logo images var front = self.logoFlipperCard.getElement('.hr-login__flipper-card-front'); var back = self.logoFlipperCard.getElement('.hr-login__flipper-card-back'); if (!self.showSchoolDistrictList && self.options.schoolDistrictList[0].headerImagePath && self.options.schoolDistrictList[0].headerImagePath !== '') { front.setStyle('background-image', 'url('+self.options.schoolDistrictList[0].headerImagePath+')'); if (self.options.schoolDistrictList[0].homeroomImagePath && self.options.schoolDistrictList[0].homeroomImagePath !== '') { back.setStyle('background-image', 'url('+self.options.schoolDistrictList[0].homeroomImagePath+')'); } } else { back.addClass('hr-login__flipper-card-back--sds'); } self.buildLoginFormElements(); self.buildActivateAccountFormElements(); self.buildPasswordResetFormElements(); self.buildUnlockAccountFormElements(); self.buildDistrictSelector(); self.viewForm(self.options.engagedForm); self.loadAnimationImg(); } ,loadAnimationImg: function() { // force browser to download gif because it doesn't animate when cached... var self = this; var loginAnimationImgUrl = '/homeroom/assets/images/login-animation.gif?'+new Date().format('%m%d%y%H%M%s'); var img = new Image(); img.src = loginAnimationImgUrl; img.onload = function() { // when the image has loaded set it to the background image and start are css animations so the timing aligns //$scope.loginAnimationImgUrl = loginAnimationImgUrl; self.backgroundAnimation.setStyle('background-image', 'url("'+loginAnimationImgUrl+'")'); self.loginTitle.addClass('hr-login-title--animate'); self.logoFlipperContainer.addClass('hr-login__flipper--animate'); self.logoFlipperCard.addClass('hr-login__flipper-card--animate'); //$scope.startCssAnimations = true; }; img.onerror = function () { // if it errors animate the logos in so they display self.loginTitle.addClass('hr-login-title--animate'); self.logoFlipperContainer.addClass('hr-login__flipper--animate'); self.logoFlipperCard.addClass('hr-login__flipper-card--animate'); } } ,buildLoginFormElements: function() { var self = this; // Username input field self.loginFormUsernameInputContainer.grab(new Element('label[text="Username or Email"]')); self.loginFormUsernameTextInput = new MD.Input.Text({ // placeholderText: 'Username' keyupEventDelay: 0 ,stripHtmlTags: false }); self.loginFormUsernameInputContainer.grab(self.loginFormUsernameTextInput.toElement()); // Password input field self.loginFormPasswordInputContainer.grab(new Element('label[text="Password"]')); self.loginFormPasswordTextInput = new MD.Input.Text({ // placeholderText: 'Password' type: 'password' ,keyupEventDelay: 0 ,stripHtmlTags: false }); self.loginFormPasswordInputContainer.grab(self.loginFormPasswordTextInput.toElement()); } ,buildActivateAccountFormElements: function() { var self = this; // Username input field self.activateAccountFormUsernameInputContainer.grab(new Element('label[text="SIS Username"]')); self.activateAccountFormUsernameTextInput = new MD.Input.Text({ //placeholderText: 'SIS Username' keyupEventDelay: 0 ,stripHtmlTags: false }); self.activateAccountFormUsernameInputContainer.grab(self.activateAccountFormUsernameTextInput.toElement()); // Password input field self.activateAccountFormPasswordInputContainer.grab(new Element('label[text="SIS Password"]')); self.activateAccountFormPasswordTextInput = new MD.Input.Text({ //placeholderText: 'SIS Password' type: 'password' ,keyupEventDelay: 0 ,stripHtmlTags: false }); self.activateAccountFormPasswordInputContainer.grab(self.activateAccountFormPasswordTextInput.toElement()); // Email 1 input field self.activateAccountFormEmailInput1Container.grab(new Element('label[text="Email"]')); self.activateAccountFormEmail1TextInput = new MD.Input.Text({ //placeholderText: 'Email' keyupEventDelay: 0 ,stripHtmlTags: false }); self.activateAccountFormEmailInput1Container.grab(self.activateAccountFormEmail1TextInput.toElement()); // Email 2 input field self.activateAccountFormEmailInput2Container.grab(new Element('label[text="Confirm Email"]')); self.activateAccountFormEmail2TextInput = new MD.Input.Text({ //placeholderText: 'Email Confirm' keyupEventDelay: 0 ,stripHtmlTags: false }); self.activateAccountFormEmailInput2Container.grab(self.activateAccountFormEmail2TextInput.toElement()); } ,buildPasswordResetFormElements: function() { var self = this; // Username input field self.passwordResetFormUsernameInputContainer.grab(new Element('label[text="Username or Email"]')); self.passwordResetFormUsernameOrEmailTextInput = new MD.Input.Text({ //placeholderText: 'Username or Email Address' keyupEventDelay: 0 ,stripHtmlTags: false }); self.passwordResetFormUsernameInputContainer.grab(self.passwordResetFormUsernameOrEmailTextInput.toElement()); } ,buildUnlockAccountFormElements: function() { var self = this; // Username input field self.unlockAccountFormUsernameInputContainer.grab(new Element('label[text="Username or Email"]')); self.unlockAccountFormUsernameOrEmailTextInput = new MD.Input.Text({ //placeholderText: 'Username or Email Address' keyupEventDelay: 0 ,stripHtmlTags: false }); self.unlockAccountFormUsernameInputContainer.grab(self.unlockAccountFormUsernameOrEmailTextInput.toElement()); } ,buildDistrictSelector: function() { var self = this; var devDistricts = []; var testDistricts = []; var demoDistricts = []; var liveDistricts = []; self.options.schoolDistrictList.each(function(schoolDistrict){ switch(schoolDistrict.version.toLowerCase()) { case 'dev': devDistricts.push(schoolDistrict); break; case 'test': testDistricts.push(schoolDistrict); break; case 'demo': demoDistricts.push(schoolDistrict); break; case 'live': liveDistricts.push(schoolDistrict); break; } }); self.districtSelector.addEvent('change', function() { var schoolDistrictData = this.getSelected()[0].retrieve('data'); var authType = schoolDistrictData.authType; var authIsAlternate = schoolDistrictData.authIsAlternate; if (self.forceNormalAuth) { authType = 'Normal'; } else if (self.forceSamlAuth) { authType = 'SAMLv2'; authIsAlternate = true; } if (self.options.engagedForm == 'Login') { if (!connectingToSchoolDistrictGroup) { self.utilityLinks.show(); if (authIsAlternate) { self.utilityLinksPasswordResetButton.hide(); self.utilityLinksActivateAccountButton.hide(); self.utilityLinksUnlockAccountButton.hide(); } else { self.utilityLinksPasswordResetButton.show(); self.utilityLinksActivateAccountButton.show(); self.utilityLinksUnlockAccountButton.show(); } if (authType != 'Normal') { self.utilityLinksNormalAccessButton.show(); } else { self.utilityLinksNormalAccessButton.hide(); } if (authType == "SAMLv2") { self.loginFormSamlAuthenticationContainer.show(); self.loginFormAuthenticateWithDistrict.show(); self.loginForm.hide(); self.loginFormSubmitLogin.hide(); } else { self.loginFormSamlAuthenticationContainer.hide(); self.loginFormAuthenticateWithDistrict.hide(); self.loginForm.show(); self.loginFormSubmitLogin.show(); } if (self.showSchoolDistrictList) { self.loginFormDistrictSelectorContainer.show(); } } else { self.loginFormSamlAuthenticationContainer.hide(); self.loginFormAuthenticateWithDistrict.hide(); self.loginForm.show(); self.loginFormSubmitLogin.show(); self.loginFormDistrictSelectorContainer.show(); } } }); var devOptGroup = new Element('optgroup', { label: 'Dev'}); var testOptGroup = new Element('optgroup', { label: 'Test'}); var demoOptGroup = new Element('optgroup', { label: 'Demo'}); var liveOptGroup = new Element('optgroup', { label: 'Live'}); devDistricts.each(function(devDistrict) { if (devDistrict.text == "Dev") { self.devGuid = devDistrict.guid; } var devDistrictOption = new Element('option', { value: devDistrict.guid, text: devDistrict.text }).store('data', devDistrict); devOptGroup.grab(devDistrictOption); }); testDistricts.each(function(testDistrict) { var testDistrictOption = new Element('option', { value: testDistrict.guid, text: testDistrict.text }).store('data', testDistrict); testOptGroup.grab(testDistrictOption); }); demoDistricts.each(function(demoDistrict) { var demoDistrictOption = new Element('option', { value: demoDistrict.guid, text: demoDistrict.text }).store('data', demoDistrict); demoOptGroup.grab(demoDistrictOption); }); liveDistricts.each(function(liveDistrict) { var liveDistrictOption = new Element('option', { value: liveDistrict.guid, text: liveDistrict.text }).store('data', liveDistrict); liveOptGroup.grab(liveDistrictOption); }); self.districtSelector.grab( new Element('option', { disabled: 'disabled', selected: 'selected', text: 'select district...'}) ); if (connectingToSchoolDistrictGroup) { if (devDistricts.length > 0) { self.districtSelector.grab(devOptGroup); } if (testDistricts.length > 0) { self.districtSelector.grab(testOptGroup); } if (demoDistricts.length > 0) { self.districtSelector.grab(demoOptGroup); } if (liveDistricts.length > 0) { self.districtSelector.grab(liveOptGroup); } } else { self.districtSelector.adopt( devOptGroup, testOptGroup, demoOptGroup, liveOptGroup ); } } ,toggleNormalAccess: function() { var self = this; var userSelectedDistrict = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); self.forceNormalAuth = !self.forceNormalAuth; self.forceSamlAuth = !self.forceSamlAuth; if (self.forceNormalAuth) { self.loginForm.show(); self.loginFormSubmitLogin.show(); self.loginFormSamlAuthenticationContainer.hide(); self.loginFormAuthenticateWithDistrict.hide(); self.utilityLinksNormalAccessButton.set('text', 'Use District Account'); } else if (self.forceSamlAuth) { self.loginForm.hide(); self.loginFormSubmitLogin.hide(); self.loginFormSamlAuthenticationContainer.show(); self.loginFormAuthenticateWithDistrict.show(); self.utilityLinksNormalAccessButton.set('text', 'Use SchoolData.net Account'); } else { switch (userSelectedDistrict.authType) { case "SAMLv2": self.loginFormSamlAuthenticationContainer.show(); self.loginFormAuthenticateWithDistrict.show(); self.loginForm.hide(); self.loginFormSubmitLogin.hide(); break; case "Custom": self.loginForm.show(); self.loginFormSubmitLogin.show(); break; default: self.loginForm.show(); self.loginFormSubmitLogin.show(); break; } self.utilityLinksNormalAccessButton.set('text', 'Use SchoolData.net Account'); } } ,viewForm: function(form) { var self = this; switch (form) { case 'PasswordReset': var passwordResetFooter = self.passwordResetFormContainer.getElement('.hr-login__modal-footer'); passwordResetFooter.grab(self.utilityLinks, 'top'); self.loginFormContainer.hide(); self.activateAccountFormContainer.hide(); self.passwordResetFormContainer.show(); self.unlockAccountFormContainer.hide(); self.utilityLinksLoginButton.show(); self.utilityLinksActivateAccountButton.show(); self.utilityLinksUnlockAccountButton.show(); self.engagePasswordResetForm(); self.addDistrictSelectorToContainer(self.passwordResetFormDistrictSelectorContainer); self.utilityLinksPasswordResetButton.hide(); break; case 'ActivateAccount': var activateAccountFooter = self.activateAccountFormContainer.getElement('.hr-login__modal-footer'); activateAccountFooter.grab(self.utilityLinks, 'top'); self.loginFormContainer.hide(); self.activateAccountFormContainer.show(); self.passwordResetFormContainer.hide(); self.unlockAccountFormContainer.hide(); self.utilityLinksLoginButton.show(); self.utilityLinksPasswordResetButton.show(); self.utilityLinksUnlockAccountButton.show(); self.engageActivateAccountForm(); self.addDistrictSelectorToContainer(self.activateAccountFormDistrictSelectorContainer); self.utilityLinksActivateAccountButton.hide(); break; case 'UnlockAccount': var unlockAccountFooter = self.unlockAccountFormContainer.getElement('.hr-login__modal-footer'); unlockAccountFooter.grab(self.utilityLinks, 'top'); self.loginFormContainer.hide(); self.activateAccountFormContainer.hide(); self.passwordResetFormContainer.hide(); self.unlockAccountFormContainer.show(); self.utilityLinksLoginButton.show(); self.utilityLinksPasswordResetButton.show(); self.utilityLinksActivateAccountButton.show(); self.engageUnlockAccountForm(); self.addDistrictSelectorToContainer(self.unlockAccountFormDistrictSelectorContainer); self.utilityLinksUnlockAccountButton.hide(); break; case 'Login': var loginFooter = self.loginFormContainer.getElement('.hr-login__modal-footer'); loginFooter.grab(self.utilityLinks, 'top'); self.loginFormContainer.show(); self.activateAccountFormContainer.hide(); self.passwordResetFormContainer.hide(); self.unlockAccountFormContainer.hide(); self.utilityLinksPasswordResetButton.show(); self.utilityLinksActivateAccountButton.show(); self.utilityLinksUnlockAccountButton.show(); self.engageLoginForm(); self.addDistrictSelectorToContainer(self.loginFormDistrictSelectorContainer); self.utilityLinksLoginButton.hide(); break; } if (self.options.loginFormOptions.isGuardianLogin) { self.loginFormMessageContainer.set('text', guardianAccessText); } if (!self.options.loginFormOptions.showPasswordResetLink) { self.utilityLinksPasswordResetButton.hide(); } if (!self.options.loginFormOptions.showActivateAccountLink) { self.utilityLinksActivateAccountButton.hide(); } } ,addDistrictSelectorToContainer: function(container) { var self = this; self.loginFormDistrictSelectorContainer.empty(); self.activateAccountFormDistrictSelectorContainer.empty(); self.passwordResetFormDistrictSelectorContainer.empty(); self.unlockAccountFormDistrictSelectorContainer.empty(); if (self.showSchoolDistrictList) { container.grab(new Element('label[text="District"]')); container.grab(self.districtSelector); for(var index = 0; index < self.districtSelector.options.length; index++) { var theOption = self.districtSelector.options[index]; if (theOption.value == self.devGuid) { theOption.set('selected', 'selected'); self.districtSelector.fireEvent('change'); break; } } } else if (container === self.loginFormDistrictSelectorContainer) { var districtInputValue = self.options.schoolDistrictList[0].text; /* //Not sure if we want to do this. Is it confusing? if (self.options.loginFormOptions.isGuardianLogin) { districtInputValue += ' for Guardians'; } */ container.adopt( new Element('label[text="District"]') ,new Element('div.MDInput.Text').grab( new Element('input.Input').setProperties({ 'type': 'text' ,'disabled': 'disabled' ,'value': districtInputValue }) ) ); } } ,engagePasswordResetForm: function() { } ,engageActivateAccountForm: function() { } ,engageUnlockAccountForm: function() { } ,engageLoginForm: function() { var self = this; if (self.options.loginFormOptions.fromLogout) { self.loginFormMessageContainer.set('text', 'You are now logged out of Homeroom.'); } else if (self.options.loginFormOptions.forceStayOnPage) { } else if (self.options.loginFormOptions.autoInitiateSsoProcess && self.options.schoolDistrictList.length == 1) { self.loginFormSamlAuthenticationContainer.set('html', '

Please wait while we connect to your district...

'); self.doImmediateSamlAuth(); } if (self.options.loginFormOptions.isDownloadingFile) { self.loginFormMessageContainer.set('text', 'To comply with FERPA regulations you must provide a username and password to authenticate your identity before your download begins.'); } //I can't see that this is used anywhere //if (!string.IsNullOrEmpty(messageToUser)) { // $('LoginFormMessageContainer').set('text', messageToUser); //} if (self.showSchoolDistrictList) { //both are hidden until a district is selected self.utilityLinks.hide(); self.loginForm.hide(); self.loginFormSubmitLogin.hide(); self.loginFormSamlAuthenticationContainer.hide(); self.loginFormAuthenticateWithDistrict.hide(); self.utilityLinksNormalAccessButton.hide(); } else { var authType = self.options.schoolDistrictList[0].authType; var authIsAlternate = self.options.schoolDistrictList[0].authIsAlternate; if (self.forceNormalAuth) { authType = 'Normal'; } else if (self.forceSamlAuth) { authType = 'SAMLv2'; authIsAlternate = true; } if (authType != 'Normal') { self.utilityLinksNormalAccessButton.show(); } else { self.utilityLinksNormalAccessButton.hide(); } if (authType == "SAMLv2") { self.loginFormSamlAuthenticationContainer.show(); self.loginFormAuthenticateWithDistrict.show(); self.loginForm.hide(); self.loginFormSubmitLogin.hide(); // self.loginFormDistrictSelectorContainer.hide(); } else { self.loginFormSamlAuthenticationContainer.hide(); self.loginFormAuthenticateWithDistrict.hide(); self.loginForm.show(); self.loginFormSubmitLogin.show(); // self.loginFormDistrictSelectorContainer.show(); } if (authIsAlternate) { self.options.loginFormOptions.showPasswordResetLink = false; self.options.loginFormOptions.showActivateAccountLink = false; self.utilityLinksUnlockAccountButton.hide(); } } if (self.options.loginFormOptions.isGuardianLogin) { self.utilityLinksLoginButton.hide(); } } ,submitUnlockAccountForm: function() { var self = this; var usernameOrEmailAddressValue = self.unlockAccountFormUsernameOrEmailTextInput.getValue(); var loadingSpinner = new MD.Spinner($$('body')[0], { maskOpacity: 0.8 ,version: 'dark' ,message: 'Processing. Please wait...' //,timeout: 2000 }); if (usernameOrEmailAddressValue == '') { var popover = new MD.Popover({ content: "You must provide your username or email address." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); return; } else { loadingSpinner.show(); var userSelectedDistrictData = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); new Request.JSON({ url:'/homeroom/public/UnlockAccountHandler.aspx' ,data:{ UsernameOrEmailAddress: usernameOrEmailAddressValue ,'flOU8GqfAqKaCMdxRg585XQ$$': userSelectedDistrictData.value } ,onSuccess:function(responseJSON){ loadingSpinner.hide(); if (responseJSON.success == true) { var successPopover = new MD.Popover({ content: 'We have sent an email to you which contains a link to unlock your account.' ,height: 50 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); } else { var errorPopover = new MD.Popover({ content: 'We ran into some issues sending your unlock request. Please try again or email support@schooldata.net for assistance.' ,height: 75 ,width: 300 ,maskTarget: document.body }).show(); } } ,onFailure: function(){ loadingSpinner.hide(); } }).send(); } } ,submitPasswordResetForm: function() { var self = this; var userSelectedDistrictData = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); var externalUsernameOrEmail = self.passwordResetFormUsernameOrEmailTextInput.getValue(); var schoolDistrict = userSelectedDistrictData.value; var loadingSpinner = new MD.Spinner($$('body')[0], { maskOpacity: 0.8 ,version: 'dark' ,message: 'Processing, please wait...' //,timeout: 2000 }); var messagePopover = new MD.Popover({ height: 32 ,width: 260 ,position: 'topCenter' ,edge: 'bottomCenter' ,offset: {x:0, y:-10} }); if (externalUsernameOrEmail == '') { messagePopover.pointTo = self.passwordResetFormUsernameOrEmailTextInput; messagePopover.setContent('Please enter a username or email address.'); messagePopover.show(); return; } if (!schoolDistrict || schoolDistrict == '') { messagePopover.pointTo = self.districtSelector; messagePopover.setContent('Select a district from the list.'); messagePopover.show(); return; } loadingSpinner.show(); //Send request new Request.JSON({ url:'/homeroom/public/InitiatePasswordResetHandler.aspx' ,data:{ 'flOU8GqfAqKaCMdxRg585XQ$$': schoolDistrict ,ExternalUsernameOrEmail: externalUsernameOrEmail } ,onSuccess:function(responseJSON){ loadingSpinner.hide(); var popover = new MD.Popover({ content: responseJSON.message ,height: 100 ,width: 400 ,timeout: 15000 ,maskTarget: self.body }).show(); } ,onFailure: function(){ loadingSpinner.hide(); } }).send(); } ,submitActivateAccountForm: function() { var self = this; var userSelectedDistrictData = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); var schoolDistrict = userSelectedDistrictData.value; var usernameValue = self.activateAccountFormUsernameTextInput.getValue(); var passwordValue = self.activateAccountFormPasswordTextInput.getValue(); var email1Value = self.activateAccountFormEmail1TextInput.getValue(); var email2Value = self.activateAccountFormEmail2TextInput.getValue(); var loadingSpinner = new MD.Spinner(self.body, { maskOpacity: 0.8 ,version: 'dark' ,message: 'Processing. Please wait...' //,timeout: 2000 }); if (usernameValue == '' || passwordValue == '' || email1Value == '' || email2Value == '') { var popover = new MD.Popover({ content: "All fields are required to activate your account." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); } else { if (!self.activateAccountFormTermsChecked.getProperty('checked')) { var popover = new MD.Popover({ content: "You must agree to the Terms of Use before activating your account." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); return; } else if (!schoolDistrict || schoolDistrict == '') { var popover = new MD.Popover({ content: "Please select your district from the list." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); return; } else if (email1Value != email2Value) { var popover = new MD.Popover({ content: "The email address is not the same." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); return; } else if (!self.validateEmail(email1Value)) { var popover = new MD.Popover({ content: "The email address you entered is invalid." ,height: 75 ,width: 300 ,clickToClose: true ,maskTarget: document.body }).show(); return; } else { loadingSpinner.show(); new Request.JSON({ url:'/homeroom/public/ActivateAccountHandler.aspx' ,data:{ ExternalUsername: usernameValue ,ExternalPassword: passwordValue ,EmailAddress: email1Value ,'flOU8GqfAqKaCMdxRg585XQ$$': schoolDistrict } ,onSuccess:function(responseJSON){ if (responseJSON.success == true) { var successPopover = new MD.Popover({ content: "Your account is now active! Click anywhere to continue to Homeroom." ,height: 50 ,width: 300 ,clickToClose: true ,maskTarget: document.body ,onHide:function(){ window.location = responseJSON.redirectUrl; } }).show(); } else { loadingSpinner.hide(); var errorPopover = new MD.Popover({ content: responseJSON.message ,height: 75 ,width: 300 ,timeout: 20000 ,maskTarget: document.body }).show(); } } ,onFailure: function(){ loadingSpinner.hide(); } }).send(); } } } ,submitLoginForm: function() { var self = this; var userSelectedDistrictData = self.options.schoolDistrictList.length == 1 ? self.options.schoolDistrictList[0] : self.districtSelector.getSelected()[0].retrieve('data'); var messagePopover = new MD.Popover({ height: 32 ,width: 260 ,position: 'topCenter' ,edge: 'bottomCenter' ,offset: {x:0, y:-10} }); var usernameValue = self.loginFormUsernameTextInput.getValue(); if (usernameValue == '' || usernameValue == 'Username') { messagePopover.pointTo = self.loginFormUsernameTextInput.toElement(); messagePopover.setContent('Please enter a username.'); messagePopover.show(); return; } var userPassValue = self.loginFormPasswordTextInput.getValue(); if (userPassValue == '') { messagePopover.pointTo = self.loginFormPasswordTextInput.toElement(); messagePopover.setContent('Please enter a password.'); messagePopover.show(); return; } var schoolDistrict = userSelectedDistrictData.value; if (!schoolDistrict || schoolDistrict == '') { messagePopover.pointTo = districtSelector; messagePopover.setContent('Please select your district.'); messagePopover.show(); return; } var loginData = { 'flOU8GqfAqKaCMdxRg585XQ$$': schoolDistrict ,UserPassword: userPassValue ,Username: usernameValue }; if (self.options.connectingToSchoolDistrictGroup) { loginData.AuthType = "Normal"; } if (self.forceNormalAuth) { loginData.AuthType = "Normal"; } else if (self.forceSamlAuth) { loginData.AuthType = 'SAMLv2'; } var uri = new URI(); if (uri.getData('ReturnUrl') && uri.getData('ReturnUrl') != '') { loginData.ReturnUrl = uri.getData('ReturnUrl'); } publicForms.sendLoginRequest(loginData); } ,validateEmail: function(email) { var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } ,isValidBrowser: function() { var platform = Browser.Platform.name; var browser = Browser.name; var version = Browser.version; if (browser == "unknown") { return false; } // check if supported browser if (browser != 'ie' && browser != 'firefox' && browser != 'safari' && browser != 'chrome') { return false; } // check supported browser versions if (browser == 'ie' && version < 9) { return false; } if (browser == 'firefox' && version < 34) { return false; } if (browser == 'safari' && version < 6) { return false; } if (browser == 'chrome' && version < 39) { return false; } if (platform == "ios" && browser != "safari") { return false; } return true; } ,isValidPlatform: function(){ var platform = Browser.Platform.name; if (platform == "other") { return false; } return true; } ,sendLoginRequest: function(loginData) { var self = this; loginData = loginData || {}; var loadingSpinner = new MD.Spinner(self.body, { maskOpacity: 0.8 ,version: 'dark' ,message: 'Logging you in...' //,timeout: 2000 }); loadingSpinner.show(); new Request.JSON({ url:'/homeroom/public/LoginHandler.aspx' ,data: loginData ,method: 'post' ,onSuccess:function(responseJSON){ if (responseJSON.success == true) { if(self.options.returnUrl != '') { window.location = self.options.returnUrl; } else if(loginData.ReturnUrl && loginData.ReturnUrl != '') { switch(loginData.ReturnUrl) { case "/homeroom/widgetworkbench.aspx": case "/homeroom/widgetworkbench": window.location = "/homeroom/widgetworkbench.aspx"; break; case "/homeroom": default: window.location = "/homeroom/"; break; } } else { window.location = "/homeroom/"; } } else { loadingSpinner.hide(); var errorPopover = new MD.Popover({ content: responseJSON.message ,height: 80 ,width: 300 ,maskTarget: $$('body')[0] }).show(); } } ,onFailure:function(){ loadingSpinner.hide(); var errorPopover = new MD.Popover({ content: ['A login error has occurred. Please contact ', new Element('a', { html: 'support@schooldata.net', href:'mailto:support@schooldata.net'})] ,height: 70 ,width: 300 ,maskTarget: $$('body')[0] }).show(); } ,onComplete:function() { //We are doing this in a delay so that the spinner will still show for a second whiel we set the window location after login (function() { loadingSpinner.hide(); }).delay(1000); if(self.options.loginFormOptions.isDownloadingFile) { new MD.Popover({ content: '

Your download should begin soon. If it does not, please contact support@schooldata.net for assistance.

You will be redirected to Homeroom in 10 seconds.

' ,height: 150 ,width: 300 ,maskTarget: $$('body')[0] }).show(); (function() { window.location.href = "/homeroom/"; }).delay(10000); } } }).send(); } ,doImmediateSamlAuth: function() { var userSelectedSchoolDistrict = this.options.schoolDistrictList[0].value; var authUrl = this.options.apiRootUrl + "/access/saml/AuthRequest.aspx"; var querystringParams = { 'db':userSelectedSchoolDistrict, 'rtu':window.location.href, 'ac':'Homeroom' }; var parts = []; for (var i in querystringParams) { if (querystringParams.hasOwnProperty(i)) { parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(querystringParams[i])); } } authUrl += "?" + parts.join("&"); window.location = authUrl; } ,openSamlAuthWindow: function() { document.domain = "schooldata.net"; var userSelectedSchoolDistrict = this.options.schoolDistrictList.length == 1 ? this.options.schoolDistrictList[0].value : this.districtSelector.getSelected()[0].retrieve('data').value; var authUrl = this.options.apiRootUrl + "/access/saml/AuthRequest.aspx"; var querystringParams = { 'db':userSelectedSchoolDistrict, 'rtu':window.location.href, 'ac':'Homeroom' }; var parts = []; for (var i in querystringParams) { if (querystringParams.hasOwnProperty(i)) { parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(querystringParams[i])); } } authUrl += "?" + parts.join("&"); window.open(authUrl, "SDS External Auth Window"); } });