Ajax.Request.prototype.abort=function(){this.transport.onreadystatechange=Prototype.emptyFunction;this.transport.abort();Ajax.activeRequestCount--};FACEBOOK_PERMISSIONS=["offline_access","publish_stream"];Ajax.Responders.register({onComplete:function(request){if(request.transport.status!=200){try{if(!request.transport.responseText.isJSON()){if("silent" in request.options){return}fspring.JSONFailure(request.transport)}else{if("onStatFail" in request.options){request.options.onStatFail(fspring.parseJSON(request.transport)||$H({}),request)}else{if(!("silent" in request.options)){fspring.ajaxFailure(request.transport)}}}}catch(e){error(e)}try{if("resetState" in request.options){request.options.resetState(fspring.parseJSON(request.transport)||$H({}),request)}}catch(e){error(e)}}else{if(request.transport.status==200){if(!request.transport.responseText.isJSON()){if("silent" in request.options){return}fspring.JSONFailure(request.transport)}else{try{var result=fspring.parseJSON(request.transport)||$H({});if(request.getHeader("Redirect-Url")&&("onRedirect" in request.options)){request.options.onRedirect(request.getHeader("Redirect-Url"),request)}else{if(result.get("stat")=="fail"&&("onStatFail" in request.options)){request.options.onStatFail(result,request)}else{if(("onStatOK" in request.options)){request.options.onStatOK(result,request)}}}}catch(e){error(e)}}try{if("resetState" in request.options){request.options.resetState(fspring.parseJSON(request.transport)||$H({}),request)}}catch(e){error(e)}}}}});Object.extend(Element.Methods,{insertArrayOfElements:function(element,obj){var _obj={};if(obj instanceof Array){var elementArray=obj;var position="bottom"}else{for(var position in obj){var elementArray=obj[position]}}elementArray.each(function(e){_obj[position]=e;element.insert(_obj)})}});Element.addMethods();var fspring=new (Class.create({initialize:function(){},init:function(base_url_cdn){var bustCache="hellyeah";var base=$$("base");this.baseURL=base.length?base[0].href:"";this.base_url_cdn=base_url_cdn;this.loggedIn=$(document.body).hasAttribute("loggedin");this._debug=(typeof _debug=="undefined"?false:true);this.signupLightbox=null;this.loginLightbox=null;this.passwordLightbox=null;this.usernameLightbox=null;this.sign_up_header_link=$("sign_up_header_link");this.login_header_link=$("login_header_link");this.recaptcha_elements=$("recaptcha_widget_s","recaptcha_widget_p","recaptcha_widget");var image=new Image(16,16);image.src=this.baseURL+"images/indicator.gif";this.indicator_helper=image;this.askTextarea=null;this.reAnswerLightbox=null;this.reAskLightbox=null;this.verifyEmailLightbox=null;this.popOverSuccess=new PopoverNotifier("success");this.popOverLoading=new PopoverNotifier("loading");this.friendsList=null;this.email_not_verified=$(document.body).hasClassName("email_not_verified")||null;this.logged_in=document.body.readAttribute("loggedin");this.urlParams=$H({});(function(){var e,d=function(s){return decodeURIComponent(s.replace(/\+/g," "))},q=window.location.search.substring(1),r=/([^&=]+)=?([^&]*)/g;while(e=r.exec(q)){fspring.urlParams.set(d(e[1]),d(e[2]))}})();if($("photo_removeLink")){$("photo_removeLink").observe("click",this.removeStreamPhoto.bind(this))}log("init:done")},pageInit:function(){log("pageinit:original:done")},pageInitNamespaceObjects:function(){log("initing namespaces..");for(var i=0;i<this._namespace_objects.length;i++){if("pageInit" in this._namespace_objects[i]){log("Initing fspring."+this._namespace_objects[i].__name__);this._namespace_objects[i].pageInit()}}},asyncScript:function(src){var script=document.createElement("script");script.type="text/javascript";script.async=true;script.src=src;var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(script,s)},blockingScript:function(src){var script=document.createElement("script");script.type="text/javascript";script.src=src;var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(script,s)},trackEvent:function(){var eventArray=[];$A(arguments).each(function(item){this.push(item)}.bind(eventArray));if(eventArray.length>0){log("Tracking event: ",eventArray);_gaq.push(["_trackEvent"].concat(eventArray))}},setUpLoginOrSignup:function(){this.login_with_facebook_link=$("login_with_facebook");this.signupForm=$("signupForm");this.loginForm=$("loginForm");this.username=$("input_username");this.email_address=$("input_email_address");this.gender=$("input_gender");this.full_name=$("input_full_name");this.password=$("input_password");this.signup_with_facebook_link=$("signup_with_facebook");this.is_fb_connect=$("is_fb_connect");this.signup_continue=$("signup_continue");this.login_form_submit=$("login_form_submit");this.validate_ajax_request=null;this.birthday_month=this.signupForm.select("select[name=birthday_Month]")[0];if(fspring.Feature.hasAccess("birthyear_textfield")){this.birthday_year=$("birthday_year");this.textFieldHelper(this.birthday_year)}else{this.birthday_year=this.signupForm.select("select[name=birthday_Year]")[0]}this.birthday_day=this.signupForm.select("select[name=birthday_Day]")[0]},initiateLogin:function(event_category,login_header,only_login){if(login_header||(login_header="Log in to Formspring")){$("login_modal_window").firstDescendant().firstDescendant().update("<span>"+login_header+"</span>")}if(this.loginLightbox){this.loginForm.enable();this.loginLightbox.showBox();if(first_input=Form.findFirstElement(this.loginForm)){first_input.focus()}return}this.loginLightbox=new Lightbox.base("login_modal_window");if(only_login){this.loginLightbox.element.addClassName("only_login")}this.setUpLoginOrSignup();Event.observe(this.login_with_facebook_link,"click",function(event){event.stop();this.loginWithFacebook()}.bind(this));Event.observe(this.loginForm,"submit",this.onLoginFormSubmit.bind(this));Event.observe($("password_reset_link"),"click",this.initiatePasswordReset.bind(this));Event.observe($("forgot_username_link"),"click",this.initiateForgotUsername.bind(this));if(first_input=Form.findFirstElement(this.loginForm)){first_input.focus()}_gaq.push(["_trackEvent",event_category,"LoginPrompt"])},initiatePasswordReset:function(event){if(event){event.stop()}if(this.passwordLightbox){this.passwordLightbox.showBox();return false}this.passwordLightbox=new Lightbox.base("password_modal_window");var form=$("password_reset_form");Event.observe(form,"submit",this.resetPassword.bind(this));form.focusFirstElement()},resetPassword:function(event){event.stop();var form=event.target;var submit=form.select("input[type=submit]")[0];var input_password_username=$("input_password_username");if(span=input_password_username.next("span.error")){span.remove()}submit.disable();submit.up().addClassName("loading");new Ajax.Request(this.baseURL+"account/resetPassword?ajax=1",{parameters:form.serialize(),onStatOK:function(response){form.hide().insert({after:new Element("div",{"class":"success"}).update("A message was sent to your email address with instructions on creating a new password.")})},onStatFail:(function(result){input_password_username.insert({after:new Element("span",{"class":"error"}).update(result.get("error"))});form.reset();submit.up().removeClassName("loading");submit.enable()})})},initiateForgotUsername:function(event){if(event){event.stop()}if(this.usernameLightbox){this.usernameLightbox.showBox();return false}this.usernameLightbox=new Lightbox.base("username_modal_window");var form=$("forgot_username_form");Event.observe(form,"submit",this.forgotUsername.bind(this));form.focusFirstElement()},forgotUsername:function(event){event.stop();var form=event.target;var submit=form.select("input[type=submit]")[0];var input=$("input_forgot_email");if(span=input.next("span.error")){span.remove()}if(!input.getValue().match(/\w/)||!input.getValue().match(/^\s*[^\,\s]+\@[\w\-\.]+\.\w+\s*$/)){input.insert({after:new Element("span",{"class":"error"}).update("Please enter a valid email address")});return false}form.disable();submit.up().addClassName("loading");new Ajax.Request(this.baseURL+"account/forgotUsername",{parameters:{ajax:1,email:input.getValue()},onStatOK:function(response){form.hide().insert({after:new Element("div",{"class":"success"}).update("A message was sent to your email address with your username.")})},onStatFail:function(result){input.insert({after:new Element("span",{"class":"error"}).update(result.get("error"))});submit.up().removeClassName("loading");form.enable();input.focus()}})},toggleMobileLogin:function(event){$("login_with_username","login_with_phone_number").invoke("toggle")},onLoginFormSubmit:function(event){event.stop();this.login()},initiateSignup:function(event_category,signup_header){if(signup_header||(signup_header="Sign up")){$("signup_modal_window").firstDescendant().firstDescendant().update("<span>"+signup_header+"</span>")}if(this.signupLightbox){this.signupForm.enable();this.signupLightbox.showBox();if(Form.findFirstElement(this.signupForm)){Form.focusFirstElement(this.signupForm)}return}this.signupLightbox=new Lightbox.base("signup_modal_window",{afterShow:function(){fspring.hideRecaptchaWidgets();if(fspring.captcha_enabled){fspring.showRecaptcha("recaptcha_widget_s")}},afterHide:function(){}});this.setUpLoginOrSignup();Event.observe(this.signup_with_facebook_link,"click",function(event){event.stop();this.loginWithFacebook(true)}.bind(this));Event.observe(this.username,"keyup",function(event){if(event.keyCode!=13){this.validateSignup(null,"username")}}.bind(this));Event.observe(this.password,"blur",function(event){if(event.keyCode!=13){this.validateSignup(null,"password")}}.bind(this));[this.password,this.email_address].each(function(input){Event.observe(input,"blur",function(){this.validateInput(input)}.bind(this))}.bind(this));Event.observe(this.signupForm,"submit",this.submitSignUp.bind(this));if(first_input=Form.findFirstElement(this.signupForm)){first_input.focus()}if(event_category){_gaq.push(["_trackEvent",event_category,"SignupPrompt"])}_gaq.push(["_trackPageview","/signup/step1.html"])},usePasswordInsteadOfFB:function(link){FB.logout();link.up().up().removeClassName("facebook");this.signup_with_facebook_link.up().removeClassName("loading").show();this.password.focus();this.is_fb_connect.setValue(false)},facebookConnected:function(signup,with_popover,silent){if(with_popover){this.password.up().addClassName("facebook");this.login_with_facebook_link.up().removeClassName("loading");this.trackEvent("Site","FBPopoverConnect")}else{if(!silent){fspring.popOverLoading.show();this.trackEvent("Site","FBConnect")}}new Ajax.Request(this.baseURL+"account/linkFacebookSignup?ajax=1",{onStatOK:function(res){if(silent){fspring.popOverLoading.cancel();return}this.initiateSignup();if(!with_popover){this.password.up().addClassName("facebook");this.login_with_facebook_link.up().removeClassName("loading")}this.signup_with_facebook_link.up().hide();this.is_fb_connect.setValue(true);if(email=res.get("email")){this.email_address.setValue(email);this.validateInput(this.email_address)}if(username=res.get("username")){this.username.setValue(username);this.validateSignup()}if(res.get("birthday")){var birthday=res.get("birthday").split("/");var month=birthday[0];var year=birthday[2];var day=birthday[1];this.birthday_month.setValue(month);this.birthday_year.setValue(year);this.birthday_day.setValue(day);this.checkBirthdate()}}.bind(this),onStatFail:function(res,request){if(res.get("stat")=="fail"&&res.get("error")=="account_exists"){this.postLoginCallback("login");request.options.resetState=function(){}}else{if(res.get("error")){alert("There was an error processing the request: "+res.get("error"))}else{alert("Unknown error occured. Please try again.")}}}.bind(this),resetState:function(response){if(with_popover){if(signup){this.signup_with_facebook_link.up().hide()}[this.loginForm,this.signupForm].invoke("enable")}}.bind(this)})},login:function(){var params=this.loginForm.serialize(true);Object.extend(params,{login:true});this.loginForm.disable();this.login_form_submit.up().addClassName("loading");new Ajax.Request(this.baseURL+"account/login",{parameters:params,onSuccess:function(response){var res=this.parseJSON(response);if(stat=res.get("stat")){var next="next";if(next in params){window.location.href=fspring.baseURL+params.next;return}this.postLoginCallback("login")}}.bind(this),onStatFail:function(response){alert(response.get("error"));this.loginForm.enable().reset();Form.focusFirstElement(this.loginForm);this.login_form_submit.up().removeClassName("loading")}.bind(this)})},doFBLogin:function(signup,with_popover){var perms=FACEBOOK_PERMISSIONS;if(signup){perms.push("email");perms.push("publish_actions")}else{if(with_popover){perms=[]}}if(!window.FB){alert("It appears that Facebook Connect is down. Please try again later or log in with your username and password.");return}FB.login(function(response){log(response);if(response.authResponse){this.facebookConnected(signup,with_popover)}else{if(response.status==="connected"){FB.init({appId:fb_app_id,status:true,cookie:true,xfbml:true,oauth:true});var timeout=window.setInterval(function(){if(FB.getAuthResponse()!==null){window.clearInterval(timeout);fspring.facebookConnected(signup,with_popover)}else{error("no facebook cookie set")}},500)}else{this.resetForms(signup)}}}.bind(this),{scope:perms.join(",")})},loginWithFacebook:function(signup){if(signup){this.signup_with_facebook_link.up().addClassName("loading")}else{this.login_with_facebook_link.up().addClassName("loading")}if(signup){this.signupForm.disable()}else{this.loginForm.disable()}this.doFBLogin(signup,true)},resetForms:function(signup){this.signup_with_facebook_link.up().removeClassName("loading");this.login_with_facebook_link.up().removeClassName("loading");[this.loginForm,this.signupForm].invoke("enable")},validationError:function(input,error){if(span=input.next("span")){span.removeClassName("success").addClassName("error").update(error)}else{input.insert({after:new Element("span",{"class":"error"}).update(error)})}},validationOK:function(input){if(span=input.next("span")){span.removeClassName("error").addClassName("success").update("")}else{input.insert({after:new Element("span",{"class":"success"}).update(" ")})}},validateInput:function(input){var error_span=input.next("span.error");if(error_span&&input.readAttribute("id")!="input_username"){error_span.remove()}var success_span=input.next("span.success");if(success_span&&input.readAttribute("id")!="input_username"){success_span.remove()}switch(input.readAttribute("id")){case"input_username":if(!input.getValue().match(/\w/)){if(error_span){error_span.remove()}input.insert({after:new Element("span",{"class":"error"}).update("Pick a username so friends can find you.")});return 1}break;case"input_full_name":if(!input.getValue().match(/\w/)){input.insert({after:new Element("span",{"class":"error"}).update("What's your name?")});return 1}break;case"input_password":if(!input.getValue().match(/\w/)){input.insert({after:new Element("span",{"class":"error"}).update("Pick a password. It'll be our little secret.")});return 1}break;case"input_password2":if(!input.getValue().match(/\w/)){input.insert({after:new Element("span",{"class":"error"}).update("Re-type your password.")});return 1}else{if(input.getValue()!=this.password.getValue()){input.insert({after:new Element("span",{"class":"error"}).update("Passwords must match.")});return 1}}break;case"input_email_address":if(!input.getValue().match(/\w/)){input.insert({after:new Element("span",{"class":"error"}).update("Don't worry. We won't spam you, bro.")});return 1}else{if(!input.getValue().match(/^\s*[^\,\s]+\@[\w\-\.]+\.\w+\s*$/)){input.insert({after:new Element("span",{"class":"error"}).update("Please use a real email address.")});return 1}}break;case"input_gender":if(!input.getValue()){input.insert({after:new Element("span",{"class":"error"}).update("Gender is required. Pretty please?")});return 1}break;case"input_website":if(input.getValue()){website=input.getValue();if(!website.match(/^https?:\/\//)){website="http://"+website}var v=new RegExp();v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&?/.=~#!]+$");if(!v.test(website)){this.validationError(input,"Enter a real website");return 1}else{input.setValue(website)}}else{return 0}break}if(input.readAttribute("id")!="input_username"&&!error_span){input.insert({after:new Element("span",{"class":"success"}).update(" ")})}return 0},validateSignup:function(callback,input){if(this.validate_ajax_request){this.validate_ajax_request.abort()}if(success_span=this.username.next("span.success")){success_span.remove()}this.username.addClassName("loading");this.validate_ajax_request=new Ajax.Request(this.baseURL+"account/validate",{parameters:this.signupForm.serialize(),onComplete:function(){this.username.removeClassName("loading")}.bind(this),onSuccess:callback||function(request){var res=this.parseJSON(request);if(username=res.get("username")){if(error_span=this.username.next("span.error")){error_span.update(username)}else{var span=new Element("span",{"class":"error"}).update(username);new Insertion.After(this.username,span)}}else{if(error_span=this.username.next("span.error")){error_span.remove()}var span=new Element("span",{"class":"success"}).update(" ");new Insertion.After(this.username,span)}if(rate_limit=res.get("rate_limit")){this.rate_limited=true}if(this.is_fb_connect.getValue()=="false"||!this.is_fb_connect.getValue()){if(message=res.get("password")){if(input==="password"){this.validationError(this.password,message)}}else{this.validationOK(this.password,message)}}}.bind(this)})},submitSignUp:function(event){event.stop();var errors=0;e=this.checkBirthdate();if(e==-1){return}else{errors+=e}errors+=this.validateInput(this.username);if(this.is_fb_connect.getValue()=="false"||!this.is_fb_connect.getValue()){errors+=this.validateInput(this.password)}errors+=this.validateInput(this.email_address);if(errors>0){return false}if(this.rate_limited){var list_items=$("signup").select("ul li");list_items.each(function(obj,index){if(index<list_items.length-2){obj.hide()}});$("signup").select("span.note")[0].hide();this.hideRecaptchaWidgets();this.showRecaptcha("recaptcha_widget_s");this.rate_limited=false;this.captcha_enabled=true;return false}var params=this.signupForm.serialize();this.signupForm.disable();this.signup_with_facebook_link.hide();this.signup_continue.up().addClassName("loading");new Ajax.Request(this.baseURL+"account/signup?ajax=1",{parameters:params,onStatOK:function(response){_gaq.push(["_trackPageview","/signup/complete.html"]);this.postLoginCallback("signup")}.bind(this),onStatFail:function(result){if(result.get("error")=="empty_captcha"||result.get("error")=="invalid_captcha"){$("recaptcha_response_field").addClassName("highlightRed").focus();alert("Invalid captcha! Try again.");this.showRecaptcha("recaptcha_widget_s")}else{if(error=result.get("error")){alert(error)}else{alert("Try again.")}}this.signupForm.enable();this.signup_with_facebook_link.show();this.signup_continue.up().removeClassName("loading")}.bind(this)})},showRecaptcha:function(element){$("signup").select("h1")[0].update("<span>Prove you are human</span>");if(!window.Recaptcha){var my_lab_js=$LAB.script(["http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"]).wait(function(){fspring.showRecaptcha(element)})}else{var recaptcha_widget=$(element);if(recaptcha_widget){recaptcha_widget.update($("captcha_template").innerHTML);Recaptcha.create("6Lc12QoAAAAAANs8CPQ77QL2pa8LAH67X3RbkUzP","recaptcha_div",{theme:"custom",callback:Recaptcha.focus_response_field,custom_theme_widget:element});recaptcha_widget.show()}}},hideRecaptchaWidgets:function(){this.recaptcha_elements.each(function(item){if(item){item.update("").hide()}})},postLoginCallback:function(type){switch(type){case"login":window.location.href=window.location.href.replace((window.location.hash?window.location.hash:"#"),"");break;case"signup":window.location.href=this.baseURL+"signup/?next="+window.location.href.replace(this.baseURL,"").replace((window.location.hash?window.location.hash:"#"),"");break}},checkBirthdate:function(){var year=this.birthday_year.getValue();var month=this.birthday_month.getValue();var day=this.birthday_day.getValue();error=false;if(!year||!month||!day){error=true}if(year){y=parseInt(year);today=new Date();log(y);if(!y||y<(today.getFullYear()-100)||y>today.getFullYear()){error=true}}if(error){if(span=this.birthday_year.next("span.error")){span.remove()}var span=new Element("span",{"class":"error"}).update("We love birthdays, when's yours?");new Insertion.After(this.birthday_year,span);return 1}var msPerDay=86400000;try{var birthday=new Date(parseFloat(year),parseFloat(month)-1,parseFloat(day))}catch(e){error(e);return}if(span=this.birthday_year.next("span.success")){span.remove()}if(((new Date()).valueOf()-birthday.valueOf())+1<410240038000){this.birthday_year.up("ul").hide().next().show();Set_Cookie("appoc_note",true,null,"/",".formspring.me");this.signupLightbox.showBox();_gaq.push(["_setCustomVar",5,"Birth_Year",(fspring.Feature.hasAccess("birthyear_textfield")?"textfield":"select")],1);this.trackEvent("Site","AppocError",year);return -1}else{if(span=this.birthday_year.next("span.error")){span.remove()}var span=new Element("span",{"class":"success"}).update(" ");new Insertion.After(this.birthday_year,span);return 0}},textFieldHelper:function(field){var defaultTxt=function(){return field.readAttribute("default")||field.readAttribute("placeholder")};if(field.placeholder&&"placeholder" in document.createElement(field.tagName)){return}if(!field.present()&&!defaultTxt){return}if(!defaultTxt){field.writeAttribute("default",field.getValue())}else{if(!field.present()){field.setValue(defaultTxt());field.addClassName("empty")}else{field.removeClassName("empty")}}Event.observe(field,"focus",function(event){var field=event.target;field.addClassName("focused").removeClassName("empty");if(field.getValue()==defaultTxt()){field.setValue("")}});Event.observe(field,"blur",function(event){var field=event.target;field.removeClassName("focused");if(!field.present()){field.addClassName("empty").setValue(defaultTxt())}})},ask:function(username,token,successCallback){var parameters=$H(Form.serialize("askForm",true)),photo_path=parameters.get("photo_path");if(!$F("question").match(/\S/)&&!photo_path){$("question").addClassName("highlightRed").focus();return}if(!token){if($("recaptcha_challenge_field")&&$("recaptcha_widget").childElements().length!=0){var captcha_enabled=true;if(!Recaptcha.get_response().match(/\S/)){$("recaptcha_response_field").addClassName("highlightRed").focus();return}}else{this.recaptcha_elements.each(function(item){if(item){item.update("").hide()}});if($("recaptcha_widget").childElements().length==0){$("recaptcha_widget").update($("captcha_template").innerHTML)}if($F("question").match(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)){Recaptcha.create("6Lc12QoAAAAAANs8CPQ77QL2pa8LAH67X3RbkUzP","recaptcha_div",{theme:"custom",callback:Recaptcha.focus_response_field,custom_theme_widget:"recaptcha_widget"});$("recaptcha_widget").show();return}}$("recaptcha_response_field").removeClassName("highlightRed")}$("question").removeClassName("highlightRed");parameters.set("ajax",1);if(parameters.get("login_required")){amp.publish("site.signup",null,{context:"Profile-Ask",header:"Signup to send this question",callback:this.postLoginCallbackOverwrite.bind(this)});return}$("sendButton").disabled=true;$("sendIndicator").show();$("askForm").addClassName("disabled").disable();new Ajax.Request(this.baseURL+"profile/ask/"+username,{parameters:parameters,onStatOK:function(response){_gaq.push(["_trackEvent","Profile","Ask",parameters.get("question"),1]);if(typeof successCallback=="function"){successCallback(response)}else{$("askForm").hide();$("success").show()}}.bind(this),onStatFail:function(request,response){if(request.get("error")=="invalid_captcha"){$("recaptcha_response_field").addClassName("highlightRed").focus();alert("Invalid captcha! Try again.");Recaptcha.reload()}else{if(request.get("error")=="empty_captcha"){$("recaptcha_response_field").addClassName("highlightRed").focus()}else{alert(request.get("error"))}}},onComplete:function(){$("sendButton").disabled=false;$("sendIndicator").hide();$("askForm").enable()}})},postLoginCallbackOverwrite:function(token_or_type,next,type){type=next&&type||token_or_type;if(!$("question").present()){return}if($("question").getValue().indexOf($("question").readAttribute("default"))==0||!$("question").getValue().match(/\S/)){return}if(type){$("login_required_ask").setValue(type)}$("askForm").submit()},requestFollow:function(username,link,event_category,name){if(!this.loggedIn){this.initiateLogin("Log in to follow");return}link=$(link);link.writeAttribute("disabled",true).writeAttribute("disabletip",true);$$("div.tooltip").invoke("hide");if(link.hasClassName("in_smiles_follow")){in_smiles_follow=$$("a.in_smiles_follow."+username);in_smiles_follow.invoke("hide");link.show()}new Ajax.Request(this.baseURL+"follow/add/"+username,{parameters:{ajax:1},onStatOK:function(request){if(link.hasClassName("in_smiles_follow")){in_smiles_follow.each(function(link){link.addClassName("unfollow button_red_sm").removeClassName("follow button_green_sm").update('<span class="following">requested</span><span class="unfollowing">- cancel request</span>').writeAttribute("disabled",false).show()})}else{link.addClassName("unfollow button_red_sm").removeClassName("follow button_green_sm").update('<span class="following">requested</span><span class="unfollowing">- cancel request</span>').writeAttribute("disabled",false)}link.onclick=function(){fspring.removeFollowRequest(username,link,event_category,name)};Effect.Appear(link);_gaq.push(["_trackEvent",event_category,"Follow"])},resetState:function(request){link.writeAttribute("disabled",false).writeAttribute("disabletip",false)}.bind(this)})},follow:function(username,link,event_category){link=$(link);link.writeAttribute("disabled",true).writeAttribute("disabletip",true);$$("div.tooltip").invoke("hide");new Ajax.Request(this.baseURL+"follow/add/"+username,{parameters:{ajax:1},onStatOK:function(request){var text=(request.get("protected"))?'<span class="following">requested</span><span class="unfollowing">- cancel request</span>':'<span class="following">following</span><span class="unfollowing">- unfollow</span>';link_2=$$(".if-unfollowed").first();if(link_2){link_2.remove();$$(".follow").each(function(link){link.addClassName("unfollow button_red_sm").removeClassName("follow button_green_sm").update(text).writeAttribute("disabled",false)})}else{link.addClassName("unfollow button_red_sm").removeClassName("follow button_green_sm").update(text).writeAttribute("disabled",false)}link.onclick=function(){fspring.unfollow(username,link,event_category)};Effect.Appear(link);_gaq.push(["_trackEvent",event_category,"Follow"])},resetState:function(request){link.writeAttribute("disabled",false).writeAttribute("disabletip",false)}.bind(this)})},removeFollowRequest:function(username,link,event_category,name){link=$(link);link.writeAttribute("disabled",true).writeAttribute("disabletip",false);$$("div.tooltip").invoke("hide");if(link.hasClassName("in_smiles_follow")){in_smiles_follow=$$("a.in_smiles_follow."+username);in_smiles_follow.invoke("hide");link.show()}new Ajax.Request(this.baseURL+"follow/remove/"+username,{parameters:{ajax:1},onSuccess:function(request){if(link.hasClassName("in_smiles_follow")){in_smiles_follow.each(function(link){link.addClassName("follow button_green_sm").removeClassName("unfollow button_red_sm").update("+ request to follow").writeAttribute("disabled",false).show()})}else{link.addClassName("follow button_green_sm").removeClassName("unfollow button_red_sm").update("+ request to follow").writeAttribute("disabled",false)}link.onclick=function(){fspring.requestFollow(username,link,event_category,name)};Effect.Appear(link);_gaq.push(["_trackEvent",event_category,"Unfollow"])},onFailure:function(request){ajaxFailure(request);link.enable()}})},unfollow:function(username,link,event_category){link=$(link);link.writeAttribute("disabled",true).writeAttribute("disabletip",false);$$("div.tooltip").invoke("hide");new Ajax.Request(this.baseURL+"follow/remove/"+username,{parameters:{ajax:1},onSuccess:function(request){link.addClassName("follow button_green_sm").removeClassName("unfollow button_red_sm").update("+ follow").writeAttribute("disabled",false);link.onclick=function(){fspring.follow(username,link,event_category)};Effect.Appear(link);_gaq.push(["_trackEvent",event_category,"Unfollow"])},onFailure:function(request){ajaxFailure(request);link.enable()}})},unblock:function(username,link){link=$(link);link.writeAttribute("disabled",true).writeAttribute("disabletip",false);var li=link.up("li");var indicator=li.down();indicator.show();new Ajax.Request(this.baseURL+"account/unblock/"+username,{parameters:{ajax:1},onStatOK:function(request){indicator.hide();new Effect.Morph(li,{style:Animation.fadeSlideUp,duration:0.5,afterFinish:function(){var ol=li.up();li.remove();var l=ol.childElements();if(l==0){ol.up().hide()}}})},onFailure:function(request){link.writeAttribute("disabled",false);indicator.hide()}})},askAgain:function(){$("question").value="";$("success").hide();$("askForm").show();$("question").focus();if($("recaptcha_challenge_field")){Recaptcha.destroy();$("recaptcha_widget").hide()}if(this.askTextarea){this.askTextarea.refresh()}},youtube:function(video,el){el.replace('<object type="application/x-shockwave-flash" style="width:'+el.getWidth()+"px; height:"+el.getHeight()+'px; margin:12px 0;" data="http://www.youtube.com/v/'+video+'&autoplay=1"><param name="wmode" value="transparent" /><param name="movie" value="http://www.youtube.com/v/'+video+'&autoplay=1" /></object>');return false},enableOrDisableReAskBtn:function(){var selected_following=this.reAskLightbox.friends_holder.select("li.follower.selected");var selected_services=this.reAskLightbox.friends_holder.select("li.service.selected");this.reAskLightbox.selected_services_holder.childElements().invoke("remove");if(selected_following.length>0||selected_services.length>0){if(selected_following.length>0){var l=selected_following.length}if(selected_services.length>0){var holder=this.reAskLightbox.selected_services_holder;selected_services.each(function(selected_service){var service=selected_service.readAttribute("rel");holder.insert((new Element("span",{"class":service+"16"})).update(service))})}this.reAskLightbox.ask_btn.enable();this.reAskLightbox.ask_btn.setValue("Ask"+(l>0?" "+l.toString():"")+" Friend"+(typeof l=="undefined"?"s":(l>1?"s":"")))}else{this.reAskLightbox.ask_btn.setValue("Ask Friends");this.reAskLightbox.ask_btn.disable()}},reAsk:function(li,question,anonymous,spam_me_requests,sent_type,callback){if(this.email_not_verified){this.showVerifyEmailPopup();return}var first=false,callback=callback||(function(){});this.popOverSuccess.cancel();new_box=false;if(!this.reAskLightbox){loadData=function(lightbox,li,sent_type){if(li&&sent_type==="forward"){end_point="sent/forward?ajax=1&question_id="+li.readAttribute("data-id")}else{if(li&&sent_type==="resend"){end_point="sent/copy_recipients?ajax=1&question_id="+li.readAttribute("data-id")}else{end_point="follow/people?ajax=1"}}new Ajax.Request(fspring.baseURL+end_point,{onStatOK:function(result){this.friends_holder.select("li.follower").invoke("remove");this.friends_holder.insert(result.get("content"));if(li&&sent_type==="forward"){this.friends_holder.addClassName("no_followers").select("li.service.ask_followers").invoke("removeClassName","selected").invoke("show");this.friends_holder.select("li.service[rel!=formspring]").invoke("addClassName","selected").invoke("show");this.element.select("div.radios").invoke("hide")}else{if(sent_type==="resend"){this.friends_holder.select("li.follower").invoke("addClassName","selected");if(result.get("services")&&result.get("services").length>0){services=result.get("services");this.friends_holder.select("li.service").filter(function(el){return !el.hasClassName("ask_followers")}).each(function(service){if(services.indexOf(service.readAttribute("rel"))<0){service.hide().removeClassName("selected")}else{service.show().addClassName("selected")}})}else{log("hiding all services");this.friends_holder.select("li.service").invoke("hide").invoke("removeClassName","selected")}if(result.get("followers")){this.friends_holder.select("li[rel=formspring]").invoke("show").invoke("addClassName","selected")}else{this.friends_holder.select("li[rel=formspring]").invoke("hide").invoke("removeClassName","selected")}}else{this.friends_holder.select("li.service").invoke("show").invoke("addClassName","selected")}}fspring.enableOrDisableReAskBtn();if(spam_me_requests){this.showSpamMe()}this.indicator_1.hide();this.div.show();this.showBox()}.bind(lightbox),onStatFail:function(result){if(result.get("error")=="no_followers"){if(this.friends_holder.childElements().length==0){this.indicator_1.hide();this.div.next().show()}else{this.indicator_1.hide();this.div.show();this.showBox()}}}.bind(lightbox)})};new_box=true;this.reAskLightbox=new Lightbox.base("re_ask",{invisible:true,afterInitialize:function(){this.indicator_1=this.element.down().down();this.div=this.indicator_1.next();this.form=this.element.select("form")[0];this.question=this.element.select("span[rel=question]")[0];this.textarea=Form.findFirstElement(this.form);this.indicator=this.element.select("span.loading")[0];this.question_input=this.element.select("input[rel=question_input]")[0];this.friends_holder=this.element.select("ol[rel=friends]")[0];this.ask_btn=this.element.select("input[rel=ask_btn]")[0];this.select_all_friends=$("select_all_friends");this.select_none_friends=$("select_none_friends");this.search_people=$("search_people");this.textarea=$("share_question_textarea");this.remainingCharacters=null;this.selected_services_holder=$("selected_services_holder");this.ev_link_input=this.element.select("input[name=ev_link_id]").first();this.parent_q_input=this.element.select("input[name=parent_id]").first();this.sent_q_input=this.element.select("input[name=question_id]").first();Tooltips.init(this.element.select(".tip"));fspring.textFieldHelper(this.search_people);Event.observe(this.search_people,"keyup",function(event){var text=event.target.getValue().toLowerCase();var regexp=new RegExp("(^"+text+")|("+text+")");this.friends_holder.childElements().each(function(li){if(regexp.test(li.readAttribute("rel"))){li.show().addClassName("shown")}else{li.hide().removeClassName("shown")}}.bind(this))}.bind(this));Event.observe(this.select_none_friends,"click",function(event){event.stop();if(this.element.hasClassName("loading")){return}var selected=this.friends_holder.select("li.selected.shown");selected.invoke("removeClassName","selected");fspring.enableOrDisableReAskBtn()}.bind(this));Event.observe(this.select_all_friends,"click",function(event){event.stop(0);if(this.element.hasClassName("loading")){return}this.friends_holder.select("li.shown.available").invoke("addClassName","selected");fspring.enableOrDisableReAskBtn()}.bind(this));Event.observe(this.form,"submit",function(event){fspring.onReAskSubmit.apply(this,[event,callback,sent_type])}.bind(this));Event.observe(this.friends_holder,"click",function(event){if(this.element.hasClassName("loading")){return}var target=$(event.target);if(target.nodeName.toLowerCase()=="li"){li=target}else{li=target.up("li")}if(li.hasClassName("unavailable")){return}li.toggleClassName("selected");fspring.enableOrDisableReAskBtn()}.bind(this));this.gotSpammed=false;this.showSpamMe=function(){this.gotSpammed=true;var spam_me=$("stream_announce").select("a.l").map(function(link){return link.readAttribute("rel")});this.friends_holder.select("li").each(function(li){var username=li.readAttribute("rel").split("|").first();if(spam_me.indexOf(username)>-1){li.addClassName("selected")}else{li.addClassName("hidden").removeClassName("selected").hide()}});fspring.enableOrDisableReAskBtn()}.bind(this)}});if(!li){first=true}}this.reAskLightbox.form.enable();if(this.reAskLightbox.question.up().next().hasClassName("button_link")){this.reAskLightbox.question.up().next().remove()}if(li&&sent_type!=="resend"){this.reAskLightbox.question.up().show();var question_h2=li.select("h1[rel=question], h2[rel=question], span[rel=question]")[0];this.reAskLightbox.element.removeClassName("loading").writeAttribute({rel:li.readAttribute("rel")});this.reAskLightbox.question_input.setValue(li.readAttribute("data-question"));this.reAskLightbox.textarea.hide().disable();if(this.reAskLightbox.remainingCharacters){this.reAskLightbox.remainingCharacters.hide()}this.reAskLightbox.question_input.enable();if(li&&sent_type==="forward"){this.reAskLightbox.question.update(li.readAttribute("data-question"));this.reAskLightbox.friends_holder.addClassName("no_followers").select("li.service.ask_followers").invoke("removeClassName","selected");this.reAskLightbox.sent_q_input.setValue(li.readAttribute("data-id"))}else{this.reAskLightbox.question.update(li.readAttribute("data-question"));this.reAskLightbox.parent_q_input.setValue(li.readAttribute("rel"));this.reAskLightbox.sent_q_input.setValue("")}if(question_h2.next()&&question_h2.next().hasClassName("button_link")){this.reAskLightbox.question.up().insert({after:question_h2.next().clone(true)});this.reAskLightbox.ev_link_input.setValue(question_h2.next().readAttribute("rel"))}else{this.reAskLightbox.ev_link_input.setValue("")}}else{this.reAskLightbox.sent_q_input.setValue("");if(question){this.reAskLightbox.textarea.setValue(question)}this.reAskLightbox.question.up().hide();if(this.reAskLightbox.remainingCharacters){this.reAskLightbox.remainingCharacters.show()}this.reAskLightbox.textarea.show().enable();this.reAskLightbox.question_input.disable();this.reAskLightbox.element.removeClassName("loading");this.reAskLightbox.parent_q_input.setValue("")}this.reAskLightbox.indicator.hide();this.reAskLightbox.friends_holder.select("li.follower.selected").invoke("removeClassName","selected");if(spam_me_requests){this.reAskLightbox.element.addClassName("spam_me");this.reAskLightbox.showSpamMe()}else{this.reAskLightbox.element.removeClassName("spam_me")}if(!spam_me_requests&&this.reAskLightbox.gotSpammed){this.reAskLightbox.friends_holder.select("li.follower.hidden").invoke("removeClassName","hidden").invoke("show");this.reAskLightbox.friends_holder.select("li.service.hidden").invoke("removeClassName","hidden").invoke("addClassName","selected").invoke("show");this.reAskLightbox.gotSpammed=false}this.reAskLightbox.friends_holder.up().scrollTop=0;fspring.popOverLoading.show();loadData(this.reAskLightbox,li,sent_type);if(!li||sent_type==="resend"){try{this.reAskLightbox.textarea.focus()}catch(e){}if(!this.reAskLightbox.remainingCharacters){new Widget.Textarea(this.reAskLightbox.textarea,{max_length:255});this.reAskLightbox.remainingCharacters=this.reAskLightbox.element.select("span.remainingCharacters")[0];try{this.reAskLightbox.textarea.focus()}catch(e){}}}if(sent_type==="resend"){this.reAskLightbox.friends_holder.addClassName("sentbox_resend");this.reAskLightbox.element.addClassName("sentbox_resend")}else{this.reAskLightbox.friends_holder.removeClassName("sentbox_resend");this.reAskLightbox.element.removeClassName("sentbox_resend")}this.enableOrDisableReAskBtn(0)},onReAskSubmit:function(event,callback,sent_type){event.stop();this.indicator.setStyle({display:"inline-block"});this.element.addClassName("loading");var params=this.form.serialize(true);this.form.disable();rel=this.element.readAttribute("rel");var selected_usernames=[];var selected_services=[];this.friends_holder.select("li.follower.selected").each(function(li){selected_usernames.push(li.readAttribute("rel").split("|")[0])});this.friends_holder.select("li.service.selected").each(function(li){selected_services.push(li.readAttribute("rel"))});params["to[]"]=selected_usernames;params["services[]"]=selected_services;delete params.search;var event_category=this.element.readAttribute("rel")?"Feed":"Home";var spammed=fspring.reAskLightbox.gotSpammed;if(sent_type==="forward"){end_point="follow/askMoreSubmit"}else{if(sent_type==="resend"){end_point="follow/askSentRecipientsSubmit"}else{end_point="follow/askSubmit"}}new Ajax.Request(fspring.baseURL+end_point+"?ajax=1",{parameters:params,onStatOK:function(result){if(this.element.hasClassName("loading")&&this.element.readAttribute("rel")==rel){this.textarea.setValue("");this.form.enable();this.indicator.hide();this.hideBox()}fspring.popOverSuccess.show("Your question has been posted!");if(spammed){fspring.trackEvent("Home","SpamAsk",params.question,selected_usernames.length,"")}else{if(selected_usernames.length){fspring.trackEvent(event_category,"Ask",params.question,selected_usernames.length,"")}}if(selected_services.indexOf("formspring")>-1){fspring.trackEvent(event_category,"AskFollowers",params.question)}if(selected_services.length){_gaq.push(["_trackEvent",event_category,"OutboxSend",params.question,selected_services.length])}callback({result:true,socrates_question_id:result.get("socrates_question_id")})}.bind(this),onStatFail:function(result){callback();this.form.enable();this.indicator.hide();this.element.removeClassName("loading");alert(result.get("error"))}.bind(this)})},reAnswer:function(li){this.popOverSuccess.cancel();if(this.popOverSuccessAnimation){this.popOverSuccessAnimation.cancel()}if(!this.reAnswerLightbox){this.reAnswerLightbox=new Lightbox.base("re_answer",{invisible:true,afterInitialize:function(){this.form=this.element.select("form")[0];this.question=this.element.select("h2[rel=question]")[0];this.textarea=Form.findFirstElement(this.form);this.indicator=this.element.select("span.loading")[0];this.question_input=this.element.select("input[rel=question_input]")[0];this.ev_link_input=this.element.select("input[name=ev_link_id]").first();this.parent_q_input=this.element.select("input[name=parent_id]").first();Event.observe(this.form,"submit",fspring.onReAnswerSubmit.bind(this))}})}var question_h2=li.select("h1[rel=question], h2[rel=question], span[rel=question]").first();if(this.reAnswerLightbox.question.next().hasClassName("button_link")){this.reAnswerLightbox.question.next().remove()}this.reAnswerLightbox.element.writeAttribute({rel:li.readAttribute("rel")});this.reAnswerLightbox.question.update(li.readAttribute("data-question"));this.reAnswerLightbox.question_input.setValue(li.readAttribute("data-question"));this.reAnswerLightbox.parent_q_input.setValue(li.readAttribute("rel"));if(question_h2.next()&&question_h2.next().hasClassName("button_link")){this.reAnswerLightbox.question.insert({after:question_h2.next().clone(true)});this.reAnswerLightbox.ev_link_input.setValue(question_h2.next().readAttribute("rel"))}else{this.reAnswerLightbox.ev_link_input.setValue("")}this.reAnswerLightbox.textarea.setValue("");this.reAnswerLightbox.indicator.hide();this.reAnswerLightbox.form.enable();this.reAnswerLightbox.showBox();this.reAnswerLightbox.element.removeClassName("loading");this.reAnswerLightbox.textarea.focus()},onReAnswerSubmit:function(event){event.stop();if(trim(this.textarea.getValue()).length==0){new Effect.Highlight(this.textarea,{startcolor:"#ff0000",endcolor:"#FFFFFF",restorecolor:"#FFFFFF"});this.textarea.focus();return}this.indicator.setStyle({display:"inline-block"});this.element.addClassName("loading");var params=this.form.serialize(true);this.form.disable();rel=this.element.readAttribute("rel");new Ajax.Request(fspring.baseURL+"inbox/reAnswerQuestion?ajax=1",{parameters:params,onStatOK:function(result){if(this.element.hasClassName("loading")&&this.element.readAttribute("rel")==rel){this.textarea.setValue("");this.form.enable();this.indicator.hide();this.hideBox()}_gaq.push(["_trackEvent","Feed","Answer",params.question])}.bind(this),onStatFail:function(result){this.form.enable();this.indicator.hide();this.element.removeClassName("loading");alert(result.get("error"))}.bind(this)})},showVerifyEmailPopup:function(){if(!this.verifyEmailLightbox){this.verifyEmailLightbox=new Lightbox.base("verify_email");this.email_verification_div=$("email_verification_div");this.verifyEmailForm=$("email_verification_form");this.new_verify_email_change_link=$("new_verify_email_change_link");this.new_email_input=$("new_email_input");Event.observe(this.verifyEmailForm,"submit",this.verifyEmailSubmit.bind(this));this.resend_email_link=$("resend_email_link");Event.observe(this.resend_email_link,"click",this.verifyEmailSubmit.bind(this));this.email_verification_indicator=$("email_verification_indicator");this.email_verification_success=$("email_verification_success");this.trackEvent("EmailVerification","View")}this.verifyEmailLightbox.showBox()},fbShare:function(id,params,context){var els=$$("[rel="+id+'] [rel="response-text"]');if(els.length==0){this.trackEvent("FBShare","Error",context);return}this.trackEvent("FBShare","Popped",context);params.method="feed";params.caption=getAllTheText(els[0].childNodes);if(params.caption.length>1000){params.caption=params.caption.substr(0,997)+"..."}FB.ui(params,function(){this.trackEvent("FBShare","Sent",context)}.bind(this))},showEmailChangeFormOnEmailVerify:function(toggle){if(!toggle){this.new_verify_email_change_link.hide().up().next().hide();this.verifyEmailForm.show();this.new_email_input.select();this.verifyEmailForm.next().hide()}else{this.verifyEmailForm.hide();this.new_verify_email_change_link.show().up().next().show();this.verifyEmailForm.next().show()}},verifyEmailSubmit:function(event){event.stop();var action=event.target.readAttribute("rel");if(!this.new_email_input.getValue().match(/^\s*[^\,\s]+\@[\w\-\.]+\.\w+\s*$/)){this.validationError(this.new_email_input,"Please enter a real email address.");return}else{this.validationOK(this.new_email_input)}if(action=="email_change_true"){var params=this.verifyEmailForm.serialize(true);this.trackEvent("EmailVerification","Change")}else{var params=$H()}params.action=action;this.email_verification_indicator.show();this.email_verification_div.hide();new Ajax.Request(this.baseURL+"account/sendVerificationEmail?ajax=1",{parameters:params,onStatOK:function(response){this.email_verification_indicator.hide();obj={};obj.email=response.get("email");out=(new Template('An email has been sent to <span id="email_verification_success_email">#{email}</span>. Click on the link in the email to confirm your email address. ')).evaluate(obj);if(response.get("provider")){obj.provider_provider=response.get("provider")["provider"];obj.provider_url=response.get("provider")["url"];out+=(new Template('<div><a href="#{provider_url}" target="_blank" class="button_grey">Go to #{provider_provider} &raquo;</a></div>')).evaluate(obj)}log(out);this.email_verification_success.update(out).show();this.trackEvent("EmailVerification","Resend")}.bind(this),onStatFail:function(response){this.email_verification_indicator.hide();this.email_verification_div.show()}.bind(this)})},showFacebookToFindFriends:function(){setTimeout(function(){fb_lightbox=new Lightbox.base("suggest_fbconnect",{afterInitialize:function(){this.element.setStyle({opacity:0})},onBeforeHide:function(){Set_Cookie("fbc_popover_closed","true",30,"/");return true}});new Effect.Appear(fb_lightbox.element,{duration:0.8})},100)},showFacebookToFindFriendsClick:function(){fspring.popOverLoading.show();Service.connect("facebook",function(username,service,services,friends,announce_helpers){if(friends){Service.findFriends(username,friends,service);Event.observe($("friends_select_skip").update("Cancel"),"click",function(event){event.stop();Service.friendsLightbox.hideBox()}.bind(this))}})},uploadPhoto:function(){if(!this.upload_photo_form_lightbox){this.upload_photo_form_lightbox=new Lightbox.base($("upload_photo_form"))}else{this.upload_photo_form_lightbox.showBox();return}},removeStreamPhoto:function(ev){if(!window.confirm("Are you sure you want to delete this image?")){return}var rel=ev.target.readAttribute("rel");new Ajax.Request("follow/removeStreamPhoto",{parameters:{ajax:1,admin:1,photo:$("photo_lightboxImage").readAttribute("src"),streamtype:rel},onStatOK:function(){alert("Photo queued for removal.")}})},recordButtonLinkClick:function(url){var parsed_url=parse_url(url);this.trackEvent("Button","Click",parsed_url.host)},fragmentHelper:function(html,callback){var div=(new Element("div")).update(html);if(callback){callback.apply(this,[div])}return div.childElements()},parseJSON:function(request){try{var res=request.responseText.evalJSON(true)}catch(e){error(e)}if(!res){this.JSONFailure(request);return false}res=$H(res);return res},ajaxFailure:function(request){if(request.status==0){return}var res=this.parseJSON(request);if(res&&res.get("stat")=="fail"){alert(res.get("error"))}else{if(res&&!res.get("error")){}else{this.JSONFailure(request)}}},JSONFailure:function(request){if(request.status!=0){alert("There was an error processing the request: "+request.responseText)}},log:function(){if(this._debug==true&&window.console&&window.console.log&&window.console.log.apply){window.console.log.apply(console,arguments)}},debug:function(){if(this._debug==true&&window.console&&window.console.debug&&window.console.debug.apply){window.console.debug.apply(console,arguments)}},error:function(){if(this._debug==true&&window.console&&window.console.error&&window.console.error.apply){window.console.error.apply(console,arguments)}else{if(this._debug&&arguments.length>0){alert(arguments[0])}}},_namespace_objects:[],provide:function(ns,object){var nsParts=ns.split(".");var root=this;for(var i=0;i<nsParts.length;i++){if(typeof root[nsParts[i]]=="undefined"){if(i+1==nsParts.length&&object){if(object.prototype&&object.prototype.constructor.toString().indexOf("klass")>-1){root[nsParts[i]]=new object();root[nsParts[i]]["__name__"]=ns;this._namespace_objects.push(root[nsParts[i]])}else{root[nsParts[i]]=object}}else{root[nsParts[i]]=Class.create({})}}root=root[nsParts[i]]}},youtubeIt:function(){this.youtubeVideos={};this.youtubeAPICallbacks={};var videos=$("content").select("a.youtube"),api_urls=[];videos.each(function(video_link){video_id=video_link.readAttribute("href").replace(/^[^v]+v.(.{11}).*/,"$1");video_link.writeAttribute("v",video_id);if(!fspring.youtubeVideos[video_id]){fspring.youtubeVideos[video_id]=[video_link];api_urls.push("http://gdata.youtube.com/feeds/api/videos/"+video_id+"?alt=json&callback=fspring.youtubeAPICallbacks.__"+video_id.replace(/-/g,"___"));fspring.youtubeAPICallbacks["__"+video_id.replace(/-/g,"___")]=(function(video_id){return function(data){fspring.receiveYoutubeTitle(video_id,data)}})(video_id)}else{fspring.youtubeVideos[video_id].push(video_link)}});$LAB.script(api_urls)},receiveYoutubeTitle:function(video_id,data){var title,description;if(data.entry&&data.entry.title["$t"]){title=data.entry.title["$t"]||""}$("content").select("a.youtube[v="+video_id+"]").each(function(link){link.up("li.question").select("p").first().select("a").each(function(link_item){if(link_item.readAttribute("href").indexOf(video_id)>-1){link_item.update(title)}})})}}))();var Animation={fadeSlideUp:{height:"0px",opacity:"0",paddingTop:"0px",paddingBottom:"0px"}};function log(){fspring.log.apply(fspring,arguments)}function debug(){fspring.debug.apply(fspring,arguments)}function error(){fspring.error.apply(fspring,arguments)}var PopoverNotifier=Class.create({initialize:function(type){this.type=type;this.lightbox=null;this.messageArea=null;this.animation=null},show:function(message){if(!this.lightbox){this.lightbox=new Lightbox.base("popover_notification"+(this.type=="success"?"":"_2"));this.messageArea=this.lightbox.element.down().down()}if(message){this.messageArea.update(message)}this.lightbox.showBox();if(this.type=="success"){this.animation=new Effect.Fade(this.lightbox.element,{duration:1,delay:1,afterFinish:function(){this.lightbox.hideBox()}.bind(this)})}},cancel:function(){if(this.animation){this.animation.cancel()}else{if(this.lightbox){this.lightbox.hideBox()}}}});var spinner=new (Class.create({initialize:function(){this.span=new Element("span",{"class":""});this.helper=new Element("li",{"class":"indicator clear"});this.helper.appendChild(this.span)},loading:function(li,txt,after){var spinner=this.helper.clone(true);if(after){li.insert({after:spinner.addClassName("loading")})}else{li.insert({before:spinner.addClassName("loading")})}spinner.down().update(txt);if(!after){li.hide()}},success:function(li,txt){var spinner=li.previous();if(spinner.hasClassName("indicator")){spinner.removeClassName("loading").addClassName("done").down().update(txt)}else{var spinner=this.helper.clone(true);li.insert({before:spinner.addClassName("done")});spinner.down().update(txt)}new Effect.Highlight(spinner,{duration:1,afterFinish:function(e){new Effect.Morph(e.element,{style:Animation.fadeSlideUp,duration:0.5,afterFinish:function(e){e.element.remove()}})}})},hide:function(li,after){var spinner=(!after?li.previous():li.next());spinner.remove()}}))();if(window.Widget==undefined){window.Widget={}}Widget.Textarea=Class.create({initialize:function(textarea,options){this.textarea=$(textarea);this.options=$H({min_height:50,max_length:0,insertRemainingChar:this.insertRemainingCharDisplay.bind(this)}).update(options);this.autoCharCount=null;this.timer=null;Event.observe(this.textarea,"focus",function(){try{this.timer=setInterval(this.refresh.bind(this),800)}catch(e){error(e)}}.bind(this));if(this.options.get("focused")){try{this.timer=setInterval(this.refresh.bind(this),800)}catch(e){error(e)}}Event.observe(this.textarea,"blur",function(){try{clearInterval(this.timer)}catch(e){error(e)}}.bind(this));this.gotWidth=false;this._shadow=new Element("div").setStyle({lineHeight:this.textarea.getStyle("lineHeight"),fontSize:this.textarea.getStyle("fontSize"),fontFamily:this.textarea.getStyle("fontFamily"),paddingTop:this.textarea.getStyle("paddingTop"),paddingBottom:this.textarea.getStyle("paddingBottom"),wordWrap:"break-word",position:"absolute",top:"-10000px",left:"-10000px"});width=this.textarea.getWidth();if(width>0){this._shadow.setStyle({width:width+"px"});this.gotWidth=true}this.textarea.addClassName("overhidden");document.body.appendChild(this._shadow);if(this.options.get("max_length")>0){this.autoCharCount=true;this._remainingCharacters=new Element("span").addClassName("remainingCharacters").addClassName("fleft");this.options.get("insertRemainingChar")(this._remainingCharacters);Event.observe(this.textarea,"keypress",this.restrict.bind(this))}if(line_height=parseInt(this.textarea.getStyle("lineHeight").replace("px",""))){this.line_height=line_height}else{this.line_height=18}this.refresh();setTimeout(function(){this.textarea.addClassName("autogrow")}.bind(this),1000)},insertRemainingCharDisplay:function(remainingCharElement){this.textarea.insert({after:remainingCharElement})},restrict:function(event){var res_keys=[Event.KEY_BACKSPACE,Event.KEY_TAB,Event.KEY_ESC,Event.KEY_LEFT,Event.KEY_UP,Event.KEY_RIGHT,Event.KEY_DOWN,Event.KEY_DELETE,Event.KEY_HOME,Event.KEY_END,Event.KEY_PAGEUP,Event.KEY_PAGEDOWN],l=$F(this.textarea).length,k=(event.keyCode||event.which),modifiers=(event.shiftKey||event.ctrlKey||event.altKey||event.metaKey),is_res_key=res_keys.indexOf(k)>-1?true:false;if(l>=this.options.get("max_length")&&!modifiers&&!modifiers&&!is_res_key){event.stop()}},refresh:function(){if(!this.gotWidth){if(width=this.textarea.getWidth()){this._shadow.setStyle({width:width+"px"});this.gotWidth=true}}var l=$F(this.textarea).length;if(l>this.options.get("max_length")&&this.autoCharCount){text=$F(this.textarea).substring(0,this.options.get("max_length"));this.textarea.value=text;l=$F(this.textarea).length}this._shadow.update($F(this.textarea).escapeHTML().replace(/\n/g,"<br/>"));if(!this.options.get("noautogrow")){this.textarea.setStyle({height:Math.max(parseInt(this._shadow.getHeight())+this.line_height-14,this.options.get("min_height"))+"px"})}if(!this.autoCharCount){return}var remaining=Math.abs(this.options.get("max_length")-l);this._remainingCharacters.update(remaining).removeClassName("red");if(remaining==0){this._remainingCharacters.addClassName("red")}},cancel:function(){if(this.timer){try{clearInterval(this.timer)}catch(e){}}Event.stopObserving(this.textarea)}});fspring.provide("AskFollowers",Class.create({initialize:function(){this.ds=new BasicStorage("reask",1440*2);this.list=this.ds.get("reask")||[];document.observe("click",function(e,el){if(el=e.findElement('a[rel="ask_followers"]')){e.stop();var context=el.readAttribute("data-context");if(!context){context="unknown"}var li=null;if(context=="permalink"){li=el.up(".single_a")}else{if(context=="responses"){li=el.up(".all-question")}else{li=el.up("li.question")}}if(!li){return}this.askFollowers(li.readAttribute("rel"),li,context)}}.bind(this));var roots=[".all-question",".single_a","li.question"];for(var i=0;i<roots.length;i++){var root=$$(roots[i]);if(root.length>0){this.disableBehaviorBulk(root);break}}},add:function(id){if(!this.exists(id)){this.list.push(id);this.ds.set("reask",this.list)}},exists:function(id){return this.list.indexOf(id)!=-1},askFollowers:function(question_id,li,context){if(this.exists(question_id)){return}if(!fspring.loggedIn){fspring.initiateLogin("Feed","Login to ask your followers!");return}if(!window.confirm("Are you sure you want to send this question to all your followers?")){return}this.disableBehaviorSingle(li);new Ajax.Request(fspring.baseURL+"follow/askFollowersSubmit",{parameters:{ajax:1,question_id:question_id,context:context},onStatOK:function(request){this.add(question_id);fspring.trackEvent(ucfirst(context),"AskFollowers")}.bind(this),onStatFail:function(res){}.bind(this)})},disableBehaviorBulk:function(questions){if(!this.list){return}questions.each(function(question){if(this.exists(question.getAttribute("rel"))){this.disableBehaviorSingle(question)}}.bind(this))},disableBehaviorSingle:function(li){var link=li.select('a[rel="ask_followers"]')[0];if(link.up(".q_menu")){link.update("<span>Already asked to your followers</span>");link.removeAttribute("rel");link.addClassName("already_asked")}else{link.removeAttribute("rel");link.setAttribute("title","You asked this question to your followers");link.addClassName("alread_asked");amp.publish("fspring.tipsy.updated",link)}}}));var Refresher=Class.create({initialize:function(getRefreshURLFunction,callback,contentCallback){this.getRefreshURL=getRefreshURLFunction;this.callback=callback;this.contentCallback=contentCallback;this.callCount=0;this.errorCount=0;this.errorThreshold=5;this.canceled=false;this.startRefreshing();this.currentCount=0;this.refreshCall=null},startRefreshing:function(){if(this.errorCount<this.errorThreshold&&!this.canceled){var time=30000*Math.pow(2,this.callCount);log("Will refresh in ",time/1000,"seconds... error count: ",this.errorCount);setTimeout(this.refresh.bind(this),time)}},refresh:function(){this.refreshCall=new Ajax.Request(this.getRefreshURL(),{silent:true,onStatOK:function(response){this.callCount++;this.startRefreshing();var count=response.get("count");if(this.currentCount!=count){this.callback(count)}this.currentCount=count}.bind(this),onStatFail:function(response){this.errorCount++;this.startRefreshing()}.bind(this),onFailure:function(response){this.errorCount++;this.startRefreshing()}})},getNewContent:function(){try{this.refreshCall.abort()}catch(e){error(e)}this.canceled=true;this.refreshCall=new Ajax.Request(this.getRefreshURL(true),{onStatOK:function(response){var content=response.get("content");var count=response.get("count");try{if(this.contentCallback){this.contentCallback(content,count)}}catch(e){error(e)}this.restart()}.bind(this),onStatFail:function(response){this.errorCount++}.bind(this),onFailure:function(response){this.errorCount++}})},pause:function(){log("Pausing refresher");this.canceled=true;try{if(this.refreshCall){this.refreshCall.abort()}}catch(e){error(e)}},play:function(){log("Un-Pausing refresher");this.canceled=false;this.startRefreshing()},restart:function(){log("Restarting refresher");this.canceled=false;this.callCount=0;this.startRefreshing()}});var trim=(function(){var ws={},chars=" \n\r\t\v\f\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";for(var i=0;i<chars.length;i++){ws[chars.charAt(i)]=true}return function(str){var s=-1,e=str.length;while(ws[str.charAt(--e)]){}while(s++!==e&&ws[str.charAt(s)]){}return str.substring(s,e+1)}})();function Set_Cookie(name,value,expires,path,domain,secure){var today=new Date();today.setTime(today.getTime());if(expires){expires=expires*1000*60*60*24}var expires_date=new Date(today.getTime()+(expires));document.cookie=name+"="+escape(value)+((expires)?";expires="+expires_date.toGMTString():"")+((path)?";path="+path:"")+((domain)?";domain="+domain:"")+((secure)?";secure":"")}function ucfirst(string){return string.charAt(0).toUpperCase()+string.slice(1)}fspring.provide("Feature",Class.create({initialize:function(){},pageInit:function(){this.features=window._features||[]},hasAccess:function(f){return this.features.indexOf(f)>-1?true:false}}));fspring.provide("MediaWarning",Class.create({initialize:function(){this.element=null;this.warning=$("photo_warning");if(this.warning.down("[rel=media_show]")){this.warning.down("[rel=media_show]").observe("click",this.showMedia.bind(this));this.warning.down("[rel=media_cancel]").observe("click",this.hide.bind(this))}},show:function(el,username){this.element=el;this.warning.hide();var dims=this.warning.getDimensions();var offset=this.element.cumulativeOffset();var el_dims=this.element.getDimensions();this.warning.setStyle({top:(offset.top-dims.height-5)+"px",left:(offset.left-Math.floor(dims.width/3)+Math.floor(el_dims.width/2))+"px"});this.warning.show().down("[rel=username]").update(username)},hide:function(){this.element=null;this.warning.hide()},showMedia:function(){this.element.hide().next().show().simulate("click");this.hide()}}));fspring.provide("Announce",Class.create({initialize:function(){},pageInit:function(){this.type="sidebar";this.$form=$("announce_sidebar_form");if(this.$form){this.$spinner=this.$form.select("span.loading")[0].setStyle({display:"inline"}).up()}else{this.$form=$("announce_module_form");if(this.$form){this.type="module";this.$spinner=this.$form.select("span.loading")[0];this.$spinner.show=function(){this.setStyle({display:"inline"})}}else{return}}this.$textarea=Form.findFirstElement(this.$form);log(this.$textarea);new Widget.Textarea(this.$textarea,{max_length:140});this.setupCheckboxes();this.$button=this.$form.select('[rel="submit"]')[0];this.$button.observe("click",this.send.bind(this))},setupCheckboxes:function(){var highlight=this.highlightServicesLabel;this.$form.select("input[type=checkbox]").each(function(input){var input=$(input);input.observe("click",function(){if(!input.hasAttribute("onclick")){highlight(input,input.checked)}});if(!input.hasAttribute("onclick")){highlight(input,input.checked)}})},highlightServicesLabel:function(checkbox,selected){var label=checkbox.up("label").up();if(selected){label.addClassName("selected").removeClassName("notconnected")}else{label.removeClassName("selected")}},send:function(event){event.stop();var params=this.$form.serialize(true);if(!(("message" in params)&&params.message.match(/\w+/))){return false}if(!("services[]" in params)){alert("Select at least one of the services.");return}this.$form.disable();this.$button.hide();this.$spinner.show();new Ajax.Request(fspring.baseURL+"account/sendAnnouncements",{parameters:params,onStatOK:function(request){var context=(params.context)?ucfirst(params.context):"Inbox";if(typeof params["services[]"]==="object"){fspring.trackEvent(context,"sendAnnouncement",params["services[]"].join(", "))}else{fspring.trackEvent(context,"sendAnnouncement",params["services[]"])}fspring.popOverSuccess.show("Your message was successfully posted.");this.$form.enable();this.$form.reset();this.setupCheckboxes()}.bind(this),onStatFail:function(res){if(res.get("errors")){var errors=res.get("errors");for(var n in errors){alert("There was a problem communicating with "+ucfirst(n))}}else{fspring.ajaxFailure(request)}this.$form.enable()}.bind(this),onComplete:function(){this.$spinner.hide();this.$button.show()}.bind(this)})}}));function readCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(";");for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==" "){c=c.substring(1,c.length)}if(c.indexOf(nameEQ)==0){return c.substring(nameEQ.length,c.length)}}return null}function getAllTheText(nodes){var str="";for(var i=0;i<nodes.length;i++){if(nodes[i].childNodes.length==0){var val=nodes[i].nodeValue;if(typeof val!="undefined"&&val!=null){str+=nodes[i].nodeValue}}else{str+=getAllTheText(nodes[i].childNodes)}}return str}fspring.provide("Connections",Class.create({initialize:function(){},pageInit:function(){},ask:function(username,topic,topic_id){HoverCards.initTemplate();if(HoverCards.data.get(username)&&HoverCards.data.get(username).profile){HoverCards.showAskForm(HoverCards.data.get(username).profile,true);return}fspring.popOverLoading.show();new Ajax.Request("profile/hovercard/"+username+"?ajax=1",{onStatOK:function(response){var profile=response.get("profile");var card=HoverCards.processTemplate(username,profile);HoverCards.showAskForm(profile,true,topic,topic_id)}.bind(this),onStatFail:function(response){fspring.popOverLoading.cancel()}.bind(this)})}}));function parse_url(str,component){var o={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var m=o.parser[o.strictMode?"strict":"loose"].exec(str),uri={},i=14;while(i--){uri[o.key[i]]=m[i]||""}switch(component){case"PHP_URL_SCHEME":return uri.protocol;case"PHP_URL_HOST":return uri.host;case"PHP_URL_PORT":return uri.port;case"PHP_URL_USER":return uri.user;case"PHP_URL_PASS":return uri.password;case"PHP_URL_PATH":return uri.path;case"PHP_URL_QUERY":return uri.query;case"PHP_URL_FRAGMENT":return uri.anchor;default:var retArr={};if(uri.protocol!==""){retArr.scheme=uri.protocol}if(uri.host!==""){retArr.host=uri.host}if(uri.port!==""){retArr.port=uri.port}if(uri.user!==""){retArr.user=uri.user}if(uri.password!==""){retArr.pass=uri.password}if(uri.path!==""){retArr.path=uri.path}if(uri.query!==""){retArr.query=uri.query}if(uri.anchor!==""){retArr.fragment=uri.anchor}return retArr}}(function($){$.observeHashChange=function(options){var opts=Object.extend({},$.observeHashChange.defaults,options);log("setting up");if(isHashChangeEventSupported()){nativeVersion()}else{setIntervalVersion(opts)}};var locationHash=null;var functionStore=null;var interval=0;$.observeHashChange.defaults={interval:500};function isHashChangeEventSupported(){return"onhashchange" in window}function nativeVersion(){locationHash=document.location.hash;window.onhashchange=onhashchangeHandler}function onhashchangeHandler(e,data){var oldHash=locationHash;locationHash=document.location.hash;log("triggering...");document.fire("fs:hashchange",{before:oldHash,after:locationHash})}function setIntervalVersion(opts){if(locationHash==null){locationHash=document.location.hash}if(functionStore!=null){clearInterval(functionStore)}if(interval!=opts.interval){functionStore=setInterval(checkLocationHash,opts.interval);interval=opts.interval}}function checkLocationHash(){if(locationHash!=document.location.hash){var oldHash=locationHash;locationHash=document.location.hash;log("triggering...");document.fire("fs:hashchange",{before:oldHash,after:locationHash})}}})(fspring);
