// Early Womack Records
//
// JS functions
//
function cttt(censusYear, type, inputText)
{
	var text = "";
	if (censusYear == "1790") text = do1790cttt(type, inputText);
	else if (censusYear == "1800") text = do1800cttt(type, inputText);
	else if (censusYear == "1810") text = do1810cttt(type, inputText);
	else if (censusYear == "1820") text = do1820cttt(type, inputText);
	else if (censusYear == "1830") text = do1830cttt(type, inputText);
	else if (censusYear == "1840") text = do1840cttt(type, inputText);
	else text = (censusYear + "is an invalid Census Year");
	return text;
}

function parseInput(inputText)
{
	var inputArray = new Array();
	var len = inputText.length;
	var i = 0;
	var hasDot = false;
	for (i=0; i<len; i++)
	{
		var c = inputText.charAt(i);
		if (c == '.') hasDot = true;
		else
		{
			var cCode = inputText.charCodeAt(i);
			if (!((cCode >= 48) && (cCode <= 57))) // chars 0-9
			{
				var error = "ERROR: " + inputText + " contains an invalid character.";
				inputArray[0] = error;
				return inputArray;
			}
		}			
	}
	if (hasDot)
	{
		var next = 0;
		var temp = "";
		for (i=0; i<len; i++)
		{
			var c = inputText.charAt(i);
			if (c == '.')
			{
				var num = parseInt(temp);
				inputArray[next] = num;
				next++;
				temp = "";
			}
			else
			{
				temp += c;
			}
		}
		if (temp.length != 0)
		{
			var num = parseInt(temp);
			inputArray[next] = num;
		}
	}
	else // much simpler case
	{
		for (i=0; i<len; i++)
		{
			var num = parseInt(inputText.charAt(i));
			inputArray[i] = num;
		}
	}
	return inputArray;
}

