function isValidEmailAddress(emailAddress) { var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i); return pattern.test(emailAddress); }; // Render submission container if we're returning from a successful user login. // This will invoke doShowSubmission $(document).ready(function () { if(window.location.href.indexOf("bvauthenticateuser=false") > -1) { $BV.configure("global", {userToken: ''}); $BV.ui("submission_container", {}); } }); $BV.configure("global", { allowSamePageSubmission: true, userToken: "", doLogin: function(successCallback, successUrl) { // Note: doLogin only executes when anonymous submission is disabled in BV config. // When enabled, this is skipped and doShowSubmission is invoked directly. if (successUrl.indexOf('?destinationurl=') > -1) { // Bypass domain check and go directly to destinationurl. This is a workaround // due to server-side issue. returnUrl = decodeURIComponent(successUrl).split('?destinationurl=')[1]; } else { returnUrl = successUrl.split('#')[0]; } // hide regular content and show bv login flow $('.bvflow_hide').addClass('bv_hide'); $('.bvflow_show').removeClass('hidden'); // set form action $('.bvflow_show form').attr('action', $('#login-form').attr('action')); // set return url $('.bvflow_show input[name="RETURN_URL"]').val(returnUrl); // set forgot pwd link $('.bvflow_show .forgot-pw a').attr('href', $('#login-form .forgot-pw a').attr('href')); $('.email_check .btn-bv').click(function(evt){ evt.preventDefault(); var email = $('.bv_email').val(); if(isValidEmailAddress(email)) { generic.jsonrpc.fetch({ method: 'user.registered', params: [{'email_address': email}], onSuccess: function(r) { var val = r.getValue(); var isUser = (val !== null) && (val === 1); if(isUser) { // show full login $('.bvflow_show .email_check').addClass('hidden'); $('.bvflow_show .full_sign_in').removeClass('hidden'); $('.full_sign_in input[name="EMAIL_ADDRESS"]').val(email); } else { // anonymous write-a-review $('.bvflow_show').addClass('hidden'); $('.bvflow_hide').removeClass('bv_hide'); $('html,body').animate({scrollTop: $("div[id='BVSubmissionContainer']").offset().top-75},'slow'); } }, onFailure: function (r) {} }); } else { // show "please enter valid email address" msg $('span[for="EMAIL_ADDRESS"]').css('display', 'block'); } }); }, doShowSubmission: function() { // Note: When anonymous submission is disabled and doLogin is invoked, we don't // need to do anything more in the doShowSubmission callback. // Manually construct successUrl (workaround for anonymous login since doLogin won't fire) var bvreturn = document.URL.split('#')[0]; var bvdisplaycode = '3813'; var bvappcode = 'rr'; var bvcontenttype = 'REVIEW_SUBMISSION'; var bvproductid = '6608'; var bvhost = (typeof(bv_host) !== 'undefined') ? bv_host : 'clinique.ugc.bazaarvoice.com' ; var bvpage = '//' + bvhost + '/' + bvdisplaycode + '/' + bvproductid + '/submitreview.htm?format=embedded&campaignid=BV_RATING_SUMMARY&sessionparams=__BVSESSIONPARAMS__&return=' + encodeURIComponent(bvreturn) + '&innerreturn=%2F%2Fclinique.ugc.bazaarvoice.com%2F' + bvdisplaycode + '%2F' + bvproductid + '%2Freviews.djs%3Fformat%3Dembeddedhtml&user=__USERID__&authsourcetype=__AUTHTYPE__'; var returnUrl = bvreturn + '?bvdisplaycode=' + bvdisplaycode + '&bvappcode=' + bvappcode + '&bvproductid=' + bvproductid + '&bvpage=' + encodeURIComponent(bvpage) + '&bvcontenttype=' + bvcontenttype + '&bvauthenticateuser=false'; // Hide content and show BV login flow unless we're returning from login page. //if(window.location.href.indexOf("bvauthenticateuser") == -1) { if (!false) { // hide regular content and show bv login flow $('.bvflow_hide').addClass('bv_hide'); $('.bvflow_show').removeClass('hidden'); } // set form action $('.bvflow_show form').attr('action', $('#login-form').attr('action')); $('.bvflow_show input[name="RETURN_URL"]').val(returnUrl); // set forgot pwd link $('.bvflow_show .forgot-pw a').attr('href', $('#login-form .forgot-pw a').attr('href')); $('.email_check .btn-bv').click(function(evt){ evt.preventDefault(); var email = $('.bv_email').val(); if(isValidEmailAddress(email)) { generic.jsonrpc.fetch({ method: 'user.registered', params: [{'email_address': email}], onSuccess: function(r) { var val = r.getValue(); var isUser = (val !== null) && (val === 1); if(isUser) { // show full login $('.bvflow_show .email_check').addClass('hidden'); $('.bvflow_show .full_sign_in').removeClass('hidden'); $('.full_sign_in input[name="EMAIL_ADDRESS"]').val(email); } else { // anonymous write-a-review $('.bvflow_show').addClass('hidden'); $('.bvflow_hide').removeClass('bv_hide'); $('html,body').animate({scrollTop: $("div[id='BVSubmissionContainer']").offset().top-75},'slow'); } }, onFailure: function (r) {} }); } else { // show "please enter valid email address" msg $('span[for="EMAIL_ADDRESS"]').css('display', 'block'); } }); }, onSubmissionReturn: function() { }, doScrollSubmission: function() { $('html,body').animate({scrollTop: $("div[id='BVSubmissionContainer']").offset().top-75},'slow'); } }); // BV UI // NOTE: remove 'submissionContainerDiv' option if using separate review submission page $BV.ui( "rr", "show_reviews", { productId: "6608", submissionContainerDiv: "BVSubmissionContainer" } );