diff --git a/include/js/jquery.barcode.0.3.js b/include/js/jquery.barcode.0.3.js
new file mode 100644
index 000000000..69a50f798
--- /dev/null
+++ b/include/js/jquery.barcode.0.3.js
@@ -0,0 +1,319 @@
+/*
+ * jQuery Barcode plugin 0.3
+ *
+ * http://www.pasella.it/projects/jQuery/barcode
+ * based on code from Kris Bailey [http://www.krisbailey.com/creating-code-39-barcodes-in-pure-javascript]
+ *
+ * Copyright (c) 2009 Antonello Pasella antonello.pasella@gmail.com
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+
+;(function($) {
+
+ $.barcode = {};
+ $.barcode.defaults = {thinBarWidth : 1, height: '100%', code: 'code39'};
+
+ $.fn.extend({
+ barcode : function(settings){
+ settings = $.extend({}, $.barcode.defaults, settings);
+ settings.barWidthRatio = 3;
+ settings.thin = settings.thinBarWidth;
+ settings.thick = settings.thinBarWidth * settings.barWidthRatio;
+ return $.barcode._barcodeBMP(settings, this);
+ }
+ });
+
+ $.barcode.palette = [ [0, 0 ,0] , [255, 255, 255] ];
+ $.barcode.codes = {};
+ $.barcode.codes.code39 = {};
+ $.barcode.codes.code39.plain = {};
+ $.barcode.codes.code39.plain['0'] = 'bwbWBwBwb';
+ $.barcode.codes.code39.plain['1'] = 'BwbWbwbwB';
+ $.barcode.codes.code39.plain['2'] = 'bwBWbwbwB';
+ $.barcode.codes.code39.plain['3'] = 'BwBWbwbwb';
+ $.barcode.codes.code39.plain['4'] = 'bwbWBwbwB';
+ $.barcode.codes.code39.plain['5'] = 'BwbWBwbwb';
+ $.barcode.codes.code39.plain['6'] = 'bwBWBwbwb';
+ $.barcode.codes.code39.plain['7'] = 'bwbWbwBwB';
+ $.barcode.codes.code39.plain['8'] = 'BwbWbwBwb';
+ $.barcode.codes.code39.plain['9'] = 'bwBWbwBwb';
+ $.barcode.codes.code39.plain['A'] = 'BwbwbWbwB';
+ $.barcode.codes.code39.plain['B'] = 'bwBwbWbwB';
+ $.barcode.codes.code39.plain['C'] = 'BwBwbWbwb';
+ $.barcode.codes.code39.plain['D'] = 'bwbwBWbwB';
+ $.barcode.codes.code39.plain['E'] = 'BwbwBWbwb';
+ $.barcode.codes.code39.plain['F'] = 'bwBwBWbwb';
+ $.barcode.codes.code39.plain['G'] = 'bwbwbWBwB';
+ $.barcode.codes.code39.plain['H'] = 'BwbwbWBwb';
+ $.barcode.codes.code39.plain['I'] = 'bwBwbWBwb';
+ $.barcode.codes.code39.plain['J'] = 'bwbwBWBwb';
+ $.barcode.codes.code39.plain['K'] = 'BwbwbwbWB';
+ $.barcode.codes.code39.plain['L'] = 'bwBwbwbWB';
+ $.barcode.codes.code39.plain['M'] = 'BwBwbwbWb';
+ $.barcode.codes.code39.plain['N'] = 'bwbwBwbWB';
+ $.barcode.codes.code39.plain['O'] = 'BwbwBwbWb';
+ $.barcode.codes.code39.plain['P'] = 'bwBwBwbWb';
+ $.barcode.codes.code39.plain['Q'] = 'bwbwbwBWB';
+ $.barcode.codes.code39.plain['R'] = 'BwbwbwBWb';
+ $.barcode.codes.code39.plain['S'] = 'bwBwbwBWb';
+ $.barcode.codes.code39.plain['T'] = 'bwbwBwBWb';
+ $.barcode.codes.code39.plain['U'] = 'BWbwbwbwB';
+ $.barcode.codes.code39.plain['V'] = 'bWBwbwbwB';
+ $.barcode.codes.code39.plain['W'] = 'BWBwbwbwb';
+ $.barcode.codes.code39.plain['X'] = 'bWbwBwbwB';
+ $.barcode.codes.code39.plain['Y'] = 'BWbwBwbwb';
+ $.barcode.codes.code39.plain['Z'] = 'bWBwBwbwb';
+ $.barcode.codes.code39.plain['-'] = 'bWbwbwBwB';
+ $.barcode.codes.code39.plain['.'] = 'BWbwbwBwb';
+ $.barcode.codes.code39.plain[' '] = 'bWBwbwBwb';
+ $.barcode.codes.code39.plain['*'] = 'bWbwBwBwb';
+ $.barcode.codes.code39.plain['$'] = 'bWbWbWbwb';
+ $.barcode.codes.code39.plain['/'] = 'bWbWbwbWb';
+ $.barcode.codes.code39.plain['+'] = 'bWbwbWbWb';
+ $.barcode.codes.code39.plain['%'] = 'bwbWbWbWb';
+
+ $.barcode.codes.I25 = {};
+ $.barcode.codes.I25.plain = {};
+ $.barcode.codes.I25.plain['START'] = 'wwwwwwwwwwbwbw';
+ $.barcode.codes.I25.plain['END'] = 'Bwbwwwwwwwwww';
+ $.barcode.codes.I25.plain['0'] = 'bbBBb';
+ $.barcode.codes.I25.plain['1'] = 'BbbbB';
+ $.barcode.codes.I25.plain['2'] = 'bBbbB';
+ $.barcode.codes.I25.plain['3'] = 'BBbbb';
+ $.barcode.codes.I25.plain['4'] = 'bbBbB';
+ $.barcode.codes.I25.plain['5'] = 'BbBbb';
+ $.barcode.codes.I25.plain['6'] = 'bBBbb';
+ $.barcode.codes.I25.plain['7'] = 'bbbBB';
+ $.barcode.codes.I25.plain['8'] = 'BbbBb';
+ $.barcode.codes.I25.plain['9'] = 'bBbBb';
+
+ /* Cache BMP translation codes*/
+ $.barcode.codes.code39.BMP = {};
+ for (var x in $.barcode.codes.code39.plain){
+ var tcodes = $.barcode.codes.code39.plain[x];
+ $.barcode.codes.code39.BMP[x] = '';
+ for (var xi=0; xi<9; xi++)
+ switch (tcodes.charAt(xi)){
+ case 'B':
+ $.barcode.codes.code39.BMP[x] += '\x00\x00\x00\x00\x00\x00\x00\x00\x00';
+ break;
+ case 'b':
+ $.barcode.codes.code39.BMP[x] += '\x00\x00\x00';
+ break;
+ case 'W':
+ $.barcode.codes.code39.BMP[x] += '\x01\x01\x01\x01\x01\x01\x01\x01\x01';
+ break;
+ case 'w':
+ $.barcode.codes.code39.BMP[x] += '\x01\x01\x01';
+ break;
+ }
+ $.barcode.codes.code39.BMP[x] += '\x01\x01\x01';
+ };
+
+ $.barcode._barcodeBMP = function(settings, jQ) {
+ return $(jQ).each(function(item, index){
+ var encoded = '';
+ switch(settings.code){
+ case 'code39' :
+ var code = '*' + $.trim($(this).html()) + '*';
+ for(var i = 0; i < code.length; i++)
+ encoded += $.barcode.codes.code39.BMP[code.charAt(i)];
+ break;
+ case 'I25' :
+ var code = $.trim($(this).html());
+ encoded = $.barcode.codes.I25.plain['START'];
+
+ if(code.length % 2 == 1)
+ code = '0' + code;
+
+ for(var i = 0; i < code.length; i+=2){
+ var code1 = $.barcode.codes.I25.plain[code.charAt(i)];
+ var code2 = $.barcode.codes.I25.plain[code.charAt(i+1)].replace(/b/g,"w").replace(/B/g, "W");
+ for(var i2 = 0; i2 < 5; i2++){
+ encoded += code1.charAt(i2) + code2.charAt(i2);
+ }
+ }
+ encoded += $.barcode.codes.I25.plain['END'];
+ encoded = encoded.replace(/w/g, '\x01\x01\x01');
+ encoded = encoded.replace(/W/g, '\x01\x01\x01\x01\x01\x01\x01\x01\x01');
+ encoded = encoded.replace(/b/g, '\x00\x00\x00');
+ encoded = encoded.replace(/B/g, '\x00\x00\x00\x00\x00\x00\x00\x00\x00');
+ break;
+ default :
+ alert("Code" + settings.code + ' not implemented');
+ return;
+ };
+ var img = $("").width("100%").height("100%").attr("src", $.barcode._createBmp([encoded], $.barcode.palette));
+ $(this).html("").append(img);
+ });
+ };
+
+ $.barcode._encode64 = function(input) {
+ var output = '';
+ var i = 0;
+ do {
+ var chr1 = input.charCodeAt(i++);
+ var chr2 = input.charCodeAt(i++);
+ var chr3 = input.charCodeAt(i++);
+
+ var enc1 = chr1 >> 2;
+ var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ var enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) enc3 = enc4 = 64;
+ else if (isNaN(chr3)) enc4 = 64;
+
+ output = output + $.barcode._encode64.keyStr.charAt(enc1) +
+ $.barcode._encode64.keyStr.charAt(enc2) +
+ $.barcode._encode64.keyStr.charAt(enc3) +
+ $.barcode._encode64.keyStr.charAt(enc4);
+ } while (i < input.length);
+ return output;
+ };
+
+ $.barcode._encode64.keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ $.barcode._multiByteEncode = function(number, bytes) {
+ if (number < 0 || bytes < 0) {
+ throw('Negative numbers not allowed.');
+ }
+ var oldbase = 1;
+ var string = '';
+ for (var x = 0; x < bytes; x++) {
+ if (number == 0) {
+ CharCode = 0;
+ } else {
+ var base = oldbase * 256;
+ var CharCode = number % base;
+ number = number - CharCode;
+ CharCode = CharCode / oldbase;
+ oldbase = base;
+ }
+ string += String.fromCharCode(CharCode);
+ }
+ if (number != 0)
+ throw('Overflow, number too big for string length');
+ return string;
+ };
+
+ if ('btoa' in window && typeof window.btoa == 'function' && window.btoa('hello') == 'aGVsbG8=') {
+ $.barcode._encode64 = function(input) {
+ return window.btoa(input);
+ }
+ };
+
+ $.barcode._createBmp = function(grid, palette) {
+ // xxxx and yyyy are placeholders for offsets (computed later).
+ var bitmapFileHeader = 'BMxxxx\0\0\0\0yyyy';
+
+ // Assemble the info header.
+ var height = grid.length;
+ var width = height && grid[0].length;
+ var biHeight = this._multiByteEncode(height, 4);
+ var biWidth = this._multiByteEncode(width, 4);
+ var bfOffBits = this._multiByteEncode(40, 4);
+ var bitCount = 8;
+
+ var biBitCount = this._multiByteEncode(bitCount, 2);
+ var bitmapInfoHeader = bfOffBits + biWidth + biHeight + '\x01\0' +
+ biBitCount + '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0';
+
+ if (bitCount != 24) {
+ var palette_str = String(palette);
+ var rgbQuad = [];
+ var r = 0;
+ var g = 0;
+ var b = 0;
+ for (var x = 0; x < 256; x++) {
+ if (x < palette.length) {
+ r = palette[x][0];
+ g = palette[x][1];
+ b = palette[x][2];
+ }
+ rgbQuad[x] = String.fromCharCode(b, g, r, 0);
+ }
+ rgbQuad = rgbQuad.join('');
+ }
+
+ var padding;
+ if (width % 4 == 1) padding = '\0\0\0';
+ else if (width % 4 == 2) padding = '\0\0';
+ else if (width % 4 == 3) padding = '\0';
+ else padding = '';
+
+ var data = [];
+ for (var y = 0; y < height; y++)
+ data[y] = grid[height - y - 1] + padding;
+
+ var bitmap = bitmapFileHeader + bitmapInfoHeader + rgbQuad + data.join('');
+ bitmap = bitmap.replace(/yyyy/, this._multiByteEncode(bitmapFileHeader.length + bitmapInfoHeader.length + rgbQuad.length, 4));
+ bitmap = bitmap.replace(/xxxx/, this._multiByteEncode(bitmap.length, 4));
+ return 'data:image/bmp;base64,' + this._encode64(bitmap);
+ };
+})(jQuery);
+
+
+/**
+
+A version with DIVs for IE < 8 ...
+
+
+ //For Ie<8 fallback to DIV version
+ if($.browser.msie && parseInt($.browser.version.charAt(0)) < 8)
+ return $.barcode._barcodeDIV(settings, this);
+ else
+
+
+
+ $.barcode._barcodeDIV = function(settings, jQ) {
+ settings.thinWhiteBar = "