function main(ev)
{	var d;
	d=document;

	var po=function (e)
	{	var s, n;
		var t;
		if(!e)
			e=window.event;
		t=e.target;
		if(!t)
			t=e.srcElement;

		n=(t.tagName=="FORM")?t.firstChild:t.parentNode.firstChild;
		//while(n && n.getAttribute("type") !="text")
		//	n=n.nextSibling;
		//alert(n.getAttribute("type") );
		d=document;
		n=d.getElementById("jc_textarea");
		if(e.preventDefault)
			e.preventDefault();
		e.returnValue=false;
		parse_fix(n.value);
		return false;
	}
	var i;
	var p;
	p=d.createElement("form");
	d.body.appendChild(p);
        i=d.createElement("textarea");
        i.setAttribute("cols", 80);
        i.setAttribute("rows", 24);
        i.setAttribute("id", "jc_textarea");
        p.appendChild(i);
	var bb=d.createElement("input");
	bb.setAttribute("type", "submit");
	bb.setAttribute("value", "Analyze");
	p.appendChild(bb);
	if(p.addEventListener)
		p.addEventListener("submit", po, false);
	else if(p.attachEvent)
		p.attachEvent("onsubmit", po);
}
var tbl=null;
function parse_fix(message)
{
	var d=document;
	var b=d.body;
	if(tbl)
		b.removeChild(tbl);
	tbl=d.createElement("table");
	var tb=d.createElement("tbody");
	var r;
	var rd;
	var tt;
	var m=message.replace(/[\r\n]+/,"");
	b.appendChild(tbl);
	tbl.appendChild(tb);

	var fix_bits=m.split(/[\|\01]|\^A/);
	var BeginString;
	for(fix_bit in fix_bits)
	{
		if(fix_bits[fix_bit].length==0)
			continue;

		r=d.createElement("tr");
		tb.appendChild(r);
		rd=d.createElement("td");
		r.appendChild(rd);
		tt=d.createTextNode(fix_bits[fix_bit]);
		rd.appendChild(tt)

		var tag_val=fix_bits[fix_bit].split(/=/, 2);
		if(tag_val[0]=="8")
		{
			BeginString=tag_val[1];
			if(!d.tagList[BeginString])
			{	
				rd=d.createElement("td");
				r.appendChild(rd);
				tt=d.createTextNode("Loading...");
				rd.appendChild(tt)
				loadFixSpec(BeginString);
				return;
			}
		}

		if(d.tagList[BeginString][tag_val[0]])
		{	tag_val[0]=d.tagList[BeginString][tag_val[0]];
			if(d.tagValMap[BeginString][tag_val[0]] && d.tagValMap[BeginString][tag_val[0]][tag_val[1]])
				tag_val[1]=d.tagValMap[BeginString][tag_val[0]][tag_val[1]];
		}
		for(var tv in tag_val)
		{
			rd=d.createElement("td");
			tt=d.createTextNode(tag_val[tv]);
			rd.appendChild(tt)
			r.appendChild(rd);
		}
                //alert(fix_bits[fix_bit]);
	}
}
var activeWait;
function fsLoaded(e)
{
	//activeWait=null;
	d=document;
	n=d.getElementById("jc_textarea");
	parse_fix(n.value);
}
function loadFixSpec(spec)
{
	var d=document;
	var b=d.body;
	activeWait=1;
	var s=d.createElement("script");
        if(s.addEventListener)
                s.addEventListener("load", fsLoaded, false);
	else if(s.attachEvent && navigator.userAgent.match(/^Opera\//))
		s.attachEvent("onload", fsLoaded);
	else
		window.setTimeout(fsLoaded, 500);
//Note: The below doesn't work (IE) so we give it 500ms and try again
// If that has not worked it will keep going until it does find the loaded
// data. Opera seems to do events like IE but "onload" does work

                try
                {
                        s.setAttribute("src", spec+".json");
                        d.body.appendChild(s);
                }
                catch(err)
                {
                        alert(err);
                }

//	while(activeWait)
		;
}

if(window.addEventListener) window.addEventListener("load", main, true);
else if(window.attachEvent) window.attachEvent("onload", main);

