var bOnChange=true;
var iScanCode;

function DoChange(editID, editName, strTableName, strNameField)
{
	if (bOnChange)
	{
		var strValue = editName.Value;
		var	strResult = strValue;
	
		if (strValue != null && strValue != "")
		{
			bOnChange = false;
			
			if (iScanCode == 8)
			{
				strResult[strValue.length] = 0;
				editID.value = "0";
			}
			else
			{
				var iPos = editName.SelStart;
				var iLength = strValue.length;
				var bFound = false;
	
				var httpOb = new ActiveXObject("Microsoft.XMLHTTP");
				httpOb.Open("POST","searchaction.asp", false);
				var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

				var xmlRoot = xmlDoc.appendChild(xmlDoc.createElement("FIELDS"));
	
				xmlRoot.appendChild(xmlDoc.createElement("TABLENAME")).text = strTableName;
				xmlRoot.appendChild(xmlDoc.createElement("FIELDNAME")).text = strNameField;
				xmlRoot.appendChild(xmlDoc.createElement("PARTIALKEY")).text = strResult;
	
				httpOb.send(xmlDoc);
			
				if (httpOb.statusText == "OK")
				{
					var	xmlNode = httpOb.responseXML.documentElement.selectSingleNode(strNameField);
					var	xmlID = httpOb.responseXML.documentElement.selectSingleNode("ID");
					
					if (xmlNode != null)
					{
						editName.Value = xmlNode.text;
						editID.value = xmlID.text;
					}
					
					editName.SelStart = iPos;
					editName.SelLength = xmlNode.text.length - iPos;
				}
				else
				{
					editName.Value = strResult;
					editID.value = "0";
				}
			}
			
			bOnChange = true;
		}
		else
		{
			editID.value = "0";
		}
	}
}

function BuildDate(editDay, editMonth, editYear)
{
	var strDate = "";
	var strDay = editDay.value;
	var strMonth = editMonth.value;
	var strYear = editYear.value;
	
	if (strDay != "" && strDay != "" && strDay > 0 && strDay < 32)
	{
		if (strMonth != "" && strMonth != "" && strMonth > 0 && strMonth < 13)
		{
			if (strYear != "" && strYear != "")
			{
				strDate = strMonth + "/" + strDay + "/" + strYear;
			}
		}
	}
	
	return strDate;
}

function DateToday(editDay, editMonth, editYear)
{
	var	dtDateToday = new Date();
	
	editDay.value = dtDateToday.getDate();
	editMonth.value = dtDateToday.getMonth() + 1;
	editYear.value = dtDateToday.getYear();
}

function BuildDateTime(editDay, editMonth, editYear, editHour, editMinute)
{
	var	strDate = BuildDate(editDay, editMonth, editYear);
	
	if (strDate != "" && editHour.value != "" && editMinute.value != "")
	{
		strDate += " " + editHour.value + ":" + editMinute.value;
	}
	
	return strDate;
}

function MakeField(vValue, strType)
{
	var	strValue;

	switch (strType)
	{
		case "TEXT":
		{
			if (vValue == "")
			{
				strValue = "NULL";
			}
			else
			{
				strValue = "'";
				strValue += vValue;
				strValue += "'";
			}
		}
		break;
		
		case "NUMBER":
		{
			if (vValue != null && vValue != "")
			{
				strValue = vValue;
			}
			else
			{
				strValue = "0";
			}
		}
		break;
		
		case "BOOL":
		{
			if (vValue)
			{
				strValue = "TRUE";
			}
			else
			{
				strValue = "FALSE";
			}
		}
		break;
		
		case "DATE":
		{
			if (vValue == "" || vValue == null)
			{
				strValue = "NULL";
			}
			else
			{
				var dtDate = new Date(vValue);
				strValue = "'";
				strValue += dtDate.getYear();
				strValue += "-";
				strValue += Number(dtDate.getMonth() + 1);
				strValue += "-";
				strValue += dtDate.getDate();
				strValue += "'";
			}
		}
		break;

		case "TIME":
		{
			if (vValue == "" || vValue == null)
			{
				strValue = "NULL";
			}
			else
			{
				var dtDate = new Date(vValue);
				strValue = "'" + dtDate.getHours();
				strValue += ":";
				strValue += dtDate.getMinutes();
				strValue += ":00'";
			}
		}
		break;
	}
	
	return strValue;
}

function AddXMLTextString(xmlDoc, xmlRoot, strName, strValue)
{
	xmlRoot.appendChild(xmlDoc.createElement(strName)).text = MakeField(strValue, "TEXT");
}

function AddXMLDate(xmlDoc, xmlRoot, strName, strValue)
{
	xmlRoot.appendChild(xmlDoc.createElement(strName)).text = MakeField(strValue, "DATE");
}

