PodCore=Class.create();PodCore.prototype={initialize:function(){this.loadEvent='core:load';this.callbacks={};},evalTransport:function(transport){try{response=eval('('+transport.responseText+')')}catch(e){response={}}
return response;},evalWindowLoadScripts:function(content){this.removeLoadObservers();var scripts=content.extractScripts();if(scripts){for(var i=0;i<scripts.length;i++){var script=scripts[i];var replace=script.gsub(/Event\.observe[\s\n\r]*\([\s\n\r]*window,[\s\n\r]*\'load\'/,"Event.observe(document, '%s'".replace('%s',this.loadEvent));replace=replace.gsub(/document\.observe[\s\n\r]*\([\s\n\r]*\'dom:loaded\',[\s\n\r]/,"Event.observe(document, '%s',".replace('%s',this.loadEvent));content=content.replace(script,replace);}
content.evalScripts();}
return content;},removeLoadObservers:function(){Event.stopObserving(document,this.loadEvent);return this;},addToGarbage:function(instance,id,scope){if(typeof podGarbage!='undefined'){podGarbage.add(instance,id,scope);}
return this;},removeFromGarbage:function(id,scope){if(typeof podGarbage!='undefined'){podGarbage.remove(id,scope);}
return this;},cleanGarbage:function(scope){if(typeof podGarbage!='undefined'){podGarbage.clean(scope);}
return this;},redirect:function(transport){var response=this.evalTransport(transport);if(response.redirect){window.location=response.redirect;}},destroy:function(){return this;},addCallback:function(context,object,method,params){if(typeof(this.callbacks[context])=='undefined'){this.callbacks[context]=[];}
var ffEvent={};ffEvent.object=object;ffEvent.method=method;ffEvent.params=params;this.callbacks[context].push(ffEvent);},_beforeLoad:function(params){this._dispatchEvent('loadBefore',params);},_afterLoad:function(params){this._dispatchEvent('loadAfter',params);},_dispatchEvent:function(event,params){if(typeof(this.callbacks[event])!='undefined'){for(var i=0;i<this.callbacks[event].length;i++){var callback=this.callbacks[event][i];if(callback.object&&callback.method&&typeof(callback.object[callback.method])!='undefined'){var rParams=Object.extend(params||{},callback.params||{});callback.object[callback.method](rParams);}}}}}
PodGarbage=Class.create();PodGarbage.prototype={initialize:function(){this.instances={global:{}};},add:function(instance,id,scope){var scope=this.getScope(scope);if(!this.hasScope(scope)){this.instances[scope]={};}
this.instances[scope][id]=null;this.instances[scope][id]=instance;return this;},remove:function(id,scope){var scope=this.getScope(scope);this.instances[scope][id]=null;return this;},clean:function(scope){var scope=this.getScope(scope);var instances=this.instances[scope];for(var prop in instances){var instance=instances[prop];if(typeof instance.destroy!='undefined'){instance.destroy();}}
return this;},getScope:function(scope){if(typeof scope=='undefined'){return'global';}
return scope;},hasScope:function(scope){return(typeof scope!='undefined'&&typeof this.instances[scope]!='undefined');}}
PodRegistry=Class.create();PodRegistry.prototype={initialize:function(){this.storage={};},register:function(key,value,override){this.storage[key]=value;},registry:function(key){return this.storage[key];},unregister:function(key){delete this.storage[key];},isRegistered:function(){return(typeof(this.storage[key])!=='undefined');}}
PodBuffer=Class.create();PodBuffer.prototype={initialize:function(){this.buffer=[];Event.observe(window,'load',this.write.bindAsEventListener(this));},write:function(event){for(var i=0;i<this.buffer.length;i++){var item=this.buffer[i];var node=$$(item.node)[0];if(node){node.update(item.content);}
delete item;delete node;}},add:function(element,content){var item={node:element,content:content}
this.buffer.push(item);}}
StickyElement=Class.create();StickyElement.prototype={initialize:function(element,limit,offset){if(!$$(element)[0]){return;}
this.element=$$(element)[0];this.base=this.element.cumulativeOffset();this.offset=offset?offset:50;this.element.setStyle({position:'relative',zIndex:'800'});if(limit){this.setLimit(null,limit);if(!this.limit){Event.observe(window,'load',this.setLimit.bindAsEventListener(this,limit));}}
Event.observe(window,'scroll',this.update.bindAsEventListener(this));},setLimit:function(event,limit){this.limit=$$(limit)[0];if(this.limit&&event){this.update(event);}},getTarget:function(top,height){var offsets=document.viewport.getScrollOffsets();var limits=this.limit?this.limit.cumulativeOffset():false;if(this.base.top<=offsets.top){if(!limits){return(offsets.top-this.base.top);}
if(offsets.top<(limits.top-height-this.offset)){return(offsets.top-this.base.top);}
return(limits.top-height-this.offset-this.base.top);}
if(offsets.top<this.base.top&&top!=0){return 0;}
return false;},update:function(event){if(this.effect){this.effect.cancel();}
var offsets=this.element.cumulativeOffset();var height=this.element.getHeight();var target=this.getTarget(offsets.top,height);if(false!==target){this.effect=new Effect.Morph(this.element,{style:'top: '+target+'px;',duration:0.5});}}}
CurrencySwitcher=Class.create(PodCore,{initialize:function(method,config){this.method=method;this.config=config;this.scheduled=false;Ajax.Responders.register({onComplete:this.switchCurrency.bindAsEventListener(this)});Event.observe($(this.method+':country_id'),'change',this.setCountry.bindAsEventListener(this));},getMethod:function(){var method='save-'+this.method;return method.camelize();},getCountry:function(){if(!this.country){this.country=$(this.method+':country_id').value;}
return this.country;},setCountry:function(event){var element=Event.element(event);this.country=element.value;},switchCurrency:function(response){if(response.url.include(this.getMethod())){this.scheduled=true;}
if(true==this.scheduled&&0==Ajax.activeRequestCount){var url=this.config[this.getCountry()];if(typeof(url)=='string'){window.location=url;}}}});CurrencySwitcher.Menu=Class.create();CurrencySwitcher.Menu.prototype={initialize:function(menu,config){this.menu=$$(menu)[0];this.config=config;Event.observe(this.menu,'change',this.switchCurrency.bindAsEventListener(this));},switchCurrency:function(event){var element=Event.element(event);var url=this.config[element.value];if(typeof(url)=='string'){window.location=url;}}}
var podGarbage=new PodGarbage();var podRegistry=new PodRegistry();var podBuffer=new PodBuffer();
