(function(jQuery) {jQuery.fn.barreDeProgression=function(action,param,value) {$elements=this;switch(action) {case'destroy':return destroy();case'disable':return disable();case'option':param={param:value};case'options':return set(param);default:return construct(action);};return this;};jQuery.fn.barreDeProgression.compliance='barreDeProgression';jQuery.fn.barreDeProgression.defaults={'nombreAttendu':1,'nombreAtteint':0,'elementsMobiles':{},'size':0,'axe':'x','eventType':'barreDeProgression','eventNamespace':'bdp'};var $elements;function construct(options) {return $elements.each(function() {var $this=jQuery(this),oldSettings=$this.data(jQuery.fn.barreDeProgression.compliance),settings=!oldSettings?jQuery.extend({},jQuery.fn.barreDeProgression.defaults,options):jQuery.extend({},oldSettings,options);if(!settings.enabled) {var eventType=settings.eventType+'.'+settings.eventNamespace,totalSize=0,initProgression=0;if(settings.size){totalSize=settings.size;}else{totalSize=settings.axe=='x'?$this.innerWidth():$this.innerHeight();} initProgression=Math.floor(settings.nombreAtteint/settings.nombreAttendu*totalSize)%(totalSize+1);$this.data(jQuery.fn.barreDeProgression.compliance,jQuery.extend(settings,{'enabled':true})).bind(eventType,progressionHandler);updateCssBackgroundPositions(settings.elementsMobiles,initProgression,settings.axe);}});};function progressionHandler(event,newSettings) {var $this=jQuery(this);oldSettings=numberFilter($this.data(jQuery.fn.barreDeProgression.compliance));settings=numberFilter(jQuery.extend({},oldSettings,newSettings));totalSize=settings.size||$this.innerWidth() progression=(Math.floor(settings.nombreAtteint/settings.nombreAttendu*totalSize) -Math.floor(oldSettings.nombreAtteint/oldSettings.nombreAttendu*totalSize))%(totalSize+1);$this.data(jQuery.fn.barreDeProgression.compliance,settings);updateCssBackgroundPositions(settings.elementsMobiles,progression,settings.axe);};function numberFilter(nombres) {var atteint=nombres.nombreAtteint||0,attendu=nombres.nombreAttendu||1;nombres.nombreAttendu=Math.abs(attendu);nombres.nombreAtteint=Math.abs(atteint)%(nombres.nombreAttendu+1);return nombres;};function updateCssBackgroundPositions($elements,progression,axe) {return $elements.each(function() {var $this=jQuery(this),oldBgP=jQuery.trim($this.css('backgroundPosition')),regex=/^((?:\-\s?)?\d+)px\s((?:\-\s?)?\d+)px$/;if(oldBgP=='0% 0%') oldBgP='0px 0px';var oldBgP_=regex.exec(oldBgP),bgP_,bgP;if(axe=='x'){bgP_=parseInt(oldBgP_[1])+progression;bgP=bgP_+'px '+oldBgP_[2]+'px';}else{bgP_=parseInt(oldBgP_[2])+progression;bgP=oldBgP_[1]+'px '+bgP_+'px';} $this.css('backgroundPosition',bgP);});} function updateCssSize($elements,progression,axe) {return $elements.each(function() {var $this=jQuery(this),regex=/\s?(?:%|px|em|ex|pt)/;if(axe=='x'){var oldS=jQuery.trim($this.css('width')),oldS_=oldS.replace(regex,''),S=oldS_+progression;$this.css('width',S+'px');}else{var oldS=jQuery.trim($this.css('height')),oldS_=oldS.replace(regex,''),S=oldS_+progression;$this.css('height',S+'px');}});} function updateCssPosition($elements,progression,axe) {return $elements.each(function() {var $this=jQuery(this),regex=/\s?(?:%|px|em|ex|pt)/;if(axe=='x'){var oldP=jQuery.trim($this.css('left')),oldP_=oldP_.replace(regex,''),P=oldP+progression;$this.css('width',P+'px');}else{var oldP=jQuery.trim($this.css('top')),oldP_=oldP.replace(regex,''),P=oldP_+progression;$this.css('height',P+'px');}});} function destroy() {disable();return $elements.each(function() {jQuery(this).data(jQuery.fn.barreDeProgression.compliance,null);});};function disable() {return $elements.each(function() {var $this=jQuery(this),settings=$this.data(jQuery.fn.barreDeProgression.compliance) eventType=settings.eventType+'.'+settings.eventNamespace;$this.data(jQuery.fn.barreDeProgression.compliance,jQuery.extend(settings,{'enabled':false})).unbind(eventType);settings.elementsMobiles.each(function() {jQuery(this).css('backgroundPosition','');});});};function set(options) {return $elements.each(function() {var $this=jQuery(this),settings=jQuery.extend({},$this.data(jQuery.fn.barreDeProgression.compliance),options);$this.data(jQuery.fn.barreDeProgression.compliance,settings);});};})(jQuery);