if(!PfpjRom)var PfpjRom={};PfpjRom.AddressTippersBehaviour=Class.create();PfpjRom.AddressTippersBehaviour.prototype={initialize:function(tippers_value,state,config,levels_to_paret,is_tippers_required,enable_obj,primary_billing_id,primary_shipping_id,is_default_billing,is_default_shipping){this.enableObj=(enable_obj==true||enable_obj==null?true:false);this.config=config||{};is_tippers_required=(is_tippers_required==true||enable_obj==null?true:false);this.triggerBaseId=(this.config.trigger||null);this.requiredHintPath=(this.config.required_hint_path||"span.required");this.optionsConfig=(this.config.options||{});this.fieldsConfig=(this.config.fields||{});this.requiredClass=(this.config.required_class||"required-entry");this.state=state;this.primaryBilling=(primary_billing_id!=null&&$(primary_billing_id)!=undefined?$(primary_billing_id):null);this.primaryShipping=(primary_shipping_id!=null&&$(primary_shipping_id)!=undefined?$(primary_shipping_id):null);this.isDefaultBilling=(is_default_billing==true?true:false);this.isDefaultShipping=(is_default_shipping==true?true:false);if(!is_tippers_required){for(var fieldName in this.fieldsConfig){if(fieldName.indexOf('pfpj_tip_pers')!=-1){for(var fieldOption in this.fieldsConfig[fieldName]){if(this.state=='all'||this.state=='billing')
this.fieldsConfig[fieldName][fieldOption]['billing'].required=false;if(this.state=='all'||this.state=='shipping')
this.fieldsConfig[fieldName][fieldOption]['shipping'].required=false;}
break;}}}
this.tippersValue=(!(tippers_value==""||tippers_value==undefined)?tippers_value:this.config.default_option);this.levelsToParet=(levels_to_paret!=undefined?levels_to_paret:1);this.enableObject(this,this.enableObj);},enableObject:function(addr,enableObj){if(!enableObj){addr.enableObj=false;return false;}
addr.enableObj=enableObj;addr.fields={};for(var fieldName in addr.fieldsConfig){if($(fieldName)){addr.fields[fieldName]=$(fieldName);}}
addr.options={};for(var optionValue in addr.optionsConfig)
if($(addr.triggerBaseId+optionValue))
addr.options[optionValue]=$(addr.triggerBaseId+optionValue);for(var option in addr.options)
Event.observe(addr.options[option],'click',addr.eventListenerTippers.bindAsEventListener(addr,addr));if(addr.state=='all'||addr.state=='billing'){Event.observe(addr.fields[addr.getFieldName(addr,'pfpj_for_billing')],'change',addr.eventListenerStateFields.bindAsEventListener(addr,addr));}
if(addr.state=='all'||addr.state=='shipping'){Event.observe(addr.fields[addr.getFieldName(addr,'pfpj_for_shipping')],'change',addr.eventListenerStateFields.bindAsEventListener(addr,addr));}
if(addr.primaryBilling!=null)
Event.observe(addr.primaryBilling,'change',addr.eventListenerPrimaryBilling.bindAsEventListener(addr,addr));if(addr.primaryShipping!=null)
Event.observe(addr.primaryShipping,'change',addr.eventListenerPrimaryShipping.bindAsEventListener(addr,addr));addr.initObject(addr);return true;},initObject:function(addr){addr.switchOptions(addr);},setTippersValue:function(addr,v){addr.tippersValue=v;},setStateDefaultValue:function(addr,name,state){var _name=addr.getFieldName(addr,name);if(addr.isDefaultBilling&&_name=='pfpj_for_billing'){addr.fields[_name].value=1;addr.fields[_name].checked=true;}else if(addr.isDefaultShipping&&_name=='pfpj_for_shipping'){addr.fields[_name].value=1;addr.fields[_name].checked=true;}else{addr.fields[_name].value=addr.getDefaultValue(addr,_name,addr.tippersValue,state);addr.fields[_name].checked=(addr.fields[_name].value==1?true:false);}},eventListenerTippers:function(e,addr){addr.setTippersValue(addr,Event.element(e).value);if(addr.state=='all'||addr.state=='billing')
addr.setStateDefaultValue(addr,'pfpj_for_billing',addr.state);if(addr.state=='all'||addr.state=='shipping')
addr.setStateDefaultValue(addr,'pfpj_for_shipping',addr.state);addr.switchOptions(addr);},eventListenerStateFields:function(e,addr){var el=Event.element(e);for(var optionValue in addr.options){if(addr.options[optionValue].checked==true){addr.setTippersValue(addr,optionValue);}}
addr.setStateFieldsByPrimary(addr,el);addr.switchOptions(addr);},setStateFieldsByPrimary:function(addr,el){if(el.id==addr.getFieldName(addr,'pfpj_for_billing')){if(addr.primaryBilling!==null){if(addr.primaryBilling.checked)
addr.isDefaultBilling=true;else
addr.isDefaultBilling=false;}
if(addr.isDefaultBilling){el.checked=true;el.value=1;}}
if(el.id==addr.getFieldName(addr,'pfpj_for_billing')&&addr.primaryBilling!=null){el.value=(el.checked?1:0);if(!el.checked&&addr.primaryBilling.checked)
addr.primaryBilling.checked=false;}
if(el.id==addr.getFieldName(addr,'pfpj_for_shipping')){if(addr.primaryShipping!==null){if(addr.primaryShipping.checked){addr.isDefaultShipping=true;}else{addr.isDefaultShipping=false;}}
if(addr.isDefaultShipping){el.checked=true;el.value=1;}}
if(el.id==addr.getFieldName(addr,'pfpj_for_shipping')&&addr.primaryShipping!=null){el.value=(el.checked?1:0);if(!el.checked&&addr.primaryShipping.checked)
addr.primaryShipping.checked=false;}},eventListenerPrimaryBilling:function(e,addr){if(Event.element(e).checked){var billingName=addr.getFieldName(addr,'pfpj_for_billing');addr.fields[billingName].checked=true;addr.fields[billingName].value=1;addr.isDefaultBilling=true;}else{addr.isDefaultBilling=false;}
addr.eventListenerStateFields(e,addr);},eventListenerPrimaryShipping:function(e,addr){if(Event.element(e).checked){var shippingName=addr.getFieldName(addr,'pfpj_for_shipping');addr.fields[shippingName].checked=true;addr.fields[shippingName].value=1;addr.isDefaultShipping=true;}else{addr.isDefaultShipping=false;}
addr.eventListenerStateFields(e,addr);},getFieldName:function(addr,name){for(var fieldName in addr.fields){if(fieldName.indexOf(name)!=-1)
return fieldName;}
return null;},getIsForBilling:function(addr){var billingEl=addr.fields[addr.getFieldName(addr,'pfpj_for_billing')];if(billingEl.checked==true)
return true;return false;},getIsForShipping:function(addr){var shippingEl=addr.fields[addr.getFieldName(addr,'pfpj_for_shipping')];if(shippingEl.checked==true)
return true;return false;},isShowField:function(addr,fieldName,tippers_value,state,check_state_field){var ret;if(state=='billing'){ret=((check_state_field&&addr.getIsForBilling(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value][state].show;}else if(state=='shipping'){ret=((check_state_field&&addr.getIsForShipping(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value][state].show;}else{ret=((check_state_field&&addr.getIsForBilling(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value]['billing'].show;ret=ret||(((check_state_field&&addr.getIsForShipping(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value]['shipping'].show);}
return ret;},isRequiredField:function(addr,fieldName,tippers_value,state,check_state_field){var ret;if(state=='billing'){ret=((check_state_field&&addr.getIsForBilling(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value][state].required;}else if(state=='shipping'){ret=((check_state_field&&addr.getIsForShipping(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value][state].required;}else{ret=((check_state_field&&addr.getIsForBilling(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value]['billing'].required;ret=ret||(((check_state_field&&addr.getIsForShipping(addr))||!check_state_field)&&addr.fieldsConfig[fieldName][tippers_value]['shipping'].required);}
return ret;},getDefaultValue:function(addr,fieldName,tippers_value,state){var defaultValue;if(state!='all'){defaultValue=addr.fieldsConfig[fieldName][tippers_value][state].defaultValue;}else{defaultValue=(addr.fieldsConfig[fieldName][tippers_value]['billing'].defaultValue==1||addr.fieldsConfig[fieldName][tippers_value]['shipping'].defaultValue==1?1:0);}
return defaultValue;},switchOptions:function(addr){var billingName=addr.getFieldName(addr,'pfpj_for_billing');var shippingName=addr.getFieldName(addr,'pfpj_for_shipping');if(addr.state=='all'||addr.state=='billing')
addr.setStateFieldsByPrimary(addr,addr.fields[billingName]);if(addr.state=='all'||addr.state=='shipping')
addr.setStateFieldsByPrimary(addr,addr.fields[shippingName]);for(var fieldName in addr.fields){if(billingName!=fieldName&&shippingName!=fieldName){if(addr.isShowField(addr,fieldName,addr.tippersValue,addr.state,true)){addr.fields[fieldName].up(addr.levelsToParet).show();}else{addr.fields[fieldName].up(addr.levelsToParet).hide();addr.fields[fieldName].value="";}}}
if(addr.state=='all'||addr.state=='billing'){if(addr.isShowField(addr,billingName,addr.tippersValue,addr.state,false)){addr.fields[billingName].up(addr.levelsToParet).show();}else{addr.fields[billingName].up(addr.levelsToParet).hide();addr.setStateDefaultValue(addr,'pfpj_for_billing',addr.state);}}
if(addr.state=='all'||addr.state=='shipping'){if(addr.isShowField(addr,shippingName,addr.tippersValue,addr.state,false)){addr.fields[shippingName].up(addr.levelsToParet).show();}else{addr.fields[shippingName].up(addr.levelsToParet).hide();addr.setStateDefaultValue(addr,'pfpj_for_shipping',addr.state);}}
for(var fieldName in addr.fields){if(billingName!=fieldName&&shippingName!=fieldName){var spanReqEl=addr.fields[fieldName].up(addr.levelsToParet).down(addr.requiredHintPath);if(addr.isRequiredField(addr,fieldName,addr.tippersValue,addr.state,true)){addr.fields[fieldName].removeClassName(addr.requiredClass);addr.fields[fieldName].addClassName(addr.requiredClass);if(spanReqEl!=undefined)
spanReqEl.show();}else{addr.fields[fieldName].removeClassName(addr.requiredClass);if(spanReqEl!=undefined)
spanReqEl.hide();}}}},mutateFieldsNames:function(addr,prefix_new,prefix_old,suffix_new,suffix_old){var newFieldsConfig={};for(var fieldName in addr.fieldsConfig){var newFieldName=addr._mutateName(fieldName,prefix_new,prefix_old,suffix_new,suffix_old);;newFieldsConfig[newFieldName]=addr.fieldsConfig[fieldName];}
addr.fieldsConfig=newFieldsConfig;addr.triggerBaseId=addr._mutateName(addr.triggerBaseId,prefix_new,prefix_old,suffix_new,suffix_old);},mutatePrimaryNames:function(addr,prefix_new,prefix_old,suffix_new,suffix_old){var primary_billing_id;var primary_shipping_id;if(addr.primaryBilling!=null){primary_billing_id=addr._mutateName(addr.primaryBilling.id,prefix_new,prefix_old,suffix_new,suffix_old);addr.primaryBilling=($(primary_billing_id)!=undefined?$(primary_billing_id):null);}
if(addr.primaryShipping!=null){primary_shipping_id=addr._mutateName(addr.primaryShipping.id,prefix_new,prefix_old,suffix_new,suffix_old);addr.primaryShipping=($(primary_shipping_id)!=undefined?$(primary_shipping_id):null);}},_mutateName:function(fieldName,prefix_new,prefix_old,suffix_new,suffix_old){var newFieldName=fieldName;if(!((prefix_new==""||prefix_new==null)&&(prefix_old==""||prefix_old==null))){if(!(prefix_old==""||prefix_old==null)){if(newFieldName.indexOf(prefix_old)==0){newFieldName=prefix_new+newFieldName.substr(prefix_old.length);}}else{newFieldName=prefix_new+newFieldName;}}
if(!((suffix_new==""||suffix_new==null)&&(suffix_old==""||suffix_old==null))){if(!(suffix_old==""||suffix_old==null)){if(newFieldName.indexOf(suffix_old)>-1&&newFieldName.indexOf(suffix_old)==newFieldName.length-suffix_old.length){newFieldName=newFieldName.substr(0,newFieldName.indexOf(suffix_old))+suffix_new;}}else{newFieldName=newFieldName+suffix_new;}}
return newFieldName;},setFieldsValues:function(addr,addr_source,prefix_source,prefix_target,suffix_source,sufix_target){for(fieldName in addr.fields){var field_source;if(addr.fields[fieldName]){field_source=$(addr._mutateName(fieldName,prefix_source,prefix_target,suffix_source,sufix_target));if(field_source)
addr.fields[fieldName].value=field_source.value;}}
for(var optionValue in addr.options){addr.options[optionValue].checked=addr_source.options[optionValue].checked;if(addr.options[optionValue].checked==true){addr.setTippersValue(addr,optionValue);}}
addr.switchOptions(addr);},eventListenerSetFieldsValues:function(e,addr,addr_source,prefix_source,prefix_target,suffix_source,sufix_target){var trigger_el;trigger_el=Event.element(e);if(trigger_el.checked){addr.setFieldsValues(addr,addr_source,prefix_source,prefix_target,suffix_source,sufix_target);}},syncWithBilling:function(addr,addr_source,trigger,prefix_source,prefix_target,suffix_source,sufix_target){if($(trigger)){addr.triggerSyncWithBilling=$(trigger);Event.observe(addr.triggerSyncWithBilling,'click',addr.eventListenerSetFieldsValues.bindAsEventListener(addr,addr,addr_source,prefix_source,prefix_target,suffix_source,sufix_target));}},eventListenerCheckFieldState:function(e,addr){var el=Event.element(e);el.checked=true;el.value=1;}}
if(Validation){Validation.add('validate-pfpj-cnp','CNP invalid.',function(v,elm){if(Validation.get('IsEmpty').test(v))return true;if(v.length!=13)
return false;var regex=/^([0-9])([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{3})([0-9])$/;var patt=new RegExp(regex);var matches=patt.exec(v);if(!matches)
return false;var sex=matches[1];var year=matches[2];var month=matches[3];var day=matches[4];var regionCode=matches[5];var ord=matches[6];var crc=matches[7];if(sex<=0)
return false;var validateDate=true;var yPrefix="";if(sex==1||sex==2)
yPrefix="19";else if(sex==3||sex==4)
yPrefix="18";else if(sex==5||sex==6)
yPrefix="20";else if(sex==7||sex==8||sex==9)
validateDate=false;if(month<=0||month>12)
return false;if(day<=0||day>31)
return false;if(validateDate){var testDate=new Date(parseInt(yPrefix+year,10),parseInt(month,10)-1,parseInt(day,10),0,0,0);if((testDate.getFullYear()!=parseInt(yPrefix+year,10))||(testDate.getMonth()+1!=parseInt(month,10))||(testDate.getDate()!=parseInt(day,10))){return false;}else{var today=new Date();if(today<testDate){return false;}}}
var regionsCodes={'01':'Alba','02':'Arad','03':'Argeş','04':'Bacău','05':'Bihor','06':'Bistriţa-Năsăud','07':'Botoşani','08':'Braşov','09':'Brăila','10':'Buzău','11':'Caraş-Severin','12':'Cluj','13':'Constanţa','14':'Covasna','15':'Dâmboviţa','16':'Dolj','17':'Galaţi','18':'Gorj','19':'Harghita','20':'Hunedoara','21':'Ialomiţa','22':'Iaşi','23':'Ilfov','24':'Maramureş','25':'Mehedinţi','26':'Mureş','27':'Neamţ','28':'Olt','29':'Prahova','30':'Satu Mare','31':'Sălaj','32':'Sibiu','33':'Suceava','34':'Teleorman','35':'Timiş','36':'Tulcea','37':'Vaslui','38':'Vâlcea','39':'Vrancea','40':'Bucureşti','41':'Bucureşti S.1','42':'Bucureşti S.2','43':'Bucureşti S.3','44':'Bucureşti S.4','45':'Bucureşti S.5','46':'Bucureşti S.6','51':'Călăraşi','52':'Giurgiu'};if(regionsCodes[regionCode]==undefined)
return false;if(ord<=0)
return false;var tk='279146358279';var s=0;for(var i=0;i<12;i++)
s+=v.charAt(i)*tk.charAt(i);var c=s%11;if(!(c<10))
c=1;if(crc!=c){return false;}
return true;});Validation.add('validate-pfpj-cif','CIF invalid.',function(v,elm){if(Validation.get('IsEmpty').test(v))return true;var prefix="";if(v.indexOf("RO")==0){prefix="RO";v=v.replace(/ro\s*/i,"");}
if(v.length>10)
return false;var regex=/^([0-9]{1,9})([0-9])$/;var patt=new RegExp(regex);var matches=patt.exec(v);if(!matches)
return false;var code=matches[1];var crc=matches[2];v=v.split("").reverse().join("").substr(1);var tk="753217532".split("").reverse().join("");var s=0;for(var i=0;i<v.length;i++)
s+=v.charAt(i)*tk.charAt(i);var c=s*10%11;if(!(c<10))
c=0;if(crc!=c){return false;}
return true;});};if(typeof Prototype=='undefined'||!Prototype.Version.match("1.6"))
throw("Prototype-UI library require Prototype library >= 1.6.0");if(Prototype.Browser.WebKit){Prototype.Browser.WebKitVersion=parseFloat(navigator.userAgent.match(/AppleWebKit\/([\d\.\+]*)/)[1]);Prototype.Browser.Safari2=(Prototype.Browser.WebKitVersion<420);}
if(Prototype.Browser.IE){Prototype.Browser.IEVersion=parseFloat(navigator.appVersion.split(';')[1].strip().split(' ')[1]);Prototype.Browser.IE6=Prototype.Browser.IEVersion==6;Prototype.Browser.IE7=Prototype.Browser.IEVersion==7;}
Prototype.falseFunction=function(){return false};Prototype.trueFunction=function(){return true};var UI={Abstract:{},Ajax:{}};Object.extend(Class.Methods,{extend:Object.extend.methodize(),addMethods:Class.Methods.addMethods.wrap(function(proceed,source){if(!source)return this;if(!source.hasOwnProperty('methodsAdded'))
return proceed(source);var callback=source.methodsAdded;delete source.methodsAdded;proceed(source);callback.call(source,this);source.methodsAdded=callback;return this;}),addMethod:function(name,lambda){var methods={};methods[name]=lambda;return this.addMethods(methods);},method:function(name){return this.prototype[name].valueOf();},classMethod:function(){$A(arguments).flatten().each(function(method){this[method]=(function(){return this[method].apply(this,arguments);}).bind(this.prototype);},this);return this;},undefMethod:function(name){this.prototype[name]=undefined;return this;},removeMethod:function(name){delete this.prototype[name];return this;},aliasMethod:function(newName,name){this.prototype[newName]=this.prototype[name];return this;},aliasMethodChain:function(target,feature){feature=feature.camelcase();this.aliasMethod(target+"Without"+feature,target);this.aliasMethod(target,target+"With"+feature);return this;}});Object.extend(Number.prototype,{snap:function(round){return parseInt(round==1?this:(this/round).floor()*round);}});Object.extend(String.prototype,{camelcase:function(){var string=this.dasherize().camelize();return string.charAt(0).toUpperCase()+string.slice(1);},makeElement:function(){var wrapper=new Element('div');wrapper.innerHTML=this;return wrapper.down();}});Object.extend(Array.prototype,{empty:function(){return!this.length;},extractOptions:function(){return this.last().constructor===Object?this.pop():{};},removeAt:function(index){var object=this[index];this.splice(index,1);return object;},remove:function(object){var index;while((index=this.indexOf(object))!=-1)
this.removeAt(index);return object;},insert:function(index){var args=$A(arguments);args.shift();this.splice.apply(this,[index,0].concat(args));return this;}});Element.addMethods({getScrollDimensions:function(element){return{width:element.scrollWidth,height:element.scrollHeight}},getScrollOffset:function(element){return Element._returnOffset(element.scrollLeft,element.scrollTop);},setScrollOffset:function(element,offset){element=$(element);if(arguments.length==3)
offset={left:offset,top:arguments[2]};element.scrollLeft=offset.left;element.scrollTop=offset.top;return element;},getNumStyle:function(element,style){var value=parseFloat($(element).getStyle(style));return isNaN(value)?null:value;},appendText:function(element,text){element=$(element);text=String.interpret(text);element.appendChild(document.createTextNode(text));return element;}});document.whenReady=function(callback){if(document.loaded)
callback.call(document);else
document.observe('dom:loaded',callback);};Object.extend(document.viewport,{getScrollOffset:document.viewport.getScrollOffsets,setScrollOffset:function(offset){Element.setScrollOffset(Prototype.Browser.WebKit?document.body:document.documentElement,offset);},getScrollDimensions:function(){return Element.getScrollDimensions(Prototype.Browser.WebKit?document.body:document.documentElement);}});(function(){UI.Options={methodsAdded:function(klass){klass.classMethod($w(' setOptions allOptions optionsGetter optionsSetter optionsAccessor '));},setOptions:function(options){if(!this.hasOwnProperty('options'))
this.options=this.allOptions();this.options=Object.extend(this.options,options||{});},allOptions:function(){var superclass=this.constructor.superclass,ancestor=superclass&&superclass.prototype;return(ancestor&&ancestor.allOptions)?Object.extend(ancestor.allOptions(),this.options):Object.clone(this.options);},optionsGetter:function(){addOptionsAccessors(this,arguments,false);},optionsSetter:function(){addOptionsAccessors(this,arguments,true);},optionsAccessor:function(){this.optionsGetter.apply(this,arguments);this.optionsSetter.apply(this,arguments);}};function addOptionsAccessors(receiver,names,areSetters){names=$A(names).flatten();if(names.empty())
names=Object.keys(receiver.allOptions());names.each(function(name){var accessorName=(areSetters?'set':'get')+name.camelcase();receiver[accessorName]=receiver[accessorName]||(areSetters?function(value){return this.options[name]=value}:function(){return this.options[name]});});}})();UI.Carousel=Class.create(UI.Options,{options:{direction:"horizontal",previousButton:".previous_button",nextButton:".next_button",container:".container",scrollInc:"auto",disabledButtonSuffix:'_disabled',overButtonSuffix:'_over',autoGlide:false,intervalAuto:2,directionAuto:1},initialize:function(element,options){this.setOptions(options);this.element=$(element);this.id=this.element.id;this.container=this.element.down(this.options.container).firstDescendant();this.elements=this.container.childElements();this.previousButton=this.options.previousButton==false?null:this.element.down(this.options.previousButton);this.nextButton=this.options.nextButton==false?null:this.element.down(this.options.nextButton);this.posAttribute=(this.options.direction=="horizontal"?"left":"top");this.dimAttribute=(this.options.direction=="horizontal"?"width":"height");this.elementSize=this.computeElementSize();this.nbVisible=this.currentSize()/this.elementSize;this.autoGlide=this.options.autoGlide;this.intervalAuto=this.options.intervalAuto;this.directionAuto=this.options.directionAuto;var scrollInc=this.options.scrollInc;if(scrollInc=="auto")
scrollInc=Math.floor(this.nbVisible);[this.previousButton,this.nextButton].each(function(button){if(!button)return;var className=(button==this.nextButton?"next_button":"previous_button")+this.options.overButtonSuffix;button.clickHandler=this.scroll.bind(this,(button==this.nextButton?-1:1)*scrollInc*this.elementSize);button.observe("click",button.clickHandler).observe("mouseover",function(){button.addClassName(className)}.bind(this)).observe("mouseout",function(){button.removeClassName(className)}.bind(this));},this);this.updateButtons();if(this.options.autoGlide)this.periodicallyUpdate();},destroy:function($super){[this.previousButton,this.nextButton].each(function(button){if(!button)return;button.stopObserving("click",button.clickHandler);},this);this.element.remove();this.fire('destroyed');},start:function()
{var i=this.currentIndex();if(this.directionAuto==1){if((i+this.nbVisible)>=(this.elements.length-this.nbVisible)){this.scrollTo(this.elements.length-this.nbVisible);this.directionAuto=2;}else{this.scrollTo(i+this.nbVisible);}}else{if((i-this.nbVisible)<=0){this.scrollTo(0);this.directionAuto=1;}else{this.scrollTo(i-this.nbVisible);}}},periodicallyUpdate:function()
{new PeriodicalExecuter(this.start.bind(this),this.intervalAuto);},fire:function(eventName,memo){memo=memo||{};memo.carousel=this;return this.element.fire('carousel:'+eventName,memo);},observe:function(eventName,handler){this.element.observe('carousel:'+eventName,handler.bind(this));return this;},stopObserving:function(eventName,handler){this.element.stopObserving('carousel:'+eventName,handler);return this;},checkScroll:function(position,updatePosition){if(position>0)
position=0;else{var limit=this.elements.last().positionedOffset()[this.posAttribute]+this.elementSize;var carouselSize=this.currentSize();if(position+limit<carouselSize)
position+=carouselSize-(position+limit);position=Math.min(position,0);}
if(updatePosition)
this.container.style[this.posAttribute]=position+"px";return position;},scroll:function(deltaPixel){if(this.animating)
return this;var position=this.currentPosition()+deltaPixel;position=this.checkScroll(position,false);deltaPixel=position-this.currentPosition();if(deltaPixel!=0){this.animating=true;this.fire("scroll:started");var that=this;this.container.morph("opacity:0.5",{duration:0.2,afterFinish:function(){that.container.morph(that.posAttribute+": "+position+"px",{duration:0.4,delay:0.2,afterFinish:function(){that.container.morph("opacity:1",{duration:0.2,afterFinish:function(){that.animating=false;that.updateButtons().fire("scroll:ended",{shift:deltaPixel/that.currentSize()});}});}});}});}
return this;},scrollTo:function(index){if(this.animating||index<0||index>this.elements.length||index==this.currentIndex()||isNaN(parseInt(index)))
return this;return this.scroll((this.currentIndex()-index)*this.elementSize);},updateButtons:function(){this.updatePreviousButton();this.updateNextButton();return this;},updatePreviousButton:function(){var position=this.currentPosition();var previousClassName="previous_button"+this.options.disabledButtonSuffix;if(this.previousButton.hasClassName(previousClassName)&&position!=0){this.previousButton.removeClassName(previousClassName);this.fire('previousButton:enabled');}
if(!this.previousButton.hasClassName(previousClassName)&&position==0){this.previousButton.addClassName(previousClassName);this.fire('previousButton:disabled');}},updateNextButton:function(){var lastPosition=this.currentLastPosition();var size=this.currentSize();var nextClassName="next_button"+this.options.disabledButtonSuffix;if(this.nextButton.hasClassName(nextClassName)&&lastPosition!=size){this.nextButton.removeClassName(nextClassName);this.fire('nextButton:enabled');}
if(!this.nextButton.hasClassName(nextClassName)&&lastPosition==size){this.nextButton.addClassName(nextClassName);this.fire('nextButton:disabled');}},computeElementSize:function(){return this.elements.first().getDimensions()[this.dimAttribute];},currentIndex:function(){return-this.currentPosition()/this.elementSize;},currentLastPosition:function(){if(this.container.childElements().empty())
return 0;return this.currentPosition()+
this.elements.last().positionedOffset()[this.posAttribute]+
this.elementSize;},currentPosition:function(){return this.container.getNumStyle(this.posAttribute);},currentSize:function(){return this.container.parentNode.getDimensions()[this.dimAttribute];},updateSize:function(){this.nbVisible=this.currentSize()/this.elementSize;var scrollInc=this.options.scrollInc;if(scrollInc=="auto")
scrollInc=Math.floor(this.nbVisible);[this.previousButton,this.nextButton].each(function(button){if(!button)return;button.stopObserving("click",button.clickHandler);button.clickHandler=this.scroll.bind(this,(button==this.nextButton?-1:1)*scrollInc*this.elementSize);button.observe("click",button.clickHandler);},this);this.checkScroll(this.currentPosition(),true);this.updateButtons().fire('sizeUpdated');return this;}});UI.Ajax.Carousel=Class.create(UI.Carousel,{options:{elementSize:-1,url:null},initialize:function($super,element,options){if(!options.url)
throw("url option is required for UI.Ajax.Carousel");if(!options.elementSize)
throw("elementSize option is required for UI.Ajax.Carousel");$super(element,options);this.endIndex=0;this.hasMore=true;this.updateHandler=this.update.bind(this);this.updateAndScrollHandler=function(nbElements,transport,json){this.update(transport,json);this.scroll(nbElements);}.bind(this);this.runRequest.bind(this).defer({parameters:{from:0,to:Math.ceil(this.nbVisible)-1},onSuccess:this.updateHandler});},runRequest:function(options){this.requestRunning=true;new Ajax.Request(this.options.url,Object.extend({method:"GET"},options));this.fire("request:started");return this;},scroll:function($super,deltaPixel){if(this.animating||this.requestRunning)
return this;var nbElements=(-deltaPixel)/this.elementSize;if(this.hasMore&&nbElements>0&&this.currentIndex()+this.nbVisible+nbElements-1>this.endIndex){var from=this.endIndex+1;var to=Math.ceil(from+this.nbVisible-1);this.runRequest({parameters:{from:from,to:to},onSuccess:this.updateAndScrollHandler.curry(deltaPixel).bind(this)});return this;}
else
$super(deltaPixel);},update:function(transport,json){this.requestRunning=false;this.fire("request:ended");if(!json)
json=transport.responseJSON;this.hasMore=json.more;this.endIndex=Math.max(this.endIndex,json.to);this.elements=this.container.insert({bottom:json.html}).childElements();return this.updateButtons();},computeElementSize:function(){return this.options.elementSize;},updateSize:function($super){var nbVisible=this.nbVisible;$super();if(Math.floor(this.nbVisible)-Math.floor(nbVisible)>=1&&this.hasMore){if(this.currentIndex()+Math.floor(this.nbVisible)>=this.endIndex){var nbNew=Math.floor(this.currentIndex()+Math.floor(this.nbVisible)-this.endIndex);this.runRequest({parameters:{from:this.endIndex+1,to:this.endIndex+nbNew},onSuccess:this.updateHandler});}}
return this;},updateNextButton:function($super){var lastPosition=this.currentLastPosition();var size=this.currentSize();var nextClassName="next_button"+this.options.disabledButtonSuffix;if(this.nextButton.hasClassName(nextClassName)&&lastPosition!=size){this.nextButton.removeClassName(nextClassName);this.fire('nextButton:enabled');}
if(!this.nextButton.hasClassName(nextClassName)&&lastPosition==size&&!this.hasMore){this.nextButton.addClassName(nextClassName);this.fire('nextButton:disabled');}}});
