Buzzd={log:function(msg){if(Buzzd._settings.echo_debug){var el;if(el=window.document.getElementById("js-console")){el.innerHTML=el.innerHTML+msg+"<br />\n"}else{}}if(window.console){window.console.log(msg)}},_lastImgId:0,_settings:{},_elementId:-1,elems:{},fadeSpeed:200,registerElement:function(elem){var name="elem"+(++Buzzd._elementId);Buzzd.elems[name]=elem;Buzzd.log("Buzzd.elems["+name+"]")},set:function(name,value){this._settings[name]=value},isSet:function(name){return(undefined!==this._settings[name])},get:function(name){return this._settings[name]},strictGet:function(name){if(this.isSet(name)){return this.get(name)}else{throw new Buzzd.Exception('Strict get: you have not set "'+name+'"')}},strictSet:function(name,value){if(this.isSet(name)){throw new Buzzd.Exception("Value already set, can only be set once: '"+name+'"')}else{this.set(name,value)}},add:function(name,value){if(!this._settings[name]){this._settings[name]=[]}this._settings.name.push(value)},_dummyRegexp:new RegExp("\\b([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)-dummy-link\\b"),setLinkAsDummy:function(a){var matches=null;if(!("A"==a.nodeName&&"#"==a.getAttribute("href")&&(matches=Buzzd._dummyRegexp.exec(a.className)))){return}$(a).click(function(e){var lowercase=matches[1].split("-").join(" ");var sentenceSubject='"'+lowercase.charAt(0).toUpperCase()+(lowercase.length>1?lowercase.substr(1):"")+'" ';alert(sentenceSubject+"coming soon!");e.stopPropogation;return false})},_defaultSpinDuration:1000,spin:function(elem,opts){if("number"===typeof opts){opts={duration:opts}}else{if(!opts){opts={}}}if(undefined===opts.duration){opts.duration=Buzzd._defaultSpinDuration}var img=Buzzd._spinnerInElem(elem);if(!img){Buzzd.log("can't find spinner img in TheElem");TheElem=elem;return}var spinningImgs;if(opts.spinningImgCssPath){spinningImgs=$(opts.spinningImgCssPath);if(0==spinningImgs.size()){Buzzd.log("couldn't find spinning image \""+opts.spinningImgCssPath+'"!');return}}else{var ps=img.previousSibling;if(!ps){Buzzd.log(Buzzd.describeElementShort(img)+" had no previous sibling!");return}var cn=img.previousSibling.className;if(!(img.previousSibling&&/\bspinning\b/.exec(img.previousSibling.className))){Buzzd.log("cant find previous spinner image in TheImage with ps: "+ps+" and cn "+cn);TheImage=img;return}spinningImgs=$(img.previousSibling)}$(img).hide();spinningImgs.show();setTimeout(function(){$(img).show();spinningImgs.hide()},opts.duration)},prepareSpin:function(elem){var img=Buzzd._spinnerInElem(elem);var isAutospin=$(elem).hasClass("autospin");if(!img&&!isAutospin){Buzzd.log("no spinner image found in Elem! "+img);Elem=elem;return}if(isAutospin){var insertBefore=elem;var oldSrc="/images/web/gray-spinner.gif"}else{var insertBefore=img;var oldSrc=img.getAttribute("src")}var klasses=insertBefore.className;var img2=document.createElement("img");var newId="img-"+(++Buzzd._lastImgId);img2.setAttribute("id",newId);$(img2).addClass("spinning");var matches;if(isAutospin){matches=/\b([-a-zA-Z0-9]+)-ajax-action\b/.exec(insertBefore.className);$(img2).addClass(matches[1]+"-ajax-spinning")}if(matches=/\b([-a-zA-Z0-9]+)-spinner\b/.exec(klasses)){var newSrcRoot=matches[1]+"-spinning.gif";var newSrc=oldSrc.replace(/[-a-zA-Z0-9_]+\.(?:gif|jpeg|jpg)$/,newSrcRoot)}else{var newSrc=oldSrc.replace(/(?:-spinner)?(?=\.[a-zA-Z0-9]+$)/,"-spinning")}img2.setAttribute("src",newSrc);insertBefore.parentNode.insertBefore(img2,insertBefore);$(img2).hide();Buzzd.log("prepareSpin: tried to put Img2 (#"+newId+", "+newSrc+") before Img1 (#"+insertBefore.id+", "+oldSrc+")");Img2=img2;Img1=img},_spinnerInElem:function(elem){var img=null;if(Buzzd._isSpinnerImg(elem)){img=elem}else{var ary=$(elem).find("img.spinner");if(ary.length){img=ary[0]}}return img},_isSpinnerImg:function(elem){var nn=("IMG"===elem.nodeName||"INPUT"===elem.nodeName);var cn=/\bspinner\b/.exec(elem.className);var ret=(nn&&cn);return ret},_submitable:"a,input[type=image],input[type=submit],button[type=submit],.submitable",_magicSubmit:new RegExp("\\b([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-ajax-action\\b"),_parseClassNameForAjax:function(cn){var matches;if(matches=Buzzd._magicSubmit.exec(cn)){return{module:matches[1],action:matches[2]}}else{return false}},_parseFormActionForAjax:function(form){var matches=/^\/[^\/]+\/([^\/]+)\/([^\/]+)$/.exec($(form).attr("action"));if(!matches){Buzzd.log("NOTICE: failed to parse form action :"+$(form).attr("action"));return false}return{module:matches[1],action:matches[2]}},deactivateForm:function(formElem,opts){var message=(opts.message)?opts.message:"Sorry, this feature is unavailable";$(formElem).find(Buzzd._submitable).each(function(i,a){$(a).click(function(e){e.stopPropagation();alert(message);return false})})},formsSubmitLaunchesRegisterOverlay:function(formElems,opts){var message=(opts.message)?opts.message:"Please login or create an account to use this feature";var funky=function(e){e.stopPropagation();Buzzd.requireLogin(message)};formElems.find(Buzzd._submitable).each(function(i,a){$(a).click(funky)})},describe:function(elem){return Buzzd.identifyElement(elem)},describeElement:function(elem){return Buzzd.describeElementShort(elem)},describeElementShort:function(elem){return Buzzd.identifyElement(elem)},identifyElement:function(elem){var str;if(undefined===elem){str="undefined"}else{if($(elem).attr("id")){str="#"+$(elem).attr("id")}else{if(elem.className){str=elem.nodeName+"."+elem.className}else{if(elem.nodeName){str=elem.nodeName}else{str=""+elem}}}}return str},requireLogin:function(message){var modalDiv=$("#register-modal");var ul=modalDiv.find("ul.javascript-error-msg");var li=ul.find("li");li.html(message);ul.show();Buzzd.Modal.openModal("register-modal");this.log("attempted to show '"+message+"'")},registerIframe:function(name,window){Buzzd.log("registering iframe: "+name)},nolink:function(){return false}};Buzzd.Exception=function(){};BuzzdCommon=Buzzd;B=Buzzd;Buzzd.Tabland={init:function(){$("li.tab").click(function(){$("ul.tabs li.active").removeClass("active");$(this).addClass("active");$(".tab-content").slideUp();var content_show=$(this).attr("title");$("#"+content_show).slideDown()})}};Buzzd.Moolike={radioLabelInit:function(i,elem){$(elem).click(Buzzd.Moolike.radioLabelClick);var count=0;$(elem).find("input[type=radio]").each(function(){count++;$(this.parentNode).addClass(this.checked?"moolike-radio-selected":"moolike-radio-unselected")})},radioLabelClick:function(e){var self=e.target;e.stopPropagation();var name;var value;$(self).find("input").each(function(){name=this.name;value=this.value});$(self.form).find("input[name='"+name+"']").each(function(){if(this.value==value){this.checked="checked";$(this.parentNode).removeClass("moolike-radio-unselected");$(this.parentNode).addClass("moolike-radio-selected")}else{this.checked=null;$(this.parentNode).removeClass("moolike-radio-selected");$(this.parentNode).addClass("moolike-radio-unselected")}});return false}};if(window.jQuery){jQuery.fn.buzzdAjaxForm=function(opts){$(this).each(function(){Buzzd.initMagicAjaxForm(this,opts)})};jQuery.fn.stereolabels=function(options){var $=jQuery;var defaults={className:"inside"};var options=$.extend({},defaults,options||{});var labels=$(this).find("label");$(this).submit(function(){B.log("submit called");labels.each(function(){var el=$("#"+this.htmlFor)[0];if(el&&undefined!==el._labeltext&&el.value==el._labeltext){el.value=""}})});labels.each(function(){try{var label=this;var input=$("#"+this.htmlFor)[0];var inputTag=input.tagName.toLowerCase();var inputType=input.type;if(inputTag=="textarea"||(inputType=="text"||inputType=="password")){$(this).css({position:"absolute",visibility:"hidden"});var focused=function(){var el=this,tmp=null;if(this.value==this._labeltext){if(el._type=="password"){el=$.fn.stereolabels.setInputType(el,"password");setTimeout(function(){el.select()},1)}el.value="";$(el).removeClass(options.className)}};var blurred=function(){var el=this;if(this.value==""){if(el._type=="password"){el=$.fn.stereolabels.setInputType(el,"text")}$(el).addClass(options.className);el.value=el._labeltext}};$.extend(input,{_labeltext:this.childNodes[0].nodeValue,_type:inputType,_focused:focused,_blurred:blurred});$(input).focus(focused);$(input).blur(blurred);$(input).trigger("blur")}else{$(this).css({position:"static",visibility:"visible"})}}catch(e){throw e;alert("caught exczeption: "+e.message);$(this).css({position:"static",visibility:"visible"})}});return $(this)};jQuery.fn.stereolabels.setInputType=function(el,type){var $=jQuery;try{el.type=type;return el}catch(e){var newEl=document.createElement("input");newEl.type=type;var desparate=["id","className","_labeltext","_type","_focused","_blurred","name"];for(i=0;i<desparate.length;i++){prop=desparate[i];newEl[prop]=el[prop]}el.parentNode.replaceChild(newEl,el);$(newEl).focus(newEl._focused);$(newEl).blur(newEl._blurred);return newEl}};jQuery.fn.anchorTargets=function(options){$(this).find("a[rel=external]").each(function(i,elem){$(elem).attr("target","_blank-"+(new Date().getTime()))})};jQuery.fn.domOverlay=function(opts){var self=this;$(this).find(".cancel-btn").click(function(){Buzzd.Modal.closeModal(self.id)})};jQuery.fn.showInlineAlert=function(opts){var msg=opts;$(this).find(".the-message").html(msg);$(this).show("slow")};jQuery.fn.spin=function(opts){if("number"==typeof(opts)){opts={duration:opts}}$(".spinner",this).hide();$(".spinning",this).show();$(this).data("is.spinning",true);var self=this;setTimeout(function(){$(self).stopSpin()},opts.duration)};jQuery.fn.stopSpin=function(){if($(this).data("is.spinning")){$(".spinner",this).show();$(".spinning",this).hide();$(this).data("is.spinning",false)}};jQuery.fn.enableButton=function(bool){if(bool){$(".disabled",this).hide();$(".enabled",this).show()}else{$(".enabled",this).hide();$(".disabled",this).show()}};jQuery.fn.enableLayoutDebuggingTogglers=function(){var links=$(".debug-layout-toggler",this);Buzzd.log("Applying layoutDebuggingToggler to "+links.length+" clickables.");var self=this;links.click(function(e){var doShow=!$(this).data("showing"),border,m,re,curr,next,parent;$(this).data("showing",doShow);curr=doShow?"0":"1";next=doShow?"1":"0";re=new RegExp("^"+curr+"(px .+)$");parent=self;$("*",parent).each(function(){try{if((border=$(this).css("border"))&&(m=re.exec(border))){$(this).css("border",next+m[1])}}catch(err){}})})}}if(window.jQuery){(function($){$.fn.buzzdTipsy=function(opts){opts=$.extend({fade:false,gravity:"n"},opts||{});var tip=null,cancelHide=false;var self=this;this.hover(function(){$.data(this,"cancel.tipsy",true);var tip=$.data(this,"active.tipsy");if(!tip){tip=self.find(".buzzd-tipsy-description");tip.css({position:"absolute",zIndex:100000});$.data(this,"active.tipsy",tip)}var pos=$.extend({},$(this).offset(),{width:this.offsetWidth,height:this.offsetHeight});tip.remove().css({top:0,left:0,visibility:"hidden",display:"block"}).appendTo(document.body);var actualWidth=tip[0].offsetWidth,actualHeight=tip[0].offsetHeight;switch(opts.gravity.charAt(0)){case"n":tip.css({top:pos.top+pos.height+10,left:pos.left+pos.width/2-actualWidth/2});break}if(opts.fade){tip.css({opacity:0,display:"block",visibility:"visible"}).animate({opacity:1})}else{tip.css({visibility:"visible"})}},function(){$.data(this,"cancel.tipsy",false);var self=this;setTimeout(function(){if($.data(this,"cancel.tipsy")){return}var tip=$.data(self,"active.tipsy");if(tip){if(opts.fade){tip.stop().fadeOut(function(){$(this).remove()})}else{tip.remove()}}},100)})}})(jQuery)}$(document).ready(function(){$("a[href*=#]").click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var $target=$(this.hash);$target=$target.length&&$target||$("[name="+this.hash.slice(1)+"]");if($target.length){var targetOffset=$target.offset().top;$("html,body").animate({scrollTop:targetOffset},500);return false}}})});function web_safe_email(e,d){document.write('<a href="mailto:'+e+"@"+d+'">'+e+"&#64;"+d+"</a>")};Buzzd.Ajax={settings:{},getSetting:function(name){return Buzzd.Ajax.settings[name]},setSetting:function(name,value){Buzzd.Ajax.settings[name]=value;Buzzd.log('setting "'+name+'" to "'+value+'"')},registerRequest:function(ajaxArgs){Buzzd.Ajax.request=ajaxArgs;Buzzd.log("set Buzzd.Ajax.request for "+ajaxArgs.url)},enabled:function(){return Buzzd.Ajax.settings.submit},on:function(){Buzzd.Ajax.setSetting("submit",1)},off:function(){Buzzd.Ajax.setSetting("submit",0)}};Buzzd.Ajax.settings.submit=true;ba=Buzzd.Ajax;if(window.jQuery){jQuery.fn.buzzdAjaxForm2=function(opts){if(!opts){opts={}}if((!this[0])||"FORM"!==this[0].nodeName){Buzzd.log("ERROR: buzzdAjaxForm2: arg was not FORM but X: "+Buzzd.describeElement(this));X=this;return}var form=$(this);var buttons=$(this).find("[type=submit],.ajax-action");var method=$(this).attr("method");Buzzd.log("buzzdAjaxForm2 on Elem "+Buzzd.describeElement(this)+" with "+buttons.length+" submitables");Elem=this;buttons.click(function(e){e.stopPropagation();Buzzd.log("Received ClickEvent");ClickEvent=e;m=/\b([a-zA-Z]+)-([a-zA-Z0-9]+)-ajax-action\b/.exec($(this).attr("class"));if(!m){Buzzd.log('Error: failed to parse "'+$(this).attr("class")+'"');return}var url=Buzzd.get("ajax root")+m[1]+"/"+m[2];var noSpinName,spinName;var notSpinning=form.find(noSpinName="."+m[1]+"-"+m[2]+"-not-spinning");var spinning=form.find(spinName="."+m[1]+"-"+m[2]+"-spinning");if(0&&0==spinning.length){Buzzd.log("spinning not found: "+spinName);return}if(0&&0==notSpinning.length){Buzzd.log("not spinning not found: "+noSpinName);return}notSpinning.hide();spinning.show();if("javascript:void(0);"==form.attr("action")){form.trigger("submit");B.log("triggered submit to clear results")}else{B.log("diddn't trigger submit to clear results -- action attr of form was \""+form.attr("action"))}Buzzd.log(""+form.serialize());var myAjaxArgs={type:method,url:url,dataType:opts.dataType?opts.dataType:"html",data:form.serialize(),complete:function(xhr,status){Status=status;Xhr=xhr;spinning.hide();notSpinning.show();if(opts.onComplete&&"function"==typeof(opts.onComplete)){opts.onComplete(xhr,status)}},success:function(response){Response=response;B.log("set ajax Response");if(opts.onSuccess&&"function"==typeof(opts.onSuccess)){opts.onSuccess(response)}else{if(opts.onSuccess&&opts.onSuccess[m[1]+"-"+m[2]]){opts.onSuccess[m[1]+"-"+m[2]](response)}else{$(form[0].parentNode).html(response)}}}};Buzzd.Ajax.registerRequest(myAjaxArgs);if(Buzzd.Ajax.settings.submit){jQuery.ajax(myAjaxArgs)}else{Buzzd.log("Ajax submit turned off.")}return false})}}Buzzd.initMagicAjaxForm=function(formElem,ajaxArgs){Buzzd.log("initing magicajax form: "+formElem);if(!ajaxArgs){ajaxArgs={}}if("string"==typeof formElem){formElem=$(formElem)}if(!formElem){Buzzd.log("ERROR can't initMagicAjaxForm: bad form element (FormElem)");FormElem=formElem;return}if(!formElem.getAttribute("method")){Buzzd.log("Can't Ajax!  no form method specified! "+Buzzd.describeElementShort(formElem));return}var submitables=$(formElem).find(Buzzd._submitable);var magicSubmitables=[],actions=[],matches;submitables.each(function(i){if(action=B._parseClassNameForAjax(this.className)){magicSubmitables.push(this);actions.push(action)}});var action;if(action=Buzzd._parseClassNameForAjax(formElem.className)){magicSubmitables.push(formElem);actions.push(action)}else{if(action=Buzzd._parseFormActionForAjax(formElem)&&$(formElem).hasClass("magic-dual-form")){magicSubmitables.push(formElem);actions.push(action)}else{Buzzd.log("NOTICE: form was not itself a magic ajax thing :"+B.describeElement(formElem))}}$(formElem).attr("action","javascript: void(0)");$(magicSubmitables).each(function(i){Buzzd.log("trying to add ajax magic to "+B.describeElement(this)+" num:"+i);Buzzd._initMagicSubmitable(this,actions[i],ajaxArgs,formElem)});var num=magicSubmitables.length;var totalNum=submitables.length;Buzzd.log(Buzzd.identifyElement(formElem)+" magic ("+num+"/"+totalNum+" submitable elems inited)")};Buzzd._initMagicSubmitable=function(elem,action,ajaxArgs,formElem){var moduleName=action.module,actionName=action.action;var actionStr=moduleName+"-"+actionName;var dataType=ajaxArgs.dataType?ajaxArgs.dataType:"html";if($(elem).hasClass("autospin")){Buzzd.prepareSpin(elem)}var onClickOrSubmit=function(e){e.stopPropagation();var spinner=$("."+actionStr+"-ajax-spinning");if(!spinner.size()){spinner=$("."+actionStr+"-ajax-spinner")}if(!spinner.size()){Buzzd.log("no spinner for "+actionStr+" in initMagicAjaxForm()! ")}var url=Buzzd.get("ajax root")+moduleName+"/"+actionName;var disappearMe;if("FORM"!=this.nodeName){disappearMe=$(this)}var append=elem.getAttribute("name")?("&"+elem.getAttribute("name")+"="+elem.getAttribute("value")):"";var myAjaxArgs={type:formElem.getAttribute("method"),url:url,dataType:dataType,data:$(formElem).serialize()+append,beforeSend:function(){spinner.show();if(disappearMe){disappearMe.hide()}},complete:function(xhr,status){spinner.hide();if(ajaxArgs.onComplete){ajaxArgs.onComplete(xhr,status)}},success:function(response){Pn=formElem.parentNode;Form=formElem;Response=response;Buzzd.log("set ajax response to Response. and Form. and parent node Pn");if(response){$(formElem.parentNode).html(response)}}};for(var i in ajaxArgs){myAjaxArgs[i]=ajaxArgs[i]}Buzzd.Ajax.registerRequest(myAjaxArgs);if(Buzzd.Ajax.settings.submit){jQuery.ajax(myAjaxArgs)}else{Buzzd.log("Ajax submit turned off.")}};if("FORM"===elem.nodeName){$(elem).submit(onClickOrSubmit)}else{$(elem).click(onClickOrSubmit)}};Buzzd.Modal={init:function(){if(Buzzd.Modal.initted){return}if(typeof($)=="undefined"){throw ("Error: jQuery is required for this page to function properly.");return}var objModalBg=document.createElement("div");objModalBg.id="modal-bg";$(objModalBg).addClass("modal-bg");document.body.appendChild(objModalBg);this.initted=true},openModal:function(modal){if(!this.initted){this.init()}if(typeof(modal)=="string"){var modals=$("#"+modal)}else{var modals=$("#"+modal.id);modals.load(modal.action)}if(!modals.size()){Buzzd.log("Couldn't open modal. No modal existed with the id '"+modal+"'");return}Buzzd.Modal.lastModalsShown=modals;$("#modal-bg").fadeIn(B.fadeSpeed,function(){Buzzd.Modal.lastModalsShown.show()});$(window).keydown(function(event){if(event.keyCode==27){Buzzd.Modal.closeLastModal()}})},closeLastModal:function(callback){Buzzd.Modal._closeModal(Buzzd.Modal.lastModalsShown,callback)},closeModal:function(modalIdentifier){Buzzd.Modal._closeModal($("#"+modalIdentifier))},_closeModal:function(jqueryElems,callback){if(!callback){callback=function(){}}if(jqueryElems){jqueryElems.hide();$("#modal-bg").fadeOut(B.fadeSpeed,function(){callback()})}else{callback()}},initPasswordInput:function(elem){$(elem).focus(function(e){if("text"==$(this).attr("type")){this.value="";$(elem).attr("type","password")}});$(elem).blur(function(e){if("password"==$(this).attr("type")&&""==this.value){elem.type="text";elem.value="password"}})},getInnerName:function(name){var matches=/^[a-zA-Z0-9]+\[([^\]]+)\].*$/.exec(name);return(matches)?matches[1]:null}};(function(){var defaults={backgroundClass:"modal-background semi-transparent"};jQuery.fn.showAsModal=function(opts){var opts=$.extend({},defaults,opts||{});if(!$(this).attr("id")){Buzzd.log("ERROR: couldn't find id for ".Buzzd.describe(this));return}if(Buzzd._widgetShowing){Buzz.log("ERROR: modal already showing!");return}Buzzd.log("trying to show modal: "+$(this).attr("id"));var id=opts.backgroundClass.replace(/ /g,"-");if(0==$("#"+id).length){$("body").append("<div id='"+id+"' class='"+opts.backgroundClass+"'></div>")}$(this).data("divId",id);window.location="#";Buzzd._widgetShowing=$(this);var self=this;$("#"+id).fadeIn(B.fadeSpeed,function(){self.show()})};jQuery.fn.hideModal=function(opts){var bgId;if(bgId=$(this).data("divId")){$(this).hide();Buzzd._widgetShowing=null;Buzzd._widgetShowing=null;$("#"+bgId).fadeOut(Buzzd.fadeSpeed,function(){})}else{Buzzd.log("Error: no divId associated with "+Buzzd.describe(opts))}}})();