").attr("id",this.overlayId),$("body").append(this.overlay)),$("body").append(this.modal),_.bindAll(this,"hide"),this.options.closeable&&(this.closeBtn=this.modal.find(".close-x, .close, .skip"),this.closeBtn.live("click touchend",this.hide))},hide:function(e){if(e){if("keydown"==e.type){if(27!=e.keyCode)return;$(window).unbind("keydown.modal")}e.preventDefault()}return this.overlay.hide(),this.modal.hide(),this.options.hide&&this.options.hide(),this},show:function(){return this.overlay.show(),this.modal.show(),this.options.closeable&&(this.overlay.one("click",this.hide),$(window).bind("keydown.modal",this.hide)),this.options.show&&this.options.show(),this},visible:function(){return"none"!=this.modal.css("display")}}),s.Notify=s.Class.extend({initialize:function(){},clear:function(e){("string"==typeof e||"element"==typeof e)&&(e=$(e)),e.find(".flash").remove()},create:function(e,t){if(t.element){("string"==typeof t.element||"element"==typeof t.element)&&(t.element=$(t.element)),this.clear(t.element);var n=$(s.templates.render("layout/_flash",{message:e,type:t.type}));t.element.prepend(n),t.width&&n.width(t.width).addClass("borders"),t.slideSpeed=t.slideSpeed||200,_.defer(function(){n.slideDown(t.slideSpeed),t.duration&&_.delay(function(){n.slideUp(t.slideSpeed)},t.duration)})}},error:function(e,t){this.create(e,_.extend(t||{},{type:"error"}))},success:function(e,t){this.create(e,_.extend(t||{},{type:"success"}))},warning:function(e,t){this.create(e,_.extend(t||{},{type:"warning"}))},form:{removeError:function(e){$(e.currentTarget).removeClass("error").next(".error").remove()},clearValidationError:function(e){e.find("input").removeClass("error"),e.parent().find(".error, .success").remove()},validationError:function(e,t){var n=this;n.clearValidationError(t),_.isUndefined(e.fields)||(_.each(e.fields,function(e,i){t.find("input[name="+i+"]").unbind("keypress").one("keypress",_.bind(n.removeError,n)).addClass("error").after('
'+e+"
")}),t.find("input.error:first").select(),e.message="Fix any errors with the fields below."),s.notify.error(e.message,{element:t.parent()})}}}),$(function(){s.notify=new s.Notify}),s.Auth=s.Class.extend({initialize:function(e){this.setOptions(e),$(".login-main").show(),this.el={login:$("#login form"),loginButtons:$("#login .buttons"),loginUsername:$("#login-username"),loginPassword:$("#login-password"),loginStay:$("#login-stay"),loginSubmit:$("#login-submit"),signup:$("#signup form"),follow_storify:$("#follow-storify-container"),signupUsername:$("#signup-username"),signupEmail:$("#signup-email"),signupPassword:$("#signup-password"),signupSubmit:$("#signup-submit"),forgot:$("#recover form"),forgotEmail:$("#forgot-password-email"),forgotSubmit:$("#forgot-password-submit"),reset:$("#reset form"),usersList:$("#friends #users"),header:$("#friends .header"),filterLink:$("#friends .filter a"),follow:$("#friends #users .user button"),followAll:$("#subscribe-to-all"),showLogin:$("#login .showForm"),logout:$("#logout"),captchaSubmit:$("#captcha-submit")},this.next=s.utils.getUrlParams("next")||"/",this.popup="true"==s.utils.getUrlParams("popup"),this.next.match(/^(http|\/\/)/)&&!this.next.match(/https?:\/\/.*\.?storify\.com/i)&&(this.next="/"),this.cookieName="user","production"!==s.env&&(this.cookieName=s.env+"-"+this.cookieName);var t=s.store.get("user"),n=s.cookie.get(this.cookieName);if(null!=n)if(t&&t.username===n.username)this.setUser(t);else if(n._id)this.setUser(n),this.setUserCookie();else if(""==n)s.cookie.remove(this.cookieName),s.cookie.remove(this.cookieName,".storify.com");else{var i=this;$.getJSON("/currentUser",function(e){!e||e.error?(s.cookie.remove(i.cookieName),s.cookie.remove(i.cookieName,".storify.com")):(s.store.set("user",e),window.location.reload())})}else t&&s.store.remove("user");if(this.el.signup.length&&(s.everyauth.twitter||s.everyauth.facebook)&&this.showSignup(this.loginCallback),$("input").length>0&&$("input").first().focus(),$("#friends").length>0){var r=s.utils.getUrlParams("service")||"facebook";$("a.tab[rel="+r+"]").addClass("active"),$(".skip").attr("href",decodeURIComponent(this.next)),this.displayFriends(r)}this.addNextParam(),this.bind()},bind:function(){var e=this;_.bindAll(this,"login","logout","signupSubmit","signup","forgotPassword","resetPassword","getIdentity","displayFriends","filterLinkClicked","followHoverIn","followHoverOut","followClick","followAll","showLoginForm","submitCaptcha"),this.captchaModal=s.Modal?new s.Modal("#recaptcha",{closeable:!1}):{},this.el.login.bind("submit",this.login),this.el.signup.bind("submit",this.signupSubmit),this.el.forgot.bind("submit",this.forgotPassword),this.el.reset.bind("submit",this.resetPassword),$("#storify-auth .button.twitter").bind("click",function(t){t.preventDefault(),e.serviceAuth("twitter",{height:635})}),$("#storify-auth .button.facebook").bind("click",function(t){t.preventDefault(),e.serviceAuth("facebook")}),this.el.filterLink.bind("click",this.filterLinkClicked),this.el.follow.live("mouseenter",this.followHoverIn),this.el.follow.live("mouseleave",this.followHoverOut),this.el.follow.live("click",this.followClick),this.el.followAll.live("click",this.followAll),this.el.showLogin.click(this.showLoginForm),this.el.logout.click(this.logout),this.el.captchaSubmit.click(this.submitCaptcha)},showLoginForm:function(e){e.preventDefault(),this.el.showLogin.hide(),this.el.login.slideDown()},follow:function(e,t,n){var i=this,r="undefined"==typeof n?"add":n?"remove":"add";if(!i.user)return t(new Error("Not authenticated"));var o="/users/"+i.user.username+"/subscriptions/"+r;s.api.request("POST",o,{user:e,username:i.user.username,_token:i.user._token},{},function(e,n){return e?t(e.error.message):(t(null,n),void 0)})},unfollow:function(e,t){this.follow(e,t,!0)},getIdentity:function(e,n){if(!this.user||!e)return n(null);if(this.user.identities){var i=this.user.identities[e];if(n&&i)return n(i)}var r=this,o="/users/"+r.user.username+"/identities";s.api.request("GET",o,{username:r.user.username,_token:r.user._token},{},function(i,o){if(i)return s.notify.error(t(i.error.message),{element:"#content",slideSpeed:200,duration:15e3});var a=o.content;r.user.identities=r.user.identities||{};for(var l in a){var u=a[l];r.user.identities[u.service]=u}n(r.user.identities[e])})},serviceSignup:function(e){this.el.signupUsername.val(this.serviceData(e).username),this.showSignup(this.loginCallback)},serviceAuth:function(e,n){var i=this;n=$.extend({login:!0,popup:!0,width:800,height:400},n);var r=screen.width/2-n.width/2,o=screen.height/2-n.height/2,a="/auth/"+e+"?"+$.param(n);$.oauthpopup({path:a,windowOptions:"location=0,status=0,width="+n.width+",height="+n.height+",left="+r+",top="+o,callback:function(){s.everyauth=s.ea&&s.utils.parseJSON(s.ea)||{},s.everyauth[e]&&s.everyauth[e].accessToken?i.serviceLogin(e):i.validationError({message:t("Log in to __service__ denied",{service:e})},i.el.login)}})},showCaptcha:function(e){"function"==typeof e&&(this.captchaSubmitCallback=e),Recaptcha.reload(),this.el.captchaSubmit.removeAttr("disabled"),this.captchaModal.show(),$("#recaptcha input[name=recaptcha_response_field]").focus()},submitCaptcha:function(e){e.preventDefault();var n=$("#recaptcha input[name=recaptcha_challenge_field]"),i=$("#recaptcha input[name=recaptcha_response_field]");return i.val()?"function"!=typeof this.captchaSubmitCallback?(s.notify.error(t("Something weird happened. Please reload and try again."),{element:$("#recaptcha"),duration:4e3}),void 0):(this.el.captchaSubmit.attr("disabled",!0),this.captchaSubmitCallback({challenge:n.val(),response:i.val()}),void 0):(s.notify.error(t("Please fill in the captcha"),{element:$("#recaptcha"),duration:4e3}),void 0)},serviceData:function(e,t){var n=s.everyauth[e];return n&&"undefined"!=typeof n||(s.raven&&s.raven.started&&s.raven.Raven.captureMessage("auth.js:263. auth not defined? Service: "+JSON.stringify(e)+". s.everyauth: "+JSON.stringify(s.everyauth)+". s.ea : "+JSON.stringify(s.ea)),s.everyauth=s.ea&&s.utils.parseJSON(s.ea)||{},n=s.everyauth[e],n&&"undefined"!=typeof n)?{token:n.accessToken,secret:n.accessTokenSecret,service:e,service_userid:n.user.id,username:n.user.screen_name||n.user.username||n.user.id||n.user.email||(n.user.firstName?n.user.firstName+" "+n.user.lastName:void 0),name:n.user.name||n.user.full_name||(n.user.firstName?n.user.firstName+" "+n.user.lastName:void 0),email:n.user.email,avatar:n.user.profile_picture||n.user.photo,bio:n.user.description||n.user.bio,location:"object"==typeof n.user.location?n.user.location.name:n.user.location,website:n.user.url||(n.user.website?n.user.website.split("\n")[0]:void 0),captcha:t&&JSON.stringify(t)}:(s.raven&&s.raven.started&&s.raven.Raven.captureMessage("auth.js:269. auth still not defined? Service: "+JSON.stringify(e)+". s.everyauth: "+JSON.stringify(s.everyauth)),{})},serviceLogin:function(e,t,n){var i=this,r=this.el.loginStay.attr("checked"),n=n||function(){};if(s.everyauth[e]&&s.everyauth[e].accessToken){var o="/auth/"+e;s.api.request("POST",o,i.serviceData(e,t),{},function(t,o){if(t)t.error&&"no_identity"==t.error.type?i.el.signup.length>0?i.serviceSignup(e):window.location.href=s.base_url+"/signup?next="+i.next:(i.validationError(t.error,i.el.login),i.logout()),n(t.error);else{i.clearValidationError(i.el.login);var a=o.content;i.setUser(a),i.setUserCookie(r),i.el.loginUsername.val(""),i.el.loginPassword.val(""),i.el.loginSubmit.removeAttr("disabled"),i.popup&&window.opener?i.close():window.location.href=decodeURIComponent(i.next),n()}})}else this.serviceAuth(e)},serviceConnect:function(e,t){var n=this;analytics.track("registration",{event:"auth-serviceConnect",service:e}),$.oauthpopup({path:"/auth/"+e,callback:function(){return s.everyauth=s.utils.parseJSON(s.ea),n.addIdentity(e,t)}})},serviceReconnect:function(e,t){var n=this;$.oauthpopup({path:"/auth/"+e,callback:function(){s.everyauth=s.utils.parseJSON(s.ea),s.everyauth[e]&&s.everyauth[e].accessToken?t(s.everyauth[e]):n.validationError({message:"Log in to "+e+" denied."},n.el.login)}})},serviceDisconnect:function(e,t){this.removeIdentity(e,t)},addIdentity:function(e,n,i){var r=this;"function"!=typeof n||i||(i=n,n=null);var o=this.serviceData(e);n&&(o.options=JSON.stringify(n)),o._token=this.user._token;var a="/users/"+s.auth.user.username+"/identities/add";s.api.request("POST",a,o,{},function(n,o){if(n){var a=n.error;if("duplicate_identity"==a.type&&a.message){msg=a.message;var l=s.utils.lastWord(msg);if("user"!==l){var u='
'+l+" ";msg=msg.replace(l,u)}}else msg="Failed to connect "+e+" account.";return s.notify.error(t(msg),{element:"#content",slideSpeed:200,duration:15e3})}r.user.identities=r.user.identities||{},r.user.identities[e]=o.content.identity,i&&i(o)})},removeIdentity:function(e,n){var i="/users/"+s.auth.user.username+"/identities/remove";s.api.request("POST",i,{identity:JSON.stringify({service:e})},{},function(i,r){i?n(i):(s.notify.success(t("Successfully unlinked __service__ account",{service:e}),{element:"#content",slideSpeed:200,duration:3e3}),n(r))})},showSignup:function(){var e=this;e.el.signup.parent().find(".buttons, .or").show(),s.everyauth.twitter&&s.everyauth.twitter.user?(e.el.signup.parent().find(".buttons, .or").hide(),e.el.signup.find(".twitter-user").remove(),e.el.signup.prepend(s.templates.render("everyauth/_twitter_user",{user:s.everyauth.twitter.user})),e.el.signupUsername.val(s.everyauth.twitter.user.screen_name),e.el.follow_storify.removeClass("hidden"),e.el.signupEmail.focus()):s.everyauth.facebook&&s.everyauth.facebook.user&&(e.el.signup.parent().find(".buttons, .or").hide(),e.el.signup.find(".facebook-user").remove(),e.el.signup.prepend(s.templates.render("everyauth/_facebook_user",{user:s.everyauth.facebook.user})),e.el.signupUsername.val(s.everyauth.facebook.user.username),e.el.signupEmail.val(s.everyauth.facebook.user.email),s.everyauth.facebook.user.username?e.el.signupPassword.focus():e.el.signupUsername.focus()),setTimeout(function(){s.notify.success(t("Your Storify account is almost ready!"),{element:e.el.signup.parent(),duration:4e3})},1e3)},showLogin:function(e){this.loginCallback=e},loginPopup:function(e){var t=this,n=400,i=480,r=screen.width/2-n/2,o=screen.height/2-i/2;$.oauthpopup({windowName:"Login",windowOptions:"location=0,status=0,width="+n+",height="+i+",top="+o+",left="+r,path:"/login?popup=true",callback:function(n){return n?e(n):($.getJSON("/currentUser",function(i){return i.error?e(i.error):(t.setUser(i),s.nav&&s.nav.updateUser(),e(n,i),void 0)}),void 0)}})},signupSubmit:function(e){e.preventDefault();for(var n=$("#signup form:first").find("input"),i=0;i
'+e+" ")}),n.find("input.error:first").select(),e.message="Fix any errors with the fields below"),s.notify.error(t(e.message),{element:$("body"),duration:4e3}),void 0):s.notify.error(t("Something wrong happened, please try again."),{element:$("body"),duration:4e3})},addNextParam:function(){var e=this;$("a.next").each(function(t,n){var i=$(n).attr("href");$(n).attr("href",i+"?next="+e.next)})},displayFriends:function(e){var n={},i=this;if(!e||"undefined"==typeof e)return s.raven&&s.raven.started&&s.raven.Raven.captureMessage("auth.js:819. No service? : "+JSON.stringify(e)),void 0;i.el.usersList.empty(),i.el.usersList.append(''+t("Your account is not connected to ")+o+".
")}else{i.el.usersList.find(".loading").remove();var a=r.content.friends;if(a&&a.length>0)for(var l=0;l