var inactiveColor = '#fff';

function load()
{
	var x = document.getElementsByTagName('SELECT');
	for (var i = 0; i < x.length; i++)
		x[i].disabled = true;
	var y = document.getElementsByTagName('INPUT');
	for (var i = 0; i < y.length; i++)
	{
		y[i].disabled = false;
		y[i].readOnly = true;
	}
	var z = document.getElementsByTagName('FIELDSET');
	for (var i = 2; i < z.length; i++)
		z[i].style.backgroundColor = inactiveColor;

	var d = document.getElementById("dataInput");
	d.onkeypress = blockNonNumbers;
	d.onkeyup = extractAndDecodeNumber;
	d.onblur = extractAndDecodeNumber;
	d.readOnly = false;

	// Get initial data string from URL, if present, skipping any non-digits.
	if (location.search.length > 0)
	{
		d.value = digitFilter(location.search.substring(1));
		decodeData(d.value);
	}

	// Put the cursor in the data input field.
	document.forms.fieldForm.dataInput.focus();
}

function blockNonNumbers(event)
{
	var key;
	var reg = /[^ -\/:-\177]/; // printable ascii non-digits

	var e = event ? event : window.event;
	if (window.event)
		key = e.keyCode;
	else
	if (e.which)
		key = e.which;

	if (isNaN(key))
		return true;

	return reg.test(String.fromCharCode(key));
}

function extractAndDecodeNumber(event) 
{
	var e = event ? event : window.event;
	var src = e.srcElement ? e.srcElement : e.target;

	// avoid changing things if already formatted correctly
	var reg = new RegExp('^[0-9]*$');
	var temp = src.value;
	if (!reg.test(temp))
		src.value = digitFilter(temp);

	// Decode the data string as it's typed.
	decodeData(src.value);
}

function digitFilter(s)
{
	var reg = new RegExp('[^0-9]', 'g');
	return s.replace(reg, '');
}

function getNextPiece(len)
{
	if (this.i >= this.length)
		throw "eos"; // short-circuit; not really an error.
	var str = this.s.substr(this.i, len);
	this.i += len;
	return str;
}

function parser(str)
{
	this.s = str;
	this.i = 0;
	this.length = str.length;
	this.next = getNextPiece;
}

function rangeCheck(s, val, min, max)
{
	var id = document.getElementById(s);
	id.value = val;
	if (val < min || val > max)
	{
		id.style.color = 'red';
		throw "range error";
	}
}

function selectCheck(s1, s2, val)
{
	var id1 = document.getElementById(s1);
	var id2 = document.getElementById(s2);
	id1.value = val;
	id2.value = val;
	if (id1.value == "")
	{
		id2.style.color = 'red';
		throw "unknown code";
	}
}

function decodeData(str)
{
	var x = document.getElementsByTagName('SELECT');
	for (var i = 0; i < x.length; i++)
		x[i].selectedIndex = 0;
	var y = document.getElementsByTagName('INPUT');
	for (var i = 0; i < y.length; i++)
		if (y[i].id != "dataInput")
		{
			y[i].value = "";
			y[i].style.color = 'black';
		}
	var z = document.getElementsByTagName('FIELDSET');
	for (var i = 2; i < z.length; i++)
		z[i].style.backgroundColor = inactiveColor;

	try
	{
		var d = new parser(str);
		rangeCheck("aiText", d.next(4), 8110, 8110);

		vli = d.next(1);
		rangeCheck("primaryCompanyPrefixVLIText", vli, 0, 6);
		document.getElementById("primaryCompanyPrefixText").value = d.next((vli * 1) + 6);

		document.getElementById("offerCodeText").value = d.next(6);

		vli = d.next(1);
		rangeCheck("saveValueVLIText", vli, 1, 5);
		document.getElementById("saveValueText").value = d.next(vli * 1);

		vli = d.next(1);
		rangeCheck("primaryPurchaseRequirementVLIText", vli, 1, 5);
		document.getElementById("primaryPurchaseRequirementText").value = d.next(vli * 1);

		selectCheck("primaryPurchaseReqCode", "primaryPurchaseRequirementCodeText", d.next(1));

		document.getElementById("primaryPurchaseFamilyCodeText").value = d.next(3);

		while ((fieldNum = d.next(1)) != "")
		{
			switch (fieldNum)
			{
				case "1": decodeDataField1(d); break;
				case "2": decodeDataField2(d); break;
				case "3": decodeDataField3(d); break;
				case "4": decodeDataField4(d); break;
				case "5": decodeDataField5(d); break;
				case "6": decodeDataField6(d); break;
				case "9": decodeDataField9(d); break;
				default: throw "unknown data field";
			}
		}
	}
	catch (e)
	{
//		if (e != "eos")
//			alert(e);
	}
}

