function randColor(offset, range) {
    var rgbHex = '#';
    for (var i = 0; i < 3; i++) {
        var val = Math.floor( Math.random() * range + offset );
        rgbHex = rgbHex + "" +  decimalToHex(val); 
    }
    return rgbHex;
}

var hexChars="0123456789abcdef";

// encode numbers as hex strings
function decimalToHex(d) {
  d = d % 256;
  var a = d % 16;
  var b = (d - a) / 16;
  hex = "" + hexChars.charAt(b) + hexChars.charAt(a);
  return hex;
}

function randHue(s, v) {
    var hue = Math.floor( Math.random() * 360);
    return HSVtoRGB(hue, s, v);
}


function HSVtoRGB(h, s, v) {
  r = g = b = 0;

  if (s < 0) s = 0;  
  if (s > 1) s = 1;  
  if (v < 0) v = 0; 
  if (v > 1) v = 1; 

  h = h % 360; 
  if (h < 0) h = h + 360; 
  h = h / 60; 
  i = Math.floor(h); 
  f = h - i; 
  p1 = v * (1 - s); 
  p2 = v * (1 - s*f); 
  p3 = v * (1 - s*(1 - f)); 

  if (i == 0)      { r = v;  g = p3; b = p1; } 
  else if (i == 1) { r = p2; g = v;  b = p1; } 
  else if (i == 2) { r = p1; g = v;  b = p3; } 
  else if (i == 3) { r = p1; g = p2; b = v;  } 
  else if (i == 4) { r = p3; g = p1; b = v;  } 
  else if (i == 5) { r = v;  g = p1; b = p2; }

  r = Math.floor(r*255);
  g = Math.floor(g*255);
  b = Math.floor(b*255);
  rgbHex = "#";
  rgbHex += decimalToHex(r);
  rgbHex += decimalToHex(g);
  rgbHex += decimalToHex(b);

  return rgbHex;
}

