code: function(element, attrs, duration, callback) {
              var self = this;
              // Check element
              if (!element) return;
              if (duration > 0) {
                  // Filter out non-animated attributes
                  // Note: we don't need to delete from original attribute (they won't be set anyway)
                  var attrsNonAnimated = {};
                  for (var i=0 ; i < self._nonAnimatedAttrs.length ; i++) {
                      var attrName = self._nonAnimatedAttrs[i];
                      if (attrs[attrName] !== undefined) {
                          attrsNonAnimated[attrName] = attrs[attrName];
                      }
                  }
                  // Set non-animated attributes
                  element.attr(attrsNonAnimated);
                  // Start animation for all attributes
                  element.animate(attrs, duration, 'linear', function() {
                      if (callback) callback();
                  });
              } else {
                  // No animation: simply set all attributes...
                  element.attr(attrs);
                  // ... and call the callback if needed
                  if (callback) callback();
              }
          }
docs: /*
  @param element Raphael element
  @param attrs Attributes object to animate
  @param duration Animation duration in ms
  @param callback Callback to eventually call after animation is done