function make(type, max)
{
  if(Math.random() < 0.2 && type != 'rank' && type != 'alpharank') return ''; // add in some null values
  if(!max) max = 254;
  switch(type)
  {
    case 'rank':
      var t = (Math.floor(Math.random() * max) + 1);
      return t + '" title="' + t + '">' + (Math.random() < 0.2? '':(Math.floor(Math.random() * max) + 1));
    case 'alphanum':
      var seed = new Array('a','b','c','d'), t = Math.floor(Math.random() * max) - 2;
      return seed[Math.floor(seed.length * Math.random())] + (t > 0? t : '');
    case 'alpharank':
      var seed = new Array('a','b','c','d'), a = Math.floor(Math.random() * max) - 2;
      var r = seed[Math.floor(seed.length * Math.random())] + (a > 0? a : '');
      return r + '" title="' + r + '">' + (Math.random() < 0.2? '':(Math.floor(Math.random() * max) + 1));
    case 'byte':
      var seed = new Array('bit','byte','KB'), t = Math.ceil(Math.random() * max);
      return t + ' ' + seed[Math.floor(seed.length * Math.random())] + (t > 1? 's' : '');
    case 'number':
      if(Math.random() < 0.2) return Math.round(max * Math.random() - max / 2);
      var s1 = (Math.random() < 0.5)? '' : '-';
      var s2 = (Math.random() < 0.5)? '+' : '-';
      var i1 = Math.round(Math.random() * max);
      var i2 = Math.round(Math.random() * max / 3);
      var s3 = (Math.random() < 0.5)? ' ' : '';
      var e = '0' + (Math.round(Math.random() * 5) + 1);
      return s1+s3+i1+'.'+i2+s3+'E'+s3+s2+e;
    case 'YMB': return 'YMB ' + Math.round(max * 100 * Math.random() - max * 50) / 100;
    case 'dollar': return '$' + Math.round(max * 100 * Math.random() - max * 50) / 100;
    case 'IP':
      return Math.round(1 + max * Math.random()) + '.' +
             Math.round(max * Math.random()) + '.' +
             Math.round(max * Math.random()) + '.' +
             Math.round(max * Math.random());
    case 'name':
      var seed = new Array('va', 'ba', 'de', 'di', 'ca', 'chi', 'chai', 'ma', 'se', 'dy', 'te', 'ton', 'lie', 'bo');
      return seed[Math.floor(seed.length * Math.random())] +
             seed[Math.floor(seed.length * Math.random())] + ' ' +
             seed[Math.floor(seed.length * Math.random())] +
             seed[Math.floor(seed.length * Math.random())];
    default:
      var day = Math.round(28 * Math.random() + 1);
      if(day < 10) day = '0' + day;
      var month = Math.round(11 * Math.random() + 1);
      if(month < 10) month = '0' + month;
      var year4 = 1950 + Math.round(56 * Math.random());
      var year2 = 50 + (Math.round(Math.random()*56));
      if(year2 > 99) year2 = '0' + (year2 - 100);
      var year = Math.random() > 0.5 ? year2 : year4;
      var hour = Math.round(11 * Math.random());
      if(hour < 10) hour = '0' + hour;
      var min = Math.round(59 * Math.random());
      if(min < 10) min = '0' + min;
      var sec = Math.round(59 * Math.random());
      if(sec < 10) sec = '0' + sec;
      var am = Math.random() > 0.5? 'AM' : 'PM';
      var time = ' ' + hour + ':' + min + ':' + sec + ' ' + am;
      var a1 = ['-',',','.','/'];
      switch(type)
      {
        case 'euro_date': return day + '/' + month + '/' + year + (Math.random() > 0.5? '' : time);
        case 'other_date': return year + '-' + month + '-' + day + (Math.random() > 0.5? '' : time);
        case 'date': return month + a1[Math.floor(Math.random() * 4)] + day + a1[Math.floor(Math.random() * 4)] + year;
        case 'us_time':
          var tmp = Math.random();
          if(tmp < 0.2) return month + '/' + day + '/' + year;
          var d = new Date();
          var now = d.getTime();
          d.setFullYear(1950,0,1);
          var rt = d.getTime() + Math.round((now - d.getTime()) * Math.random());
          d.setTime(rt);
          if(tmp < 0.4) return d.toString();
          if(tmp < 0.6) return d.toGMTString();
          if(tmp < 0.8) return d.toUTCString();
          return d.toLocaleString();
      }
  }
}

