/* IEC16022 bar code generation library 
 * Ported to Javascript from a C implementation by Adrian Kennard,Andrews & Arnold Ltd 
 * with help from Cliff Hones on the RS coding by Guido Sohne (JavaScript port,Firefox extension), 
 * adapted by Christoph Taubmann, 
 * Copyright (C) Adrian Kennard & Cliff Hones, 
 * Copyright (C) 2005 Guido Sohne, 
 * Copyright (C) 2009 Christoph Taubmann,
 * This code is licensed under the GNU GPL Version 2.0 
 */
(function () {
	
	if (typeof DM == "undefined") DM = {
		f: 0,
		q: 1,
		r: 2,
		s: 3,
		l: 4,
		n: 5,
		g: 6,
		A: 3116,
		a: {
			R: {},
			encoding: [],
			B: 0,
			I: "ACTXEB",
			j: [
				[0, 1, 1, 1, 1, 2],
				[1, 0, 2, 2, 2, 3],
				[1, 2, 0, 2, 2, 3],
				[1, 2, 2, 0, 2, 3],
				[1, 2, 2, 2, 0, 3],
				[0, 1, 1, 1, 1, 0]
			]
		},
		h: {},
		S: {}
	};
	DM.h.w = function (c) {
		gfpoly = c;
		var e, f;
		f = 1;
		for (e = 0; f <= c; f <<= 1) e++;
		f >>= 1;
		e--;
		symsize = e;
		logmod = (1 << e) - 1;
		zlog = new Array(logmod + 1);
		alog = new Array(logmod);
		var b;
		e = 1;
		for (b = 0; b < logmod; b++) {
			alog[b] = e;
			zlog[e] = b;
			e <<= 1;
			if (e & f) e ^= c
		}
	};
	DM.h.v = function (c, e) {
		var f, b;
		rspoly = new Array(c + 1);
		rslen = c;
		for (f = rspoly[0] = 1; f <= c; f++) {
			rspoly[f] = 1;
			for (b = f - 1; b > 0; b--) {
				if (rspoly[b]) rspoly[b] = alog[(zlog[rspoly[b]] + e) % logmod];
				rspoly[b] ^= rspoly[b - 1]
			}
			rspoly[0] = alog[(zlog[rspoly[0]] + e) % logmod];
			e++
		}
	};
	DM.h.u = function (c) {
		var e, f, b, g = new Array(rslen);
		for (e = 0; e < rslen; e++) g[e] = 0;
		for (e = 0; e < c.length; e++) {
			b = g[rslen - 1] ^ c[e];
			for (f = rslen - 1; f > 0; f--) g[f] = b && rspoly[f] ? g[f - 1] ^ alog[(zlog[b] + zlog[rspoly[f]]) % logmod] : g[f - 1];
			g[0] = b && rspoly[0] ? alog[(zlog[b] + zlog[rspoly[0]]) % logmod] : 0
		}
		return g
	};
	DM.h.prototype = {
		w: DM.h.w,
		v: DM.h.v,
		u: DM.h.u
	};
	DM.h.K = function (c) {
		var e = DM.h.prototype;
		e.w(301);
		e.v(c, 1);
		return e
	};
	DM.a.T = function () {
		return {
			height: 0,
			width: 0,
			data: 0,
			k: 0,
			i: 0,
			o: 0,
			p: 0
		}
	};
	DM.a.d = function (c, e, f, b, g, d, a) {
		var i = {
			height: 0,
			width: 0,
			data: 0,
			k: 0,
			i: 0,
			o: 0,
			p: 0
		};
		i.height = c;
		i.width = e;
		i.data = f;
		i.k = b;
		i.i = g;
		i.o = d;
		i.p = a;
		return i
	};
	DM.a.z = [DM.a.d(10, 10, 10, 10, 3, 3, 5), DM.a.d(12, 12, 12, 12, 5, 5, 7), DM.a.d(14, 14, 14, 14, 8, 8, 10), DM.a.d(16, 16, 16, 16, 12, 12, 12), DM.a.d(18, 18, 18, 18, 18, 18, 14), DM.a.d(20, 20, 20, 20, 22, 22, 18), DM.a.d(22, 22, 22, 22, 30, 30, 20), DM.a.d(24, 24, 24, 24, 36, 36, 24), DM.a.d(26, 26, 26, 26, 44, 44, 28), DM.a.d(32, 32, 16, 16, 62, 62, 36), DM.a.d(36, 36, 18, 18, 86, 86, 42), DM.a.d(40, 40, 20, 20, 114, 114, 48), DM.a.d(44, 44, 22, 22, 144, 144, 56), DM.a.d(48, 48, 24, 24, 174, 174, 68), DM.a.d(52, 52, 26, 26, 204, 102, 42), DM.a.d(64, 64, 16, 16, 280, 140, 56), DM.a.d(72, 72, 18, 18, 368, 92, 36), DM.a.d(80, 80, 20, 20, 456, 114, 48), DM.a.d(88, 88, 22, 22, 576, 144, 56), DM.a.d(96, 96, 24, 24, 696, 174, 68), DM.a.d(104, 104, 26, 26, 816, 136, 56), DM.a.d(120, 120, 20, 20, 1050, 175, 68), DM.a.d(132, 132, 22, 22, 1304, 163, 62), DM.a.d(144, 144, 24, 24, 1558, 156, 62), DM.a.d(0, 0, 0, 0, 0, 0, 0, 0, 0)];
	DM.a.b = function (c, e, f, b, g, d, a) {
		if (b < 0) {
			b += e;
			g += 4 - (e + 4) % 8
		}
		if (g < 0) {
			g += f;
			b += 4 - (f + 4) % 8
		}
		c[b * f + g] = (d << 3) + a
	};
	DM.a.D = function (c, e, f, b, g, d) {
		DM.a.b(c, e, f, b - 2, g - 2, d, 7);
		DM.a.b(c, e, f, b - 2, g - 1, d, 6);
		DM.a.b(c, e, f, b - 1, g - 2, d, 5);
		DM.a.b(c, e, f, b - 1, g - 1, d, 4);
		DM.a.b(c, e, f, b - 1, g - 0, d, 3);
		DM.a.b(c, e, f, b - 0, g - 2, d, 2);
		DM.a.b(c, e, f, b - 0, g - 1, d, 1);
		DM.a.b(c, e, f, b - 0, g - 0, d, 0)
	};
	DM.a.M = function (c, e, f, b) {
		DM.a.b(c, e, f, e - 1, 0, b, 7);
		DM.a.b(c, e, f, e - 1, 1, b, 6);
		DM.a.b(c, e, f, e - 1, 2, b, 5);
		DM.a.b(c, e, f, 0, f - 2, b, 4);
		DM.a.b(c, e, f, 0, f - 1, b, 3);
		DM.a.b(c, e, f, 1, f - 1, b, 2);
		DM.a.b(c, e, f, 2, f - 1, b, 1);
		DM.a.b(c, e, f, 3, f - 1, b, 0)
	};
	DM.a.N = function (c, e, f, b) {
		DM.a.b(c, e, f, e - 3, 0, b, 7);
		DM.a.b(c, e, f, e - 2, 0, b, 6);
		DM.a.b(c, e, f, e - 1, 0, b, 5);
		DM.a.b(c, e, f, 0, f - 4, b, 4);
		DM.a.b(c, e, f, 0, f - 3, b, 3);
		DM.a.b(c, e, f, 0, f - 2, b, 2);
		DM.a.b(c, e, f, 0, f - 1, b, 1);
		DM.a.b(c, e, f, 1, f - 1, b, 0)
	};
	DM.a.O = function (c, e, f, b) {
		DM.a.b(c, e, f, e - 3, 0, b, 7);
		DM.a.b(c, e, f, e - 2, 0, b, 6);
		DM.a.b(c, e, f, e - 1, 0, b, 5);
		DM.a.b(c, e, f, 0, f - 2, b, 4);
		DM.a.b(c, e, f, 0, f - 1, b, 3);
		DM.a.b(c, e, f, 1, f - 1, b, 2);
		DM.a.b(c, e, f, 2, f - 1, b, 1);
		DM.a.b(c, e, f, 3, f - 1, b, 0)
	};
	DM.a.P = function (c, e, f, b) {
		DM.a.b(c, e, f, e - 1, 0, b, 7);
		DM.a.b(c, e, f, e - 1, f - 1, b, 6);
		DM.a.b(c, e, f, 0, f - 3, b, 5);
		DM.a.b(c, e, f, 0, f - 2, b, 4);
		DM.a.b(c, e, f, 0, f - 1, b, 3);
		DM.a.b(c, e, f, 1, f - 3, b, 2);
		DM.a.b(c, e, f, 1, f - 2, b, 1);
		DM.a.b(c, e, f, 1, f - 1, b, 0)
	};
	DM.a.L = function (c, e, f) {
		var b, g, d;
		for (b = 0; b < e; b++) for (g = 0; g < f; g++) c[b * f + g] = 0;
		d = 1;
		b = 4;
		g = 0;
		do {
			b == e && !g && DM.a.M(c, e, f, d++);
			b == e - 2 && !g && f % 4 && DM.a.N(c, e, f, d++);
			b == e - 2 && !g && f % 8 == 4 && DM.a.O(c, e, f, d++);
			b == e + 4 && g == 2 && !(f % 8) && DM.a.P(c, e, f, d++);
			do {
				b < e && g >= 0 && !c[b * f + g] && DM.a.D(c, e, f, b, g, d++);
				b -= 2;
				g += 2
			} while (b >= 0 && g < f);
			b++;
			g += 3;
			do {
				b >= 0 && g < f && !c[b * f + g] && DM.a.D(c, e, f, b, g, d++);
				b += 2;
				g -= 2
			} while (b < e && g >= 0);
			b += 3;
			g++
		} while (b < e || g < f);
		c[e * f - 1] || (c[e * f - 1] = c[e * f - f - 2] = 1)
	};
	DM.a.Q = function (c, e, f, b) {
		f = Math.floor((e + 2) / f);
		var g, d = DM.h.K(b);
		for (g = 0; g < f; g++) {
			var a = [],
				i, j = 0;
			for (i = g; i < e; i += f) a.push(c[i]);
			a = d.u(a);
			j = b - 1;
			for (i = g; i < b * f; i += f) c[e + i] = a[j--]
		}
	};
	DM.a.t = function (c, e) {
		if (c == null || c.length > 1) return false;
		if (e.indexOf(c) == -1) return false;
		return true
	};
	DM.a.m = function (c) {
		return DM.a.t(c, "1234567890")
	};
	DM.a.J = function (c) {
		return DM.a.t(c, "abcdefghijklmnopqrstuvwxyz")
	};
	DM.a.C = function (c) {
		return DM.a.t(c, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
	};
	DM.a.F = function (c, e, f, b, g) {
		var d = "a",
			a = 0,
			i = 0;
		if (g.W < b) {
			alert("Encoding string too short");
			return 0
		}
		for (; i < b && a < e;) {
			var j = d;
			if (e - a <= 1 && (d == "c" || d == "t") || e - a <= 2 && d == "x") d = "a";
			j = g.encoding[i].toLowerCase();
			switch (j) {
			case "c":
			case "t":
			case "x":
				var h = new Array(6),
					k = 0,
					n, o = "";
				if (j == "c") {
					n = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
					o = "`abcdefghijklmnopqrstuvwxyz{|}~\u007f"
				}
				if (j == "t") {
					n = " 0123456789abcdefghijklmnopqrstuvwxyz";
					o = "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\u007f"
				}
				if (j == "x") n = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\r*>";
				do {
					var l = f.charAt(i++),
						m;
					if (l & 128) {
						if (j == "x") {
							alert("Cannot encode char in X12: " + l);
							return 0
						}
						l &= 127;
						h[k++] = 1;
						h[k++] = 30
					}
					m = n.indexOf(l);
					if (m != -1) h[k++] = (m + 3) % 40;
					else {
						if (j == "x") {
							alert("Cannot encode char in X12: " + l);
							return 0
						}
						if (l < 32) {
							h[k++] = 0;
							h[k++] = l
						} else {
							m = "!\"#$%&'()*+,-./:;<=>?@[\\]_".indexOf(l);
							if (m != -1) {
								h[k++] = 1;
								h[k++] = m
							} else {
								m = o.indexOf(l);
								if (m != -1) {
									h[k++] = 2;
									h[k++] = m
								} else {
									alert("Should not happen. Could not encode: " + l);
									return 0
								}
							}
						}
					}
					if (k == 2 && a + 2 == e && i == b) h[k++] = 0;
					for (; k >= 3;) {
						l = h[0] * 1600 + h[1] * 40 + h[2] + 1;
						if (d != j) {
							if (d == "c" || d == "t" || d == "x") c[a++] = 254;
							else if (d == "x") c[a++] = 124;
							if (j == "c") c[a++] = 230;
							if (j == "t") c[a++] = 239;
							if (j == "x") c[a++] = 238;
							d = j
						}
						c[a++] = l >> 8;
						c[a++] = l & 255;
						k -= 3;
						h[0] = h[3];
						h[1] = h[4];
						h[2] = h[5]
					}
				} while (k && i < b);
				break;
			case "e":
				h = new Array(4);
				k = 0;
				if (d != j) {
					c[a++] = 254;
					d = "a"
				}
				for (; i < b && g.encoding[i].toLowerCase() == "e" && k < 4;) h[k++] = f.charAt(i++).charCodeAt(0);
				if (k < 4) {
					h[k++] = 31;
					d = "a"
				}
				c[a] = (f.charAt(0) & 63) << 2;
				j = a++;
				c[j] |= (f.charAt(1) & 48) >> 4;
				c[a] = (f.charAt(1) & 15) << 4;
				if (k == 2) a++;
				else {
					j = a++;
					c[j] |= (f[2] & 60) >> 2;
					c[a] = (f.charAt(2) & 3) << 6;
					j = a++;
					c[j] |= f.charAt(3) & 63
				}
				break;
			case "a":
				if (d != j) if (d == "c" || d == "t" || d == "x") c[a++] = 254;
				else c[a++] = 124;
				d = "a";
				if (b - i >= 2 && DM.a.m(f.charAt(i)) && DM.a.m(f.charAt(i + 1))) {
					c[a++] = (f.charAt(i).charCodeAt(0) - "0".charCodeAt(0)) * 10 + f.charAt(i + 1).charCodeAt(0) - "0".charCodeAt(0) + 130;
					i += 2
				} else if (f.charAt(i).charCodeAt(0) > 127) {
					c[a++] = 235;
					c[a++] = f.charAt(i++).charCodeAt(0) - 127
				} else c[a++] = f.charAt(i++).charCodeAt(0) + 1;
				break;
			case "b":
				d = 0;
				if (encoding) for (k = i; k < b && g.encoding[k].toLowerCase() == "b"; k++) d++;
				c[a++] = 231;
				if (d < 250) c[a++] = d;
				else {
					c[a++] = 249 + Math.floor(d / 250);
					c[a++] = d % 250
				}
				for (; d--&&a < e;) {
					c[a] = f.charAt(i++).charCodeAt(0) + (a + 1) * 149 % 255 + 1;
					a++
				}
				d = "a";
				break;
			default:
				alert("Unknown encoding: " + j);
				return 0
			}
		}
		if (a < e && d != "a") if (d == "c" || d == "x" || d == "t") c[a++] = 254;
		else c[a++] = 124;
		if (a < e) c[a++] = 129;
		for (; a < e;) {
			l = 129 + (a + 1) * 149 % 253 + 1;
			if (l > 254) l -= 254;
			c[a++] = l
		}
		if (a > e || i < b) return 0;
		return a
	};
	DM.a.H = function (c, e, f) {
		if (!c) return null;
		if (c > DM.A) return null;
		for (var b = new Array(DM.A), g = 0; g < b.length; g++) {
			b[g] = new Array(DM.g);
			for (var d = 0; d < b[g].length; d++) b[g][d] = {
				e: 0,
				c: 0
			}
		}
		var a;
		for (d = c; d--;) {
			var i = 0,
				j, h, k;
			g = j = 1;
			if (DM.a.m(e.charAt(d)) && d + 1 < c && DM.a.m(e.charAt(d + 1))) g = 2;
			else if (e.charAt(d) & 128) j = 2;
			h = 0;
			if (d + g < c) for (a = 0; a < DM.g; a++) if (b[d + g][a].c && ((k = b[d + g][a].c + DM.a.j[DM.f][a]) < h || !h)) {
				h = k;
				i = a
			}
			b[d][DM.f].c = j + h;
			b[d][DM.f].e = g;
			if (h && i == DM.f) b[d][i].e += b[d + g][i].e;
			a = j = g = 0;
			do {
				h = d + g++;
				h = e.charAt(h);
				if (h & 128) {
					a += 2;
					h &= 127
				}
				h != " " && !DM.a.m(h) && !DM.a.C(h) && a++;
				for (a++; a >= 3;) {
					a -= 3;
					j += 2
				}
			} while (a && d + g < c);
			if (f && a == 2 && d + g == c) {
				a = 0;
				j += 2
			}
			if (!a) {
				h = 0;
				if (d + g < c) for (a = 0; a < DM.g; a++) if (b[d + g][a].c && ((k = b[d + g][a].c + DM.a.j[DM.q][a]) < h || !h)) {
					h = k;
					i = a
				}
				if (f && b[d + g][DM.f].c == 1 && 1 < h) {
					h = 1;
					i = DM.f
				}
				b[d][DM.q].c = j + h;
				b[d][DM.q].e = g;
				if (h && i == DM.q) b[d][i].e += b[d + g][i].e
			}
			a = j = g = 0;
			do {
				h = e.charAt(d + g++);
				if (h & 128) {
					a += 2;
					h &= 127
				}
				h != " " && !DM.a.m(h) && !DM.a.J(h) && a++;
				for (a++; a >= 3;) {
					a -= 3;
					j += 2
				}
			} while (a && d + g < c);
			if (f && a == 2 && d + g == c) {
				a = 0;
				j += 2
			}
			if (!a && g) {
				h = 0;
				if (d + g < c) for (a = 0; a < DM.g; a++) if (b[d + g][a].c && ((k = b[d + g][a].c + DM.a.j[DM.r][a]) < h || !h)) {
					h = k;
					i = a
				}
				if (f && b[d + g][DM.f].c == 1 && 1 < h) {
					h = 1;
					i = DM.f
				}
				b[d][DM.r].c = j + h;
				b[d][DM.r].e = g;
				if (h && i == DM.r) b[d][i].e += b[d + g][i].e
			}
			a = j = g = 0;
			do {
				h = e.charAt(d + g++);
				if (h != 13 && h != "*" && h != ">" && h != " " && !DM.a.m(h) && !DM.a.C(h)) {
					g = 0;
					break
				}
				for (a++; a >= 3;) {
					a -= 3;
					j += 2
				}
			} while (a && d + g < c);
			if (!a && g) {
				h = 0;
				if (d + g < c) for (a = 0; a < DM.g; a++) if (b[d + g][a].c && ((k = b[d + g][a].c + DM.a.j[DM.s][a]) < h || !h)) {
					h = k;
					i = a
				}
				if (f && b[d + g][DM.f].c == 1 && 1 < h) {
					h = 1;
					i = DM.f
				}
				b[d][DM.s].c = j + h;
				b[d][DM.s].e = g;
				if (h && i == DM.s) b[d][i].e += b[d + g][i].e
			}
			h = 0;
			if (e.charAt(d + 0) >= 32 && e.charAt(d + 0) <= 94) {
				g = 0;
				if (d + 1 == c && (!h || h < 2)) {
					h = 2;
					g = 1
				} else for (a = 0; a < DM.g; a++) if (a != DM.l && b[d + 1][a].c && ((k = 2 + b[d + 1][a].c + DM.a.j[DM.f][a]) < h || !h)) {
					g = 1;
					h = k;
					i = a
				}
				if (d + 1 < c && ss.charAt(d + 1) >= 32 && e.charAt(d + 1) <= 94) {
					if (d + 2 == c && (!h || h < 2)) {
						h = 3;
						g = 2
					} else for (a = 0; a < DM.g; a++) if (a != DM.l && b[d + 2][a].c && ((k = 3 + b[d + 2][a].c + DM.a.j[DM.f][a]) < h || !h)) {
						g = 2;
						h = k;
						i = a
					}
					if (d + 2 < c && e.charAt(d + 2) >= 32 && e.charAt(d + 2) <= 94) {
						if (d + 3 == c && (!h || h < 3)) g = h = 3;
						else for (a = 0; a < DM.g; a++) if (a != DM.l && b[d + 3][a].c && ((k = 3 + b[d + 3][a].c + DM.a.j[DM.f][a]) < h || !h)) {
							g = 3;
							h = k;
							i = a
						}
						if (d + 4 < c && e.charAt(d + 3) >= 32 && e.charAt(d + 3) <= 94) if (d + 4 == c && (!h || h < 3)) {
							h = 3;
							g = 4
						} else {
							for (a = 0; a < DM.g; a++) if (b[d + 4][a].c && ((k = 3 + b[d + 4][a].c + DM.a.j[DM.l][a]) < h || !h)) {
								g = 4;
								h = k;
								i = a
							}
							if (f && b[d + 4][DM.f].c && b[d + 4][DM.f].c <= 2 && (k = 3 + b[d + 4][DM.f].c) < h) {
								g = 4;
								h = k;
								i = DM.f
							}
						}
					}
				}
				b[d][DM.l].c = h;
				b[d][DM.l].e = g;
				if (h && i == DM.l) b[d][i].e += b[d + g][i].e
			}
			for (a = h = 0; a < DM.g; a++) if (b[d + 1][a].c && ((k = b[d + 1][a].c + DM.a.j[DM.n][a] + (a == DM.n && b[d + 1][a].c == 249 ? 1 : 0)) < h || !h)) {
				h = k;
				i = a
			}
			b[d][DM.n].c = 1 + h;
			b[d][DM.n].e = 1;
			if (h && i == DM.n) b[d][i].e += b[d + 1][i].e
		}
		e = {};
		f = new Array(c + 1);
		d = 0;
		for (j = DM.f; d < c;) {
			for (a = i = g = 0; a < DM.g; a++) if (b[d][a].c && ((k = b[d][a].c + DM.a.j[j][a]) < g || k == g && a == j || !g)) {
				i = a;
				g = k
			}
			j = i;
			g = b[d][i].e;
			if (!d) e.B = b[d][i].c;
			for (; d < c && g--;) f[d++] = DM.a.I.charAt(i)
		}
		f[d] = 0;
		e.encoding = f;
		return e
	};
	DM.a.G = function (c) {
		var e = 0,
			f = 0,
			b = "",
			g = new Array(4096),
			d = {
			height: 0,
			width: 0,
			data: 0,
			k: 0,
			i: 0,
			o: 0,
			p: 0
		},
			a = {
			height: 0,
			width: 0,
			data: 0,
			k: 0,
			i: 0,
			o: 0,
			p: 0
		},
			i = DM.a.H(c.length, c, false);
		d.Y = false;
		if (!i) return d;
		for (e = 0; e < DM.a.z.length; e++) {
			a = DM.a.z[e];
			if (a.i > i.B) break
		}
		if (a.width == 0) {
			alert("Cannot find suitable size,url is too long!");
			return d
		}
		e = a.width;
		f = a.height;
		if (DM.a.F(g, a.i, c, c.length, i) == 0) {
			alert("URL too long for " + e + "x" + f);
			return d
		}
		DM.a.Q(g, a.i, a.o, a.p);
		var j, h, k, n;
		h = e - 2 * Math.floor(e / a.k);
		k = f - 2 * Math.floor(f / a.data);
		n = new Array(h * k);
		DM.a.L(n, k, h);
		b = new Array(e * f);
		for (j = 0; j < f; j += a.data) {
			for (c = 0; c < e; c++) b[j * e + c] = 1;
			for (c = 0; c < e; c += 2) b[(j + a.data - 1) * e + c] = 1
		}
		for (c = 0; c < e; c += a.k) {
			for (j = 0; j < f; j++) b[j * e + c] = 1;
			for (j = 0; j < f; j += 2) b[j * e + c + a.k - 1] = 1
		}
		for (j = 0; j < k; j++) for (c = 0; c < h; c++) {
			var o = n[(k - j - 1) * h + c];
			if (o == 1 || o > 7 && g[(o >> 3) - 1] & 1 << (o & 7)) b[(1 + j + 2 * Math.floor(j / (a.data - 2))) * e + 1 + c + 2 * Math.floor(c / (a.k - 2))] = 1
		}
		d.width = e;
		d.height = f;
		d.data = b;
		d.encoding = i;
		d.i = a.i;
		d.V = Math.floor((a.i + 2) / a.U) * a.X;
		return d
	};
	
	// here you can change the params
	var BB = 5; // block size
	var p = decodeURIComponent(window.location); // message
	
	// now lets generate the HTML
	if (! (p.length < 5)) {
		for (var q = DM.a.G(p), r = q.width, s = q.height, t = BB * r, u = "", v = 0; v < s; v++) for (var w = 0; w < r; w++) if (q.data[v * r + w]) {
			//alternatively you can use an image
			u += '<div style="position:absolute;background:#000;left:' + (w * BB + BB) + "px;top:" + ((t - (v + 1) * BB) + BB) + "px;height:" + BB + "px;";
			for (var x = 0; q.data[v * r + w];) {
				x += w * BB < t ? BB : 0;
				w++
			}
			u += "width:" + x + 'px;"></div>'
		}
		var cnt = document.getElementById("datamatrix_container");
		cnt.style.width = (q.width * BB + BB * 2) + 'px';
		cnt.style.height = (q.height * BB + BB * 2) + 'px';
		cnt.innerHTML = u;
	};
})();

