// CookieMonster.js
var CookieMonster=Class.create({'create':function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires='; expires='+date.toGMTString();}
else{var expires='';}
document.cookie=name+'='+value+expires+'; path=/';},'read':function(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;},'erase':function(name){this.create(name,'',-1);},'supported':function(){this.create('pestotestcookie','foo',1);if(this.read('pestotestcookie')=='foo'){this.erase('pestotestcookie');return true;}
return false;}});

// ElementCache.js
var ElementCache=Class.create(Hash,{'options':{'require_class_name':false,'class_name':'cache','require_prefix':false,'prefix':'cache-'},'_cache':function($target){var id=$target.readAttribute('id');if(!id){return}
if(this.options.require_class_name){var has_class_name=target.hasClassName(this.options.class_name);if(!has_class_name){return;}}
if(this.options.require_prefix){var has_prefix=id.startsWith(this.options.prefix);if(!has_prefix){return;}}
this.set(id,$target);},'initialize':function($super,$target,$options){$super();this.target=$($target);if($options){Object.extend(this.options,$options);}
var cache=this._cache.bind(this);this.target.descendants().each(cache);}});

// HoverSwapper.js
var HoverSwapper=Class.create({'_handle':function(event){if(this.should_stop_event){event.stop();}
var a=event.findElement('a');var li=a.up('li');this.tabs.each(this._toggle_selected,li);var id=a.readAttribute('href');if(Prototype.Browser.IE){id=id.split('/').last();}
var target_id=id+this.panel_class_name;var target=$(target_id);if(this.panels.include(target)){this.panels.each(this._toggle,target);}
else{warn('target: '+target_id+' does not exist');}
var memo={'swapper':this.target.identify(),'id':id};fire('hover-swapper:state-changed',memo);},'_toggle_selected':function($candidate){var selected=$candidate.hasClassName('selected');if(this==$candidate&&!selected){$candidate.addClassName('selected');}
else if(this!=$candidate&&selected){$candidate.removeClassName('selected');}},'_toggle':function($candidate){var visible=$candidate.visible();if(this==$candidate&&!visible){$candidate.show();}
else if(this!=$candidate&&visible){$candidate.hide();}},'initialize':function($target,$options){this.target=$($target);this.event_name=getattr($options,'event','mouseover');this.should_stop_event=getattr($options,'stop',true);this.panel_class_name=getattr($options,'panel_identifier','-swapper-panel');this.tabs=this.target.select('.swapper-tabs li');this.links=this.target.select('.swapper-tabs a');this.panels=this.links.invoke('readAttribute','href').collect(function($id){if(Prototype.Browser.IE){$id=$id.split('/').last();}
var target_id=$id+this;var target=$(target_id);if(target){return target;}
else{warn('target: '+target_id+' does not exist');}},this.panel_class_name);this.panels.each(function($target){if($target.hasClassName('hide-to-begin-with')){$target.removeClassName('hide-to-begin-with');$target.hide();}});var handle=this._handle.bindAsEventListener(this);this.links.invoke('observe',this.event_name,handle);if(this.should_stop_event&&this.event_name!='click'){this.links.invoke('observe','click',function(event){event.stop();});}}});

// ImagePreloader.js
var ImagePreloader=Class.create({'images':new Array(),'_preload':function($src){log('preloading: '+$src);var target=document.createElement('img');Event.observe(target,'load',this.handle_load.bind(this,target));target.src=$src;},'handle_load':function($target){log('loaded '+$target.src);Event.stopObserving($target,'load');var raw_target_src=$target.src;var target_src=this.images.find(function($src){return raw_target_src.endsWith($src);});this.images=this.images.without(target_src);if(!this.images.length){this.notify_complete();}},'notify_complete':function(){log('notifying complete');var event_name=this.id+':preloading:completed';fire(event_name,{});},'initialize':function($id,$images,$pretend_if_running_locally){log('new ImagePreloader()');var str=typeof('');var arr=typeof([]);if($id&&typeof($id)==str){this.id=$id;}
else{warn('ImagePreloader constructor must be passed a valid id');return;}
var loc=window.location.href;if($pretend_if_running_locally&&(loc.indexOf(':8080')>-1||loc.indexOf('localhost')>-1)){this.notify_complete();}
else{log('actually attempting to preload');if($images){var type=typeof($images);if(type==str){this.images=new Array($images);}
else if(type==arr){this.images=$images;}
else{warn('ImagePreloader constructor must be passed a string or array of $images');return;}
this.preload=this._preload.bind(this);this.images.clone().each(this.preload);}}}});

// NamedFormHandler.js
var NamedFormHandler=Class.create({'DEFAULT_OPTIONS':{'failure_message':'There was an error submitting your request','highlighting_mode':'none','border_class_name':'show-border','notify_section_resize':false,'rehide':false},'on_data_success':function($data){this.success_message.show();this.success_message.style.display='block';this.form.hide();},'on_data_failure':function($data){var data=$data;this.errors.show().update(data['message']);var targets=new Array();if(this.options.highlighting_mode=='asterix'){targets=this.asterixes.findAll(function($target){var field_name=$target.identify().sub(this.name+'-form-','').sub('-asterix','');return data['fieldnames'].include(field_name);}.bind(this));}
else if(this.options.highlighting_mode=='border'){log('border');targets=this.fields.findAll(function($target){log($target);var field_name=$target.identify().sub(this.name+'-form-','').sub('-container','');log(field_name);log(data['fieldnames']);return data['fieldnames'].include(field_name);}.bind(this));}
targets.invoke('addClassName',this.options.border_class_name);},'on_response_success':function(transport){var response=transport.responseText;var data=response.evalJSON(true);if(data.status=='success'){this.on_data_success(data);}
else{this.on_data_failure(data)}},'on_response_failure':function(){this.errors.show().update(this.options.failure_message);},'on_response_complete':function(){if(this.options.notify_section_resize){event.findElement('div.section').fire('section:resized');}},'handle_submit':function(event){event.stop();this.errors.hide().update();if(this.options.highlighting_mode=='asterix'){this.asterixes.invoke('hide');}
else if(this.options.highlighting_mode=='border'){this.fields.invoke('removeClassName',this.options.border_class_name);}
this.form.request({'onSuccess':this.on_response_success.bind(this),'onFailure':this.on_response_failure.bind(this),'onComplete':this.on_response_complete.bind(this)});},'initialize':function($name,$options){this.name=$name;this.options=this.DEFAULT_OPTIONS;if($options){Object.extend(this.options,$options);}
this.container=$(this.name+'-form-container');this.errors=$(this.name+'-form-errors');this.form=$(this.name+'-form');this.submit_link=$(this.name+'-form-submit');this.success_message=$(this.name+'-form-success-message');if(this.options.highlighting_mode=='asterix'){this.asterixes=this.form.select('.asterix');}
else if(this.options.highlighting_mode=='border'){this.fields=this.form.select('.field');}
var submit_handler=this.handle_submit.bindAsEventListener(this);this.form.observe('submit',submit_handler);this.submit_link.observe('click',submit_handler);if(this.options.rehide){this.container.rehide('.hide-to-begin-with');}}});