function AddXMLNumber(xmlDoc, xmlRoot, strName, strValue)
{
	xmlRoot.appendChild(xmlDoc.createElement(strName)).text = MakeField(strValue, "NUMBER");
}

function AddXMLFieldText(xmlDoc, xmlRoot, oEdit)
{
	xmlRoot.appendChild(xmlDoc.createElement(oEdit.name)).text = MakeField(oEdit.value, "TEXT");
}

function AddXMLFieldNumber(xmlDoc, xmlRoot, oEdit)
{
	xmlRoot.appendChild(xmlDoc.createElement(oEdit.name)).text = MakeField(oEdit.value, "NUMBER");
}

function AddXMLFieldCheck(xmlDoc, xmlRoot, oEdit)
{
	xmlRoot.appendChild(xmlDoc.createElement(oEdit.name)).text = MakeField(oEdit.checked, "BOOL");
}

function AddXMLFieldDate(xmlDoc, xmlRoot, oEditDate, oEditMonth, oEditYear)
{
	var strDate = BuildDate(oEditDate, oEditMonth, oEditYear);
	xmlRoot.appendChild(xmlDoc.createElement(oEditDate.name)).text = MakeField(strDate, "DATE");
}

function AddXMLFieldDateTime(xmlDoc, xmlRoot, oEditDate, oEditMonth, oEditYear, oEditHour, oEditMinute)
{
	var strDate = BuildDateTime(oEditDate, oEditMonth, oEditYear, oEditHour, oEditMinute);
	xmlRoot.appendChild(xmlDoc.createElement(oEditDate.name)).text = MakeField(strDate, "DATE");
}

function GetXMLItemTextString(xmlDoc, strNodeName)
{
	var	strText = "";
	
	try
	{
		var	xmlNode = xmlDoc.selectSingleNode(strNodeName);
	
		if (xmlNode != null)
		{
			var strValue = new String(xmlNode.text);
			
			if (strValue == "NULL")
			{
				strText = "";
			}
			else
			{
				strText = strValue.substring(1, strValue.length - 1);
			}
		}
	}
	catch(exception)
	{
	}
	
	return strText;
}

function GetXMLItemTextStringFromIndex(xmlDoc, iIndex)
{
	var	strText = "";
	
	try
	{
		strText = GetXMLNodeTextString(xmlDoc.childNodes.item(iIndex));
	}
	catch(exception)
	{
	}
	
	return strText;
}

function GetXMLItemText(xmlDoc, oEdit)
{
	var strNodeName = oEdit.name;
	var	strText = GetXMLItemTextString(xmlDoc, strNodeName);
		
	oEdit.value = strText;
}

function GetXMLItemNumber(xmlDoc, oEdit)
{
	var strNodeName = oEdit.name;
		
	oEdit.value = new Number(GetXMLItemTextString(xmlDoc, strNodeName));
}

function GetXMLItemCheck(xmlDoc, oCheck)
{
	var strNodeName = oCheck.name;
	var strValue = new String(GetXMLItemTextString(xmlDoc, strNodeName));
	
	oCheck.checked = (strValue.toUpperCase() == "TRUE");
}

function GetXMLItemDateComponents(xmlDoc, strNodeName, oDateComponents)
{
	var strString = new String(GetXMLItemTextString(xmlDoc, strNodeName));

	if (strString != "")
	{
		var dtDate = new Date(strString);
			
		if (dtDate != null)
		{
			oDateComponents[0] = dtDate.getDate();
			oDateComponents[1] = dtDate.getMonth() + 1;
			oDateComponents[2] = dtDate.getYear();
			oDateComponents[3] = dtDate.getHours();
			oDateComponents[4] = dtDate.getMinutes();
		}
	}
}

function GetXMLItemDate(xmlDoc, strNodeName)
{
	var	oDateComponents = new Array();
	var	strDate = "";
	
	oDateComponents[0] = "";
	oDateComponents[1] = "";
	oDateComponents[2] = "";
	oDateComponents[3] = "";
	oDateComponents[4] = "";
	
	GetXMLItemDateComponents(xmlDoc, strNodeName, oDateComponents)
	
	if (oDateComponents[0] != "")
	{
		strDate = oDateComponents[0] + "/" + oDateComponents[1] + "/" + oDateComponents[2];
	}
	
	return strDate;
}

function GetXMLDate(xmlDoc, editDay, editMonth, editYear)
{
	var	oDateComponents = new Array();
	oDateComponents[0] = "";
	oDateComponents[1] = "";
	oDateComponents[2] = "";
	oDateComponents[3] = "";
	oDateComponents[4] = "";
	
	GetXMLItemDateComponents(xmlDoc, editDay.name, oDateComponents);

	editDay.value = oDateComponents[0];
	editMonth.value = oDateComponents[1];
	editYear.value = oDateComponents[2];
}

