
// merci à grandzebu pour la doc !
// http://grandzebu.net/informatique/codbar/ean13.htm

function CodeBars()
{
	var bases=[
		"11001","10011","10110","00001","01110",
		"00111","01000","00010","00100","11010"
	];

	this.codes=[];
	for(var i=0;i<10;i++)
	{
		var code=[];
		code[0]="0";
		code[1]="0";
		code[2]="1";
		for(var j=0;j<5;j++)
		{
			code[0]+=bases[i][j]=="0" ? "1":"0";
			code[1]+=bases[i][4-j];
			code[2]+=bases[i][j];
		}
		code[0]+="1";
		code[1]+="1";
		code[2]+="0";
		this.codes[i]=code;
	}
	this.rule=[
		"000000","001011","001101","001110","010011",
		"011001","011100","010101","010110","011010"
	];
	this.lengths=[3,7*6,5,7*6,3];
	this.uid=0;
}

codeBars=new CodeBars();

function CodeBar(dw,h)
{
	this.dw=dw;
	this.height=h;
	this.ean="";
}

CodeBar.prototype.move=function(x,y)
{
	for(var i=0;i<this.divs.length;i++)
	{
		with(this.divs[i].style)
		{
			left= (x+ i*this.dw) + "px";
			top = (y) + "px";
		}
	}
}

CodeBar.prototype.show=function(yes)
{
	if(yes==null)
		yes=true;

	for(var i=0;i<this.divs.length;i++)
	{
		with(this.divs[i].style)
		{
			visibility= yes ? "visible":"hidden";
		}
	}
}

CodeBar.prototype.hide=function(yes)
{
	if(yes==null)
		yes=true;

	this.show(!yes);
}

CodeBar.prototype.set=function(ean)
{
	this.ean=ean;

	if(!this.divs)
		return;

	var bits=this.bits();

	for(var i=0;i<this.divs.length;i++)
	{
		this.divs[i].style.backgroundColor = bits.charAt(i)=="0" ? "#ffffff":"#000000";
	}
}

CodeBar.prototype.bits=function()
{
	var r=codeBars.rule[this.ean.charAt(0)];
	var bits="101";

	for(var i=0;i<6;i++)
	{
		bits+= codeBars.codes[this.ean.charAt(i+1)][Number(r.charAt(i))];
	}
	bits+="01010";
	for(var i=0;i<6;i++)
	{
		bits+= codeBars.codes[this.ean.charAt(i+7)][2];
	}
	bits+="101";
	return bits;
}

CodeBar.prototype.html=function(doc)
{
	if(doc==null)
		doc=document;

	var gid="codebar_"+ codeBars.uid;
	codeBars.uid++;

	var k=0;
	this.divs=[];
	this.width=0;
	for(var j=0;j<codeBars.lengths.length;j++)
	{
		for(var i=0;i<codeBars.lengths[j];i++)
		{
			var id = gid+"_"+k;
			doc.write("<div id="+ id +"></div>\n");
			var div=doc.getElementById(id);
			with(div.style)
			{
				position="absolute";
				visibility="hidden";
				width = this.dw+ "px";
				height= ((j&1) ? (this.height*4/5):this.height) + "px";
				left= this.width + "px";
				top = 0 + "px";
				backgroundColor="#ff0000";
			}
			this.width+=this.dw;

			this.divs.push(div);
			k++;
		}
	}
}