function do1790cttt(type, inputText)
{
	var inputArray = parseInput(inputText);
	var text = "";
	if (inputArray.length == 1) // check for error
	{
		text = inputArray[0];
		return text;
	}
	if (inputArray.length != 5)
	{
		text = "ERROR: 1790 text must have 5 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += "free white males 16 and older"; break;
			case 1: line += "free white males under 16"; break;
			case 2: line += "free white females"; break;
			case 3: line += "all other free persons"; break;
			case 4: line += "slaves"; break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function getDisplayType(type)
{
	if ((type == "wm") || (type == "wmc") || (type == "wma")) return "white males";
	if ((type == "wf") || (type == "wfc") || (type == "wfa")) return "white females";
	if (type == "ms") return "male slaves";
	if (type == "fs") return "female slaves";
	return (type + " is unknown");
}

function doCommon012Cttt(censusYear, type, inputText)
{
	var text = "";
	if (!((type == "s") || (type == "wm") || (type == "wf")))
	{
		text = "ERROR: " + censusYear + " valid types are 's', 'wm', or 'wf'.";
		return text;
	}
	if (type == "s")
	{
		text = inputText + " slaves";
		return text;
	}
	var inputArray = parseInput(inputText);
	if (inputArray.length != 5)
	{
		text = "ERROR: " + censusYear + " text must have 5 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " under 10 (0-9)"); break;
			case 1: line += (getDisplayType(type) + " at least 10 and under 16 (10-15)"); break;
			case 2: line += (getDisplayType(type) + " at least 16 and under 26 (16-25)"); break;
			case 3: line += (getDisplayType(type) + " at least 26 and under 45 (26-44)"); break;
			case 4: line += (getDisplayType(type) + " 45 and over (45-?)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1800cttt(type, inputText)
{
	return doCommon012Cttt("1800", type, inputText);
}

function do1810cttt(type, inputText)
{	
	return doCommon012Cttt("1810", type, inputText);
}

function do1820SCttt(type, inputText)
{
	var text = "";
	var inputArray = parseInput(inputText);
	if (inputArray.length != 4)
	{
		var censusYear = "1820";
		text = "ERROR: " + censusYear + " slave text must have 4 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " under 10 (0-9)"); break;
			case 1: line += (getDisplayType(type) + " at least 10 and under 26 (10-25)"); break;
			case 2: line += (getDisplayType(type) + " at least 26 and under 45 (26-44)"); break;
			case 3: line += (getDisplayType(type) + " 45 and over (45-?)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1820WMCttt(type, inputText)
{
	var text = "";
	var inputArray = parseInput(inputText);
	if (inputArray.length != 6)
	{
		var censusYear = "1820";
		text = "ERROR: " + censusYear + " white male text must have 6 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " under 10 (0-9)"); break;
			case 1: line += (getDisplayType(type) + " at least 10 and under 16 (10-15)"); break;
			case 2: line += (getDisplayType(type) + " at least 16 and under 18 (16-17)"); break;
			case 3: line += (getDisplayType(type) + " at least 16 and under 26 (16-25)"); break;
			case 4: line += (getDisplayType(type) + " at least 26 and under 45 (26-44)"); break;
			case 5: line += (getDisplayType(type) + " 45 and over (45-?)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1830_1840SCttt(censusYear, type, inputText)
{
	var text = "";
	var inputArray = parseInput(inputText);
	if (inputArray.length > 6)
	{
		text = "ERROR: " + censusYear + " slave text cannot have more than 6 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " under 10 (0-9)"); break;
			case 1: line += (getDisplayType(type) + " at least 10 and under 24 (10-23)"); break;
			case 2: line += (getDisplayType(type) + " at least 24 and under 36 (24-35)"); break;
			case 3: line += (getDisplayType(type) + " at least 36 and under 55 (36-54)"); break;
			case 4: line += (getDisplayType(type) + " at least 55 and under 100 (55-99)"); break;
			case 5: line += (getDisplayType(type) + " 100 and over (100-?)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1830_1840WChildCttt(censusYear, type, inputText)
{
	var text = "";
	var inputArray = parseInput(inputText);
	if (inputArray.length != 4)
	{
		text = "ERROR: " + censusYear + " white child text must have 4 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " under 5 (0-4)"); break;
			case 1: line += (getDisplayType(type) + " at least 5 and under 10 (5-9)"); break;
			case 2: line += (getDisplayType(type) + " at least 10 and under 15 (10-14)"); break;
			case 3: line += (getDisplayType(type) + " at least 15 and under 20 (15-19)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1830_1840WAdultCttt(censusYear, type, inputText)
{
	var text = "";
	var inputArray = parseInput(inputText);
	if (inputArray.length > 9)
	{
		text = "ERROR: " + censusYear + " white adult text cannot have more than 9 numbers.";
		return text;
	}
	var i=0;
	for (i=0; i<inputArray.length; i++)
	{
		var line = "";
		var num = 0;
		num = inputArray[i];
		line += num;
		line += " - ";
		switch (i)
		{
			case 0: line += (getDisplayType(type) + " at least 20 and under 30 (20-29)"); break;
			case 1: line += (getDisplayType(type) + " at least 30 and under 40 (30-39)"); break;
			case 2: line += (getDisplayType(type) + " at least 40 and under 50 (40-49)"); break;
			case 3: line += (getDisplayType(type) + " at least 50 and under 60 (50-59)"); break;
			case 4: line += (getDisplayType(type) + " at least 60 and under 70 (60-69)"); break;
			case 5: line += (getDisplayType(type) + " at least 70 and under 80 (70-79)"); break;
			case 6: line += (getDisplayType(type) + " at least 80 and under 90 (80-99)"); break;
			case 7: line += (getDisplayType(type) + " at least 90 and under 100 (90-99)"); break;
			case 8: line += (getDisplayType(type) + " 100 and over (100-?)"); break;
		}
		line += "<br/>";
		text += line;
	}
	return text;
}

function do1820cttt(type, inputText)
{
	var text = "";
	if (!((type == "ms") || (type == "fs") || (type == "wm") || (type == "wf")))
	{
		var censusYear = "1820";
		text = "ERROR: " + censusYear + " valid types are 'ms', 'fs', 'wm', or 'wf'.";
		return text;
	}
	if ((type == "ms") || (type == "fs")) return do1820SCttt(type, inputText);
	else if (type == "wm") return do1820WMCttt(type, inputText);
	return doCommon012Cttt("1820", type, inputText); // for white females
}

function doCommon34Cttt(censusYear, type, inputText)
{
	var text = "";
	if (!((type == "ms") || (type == "fs") || (type == "wmc") || (type == "wma") || (type == "wfc") || (type == "wfa")))
	{
		text = "ERROR: " + censusYear + " valid types are 'ms', 'fs', 'wmc', 'wma', 'wfc', 'wfa'.";
		return text;
	}
	if ((type == "ms") || (type == "fs"))
	{
		return do1830_1840SCttt(censusYear, type, inputText);
	}
	if ((type == "wmc") || (type == "wfc"))
	{
		return do1830_1840WChildCttt(censusYear, type, inputText);
	}
	if ((type == "wma") || (type == "wfa"))
	{
		return do1830_1840WAdultCttt(censusYear, type, inputText);
	}
	return "";
}

function do1830cttt(type, inputText)
{
	return doCommon34Cttt("1830", type, inputText);
}

function do1840cttt(type, inputText)
{
	return doCommon34Cttt("1840", type, inputText);
}

function isMicrosoft(v) {
  /*
  ** Check if the browser is Microsoft Internet Explorer compatible
  **    v  version number
  ** returns  true if MSIE and version equals or greater
  */
  return isBrowser("Microsoft", v);
  }

function isBrowser(b,v) {
  /*
  ** Check if the current browser is compatible
  **  b  browser name
  **  v  version number (if 0 don't check version)
  ** returns true if browser equals and version equals or greater
  */
  browserOk = false;
  versionOk = false;

  browserOk = (navigator.appName.indexOf(b) != -1);
  if (v == 0) versionOk = true;
  else  versionOk = (v <= parseInt(navigator.appVersion));
  return browserOk && versionOk;
  }

function doToolTip(censusYear)
{
	if (window.event.srcElement.className != "ps")
		return;
	if (!isBrowser('Explorer', 0))
	{
		window.event.srcElement.title = "Requires Internet Explorer";
		return;
	}
	var count = 0;
	if (window.event.srcElement.tagName == "TD")
	{
		count++;
		var sib = window.event.srcElement.previousSibling;
		while (sib != null)
		{
			if (sib.tagName != "TD")
				break;
			sib = sib.previousSibling;
			count++;
		}
	}		
	var text = "";
	var srcText = window.event.srcElement.innerText;
	if (srcText == "" || (srcText.length == 1 && (srcText.charCodeAt(0) == 160 || srcText.charCodeAt(0) == 32)))
	{
		window.event.srcElement.title = "";
		return;
	}
	if (censusYear == "1790")
	{
		if (count == 6)
		{
		 text = cttt(censusYear, "", srcText);
		}
	}
	else if (censusYear == "1800" || censusYear == "1810")
	{	
		if (count == 5)
		{
		 text = cttt(censusYear, "wm", srcText);
		}
		else if (count == 6)
		{
		 text = cttt(censusYear, "wf", srcText);
		}
		else if (count == 7)
		{
		 text = cttt(censusYear, "s", srcText);
		}
	}
	else if (censusYear == "1820")
	{
		if (count == 5)
		{
		 text = cttt(censusYear, "wm", srcText);
		}
		else if (count == 6)
		{
		 text = cttt(censusYear, "wf", srcText);
		}
		else if (count == 8)
		{
		 text = cttt(censusYear, "ms", srcText);
		}
		else if (count == 9)
		{
		 text = cttt(censusYear, "fs", srcText);
		}
	}	
	else if (censusYear == "1830" || censusYear == "1840")
	{
		if (count == 5)
		{
		 text = cttt(censusYear, "wmc", srcText);
		}
		else if (count == 6)
		{
		 text = cttt(censusYear, "wma", srcText);
		}
		else if (count == 7)
		{
		 text = cttt(censusYear, "wfc", srcText);
		}
		else if (count == 8)
		{
		 text = cttt(censusYear, "wfa", srcText);
		}
		else if (count == 9)
		{
		 text = cttt(censusYear, "ms", srcText);
		}
		else if (count == 10)
		{
		 text = cttt(censusYear, "fs", srcText);
		}
	}
	while (text.indexOf("<br/>") > -1)
	{		
		text = text.replace("<br/>", "\n");
	}
	window.event.srcElement.title = text;
}
