var referenceRecords = {};

function addRecord(referenceRecord, maxRecords, firstHidden, trackerIDs)
{
	// Grab record
	var rRecord = document.getElementById(referenceRecord);
	var rTracker = document.getElementById(trackerIDs);

	// Add record to references
	if (!(referenceRecord in referenceRecords))	referenceRecords[referenceRecord] = 1;

	if (referenceRecords[referenceRecord]++ < maxRecords)
	{
		// Dupe it
		var newRecord = rRecord.cloneNode(true);
		var lastNode;
		var curName;
		var inputRecords;

		// Get last node of same reference ID
		for (var i = 0; i < rRecord.parentNode.childNodes.length; i++)
		{
			if (rRecord.parentNode.childNodes[i].nodeType == 1)
				if (rRecord.parentNode.childNodes[i].id.search(referenceRecord) == 0)
					lastNode = rRecord.parentNode.childNodes[i];
		}

		// Duplicate Cargo stuff
		var divRecords = newRecord.getElementsByTagName('div');
		var renameDiv = "";
		for (var i = 0; i < divRecords.length; i++)
		{
			if (divRecords[i].className == "cargoboxes")
			{
				renameDiv = divRecords[i];
				var inputRecords = renameDiv.getElementsByTagName('input');
				var lastID = inputRecords[0].name.split("_");
				for (var j = 0; j < inputRecords.length; j++)
				{
					inputRecords[j].value = inputRecords[j].value;
					inputRecords[j].name = lastID[0] + "_" + (parseInt(lastID[1])+1);
				}
			}
		}

		rRecord.parentNode.insertBefore(newRecord, lastNode.nextSibling);

		// Get calendar images
		var imgRecords = newRecord.getElementsByTagName('img');
		for (var i = 0; i < imgRecords.length; i++)
		{
			if (imgRecords[i].title == "Click for Calendar")
			{
				imgRecords[i].id = randomString("1234567890ABCDEF", 32);
				if (imgRecords[i].name.indexOf('_') == -1)
					curName = imgRecords[i].name;
				else
					curName = imgRecords[i].name.substr(0, imgRecords[i].name.indexOf('_'));

				// Generate new ID
				newName = curName + "_" + imgRecords[i].id;

				// Get input records
				inputRecords = newRecord.getElementsByTagName('input');
				for (var j = 0; j < inputRecords.length; j++)
				{
					if (inputRecords[j].name == curName)
					{
						inputRecords[j].id = newName;
					}
				}

				Calendar.setup({
					inputField : newName,
					ifFormat : "%m/%d/%Y",
					showsTime : false,
					button : imgRecords[i].id,
					timeFormat : "24",
					singleClick	: true
				});
			}
		}

		if (firstHidden)
		{
			newRecord.style.display = 'block';
			activateInputs(newRecord);

			if (rTracker.value == "") rTracker.value = renameInputs(newRecord);
			else rTracker.value = rTracker.value + "," + renameInputs(newRecord);
		}

		cleanRecord(newRecord);
	}
	else alert("Cannot add new record.");
}

function removeRecord(node, trackerIDs)
{
	node = node.parentNode;
	var rTracker = document.getElementById(trackerIDs);
	referenceID = node.id.substr(node.id.indexOf('_')+1);
	node.parentNode.removeChild(node);

	var preReference = rTracker.value.substr(0, rTracker.value.indexOf(referenceID)); 
	var postReference = rTracker.value.substr(rTracker.value.indexOf(referenceID)+33, 32); 
	rTracker.value =  preReference + postReference;
}

function renameInputs(recordNode)
{
	var newID = randomString("1234567890ABCDEF", 32);
	var curName = "";

	var inputRecords = recordNode.getElementsByTagName('input');
	for (var i = 0; i < inputRecords.length; i++)
	{
		if (inputRecords[i].name.indexOf('_') == -1) curName = inputRecords[i].name;
		else curName = inputRecords[i].name.substr(0, inputRecords[i].name.indexOf('_'));
		inputRecords[i].name = curName + "_" + newID;
	}

	var selectRecords = recordNode.getElementsByTagName('select');
	for (var o = 0; o < selectRecords.length; o++)
	{
		if (selectRecords[o].name.indexOf('_') == -1) curName = selectRecords[o].name;
		else curName = selectRecords[o].name.substr(0, selectRecords[o].name.indexOf('_'));
		selectRecords[o].name = curName + "_" + newID;
	}

	return newID;

}

function activateInputs(recordNode)
{

	var inputRecords = recordNode.getElementsByTagName('input');
	for (var i = 0; i < inputRecords.length; i++)
	{
		inputRecords[i].style.display = "";
		inputRecords[i].disabled = false;
	}

	var selectRecords = recordNode.getElementsByTagName('select');
	for (var o = 0; o < selectRecords.length; o++)
	{
		selectRecords[o].style.display = "";
		selectRecords[o].disabled = false;
	}
}

function deactivateInputs(recordNode)
{
	var inputRecords = recordNode.getElementsByTagName('input');
	for (var i = 0; i < inputRecords.length; i++)
	{
		var iRecord = inputRecords[i];

		if (iRecord.type != 'hidden')
		{
			iRecord.style.display = "none";
			iRecord.disabled = true;
		}
	}

	var selectRecords = recordNode.getElementsByTagName('select');
	for (var o = 0; o < selectRecords.length; o++)
	{
		selectRecords[o].style.display = "none";
		selectRecords[o].disabled = true;
	}
}

function cleanRecord(recordNode)
{
	var inputRecords = recordNode.getElementsByTagName('input');
	for (var i = 0; i < inputRecords.length; i++)
	{
		var iRecord = inputRecords[i];

		// Don't remove hidden type values, those are used for counting. Checkboxes shouldn't change value
		if (iRecord.type != 'hidden' && iRecord.type != 'checkbox') iRecord.value = "";
		if (iRecord.type == 'checkbox') iRecord.checked = 0;

	}

	var optionRecords = recordNode.getElementsByTagName('option');
	for (var o = 0; o < optionRecords.length; o++) optionRecords[o].selected = "";
}

function randomString(c, l)
{
	var s = '';
	for (var i=0; i < l; i++) {
		var r = Math.floor(Math.random() * c.length);
		s += c.substring(r,r+1);
	}
	return s;
}

function activateOther(oId, oVal)
{
	if (oVal==-99) {
		document.getElementById(oId).disabled=false;
		document.getElementById(oId).style.display="inline";
	} else {
		document.getElementById(oId).disabled=true;
		document.getElementById(oId).style.display="none";
	}
}