function decodeDataField1(d)
{
	var e = document.getElementById("dataField1Text");
	e.value = "1";
	e.parentNode.style.backgroundColor = 'white';
	selectCheck("addlPurchaseRulesCode", "addlPurchaseRulesText", d.next(1));
	vli = d.next(1);
	rangeCheck("secondPurchaseRequirementVLIText", vli, 1, 5);
	document.getElementById("secondPurchaseRequirementText").value = d.next(vli * 1);
	selectCheck("secondPurchaseReqCode", "secondPurchaseRequirementCodeText", d.next(1));
	document.getElementById("secondPurchaseFamilyCodeText").value = d.next(3);
	vli = d.next(1);
	if (vli == 9)
	{
		document.getElementById("secondCompanyPrefixVLIText").value = vli;
		document.getElementById("secondCompanyPrefixText").value = "n/a";
	}
	else
	{
		rangeCheck("secondCompanyPrefixVLIText", vli, 0, 6);
		document.getElementById("secondCompanyPrefixText").value = d.next((vli * 1) + 6);
	}
}

function decodeDataField2(d)
{
	var e = document.getElementById("dataField2Text");
	e.value = "2";
	e.parentNode.style.backgroundColor = 'white';
	vli = d.next(1);
	rangeCheck("thirdPurchaseRequirementVLIText", vli, 1, 5);
	document.getElementById("thirdPurchaseRequirementText").value = d.next(vli * 1);
	selectCheck("thirdPurchaseReqCode", "thirdPurchaseRequirementCodeText", d.next(1));
	document.getElementById("thirdPurchaseFamilyCodeText").value = d.next(3);
	vli = d.next(1);
	if (vli == 9)
	{
		document.getElementById("thirdCompanyPrefixVLIText").value = vli;
		document.getElementById("thirdCompanyPrefixText").value = "n/a";
	}
	else
	{
		rangeCheck("thirdCompanyPrefixVLIText", vli, 0, 6);
		document.getElementById("thirdCompanyPrefixText").value = d.next((vli * 1) + 6);
	}
}

function decodeDataField3(d)
{
	var e = document.getElementById("dataField3Text");
	e.value = "3";
	e.parentNode.style.backgroundColor = 'white';
	document.getElementById("expiryDateText").value = d.next(6);
}

function decodeDataField4(d)
{
	var e = document.getElementById("dataField4Text");
	e.value = "4";
	e.parentNode.style.backgroundColor = 'white';
	document.getElementById("startDateText").value = d.next(6);
}

function decodeDataField5(d)
{
	var e = document.getElementById("dataField5Text");
	e.value = "5";
	e.parentNode.style.backgroundColor = 'white';
	vli = d.next(1);
	rangeCheck("serialNumberVLIText", vli, 0, 9);
	document.getElementById("serialNumberText").value = d.next((vli * 1) + 6);
}

function decodeDataField6(d)
{
	var e = document.getElementById("dataField6Text");
	e.value = "6";
	e.parentNode.style.backgroundColor = 'white';
	vli = d.next(1);
	rangeCheck("retailerIDVLIText", vli, 1, 7);
	document.getElementById("retailerIDText").value = d.next((vli * 1) + 6);
}

function decodeDataField9(d)
{
	var e = document.getElementById("dataField9Text");
	e.value = "9";
	e.parentNode.style.backgroundColor = 'white';
	selectCheck("saveValueCodeSelect", "saveValueCodeText", d.next(1));
	selectCheck("whichItemSelect", "whichItemText", d.next(1));
	selectCheck("storeCouponSelect", "storeCouponText", d.next(1));
	selectCheck("dontMultiplySelect", "dontMultiplyText", d.next(1));
}
