
var Fatsoma={version:'0.1',nextID:1,getIdentifier:function(){return'fui'+this.nextID++;},Common:{},UI:{Generators:{}},Temp:{},Time:{constants:(function(){var constants,quantities,i,j,type,nper;constants=$H();quantities=$A([['ms',1000],['sec',60],['min',60],['hour',24],['day',7],['week']]);for(i=0;i<quantities.length-1;i++){type=quantities[i][0];nper=1;for(j=i+1;j<quantities.length;j++){nper*=quantities[j-1][1];constants.set(type+'_in_'+quantities[j][0],nper);}}
return constants;})(),getUnits:function(time){var unit_types,i,times,unit_name,total_name,total_units,remaining,this_name,this_units,ms_in_unit,max_per_unit,remaining_in_unit;times=this.constants;unit_types=$A(['sec','min','hour','day']);units=$H();remaining=time;for(i=0;i<unit_types.length;i++){unit_name=unit_types[i];this_name=unit_name+'s';total_name='total_'+this_name;ms_in_unit=times.get('ms_in_'+unit_name);total_units=Math.floor(time/ms_in_unit);units.set(total_name,total_units);max_per_unit=times.get(unit_name+'_in_'+unit_types[i+1]);remaining_in_unit=remaining/ms_in_unit;if(max_per_unit==undefined){this_units=remaining_in_unit;}else{this_units=remaining_in_unit%max_per_unit;}
remaining-=this_units*ms_in_unit;this_units=Math.floor(this_units);units.set(this_name,this_units);}
return units;}}};Fatsoma.Cookie={pairs:(function(){var pairs=$H();var cookies=$A(document.cookie.split('; '));cookies.each(function(cookie){cookie=cookie.split('=');pairs.set(cookie[0],cookie[1]);});return pairs;})(),set:function(cookieName,value,expiry){var cookie=cookieName+'='+value;if(expiry){var date=new Date();date.setTime(date.getTime()+expiry);cookie+='; expires='+date.toGMTString();}
document.cookie=cookie;if(value!==null){this.pairs.set(cookieName,value);}else{this.pairs.unset(cookieName);}},get:function(cookieName){return this.pairs.get(cookieName);},unset:function(cookieName){this.set(cookieName,null,-1);}};Fatsoma.Common.pluralize=function pluralize(n,word){if(n==1){return"1 "+word;}else{return n+" "+word+"s";}};Fatsoma.Common.QueryString=Class.create(Hash,{loadCurrent:function(){this.update(window.location.search.toQueryParams());},toString:function(){return this.toQueryString();},refresh:function(){window.location=window.location.pathname+'?'+this;}});Fatsoma.UI.SimpleHover=Class.create({element:null,active:false,hovering:false,hoveroutChecker:null,activateCallback:null,deactivateCallback:null,initialize:function(elem){elem=$(elem);if(!elem){throw"Attempted to create SimpleHover from an element that could not be found";}
this.bindTo(elem);this.element=elem;this.element.hide();},bindTo:function(elem){elem=$(elem);if(!elem){throw"Attempted to bind SimpleHover to an element that could not be found";}
elem.observe('mouseout',this._boundOut.bindAsEventListener(this));elem.observe('mouseover',this._boundOver.bindAsEventListener(this));},_boundOver:function(event){this.hovering=true;this.show();},_boundOut:function(event){this.hovering=false;},hide:function(force){if(!this.active){return;}
this.active=false;this.hoveroutChecker.stop();this.element.hide();if(this.deactivateCallback!=null){this.deactivateCallback();}},show:function(){if(this.active){return;}
this.active=true;this.hoveroutChecker=new PeriodicalExecuter(function(pe){if(!this.hovering){this.hide();}}.bind(this),0.025);this.element.show();if(this.activateCallback!=null){this.activateCallback();}},onActivate:function(func){this.activateCallback=func;},onDeactivate:function(func){this.deactivateCallback=func;}});Fatsoma.UI.CheckboxList=Class.create({count:0,initialize:function(){this.checkboxes=$A();this.globalCheckboxes=$A();this.setCheckState=this._setCheckboxes.curry(this.checkboxes);this.setGlobalCheckState=this._setCheckboxes.curry(this.globalCheckboxes);this.fatID=Fatsoma.getIdentifier();},_fireUpdate:function(){document.fire(this.fatID+':update');},addUpdateObserver:function(func){document.observe(this.fatID+':update',func);},addCheckbox:function(elem){elem=$(elem);elem.observe('click',this.clickListener.bindAsEventListener(this));if(elem.checked){++this.count;}
this.checkboxes.push(elem);this._updateGlobalCheckboxes();},addGlobalCheckbox:function(elem){elem=$(elem);elem.observe('click',this.globalClickListener.bindAsEventListener(this));this.globalCheckboxes.push(elem);},clickListener:function(event){var element=$(event.element());if(element.checked){++this.count;}else{--this.count;}
this._updateGlobalCheckboxes();this._fireUpdate();},_updateGlobalCheckboxes:function(){if(this.count==this.checkboxes.length){this.setGlobalCheckState(true);}else if(this.count===0){this.setGlobalCheckState(false);}},globalClickListener:function(event){var element=$(event.element());this.checkboxes.each(function(box){box.checked=element.checked;}.bind(this));if(element.checked){this.count=this.checkboxes.length;}else{this.count=0;}
this._fireUpdate();},_setCheckboxes:function(boxes,state){if(state===undefined){throw"state argument not supplied in _setCheckboxes";}
boxes.each(function(box){box.checked=state;});}});Fatsoma.UI.Generators.CheckboxList=function(listid,type){var listui=new Fatsoma.UI.CheckboxList();Event.observe(document,'dom:loaded',function(){$$('#'+listid+' input[type="checkbox"]').each(function(elem){listui.addCheckbox(elem);});listui.addGlobalCheckbox(listid+'_all');listui.addUpdateObserver(function(){var statusbox=$(listid+'_status');statusbox.update(Fatsoma.Common.pluralize(listui.count,type)+" selected");});});return listui;};