Code 128 Barcode

Javascript code by Birger Nielsen to produce a Code 128 barcode using 2 images (one a white pixel, the other a black pixel)
Rescued from http://www.246.dk/code128.html which has been taken down.

<script type="text/javascript">
<!--
{
  value = new Array(  
   ' ','!','"','#','$','%',
   '&amp;',"'",'(',')','*','+',
   ',','-','.','/','0','1',
   '2','3','4','5','6','7',
   '8','9',':',';','<','=',
   '>','?','@','A','B','C',
   'D','E','F','G','H','I',
   'J','K','L','M','N','O',
   'P','Q','R','S','T','U',
   'V','W','X','Y','Z','[',
  '\\',']','^','_','`','a',
   'b','c','d','e','f','g',
   'h','i','j','k','l','m',
   'n','o','p','q','r','s',
   't','u','v','w','x','y',
   'z','{','|','}','~','DEL',
   'FNC3', 'FNC2', 'SHIFT', 'CODE C', 'FNC4' , 'CODE A',
   'FNC1'
  );
  code128 = new Array(
   '212222','222122','222221','121223','121322','131222',
   '122213','122312','132212','221213','221312','231212',
   '112232','122132','122231','113222','123122','123221', 
   '223211','221132','221231','213212','223112','312131',
   '311222','321122','321221','312212','312212','322112',
   '322211','212123','232121','111323','131123','131321',
   '112313','132113','132311','211313','231113','231311',
   '112133','112331','132131','113123','113321','133121',
   '313121','211331','231131','213113','213311','213131', 
   '311123','311321','331121','312113','312311','332111',
   '314111','221411','431111','111224','111422','121124',
   '121421','141122','141221','112214','112412','122114',
   '122411','142112','142211','241211','221114','413111',
   '241112','134111','111242','121142','121241','114212',
   '124112','124211','411212','421112','421211','212141',
   '214121','412121','111143','111341','131141','114113',
   '114311','411113','411311','113141','114131','311141',
   '411131'
  )
 
  barcode=prompt("String to transform into Code128","");
  barcodeok = (barcode != null); 
  if (barcodeok) barcodeok = (barcode != "");
  if (barcodeok) {
    chksum = 104;
    code = barcode;
    m = 1;
    for (i = 0; i < barcode.length; i++) {
      v = -1;
      for (j = 0; j < value.length; j++) {
        if (value[j] == barcode.charAt(i)) {
          v = j;
        }
      }
      chksum += m * v;
      m++;
    }
    chksum = chksum % 103;
    barcode = barcode + value[chksum];
    wstr = "";
    for (i = 0; i < barcode.length; i++) {
      v = -1;
      for (j = 0; j < value.length; j++) {
        if (value[j] == barcode.charAt(i)) {
          v = j;
        }
      }
      wstr += code128[v];
    }
    wstr = "211214" + wstr + "2331112";
    l = "\x3C";  g = "\x3E";
    astr = l + 'html' + g + "\n" + l + 'head' + g + "\n" + 
           l + 'title' + g + code + l + '/title' + g + "\n" + 
           l + '/head' + g + "\n";
    astr += l + 'body' + g + "\n";
    astr += l + 'table border=0 cellspacing=0 cellpadding=0' + g + "\n" +
            l + 'tr' + g;
    for (i = 0; i < wstr.length; i++) {
      for (j = 0; j < wstr.charAt(i); j++) {
        astr +=  l + 'td' + g + l + 
                'img src="http://www.246.dk/Pbc-' + 
                (1 - i%2) + '.png" alt="' +
                (1 - i%2) + '"' + g + l + '/td' + g + "\n";
      }
    }
    astr += l + '/tr' + g + "\n";
    astr += l + 'caption' + g + code + l + '/caption' + g + "\n";
    astr += l + '/table' + g + "\n" + l + '/body' + g + "\n" + l + '/html'  + g + "\n";
    aPopUp= window.open('','code', 'toolbar=yes,menubar=yes,width=500,height=60');
    aPopUp.document.write(astr);
    aPopUp.document.close();
  }
}
// -->
</script>