//(C)S.A. Lowell - http://www.DarkStormWorld.com
//This file contains code that Javascript should have implemented but never did!

//This is important.  Versions of IE numbered 5 or lower don't support the convenient functionality of attachEvent.
function addWindowOnLoad(functionToAdd)
{
}

function eventAdder()
{
	this.events = new Array();
}

//determines datatype.  Even custom data types.  Return value is the data type in string form i.e: "String", "Array", "undefined", "CustomObj", etc... case sensative!
function dataType(variableToTest)
{
	var variableType = null;
	var indexCutoff  = 0;
	var regExp       = new RegExp("\S");

	if(variableToTest === undefined)
	{
		return "undefined";
	}
	else if(variableToTest === null)
	{
		return "null";
	}
	else
	{
		variableType = String(variableToTest.constructor);
//document.write(variableType);
		variableType = variableType.substring(9, variableType.indexOf("("));
//document.write(variableType);
		indexCutoff  = variableType.search(regExp);

		//return variableType.substring(indexCutoff);
variableType = variableType.substring(indexCutoff)
variableType = variableType.replace(" ", "");
return variableType
	}
}
//checkboxArray must be an array
//nameToIterate: optional.  The value of the name property for checkboxes to extract.
//returns all the checkoxes contained in the array or object passed to the function.
//This function will copy the checkboxes by reference, not value.
function extractCheckboxes(checkboxArray, nameToIterate)
{
	var checkboxes  = new Array();
	var arrayLength = checkboxArray.length;

	for(var index = 0; index < arrayLength; ++index)
	{
		if("name" in checkboxArray[index] && "value" in checkboxArray[index] && "checked" in checkboxArray[index] && "type" in checkboxArray[index])
		{
			if(checkboxArray[index].type === "checkbox")
			{
				currentJob = checkboxes.length;

				if(nameToIterate !== null && nameToIterate !== false)
				{
					if(checkboxArray[index].name === nameToIterate + String(currentJob + 1))
					{
						checkboxes[currentJob] = new Array();
						checkboxes[currentJob] = checkboxArray[index];
					}
				}
				else
				{
					currentJob             = checkboxes.length;
					checkboxes[currentJob] = new Array();
					checkboxes[currentJob] = checkboxArray[index];
				}
			}
		}
	}

	return checkboxes;
}

function extractCheckedCheckboxes(checkboxArray)
{
	var checkboxes    = new Array();
	var checkboxCount = checkboxArray.length;

	for(var index = 0; index < checkboxCount; ++index)
	{
		if("name" in checkboxArray[index] && "value" in checkboxArray[index] && "checked" in checkboxArray[index] && "type" in checkboxArray[index])
		{
			if(checkboxArray[index].type === "checkbox" && checkboxArray[index].checked === true)
			{
				currentJob             = checkboxes.length;
				checkboxes[currentJob] = new Array();
				checkboxes[currentJob] = checkboxArray[index];
			}
		}
	}

	return checkboxes;
}
//Used to make each key in targetArray[index][targetIndex] unique for each targetArray[index].
function makeUniqueAppendDigit(targetArray, targetIndex)
{
	var arrayLength = targetArray.length;
	var returnArray = new Array();

	for(var index = 0; index < arrayLength; ++index)
	{
		returnArray[index] = new Array();
		returnArray[index][targetIndex] = String(targetArray[index][targetIndex]) + String(index + 1);
document.write(returnArray[index][targetIndex] + "<br>");
	}

	return returnArray;
}

//Will perform a deep copy of any array or object.  Will simply return the passed in data if value is an 
function deepCopyArrObj(arrayToCopy)
{
	var arrayToReturn = new Array();

	if(dataType(arrayToCopy) !== "String" && "length" in arrayToCopy)
	{
		for(var index in arrayToCopy)
		{
			arrayToReturn[index] = deepCopyArray(arrayToCopy[index]);
		}
	}
	else
	{
		return arrayToCopy;
	}

	return arrayToReturn;
}
