$( document ).ready(function() { setFrontImageEvents(); chooseAds(); checkLoginStatus(); checkConfirmation(); handleDownloadLinks(); handleLogin(); handleRegister(); setRegisterErrorEvents(); // remove error messages if clicked $("#login-error").on('click', function() { $("#login-error .popup-inner").hide(); }); $("#register-error").on('click', function() { $("#register-error .popup-inner").hide(); }); // switch in "Log Out" in the navbar if logged in $(".logged").on('click', function() { changeLoginStatus(false); Cookies.remove('esg-session'); }); // choose different ads on navigation clicks $(".nav").on('click', function() { chooseAds(); }); }); function setFrontImageEvents() { var hoverClasses = { whitebotroll: "whitetextroll", whitebotroll2: "whitetextroll2", bluebot: "bluetext", greenbot: "greentext", }; // set hover and mouseout events for front images/side menu _.forIn(hoverClasses, function(value, key) { $("." + key).mouseover(function(){ $(".startreveal, .greenreveal, .pinkreveal, .bluereveal").removeClass("hover"); $("." + value).addClass("hover"); }); $("." + key).mouseout(function(){ $(".startreveal, .greenreveal, .pinkreveal, .bluereveal").removeClass("hover"); $(".startreveal").addClass("hover"); $("." + value).removeClass("hover"); }); $("." + value).mouseover(function(){ $(".startreveal, .greenreveal, .pinkreveal, .bluereveal").removeClass("hover"); $("." + key).addClass("hover"); }); $("." + value).mouseout(function(){ $(".startreveal, .greenreveal, .pinkreveal, .bluereveal").removeClass("hover"); $(".startreveal").addClass("hover"); $("." + key).removeClass("hover"); }); }); $(".whitebotroll, .whitetextroll").mouseover(function(){ $(".greenreveal, .pinkreveal, .bluereveal").removeClass("hover"); $(".startreveal").addClass("hover"); }); $(".whitebotroll2, .whitetextroll2").mouseover(function(){ $(".greenreveal, .startreveal, .bluereveal").removeClass("hover"); $(".pinkreveal").addClass("hover"); }); $(".bluebot, .bluetext").mouseover(function(){ $(".greenreveal, .startreveal, .pinkreveal").removeClass("hover"); $(".bluereveal").addClass("hover"); }); $(".greenbot, .greentext").mouseover(function(){ $(".bluereveal, .startreveal, .pinkreveal").removeClass("hover"); $(".greenreveal").addClass("hover"); }); // get scroll button to work nicely $(".scrollbutton span").click(function() { $('html, body').animate({ scrollTop: $("#magazine").offset().top }, 1000); }); } function handleDownloadLinks() { // add session logic for download links $(".download").click(function(e) { e.preventDefault(); var session = Cookies.get('esg-session'), issue = $(this).data('issue') ? parseInt($(this).data('issue')) : '5', cookieIssue = Cookies.get('esg-download') !== undefined ? Cookies.get('esg-download') : ''; if (cookieIssue != '') { issue = cookieIssue; } Cookies.set('esg-download', issue, { expires: 365 }); isLoggedIn( function(data) { // download PDF $.download( esgConfig.riUrl + '/ajax/esg_download', {issue: issue, session_id: session}, 'post' ); Cookies.set('esg-download', '', { expires: 365 }); }, function(data) { location.href="/register.html" } ); }); $(".arcselect").change(function(e) { var session = Cookies.get('esg-session'), issue = $(this).find(':selected').data('issue') ? parseInt($(this).find(':selected').data('issue')) : '5', cookieIssue = Cookies.get('esg-download') !== undefined ? Cookies.get('esg-download') : ''; if (cookieIssue != '') { issue = cookieIssue; } Cookies.set('esg-download', issue, { expires: 365 }); isLoggedIn( function(data) { // download PDF $.download( esgConfig.riUrl + '/ajax/esg_download', {issue: issue, session_id: session}, 'post' ); Cookies.set('esg-download', '', { expires: 365 }); }, function(data) { location.href="/register.html" } ); }); } function handleLogin() { // handle login form $("#form-login").submit(function(e) { e.preventDefault(); var $inputs = $(':input', this); // get an associative array of just the values. var values = {}; $inputs.each(function() { values[this.name] = $(this).val(); if (this.name == 'esg_print_mag') { values[this.name] = $(this).prop("checked") ? "1" : "0"; } }); if (values.hasOwnProperty('esg_print_mag')) { session = Cookies.get('esg-session'); if (session) { values.session_id = session; } } esgAjax('/ajax/esg_login', values, function(data) { if (data.success) { Cookies.set('esg-session', data.session_id, { expires: 365 }); if (! data.esg_print_mag) { loginError("You have successfully logged in - please select printed magazine or not and update preferences"); $("#username").prop("disabled", true); $("#password").prop("disabled", true); $("#login-print-mag").show(); $("#login-submit").text("Submit Your Preference"); } else { if (Cookies.get('esg-download') != '') { $(".download").trigger('click'); } else { location.href = "/"; } } } else { var message = "Those details have not been recognised."; if (data.message) { message = data.message; } loginError(message); } changeLoginStatus(data.success); }, function(data) { loginError("There has been a network problem. Please try again."); } ); }); } function setRegisterErrorEvents() { $('.form-group').on('click', function() { $('input, button, .bootstrap-select', this).removeClass("error"); }); } function handleRegister() { // handle login form $("#form-register").submit(function(e) { e.preventDefault(); var $inputs = $(':input', this); $("button.error, input.error, select.error").removeClass("error"); // get an associative array of just the values. var values = {}; $inputs.each(function() { values[this.name] = $(this).val(); if (this.name == 'esg_print_mag') { values[this.name] = $(this).prop("checked") ? "1" : "0"; } }); esgAjax('/ajax/esg_register', values, function(data) { if (data.success) { $("#form-register")[0].reset(); location.href="/register_email.html" } else { // You can just add the class 'error' to any field to make it go red as per the visual now. // For the select field, you need to add the error class to the button: // var message = data.message; if (data.errors) { var field = data.errors[0], type = $('#' + field.name)[0].tagName.toLowerCase(), $button; $('#' + field.name).addClass('error') if (type == 'select') { $button = $('button[data-id=' + field.name + ']') $button.addClass('error'); $button.parent().addClass('error'); } message = field.message; } registerError(message); } }, function(data) { loginError("There has been a network problem. Please try again."); } ); }); } function loginError(message) { $("#login-error .error").html(message); $("#login-error .popup-inner").show(); } function registerError(message) { $("#register-error .error").text(message); $("#register-error .popup-inner").show(); } function checkLoginStatus() { esgAjax('/ajax/esg_login', {session_id: Cookies.get('esg-session')}, function(data) { changeLoginStatus(data.success); }, function(data) { Cookies.remove('esg-session'); changeLoginStatus(data.success); } ); } function isLoggedIn(successCallback, failCallback) { esgAjax('/ajax/esg_login', {session_id: Cookies.get('esg-session')}, function(data) { if (data.success) { successCallback(data) } else { Cookies.remove('esg-session'); failCallback(data) } }, function(data) { failCallback(data) } ); } function changeLoginStatus(loggedIn) { if (loggedIn) { $('.notlogged').hide(); $('.logged').show(); } else { $('.logged').hide(); $('.notlogged').show(); } } function checkConfirmation() { if (location.pathname == "/register_confirm.html") { esgAjax('/ajax/esg_access', {member_id: $.query.get('a'), authcode: $.query.get('b')}, function(data) { if (data.success) { $("#register-confirm").text("You have successfully completed your registration. You can now login to your account below.") } else { $("#register-confirm").text("There has been a problem confirming your details.") } }, function(data) { loginError("There has been a network problem. Please try again."); } ); } } function chooseAds() { var taken = [], adsLength = esgConfig.ads.length; $('.adcontainer').each(function(){ var ad; // pick a new ad // only exit if it's a new ad or we've exhausted the ad list while(true) { ad = Math.floor(Math.random() * adsLength); if (_.indexOf(taken, ad) == -1 || taken.length == adsLength) { taken.push(ad); break; } } $('img', this).attr("src", '/images/' + esgConfig.ads[ad].image); $('a', this).attr("href", esgConfig.ads[ad].url); }); } function esgAjax(path, values, success, error) { $.ajax({ url: esgConfig.riUrl + path, type: 'post', contentType: 'application/json', dataType: 'json', data: JSON.stringify(values), async: true, success: function(data, status, xhr, dataType) { success.call(this, data); }, error: function(xhr, textStatus, thrownError) { error.call(this); } }); }