function Vivus(element, options, callback) {
  setupEnv();

  // Setup
  this.isReady = false;
  this.setElement(element, options);
  this.setOptions(options);
  this.setCallback(callback);

  if (this.isReady) {
    this.init();
  }
}
Class constructor
option structure
  type: 'delayed'|'sync'|'oneByOne'|'script' (to know if the items must be drawn synchronously or not, default: delayed)
  duration: <int> (in frames)
  start: 'inViewport'|'manual'|'autostart' (start automatically the animation, default: inViewport)
  delay: <int> (delay between the drawing of first and last path)
  dashGap <integer> whitespace extra margin between dashes
  pathTimingFunction <function> timing animation function for each path element of the SVG
  animTimingFunction <function> timing animation function for the complete SVG
  forceRender <boolean> force the browser to re-render all updated path items
  selfDestroy <boolean> removes all extra styling on the SVG, and leaves it as original

The attribute 'type' is by default on 'delayed'.
 - 'delayed'
   all paths are draw at the same time but with a
   little delay between them before start
 - 'sync'
   all path are start and finish at the same time
 - 'oneByOne'
   only one path is draw at the time
   the end of the first one will trigger the draw
   of the next one

All these values can be overwritten individually
for each path item in the SVG
The value of frames will always take the advantage of
the duration value.
If you fail somewhere, an error will be thrown.
Good luck.

@constructor
@this {Vivus}
@param {DOM|String}   element  Dom element of the SVG or id of it
@param {Object}       options  Options about the animation
@param {Function}     callback Callback for the end of the animation