docs: function( hsl ){
        var ret;
        var number = $$.util.regex.number;
        var h, s, l, a, r, g, b;
        function hue2rgb(p, q, t){
          if(t < 0) t += 1;
          if(t > 1) t -= 1;
          if(t < 1/6) return p + (q - p) * 6 * t;
          if(t < 1/2) return q;
          if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
          return p;
        }
  
        var m = new RegExp("^" + $$.util.regex.hsla + "$").exec(hsl);
        if( m ){
  
          // get hue
          h = parseInt( m[1] ); 
          if( h < 0 ){
            h = ( 360 - (-1*h % 360) ) % 360;
          } else if( h > 360 ){
            h = h % 360;
          }
          h /= 360; // normalise on [0, 1]
  
          s = parseFloat( m[2] );
          if( s < 0 || s > 100 ){ return; } // saturation is [0, 100]
          s = s/100; // normalise on [0, 1]
  
          l = parseFloat( m[3] );
          if( l < 0 || l > 100 ){ return; } // lightness is [0, 100]
          l = l/100; // normalise on [0, 1]
  
          a = m[4];
          if( a !== undefined ){
            a = parseFloat( a );
  
            if( a < 0 || a > 1 ){ return; } // alpha is [0, 1]
          }
  
          // now, convert to rgb
          // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
          if( s === 0 ){
            r = g = b = Math.round(l * 255); // achromatic
          } else {
            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
            var p = 2 * l - q;
            r = Math.round( 255 * hue2rgb(p, q, h + 1/3) );
            g = Math.round( 255 * hue2rgb(p, q, h) );
            b = Math.round( 255 * hue2rgb(p, q, h - 1/3) );
          }
  
          ret = [r, g, b, a];
        }
  
        return ret;
      }