function GetXMLDateTime(xmlDoc, editDay, editMonth, editYear, editHour, editMinute)
{
	var	oDateComponents = new Array();
	oDateComponents[0] = "";
	oDateComponents[1] = "";
	oDateComponents[2] = "";
	oDateComponents[3] = "";
	oDateComponents[4] = "";
	
	GetXMLItemDateComponents(xmlDoc, editDay.name, oDateComponents);

	editDay.value = oDateComponents[0];
	editMonth.value = oDateComponents[1];
	editYear.value = oDateComponents[2];
	editHour.value = oDateComponents[3];
	editMinute.value = oDateComponents[4];
}

function SetDateControls(dtDate, editDay, editMonth, editYear)
{
	if (dtDate != null && !isNaN(dtDate))
	{
		editDay.value = dtDate.getDate();
		editMonth.value = dtDate.getMonth() + 1;
		editYear.value = dtDate.getYear();
	}
	else
	{
		editDay.value = "";
		editMonth.value = "";
		editYear.value = "";
	}
}

function DoDeleteRecord(strTableName, strKeyField, iID, bCloseWindow)
{
	var httpOb = new ActiveXObject("Microsoft.XMLHTTP");
	httpOb.Open("POST","action.asp", false);
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	var xmlRoot = xmlDoc.appendChild(xmlDoc.createElement("ROOT"));
	
	xmlRoot.appendChild(xmlDoc.createElement("FORMMODE")).text = "Delete";
	xmlRoot.appendChild(xmlDoc.createElement("KEYFIELD")).text = strKeyField;
	xmlRoot.appendChild(xmlDoc.createElement("KEYVALUE")).text = MakeField(iID, "NUMBER");
	xmlRoot.appendChild(xmlDoc.createElement("TABLENAME")).text = strTableName;
		
	httpOb.send(xmlDoc);
		
	if (httpOb.statusText == "OK")
	{
		if (bCloseWindow)
		{
			window.returnValue = 1;
			window.close();
		}
	}
	else
	{
		window.showModalDialog("error.asp", httpOb.responseText, "status:0; dialogWidth:400px; dialogHeight:200px; center:yes");
	}
}

function DeleteRecord(strTableName, strKeyField, iID)
{
	if (confirm("Are you sure you wish to delete this record?"))
	{
		DoDeleteRecord(strTableName, strKeyField, iID, true);
	}
}

function BuildSelect(selectID, xmlDoc, strOptions, strDescription, iDefaultValue)
{
	xmlAddresses = xmlDoc.selectSingleNode(strOptions);
	
	if (xmlAddresses != null)
	{
		var	blankNode = document.createElement("OPTION");
						
		blankNode.innerText = "<please select>";
		blankNode.value = '0';
		selectID.appendChild(blankNode);
		
		var	iMax = xmlAddresses.childNodes.length;
					
		for (var iIndex = 0; iIndex < iMax; iIndex++)
		{
			var	xmlAddress = xmlAddresses.childNodes.item(iIndex);
			var	iValue = GetXMLItemTextString(xmlAddress, "ID");
			var	newNode = document.createElement("OPTION");
						
			newNode.innerText = GetXMLItemTextString(xmlAddress, strDescription);
			newNode.value = iValue;
			if (iValue == iDefaultValue)
			{
				newNode.selected = true;
				newNode.defaultSelected = true;
			}
			selectID.appendChild(newNode);
		}
					
		selectID.value = 0;
	}
}

function SetCookie(sName, sValue)
{
  document.cookie = sName + "=" + escape(sValue) + ";";
}

function GetCookie(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return null;
}

function FormatDate (rawdate)
{
	var strFormatDate = "n/a";

	if (rawdate != null && rawdate != "")
	{
		var dtDate = new Date(rawdate);
		var strDay = new String(dtDate.getDate());
		var strMonth = new String(dtDate.getMonth() + 1);
		var strYear = new String(dtDate.getYear());
		
		if (dtDate.getDate() < 10)
		{
			strDay = "0" + strDay;
		}
		if (dtDate.getMonth() < 9)
		{
			strMonth = "0" + strMonth;
		}
	
		strFormatDate = strDay + "/" + strMonth + "/" + strYear
	}
	
	return strFormatDate;
}

function DoError(strErrorText)
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.appendChild(xmlDoc.createElement("ROOT")).text = strErrorText;
	
	window.showModalDialog("error.asp", xmlDoc, "status:0; dialogWidth:440px; dialogHeight:205px; center:yes");
}


