/*
 * Confidential and Proprietary for Oracle Corporation
 *
 * This computer program contains valuable, confidential, and
 * proprietary information.  Disclosure, use, or reproduction
 * without the written authorization of Oracle is prohibited.
 * This unpublished work by Oracle is protected by the laws
 * of the United States and other countries.  If publication
 * of this computer program should occur, the following notice
 * shall apply:
 *
 * Copyright (c) 2003-2009 Oracle Corp.
 * All rights reserved.
 *
 * $Id: schema_base.js 83200 2010-03-29 13:57:07Z kjorisse $
 */


// This js file needs to be included when any of the schema js files are used.
// It contains the following items of information:
// 1. Arrays containing parent/child information with the view name as look up.
// 2. Global array containing the schema option list values with the view name as look up.

// Variables
if (!g_schemaDefinition)
{
	var g_schemaDefinition = new Object();
	g_schemaDefinition.STATE_INIT = 0;
	g_schemaDefinition.STATE_FINALIZING = 1;
	g_schemaDefinition.STATE_FINALIZED = 2;
	g_schemaDefinition.IS_CACHED_DATA = "true IS_CACHED_DATA";
	g_schemaDefinition.state = g_schemaDefinition.STATE_INIT;
	g_schemaDefinition.views = new Array();
	g_schemaDefinition.viewLoaders = new Array();
	g_schemaDefinition.viewCallbacks = new Array();
	g_schemaDefinition.pendingFields = new Array();
	g_schemaDefinition.pendingViews = new Array();
	g_schemaDefinition.loadedViews = new Object();
	g_schemaDefinition.globalCallbacks = new Array();
	g_schemaDefinition.initCallbacks = new Array();
	g_schemaDefinition.fieldState = new Array();
	g_schemaDefinition.traceInfo = new Array();
	g_schemaDefinition.optionListSmallWidthCompensation = 8;
	g_schemaDefinition.optionListSizingFactor = 0.45;
	g_schemaDefinition.optionListMaxSize = 50;
	g_schemaDefinition.TREE_FIELD_TYPE = "tree";
	g_schemaDefinition.idCounter = 0;
	if (typeof httpSchemaRoot != "undefined")
	{
		g_schemaDefinition.schemaBaseUrl = httpSchemaRoot;
	}
	else
	{
		g_schemaDefinition.schemaBaseUrl =  "/wcmsp5/resources/schema/";
	}
	idctrace("base.js defined g_schemaDefinition");
}
else
{
	idctrace("base.js reloaded schema base.js");
}

// Variables for document profiling
if (!g_docProfiles)
{
	var g_docProfiles = new Object();
	g_docProfiles.callbacks = new Array();
	g_docProfiles.lists = new Array();
}

// Variables for resetting the option lists
var g_resetOptionFields = new Array();
var g_opFieldCount = 0;

function reloadSchema()
{
	if (!g_schemaDefinition.reloadCount)
	{
		g_schemaDefinition.reloadCount = 0;
	}
	var scriptNode = document.createElement("script");
	scriptNode.src = g_schemaDefinition.schemaBaseUrl + "base.js?" +
		(g_schemaDefinition.reloadCount++);
	idctrace("reloadSchema() reloading " + g_schemaDefinition.reloadCount);
	document.body.appendChild(scriptNode);
}

function BasicTreeControlImplementor()
{
	function init(theFieldId, theFieldDef)
	{
		fieldId = theFieldId;
		fieldDef = theFieldDef;
		idctrace("BasicTreeControlImplementor.init(" + fieldId + ", " + fieldDef + ")");
		fieldState = getFieldState(fieldId, fieldDef);
		fieldState.treeControlImplementor = this;
		createInitialControls();
	}
	this.init = init;

	function createInitialControls()
	{
		var span = document.getElementById(fieldId + "_span");
		if (!span)
		{
			idctrace("BasicTreeControlImplementor.createInitialControls() "
				+ "couldn't find object " + fieldId + "_span");
			return;
		}

		var spanList = document.getElementsByName(fieldDef.fieldName + "_displaySpan");
		var displaySpan = null;
		for (var i = 0; i < spanList.length; i++)
		{
			// This needs to be fixed to use the id, 
			// but std_page doesn't know the id yet.
			displaySpan = spanList.item(i);
		}
		fieldState.currentSelectionElement = displaySpan;

		fieldState.valueField = document.createElement("input");
		fieldState.valueField.name = fieldDef.fieldName;

		fieldState.optionListField = document.createElement("select");
		fieldState.optionListField.id = fieldId;
		fieldState.optionListField.name = fieldDef.fieldName + "_Options";
		if (its.ie)
		{
			function onchangeFunction()
			{
				updateDependentChoices(fieldState.optionListField.id,
					fieldDef.fieldName, 1);
			}
			fieldState.optionListField.setAttribute("onchange", onchangeFunction);
		}
		else
		{
			var onchangeScript = 
				"updateDependentChoices('" + fieldId + "', '" 
				+ fieldDef.fieldName + "', 1)";
			fieldState.optionListField.setAttribute("onchange", onchangeScript);
		}
		var type = fieldDef.optionListType;
		var fieldType = "hidden";
		switch (type)
		{
		case "choice":
			break;
		case "chunval":
			break;
		case "combo":
			fieldType = "text";
			break;
		case "multi":
			fieldType = "text";
			break;
		case "multi2":
			break;
		}
		fieldState.valueField.type = fieldType;
		span.appendChild(fieldState.valueField);

		if (fieldState.optionListField) 
		{
			span.appendChild(fieldState.optionListField);
			resetField(fieldState.optionListField, 1, lc("wwSchemaLoadingWalues"));
		}
	}
	this.createInitialControls = createInitialControls;
}

function registerTreeControl(fieldId, fieldName)
{
	var fieldDef = getFieldDefinition(fieldName);
	if (!fieldDef)
	{
		idctrace("registerTreeControl() field '" + fieldName + "' not defined");
		return;
	}
	var implementorName = fieldDef.treeControlImplementor;
	if (!implementorName)
	{
		implementorName = "BasicTreeControlImplementor";
	}

	idctrace("registerTreeControl() instantiating " + implementorName + " for field " + fieldName);
	var implementor = eval("new " + implementorName + "()");
	implementor.init(fieldId, fieldDef);
	idctrace("registerTreeControl() successfully instantiated " + implementorName + " for field " + fieldName);
}

function updateDependentChoices(editFieldId, fieldName, isUserEvent, noSelect)
{
	var editField;
	if (editFieldId.id)
	{
		editField = editFieldId;
		var message = "deprecated call to updateDependentChoices() using "
			+ "a field object instead of id " + editField.id;
		idctrace(message);
		alert(message);
	}
	else
	{
		editField = getField(editFieldId);
	}
	
	if (editFieldId.id)
	{
		idctrace("updateDependentChoices() with field " + editField.id +
			", fieldName " + fieldName);
	}
	else
	{
		idctrace("updateDependentChoices() with fieldName=" + fieldName +
			", isUserEvent=" + isUserEvent);
	}
	
	if (typeof fieldName == "undefined")
	{
		fieldName = editField.name;
	}
	fieldName = removeFieldNameSuffixes(fieldName);
	var fieldDef = getFieldDefinition(fieldName);
	var fieldState = null;
	var isMultiField = false;
	var isMultiField2 = false;
	if (fieldDef)
	{
		idctrace("updateDependentChoices() fieldDef.optionListType=" + fieldDef.optionListType);
		fieldState = getFieldState(editField.id, fieldDef);
		if (fieldDef.optionListType)
		{
			isMultiField = fieldDef.optionListType.indexOf("multi") >= 0;
			isMultiField2 = fieldDef.optionListType == "multi2";
		}
	}
	else
	{
		idctrace("updateDependentChoices() fieldDef is not defined");
	}
		
	if (isMultiField2 && editField.value)
	{
		var hiddenFields = getMultiselectDataFields(editField, fieldName);
		var sep = fieldDef.multiselectStorageSeparator;
		var newSelectionValue = editField.value;
		/* We should add support for a primary key column in
		 * a few to make these complicated relationships work
		 * correctly.  This code is a start.
		var rows = fieldState.currentRowSet;
		var selectField = getSelectField(fieldDef.name, editField.form);
		var selectedIndex = selectField.selectedIndex;
		var delta = selectField.length - rows.length ;
		var theRow = rows[selectedIndex-delta];
		*/

		if (fieldDef.isDependentList)
		{
			var relationshipName = fieldDef.dependentRelationship;
			var parentFieldName = fieldDef.dependentOnField;
			var relationship = getRelationshipDefinition(relationshipName);
			var parentValue = getMulti2ParentValue(editField, parentFieldName, 
				relationship, editField.value);
			newSelectionValue = parentValue.value + sep + editField.value;
		}
		if (isUserEvent && !noSelect)
		{
			if (hiddenFields.valueField.value)
			{
				var doUpdate = 1;
				var valueArray = parseMultiselectValue(
					hiddenFields.valueField.value, sep);
				if (convertToBool(
					fieldDef.multiselectPreventDuplicates, false))
				{
					for (var i = 0; i < valueArray.length; i++)
					{
						if (editField.value == valueArray[i])
						{
							doUpdate = null;
						}
					}
				}
				if (doUpdate && fieldDef.multiselectLimit && 
					valueArray.length >= fieldDef.multiselectLimit)
				{
					if (convertToBool(fieldDef.useMultiselectLimitAlert, false))
					{
						alert(lc("wwSchemaExceedsChoiceLimit", 
							fieldDef.multiselectLimit, 
							fieldDef.caption ? fieldDef.caption : fieldDef.fieldName));
					}
					doUpdate = null;
					editField.selectedIndex = 0;
				}
				if (doUpdate)
				{
					hiddenFields.valueField.value += sep + editField.value;
					hiddenFields.selectionField.value += sep + newSelectionValue;
				}
			}
			else
			{
				hiddenFields.valueField.value = editField.value;
				hiddenFields.selectionField.value = newSelectionValue;
			}
			updateMultiselectDisplay(editField, fieldName);
		}
	}
	var strictDelete = false;
	if (fieldDef)
	{
		strictDelete = convertToBool(fieldDef.multiselectStrictDelete, false);
	}
	var childList = g_schemaDefinition.childFields[fieldName];
	for (var i = 0; childList && i < childList.length; i++)
	{
		var childName = childList[i];
		if (!isUserEvent && fieldName == childName)
		{
			continue;
		}
		var childDef = getFieldDefinition(childName);
		var parentExpression = childDef.parentKeyExpression;
		var parentValueInfo = null;
		var relationshipDef = getRelationshipDefinition
			(childDef.dependentRelationship);
		var unionParent = useUnionMultiselect(childDef, fieldDef);
		if (unionParent)
		{
			parentValueInfo = getMultiselectParentValues(
				editField, fieldName, relationshipDef);
		}
		else
		{
			if (parentExpression)
			{
				parentValueInfo = eval(parentExpression);
			}
			else
			{
				parentValueInfo = getParentValue(editField, fieldName, 
					relationshipDef);
			}
		}
		var childField = getSelectField(childDef.fieldName, editField.form);
		if (!childField)
		{
			childField = getField(childDef.fieldName, editField.form);
		}
		if (!childField)
		{
			idctrace("the childField '" + childDef.fieldName + 
				"' is not defined on the form '" +
				editField.form.name + "'");
			continue;
		}
		if (!childField.id)
		{
			idctrace("the childField '" + childDef.fieldName + 
				"' does not have an id on the form '" +
				editField.form.name + "'");
			continue;
		}
		var childState = getFieldState(childField.id);
		var cleanField = 0;
		var isComboChild = false;
		var isMultiChild = false;
		if (childDef.optionListType)
		{
			isComboChild = childDef.optionListType.indexOf("combo") >= 0;
			isMultiChild = childDef.optionListType.indexOf("multi") >= 0;
		}
		
		if (strictDelete && !isMultiField && isMultiChild)
		{
			var childFields = getMultiselectDataFields(
				childField, childDef.fieldName);
			var childValues = parseMultiselectValue(
				childFields.selectionField.value,
				childDef.multiselectStorageSeparator);
			var removeList = new Array();
			for (var j = 0; j < childValues.length; j++)
			{
				var childParentValue = childValues[j++];
				if (childParentValue != parentValueInfo.value)
				{
					removeList[removeList.length] = (j-1)/2;
				}
			}
			
			for (var j = removeList.length-1; j >= 0; j--)
			{
				handleMultiselectItemRemoveEvent(
					childField.id, removeList[j], false);
			}
		}
		if (unionParent)
		{
			cleanField = (parentValueInfo.valueList.length == 0);
		}
		else
		{
			cleanField = (!parentValueInfo || !parentValueInfo.value || 
				parentValueInfo.value.length == 0);
		}
		if (cleanField)
		{
			if (childField) 
			{
				clearChildValue(childDef, childField);
				resetField(childField, 1, "", "");
				updateDependentChoices(childField.id, childName, isUserEvent);
			}
			g_schemaDefinition.pendingFields[childField.id] = null;
			continue;
		}
		var childValuePathInfo;
		if (isUserEvent || 
			!childDef.treeDef || childState.selection.length == 0)
		{
			if (!parentValueInfo.value && !unionParent) 
			{
				idctrace("parentValueInfo.value undefined");
			}
			var currentValue = null;
			var captureCurrentValue = !isMultiChild && !isComboChild;
			idctrace("updateDependentChoices() doing child field " + childDef.fieldName +", viewName=" + childDef.viewName +
				", currentValue=" + childDef.currentValue + ", capturedValue=" +
					childState.currentValue + ", valueIsTemporary=" + childDef.currentValueIsTemporary);
			if (childDef.currentValueIsTemporary)
			{
				// Specified value is the want we want.
				currentValue = childDef.currentValue;
			}
			
			if (currentValue == null)
			{
				// Let remembered state let us select something
				// that we lost when changing parent values.
				currentValue = childState.currentValue;
			}
			if (currentValue == null)
			{
				currentValue = childDef.currentValue;
			}
			clearChildValue(childDef, childField);
			
			
			// Capture value into "childState" or clear it depending on value of captureCurrentValue.
			if (!childState.retainCapturedValue)
			{
				resetSelection(childField, captureCurrentValue);
				childState.retainCapturedValue = true;
			}
				
			updateDependentChoice(childDef.viewName, 
				childDef.dependentRelationship, parentValueInfo, 
				null, childField, currentValue);
			if (childDef.currentValueIsTemporary)
			{
				childDef.currentValueIsTemporary = null;
				childDef.currentValue = null;
			}
		}
	}

	if (fieldDef && fieldDef.treeDef && !fieldDef.usesDisplayLabel)
	{
		var treeDef = fieldDef.treeDef;
		var nextLevelInfo = null;
		var lastNode = treeDef[treeDef.length-1];
		var isRecursiveTree = (lastNode[0] == "i"
			&& lastNode[1] == 0);

		var parentValue = new Array();
		if (!fieldState.selection)
		{
			fieldState.selection = new Array();
		}
		if (isUserEvent)
		{
			var isDependent = 0;
			if (isUpEvent(editField, fieldName))
			{
				fieldState.selection.pop();
				if (fieldState.selection.length == 0)
				{
					isDependent = convertToBool(fieldDef.isDependentList, false);
					if (isDependent)
					{
						var relationship = getRelationshipDefinition
							(fieldDef.dependentRelationship);
						parentValue = getParentValue(editField, 
							fieldDef.dependentOnField, relationship);
						nextLevelInfo = new Array();
						nextLevelInfo.relationshipDef = relationship;
						nextLevelInfo.viewDef = treeDef[0][1];
					}
					else if (isRecursiveTree)
					{
						if (lastNode.length > 2)
						{
							parentValue.value = lastNode[2];
						}
						else
						{
							parentValue.value = "0";
						}
					}
				}
				else
				{
					parentValue.value = 
						fieldState.selection[fieldState.selection.length-1];
				}
				if (!isDependent)
				{
					nextLevelInfo = computeTreeInfoForDepth(
						treeDef, fieldState.selection.length-1);
				}
			}
			else
			{
				nextLevelInfo = computeTreeInfoForDepth(treeDef, 
					fieldState.selection.length);
				if (!nextLevelInfo)
				{
					parentValue = getFieldValue(editField);
					if (parentValue)
					{
						if (fieldState.selection.length*2-1 != treeDef.length)
						{
							fieldState.selection[fieldState.selection.length] 
								= parentValue;
						}
						else
						{
							fieldState.selection[fieldState.selection.length-1] 
								= parentValue;
						}
					}
					updateTreeSelection(editField, fieldName);
					updateTreeDisplay(editField, fieldName);
					return;
				}

				parentValue = getParentValue(editField, fieldName, 
					nextLevelInfo.relationshipDef);
				if (parentValue.value)
				{
					fieldState.selection[fieldState.selection.length] = parentValue.value;
				}
			}
			if (isRecursiveTree || fieldState.selection.length > 0 || isDependent)
			{
				if (parentValue.value)
				{
					var valuePathInfo = constructViewPathInfo(
						nextLevelInfo.viewDef.viewName,
						nextLevelInfo.relationshipDef.relationName,
						parentValue.value);
					updateDependentChoice(nextLevelInfo.viewDef.viewName, 
						nextLevelInfo.relationshipDef.relationName,
						parentValue, valuePathInfo, editField, "", 1);
				}
			}
			else
			{
				var theValues = getViewValuesFromCache(nextLevelInfo.viewDef.viewName);
				if (theValues)
				{
					publishViewValues(new Array(
						publishViewValues, nextLevelInfo.viewDef.viewName, 
						editField.id, ""));
					editField = getField(editField.id);
				}
				else
				{
					registerViewCallback(
						jsFilename(nextLevelInfo.viewDef.viewName), 
						new Array(publishViewValues, 
						nextLevelInfo.viewDef.viewName, editField.id, ""));
					if (editField)
					{
						resetField(editField, 1, lc("wwSchemaLoadingValues"), "");
						addGoUpOption(editField);
					}
					var viewPathInfo = constructViewPathInfo(
						nextLevelInfo.viewDef.viewName);
					loadViewValues(new Array(loadViewValues,
						viewPathInfo.url, editField.id));
				}
			}
		}
		updateTreeSelection(editField, fieldName);
		updateTreeDisplay(editField, fieldName);
	}
	return;
}

function clearChildValue(childDef, childField)
{
	if (childField.name == childDef.fieldName + "_Options")
	{
		idctrace("clearChildValue() working on field " + childDef.fieldName);
		var valueField = getField(childDef.fieldName, childField.form);
		var fieldState = getFieldState(childField.id);
		if (childDef.optionListType == "multi" ||
			childDef.optionListType == "multi2")
		{
			return;
		}

		var currentRowSet = fieldState.currentRowSet;
		if (currentRowSet)
		{
			var fieldValue = valueField.value;
			var childView = getViewDefinition(childDef.viewName);
			for (var i = 0; i < currentRowSet.length; i++)
			{
				var row = currentRowSet[i];
				if (row[childView.schInternalColumn] == fieldValue)
				{
					valueField.value = "";
					break;
				}
			}
		}
	}
}

function computeTreeInfoForDepth(treeDef, selectionDepth)
{
	var index;
	if (selectionDepth == -1)
	{
		index = 1;
	}
	else
	{
		index = selectionDepth*2+1;
	}
	if (index >= treeDef.length) 
	{
		var lastEntry = treeDef[treeDef.length-1];
		if (lastEntry[0] == "i")  // We have a recursive tree
		{
			var loopIndex = lastEntry[1];
			index -= loopIndex;
			index %= (treeDef.length-loopIndex-1);
			index += loopIndex;
		}
		else // we're at the bottom of the tree
		{
			return;
		}
	}
	var rc = new Array();
	rc.relationshipDef = treeDef[index][1];
	if (selectionDepth == -1)
	{
		rc.viewDef = treeDef[0][1];
	}
	else
	{
		var nextType = treeDef[index+1][0];
		if (nextType == "i")
		{
			rc.viewDef = treeDef[treeDef[index+1][1]][1];
		}
		else
		{
			rc.viewDef = treeDef[index+1][1];
		}
	}
	return rc;
}

function updateDependentChoiceCallback(callback)
{
	updateDependentChoice(callback[1],
		callback[2], callback[3], callback[4], callback[5],
		callback[6], callback[7]);
}

function updateDependentChoice(viewName, relationshipName, 
	parentValueInfo, childValuePathInfo, field, defaultValue, isTreeChild)
{
	var fieldDef = getFieldDefinition(field.name);
	if (parentValueInfo.valueList)
	{
		var missingParents = new Array();
		for (var i = 0; i < parentValueInfo.valueList.length; i++)
		{
			var parentValue = parentValueInfo.valueList[i];
			var theValues = getViewValuesFromCache(
				viewName, relationshipName, parentValue);
			if (theValues == null)
			{
				missingParents[missingParents.length] = parentValue;
			}
		}
		if (missingParents.length > 0 && !parentValueInfo.secondTry)
		{
			parentValueInfo.secondTry = 1;
			for (var i = 0; i < missingParents.length; i++)
			{
				var parentValue = missingParents[i];
				childValuePathInfo = constructViewPathInfo(
					viewName, fieldDef.dependentRelationship,
					parentValue);
				registerViewCallback(childValuePathInfo.path,
					new Array(updateDependentChoiceCallback, viewName,
					relationshipName, parentValueInfo, childValuePathInfo,
					field, defaultValue, isTreeChild));
				idctrace("updateDependentChoice() child path for missing parent is " + childValuePathInfo.path);
				markFieldBusy(field, isTreeChild);
				loadViewValues(new Array(loadViewValues,
					childValuePathInfo.url, field.id));
			}
		}
		else
		{
			idctrace("updateDependentChoice() no parent missing, secondTry=" + parentValueInfo.secondTry);
			publishViewValues(new Array(
				publishViewValues, viewName, 
				field.id, defaultValue, relationshipName, parentValueInfo));
			field = getField(field.id);
		}
	}
	else
	{
		var theValues = getViewValuesFromCache(viewName, 
			relationshipName, parentValueInfo.value);
		if (childValuePathInfo == null)
		{
			childValuePathInfo = constructViewPathInfo(
				viewName, fieldDef.dependentRelationship,
				parentValueInfo.value);
		}
		if (theValues == null)
		{
			registerViewCallback(childValuePathInfo.path, new Array(
				publishViewValues, viewName, 
				field.id, defaultValue,
				relationshipName, parentValueInfo.value));
			markFieldBusy(field, isTreeChild);
			loadViewValues(new Array(loadViewValues, 
				childValuePathInfo.url, field.id));
		}
		else
		{
			idctrace("updateDependentChoice() republishing cached values from " 
				+ childValuePathInfo.path);
			publishViewValues(new Array(
				publishViewValues, viewName, 
				field.id, defaultValue,
				relationshipName, parentValueInfo.value));
		}
	}
}

function markFieldBusy(field, isTreeChild)
{
	var fieldState = getFieldState(field.id);
	if (field && fieldState && !fieldState.isBusy)
	{
		resetField(field, 1, lc("wwSchemaLoadingValues"), ""); 
		if (isTreeChild)
		{
			addGoUpOption(field);
		}
	}
}

function updateTreeSelection(field, fieldName, targetField)
{
	if (!targetField)
	{
		targetField = getField(fieldName, field.form);
	}
	if (!targetField)
	{
		idctrace("unable to find targetField named " + fieldName);
		return;
	}

	var fieldDefinition = getFieldDefinition(fieldName);
	var fieldState = getFieldState(field.id, fieldDefinition);

	if (fieldDefinition.updateTreeStorageHandler)
	{
		return fieldDefinition.updateTreeStorageHandler(field, fieldName);
	}

	if (convertToBool(fieldDefinition.storeSelectionPath, false))
	{
		var finalValue = "";
		for (var i = 0; i < fieldState.selection.length; i++)
		{
			var theText = fieldState.selection[i];
			if (i > 0)
			{
				finalValue += fieldState.treeNodeStorageSeparator;
			}
			finalValue += theText;
		}
		targetField.value = finalValue;
	}
	else
	{
		if (fieldState.selection.length > 0)
		{
			targetField.value = fieldState.selection[
				fieldState.selection.length-1];
		}
		else
		{
			targetField.value = "";
		}
	}
}

function updateTreeDisplay(field, fieldName)
{
	var fieldDefinition = getFieldDefinition(fieldName);
	var fieldState = getFieldState(field.id, fieldDefinition);

	if (field && field.id)
	{
		g_schemaDefinition.pendingFields[field.id] = null;
	}

	if (fieldDefinition.updateTreeDisplayHandler)
	{
		return fieldDefinition.updateTreeDisplayHandler(field, fieldName);
	}

	if (!convertToBool(fieldDefinition.showSelectionPath, false))
	{
		return;
	}

	if (!fieldState.currentSelectionElement)
	{
		fieldState.currentSelectionElement = 
			document.createElement("span");
		field.parentNode.insertBefore(
			fieldState.currentSelectionElement,
			field.nextSibling);
	}

	while (fieldState.currentSelectionElement.childNodes.length > 0)
	{
		var childNode = fieldState.currentSelectionElement.childNodes.item(0);
		fieldState.currentSelectionElement.removeChild(childNode);
	}

	var lastNode = fieldDefinition.treeDef[fieldDefinition.treeDef.length-1];
	var isRecursiveTree = (lastNode[0] == "i"
		&& lastNode[1] == 0);
	var isDependentList = convertToBool(fieldDefinition.isDependentList, false);
	fieldState.currentSelectionDisplayText = "";
	var treeDefinition = fieldDefinition.treeDef;
	for (var i = 0; i < fieldState.selection.length; i++)
	{
		var theText = fieldState.selection[i];
		if (i == 0 && !isRecursiveTree && !isDependentList)
		{
			var tmp = getViewValueFromCache(
				treeDefinition[0][1].viewName,
				null, null, theText);
			if (tmp)
			{
				theText = getDisplayString(tmp, 
					treeDefinition[0][1], theText);
			}
			else
			{
				var pathInfo = constructViewPathInfo(
					treeDefinition[0][1].viewName,
					null, null, theText);
			}
		}
		else
		{
			var levelInfo = computeTreeInfoForDepth(
				treeDefinition, i-1);
			var parentValue;
			if (i > 0)
			{
				parentValue = fieldState.selection[i-1];
			}
			else
			{
				if (isDependentList)
				{
					var parentField = getField(
						fieldDefinition.dependentOnField, field.form);
					var relationshipDef = getRelationshipDefinition
						(fieldDefinition.dependentRelationship);
					parentValue = getParentValue(parentField, 
						fieldDefinition.dependentOnField,
						relationshipDef);
					if (parentValue && parentValue.value)
					{
						parentValue = parentValue.value;
						levelInfo.relationshipDef = relationshipDef;
					}
					else
					{
						parentValue = "";
					}
				}
				else
				{
					if (lastNode.length > 2)
					{
						parentValue = lastNode[2];
					}
					else
					{
						parentValue = "0";
					}
				}
			}
			var tmp = getViewValueFromCache(
				levelInfo.viewDef.viewName,
				levelInfo.relationshipDef.relationName,
				parentValue, theText);
			if (tmp)
			{
				theText = getDisplayString(tmp, levelInfo.viewDef, theText);
			}
			else
			{
				var pathInfo = constructViewPathInfo(levelInfo.viewDef.viewName,
					levelInfo.relationshipDef.relationName, parentValue);
				registerViewCallback(pathInfo.path, new Array(callbackTwo,
					updateTreeDisplay, field, fieldName));
				loadViewValues(new Array(loadViewValues, pathInfo.url, field.id));
				return;
			}
		}
		fieldState.currentSelectionDisplayText += theText;
		var textNode = document.createTextNode(theText);
		fieldState.currentSelectionElement.appendChild(textNode);
		if (i+1 < fieldState.selection.length)
		{
			textNode = document.createTextNode(
				fieldState.treeNodeDisplaySeparator);
			fieldState.currentSelectionElement.appendChild(textNode);
			fieldState.currentSelectionDisplayText +=
				fieldState.treeNodeDisplaySeparator;
		}
	}
}

function callbackTwo(callback)
{
	(callback[1])(callback[2], callback[3]);
}
function checkUpdateMultiselectDisplay(editField, fieldName)
{
	var fieldDef = getFieldDefinition(fieldName);
	var fieldId = editField.id;
	var fieldState = getFieldState(fieldId, fieldDef);
	var pendingDisplayViews = fieldState.pendingDisplayViews;
	if (pendingDisplayViews)
	{
		// See if all of the views have loaded.
		var callUpdate = true;
		for (var i = 0; i < pendingDisplayViews.length; i++)
		{
			var path = pendingDisplayViews[i];
			if (!g_schemaDefinition.loadedViews[path])
			{
				idctrace("checkUpdateMultiselectDisplay() not updating, waiting for view path=" + path);
				callUpdate = false;
				break;
			}			
		}
		if (callUpdate)
		{
			updateMultiselectDisplay(editField, fieldName);
			fieldState.pendingDisplayViews = null;
		}
	}
	else
	{
		idctrace("checkUpdateMultiselectDisplay() not updating, already done for field=" + fieldName);
	}

}

function updateMultiselectDisplay(editField, fieldName, hiddenFields)
{
	var theSpanId = editField.id + " display";
	var theSpan = document.getElementById(theSpanId);
	if (!theSpan)
	{
		return;
	}
	while (theSpan.childNodes && theSpan.childNodes.length > 0)
	{
		theSpan.removeChild(theSpan.firstChild);
	}

	if (editField && editField.id)
	{
		g_schemaDefinition.pendingFields[editField.id] = null;
	}

	var fieldDef = getFieldDefinition(fieldName);
	var storageSep = fieldDef.multiselectStorageSeparator;
	var displaySep = fieldDef.multiselectDisplaySeparator;
	var displaySepNode = document.createTextNode(displaySep);
	var isMulti = fieldDef.optionListType == "multi" ||
		fieldDef.optionListType == "multi2";
	
	if (!hiddenFields)
	{
		hiddenFields = getMultiselectDataFields(editField, fieldName);
	}
	var displayObjects = new Array();
	var valueArray = parseMultiselectValue(
		hiddenFields.selectionField.value, storageSep);
	idctrace("updateMultiselectDisplay() fieldName=" + fieldName + ", valueArray=" + valueArray);
	var count = 0;
	for (var i = 0; i < valueArray.length; i++, count++)
	{
		var parentValue = null, parentRelationship = null;
		if (fieldDef.isDependentList || fieldDef.treeDef)
		{
			parentValue = valueArray[i++];
		}
		var value = valueArray[i];
		
		var viewDef = null;
		var viewName = null;
		if (fieldDef.isDependentList || fieldDef.treeDef)
		{
			if (fieldDef.treeDef)
			{
				var parentArray = parseMultiselectValue(parentValue, ":", 3);
				viewName = parentArray[0];
				if (parentArray[1] && parentArray[1].length > 0)
				{
					parentRelationship = parentArray[1];
				}
				parentValue = parentArray[2];
			}
			else
			{
				var parentFieldSettings = getFieldSettings(fieldDef.dependentOnField);
				parentRelationship = fieldDef.dependentRelationship;
			}
		}
		if (!viewName)
		{
			viewName = fieldDef.viewName;
		}
		var viewDef = getViewDefinition(viewName);
		var tmp = getViewValueFromCache(
			viewName, parentRelationship, parentValue, value);
		var displayString;
		if (tmp)
		{
			displayString = getDisplayString(tmp, viewDef, "");
		}
		else
		{
			idctrace("updateMultiselectDisplay() no associated javascript row for fieldName=" + fieldName +
				", viewName=" + viewName + ", parentValue=" + parentValue + ", value=" + value);
			displayString = value;
		}
		if (count > 0)
		{
			// Add comma to prior wrapper span.
			displayObjects[displayObjects.length - 1].appendChild(displaySepNode.cloneNode(false));
		}
		var text = document.createTextNode(displayString);
		var textAnchor = document.createElement("span");
		if (!fieldDef.treeDef)
		{
			textAnchor.onclick = handleDCLSelection;
		}
		textAnchor.id = getNewId(editField.id + " s." + count);
		if (typeof lcDirection != "undefined" && lcDirection && lcDirection == "rtl")
		{
			// Append Right to Left marker
			var rlmText = document.createTextNode("\u200F");
			textAnchor.appendChild(rlmText);
		}
		textAnchor.appendChild(text);
		textAnchor.title = value;
		//textAnchor.style.verticalAlign = "-0.4em";
		textAnchor.style.marginTop = "1em";
		textAnchor.style.lineHeight = "2.0em";
		var supplementObject = null;
		if (isMulti)
		{
			var img = document.createElement("img");
			img.src = httpSkinRoot + "closebox.gif";
			img.style.width = "1em";
			img.style.height = "1em";
			img.style.position = "relative";
			img.style.bottom = ".3em";
			img.border = "0";
			var imgTitle;
			if (fieldDef.multiselectStrictDelete)
			{
				imgTitle = lc("wwRemoveValueAndChildren", displayString);
			}
			else
			{
				imgTitle = lc("wwRemoveValue", displayString);
			}
			img.title = imgTitle;
			img.alt = imgTitle;
			img.onmouseover = highlightChildren;
			img.onmouseout = unhighlightChildren;
			img.id = getNewId(editField.id + " " + count);
			var closeUrl = document.createElement("a");
			closeUrl.href = "javascript:handleRemoveEvent(\"" + img.id + "\")";
			closeUrl.appendChild(img);
			supplementObject = closeUrl;
		}
		else
		{
			// Need dummy object to keep counts correct.
			supplementObject = document.createTextNode("");
		}
		
		// Create wrapper for display of text and little close image, with 
		// a url close around the image
		var textAnchorWrapper = document.createElement("span");
		textAnchorWrapper.style.whiteSpace = "nowrap";
		textAnchorWrapper.appendChild(textAnchor); 
		textAnchorWrapper.appendChild(supplementObject);
		displayObjects[displayObjects.length] = textAnchorWrapper;
	}
	for (var i = 0; i < displayObjects.length; i++)
	{
		theSpan.appendChild(displayObjects[i]);
	}
}

function getEventTargetId(event, id, possibleTarget)
{
	if (id)
	{
		return id;
	}
	var target;
	if (event)
	{
		target = event.target;
	}
	else
	{
		target = possibleTarget;
	}
	return target.id;
}

function highlightChildren(event, id)
{
	id = getEventTargetId(event, id, this);
	handleRemoveEvent(id, 1);
}

function unhighlightChildren(event, id)
{
	id = getEventTargetId(event, id, this);
	handleRemoveEvent(id, 2);
}

function handleDCLSelection(event, id)
{
	id = getEventTargetId(event, id, this);
	var index = id.lastIndexOf("s.");
	if (index < 0)
	{
		idctrace("handleDCLSelection(): bad id '" + id + "'");
		return;
	}
	var fieldId = id.substring(0, index-1);
	var offset = id.substring(index+2);

	index = fieldId.lastIndexOf(" ");
	if (index < 0)
	{
		idctrace("handleDCLSelection(): bad id '" + id + "'");
		return;
	}
	var fieldName = fieldId.substring(0, index);

	index = offset.indexOf(" ");
	if (index < 0)
	{
		idctrace("handleDCLSelection(): bad id '" + id + "'");
		return;
	}
	offset = offset.substring(0, index);

	var fieldDef = getFieldDefinition(fieldName);
	var optionListField = document.getElementById(fieldId);
	var multiselectFields = getMultiselectDataFields(optionListField, fieldName);
	var valueArray = parseMultiselectValue(
		multiselectFields.selectionField.value, 
		fieldDef.multiselectStorageSeparator);
	
	var value, parentValue = null;
	if (fieldDef.dependentRelationship)
	{
		value = valueArray[2*offset+1];
		parentValue = valueArray[2*offset];
	}
	else
	{
		value = valueArray[offset];
	}
	
	selectDCLElement(optionListField, fieldDef, value, parentValue);
}

function selectDCLElement(optionListField, fieldDef, value, parentValue)
{
	var selection = -1;
	for (var i = 0; i < optionListField.options.length; i++)
	{
		var item = optionListField.options.item(i);
		if (item.value == value)
		{
			selection = i;
			break;
		}
	}

	var fieldState = getFieldState(optionListField.id, fieldDef);
	if (selection == null)
	{
		idctrace("selectDCLElement() unable to find value '" + value + "'");
		return;
	}

	if (!parentValue)
	{
		
		if (!fieldState.currentRowSet && selection < 0)
		{
			// We should never get here. But we will try to work around it.
			idctrace("currentRowSet not found for field '" + fieldDef.fieldName + "' with value '" + value + "'");
			fieldState.currentRowSet = getViewValuesFromCache(fieldDef.viewName);
		}
		if (fieldState.currentRowSet)
		{
			optionListField.selectedIndex = selection;
			updateDependentChoices(optionListField.id,
				fieldDef.fieldName, true, true);
		}
		else
		{
			alert("selectDCLElement() independent values for field '"
				+ fieldDef.fieldName + "' not loaded.");
		}
	}
	else
	{
		fieldDef.currentValue = value;
		fieldDef.currentValueIsTemporary = 1;
		var dependentRelationship = fieldDef.dependentRelationship;
		var viewData = getViewDefinition(fieldDef.viewName);
		var internalParentValue = getCachedParentInternalValue(viewData, dependentRelationship, parentValue);
		var parentFieldDef = getFieldDefinition(
			fieldDef.dependentOnField);
		var parentOptionListField = getSelectField(
			parentFieldDef.fieldName, optionListField.form);
		if (parentOptionListField)
		{
			if (!parentFieldDef.dependentOnField)
			{
				selectDCLElement(parentOptionListField,
					parentFieldDef, internalParentValue);
			}
			else
			{
				var multiselectDataFields = getMultiselectDataFields(
					parentOptionListField, parentFieldDef.fieldName);
				var valueArray = parseMultiselectValue(
					multiselectDataFields.selectionField.value,
					parentFieldDef.multiselectStorageSeparator);
				var grandParentValue = null;
				for (var i = 0; i < valueArray.length; i++)
				{
					i++;
					var tmp = valueArray[i];
					if (tmp == internalParentValue)
					{
						grandParentValue = valueArray[i-1];
						break;
					}
				}
				if (grandParentValue)
				{
					selectDCLElement(parentOptionListField,
						parentFieldDef, internalParentValue, grandParentValue);
				}
				else
				{
					idctrace("selectDCLElement() unable to find grandparent");
				}
			}
		}
		else
		{
			idctrace("selectDCLElement: parent field " + parentFieldDef.fieldName + 
				" of field " + fieldDef.fieldName + 
				" is not an option list, cannot populate with multi DCL values");
		}
	}
}

function handleRemoveClick(event, id)
{
	id = getEventTargetId(event, id, this);
	return handleRemoveEvent(id);
}

function handleRemoveEvent(id, doHighlighting)
{
	var index = id.lastIndexOf(" ");
	if (index < 0)
	{
		idctrace("bad id '" + id + "'");
		return;
	}
	id = id.substring(0, index);
	index = id.lastIndexOf(" ");
	if (index < 0)
	{
		idctrace("bad id '" + id + "'");
		return;
	}
	var value = id.substring(index+1);
	var fieldId = id.substring(0, index);
	handleMultiselectItemRemoveEvent(fieldId, value, doHighlighting);
}

function handleMultiselectItemRemoveEvent(fieldId, valueIndex, doHighlighting)
{
	index = fieldId.indexOf(" ");
	if (index < 0)
	{
		idctrace("bad fieldId '" + fieldId + "'");
		return;
	}
	var fieldName = fieldId.substring(0, index);
	var field = document.getElementById(fieldId);
	var hiddenFields = getMultiselectDataFields(field, fieldName);
	
	var fieldDef = getFieldDefinition(fieldName);
	var valueArray = parseMultiselectValue(
		hiddenFields.valueField.value, 
		fieldDef.multiselectStorageSeparator);
	var selectionArray = parseMultiselectValue(
		hiddenFields.selectionField.value,
		fieldDef.multiselectStorageSeparator);
		
	idctrace("handleMultiselectItemRemoveEvent() selectionAray=" + hiddenFields.selectionField.value +
		", valueIndex=" + valueIndex + ", doHighlighting=" + doHighlighting);
	
	var newValueArray = new Array();
	var newSelectionArray = new Array();
	var myValue = null;
	var myParentValue = null;
	var isDependent = convertToBool(fieldDef.isDependentList, false);
	for (var i = 0; i < valueArray.length; i++)
	{
		if (i == valueIndex)
		{
			myValue = valueArray[i];
			if (isDependent)
			{
				myParentValue = selectionArray[2*i];
			}
			if (doHighlighting)
			{
				var theSpan = document.getElementById(
					fieldId + " display");
				if (!theSpan)
				{
					idctrace("span '" + fieldId + " display' not found.");
					continue;
				}
				var theWrapperNode = theSpan.childNodes.item(i);
				var theNode = theWrapperNode.firstChild;
				if (doHighlighting == 1)
				{
					if (fieldDef.styleAsDeletable)
					{
						fieldDef.styleAsDeletable(theNode, 1);
					}
					else
					{
						theNode.style.backgroundColor = "red";
					}
				}
				else
				{
					if (fieldDef.styleAsDeletable)
					{
						fieldDef.styleAsDeletable(theNode, 0);
					}
					else
					{
						theNode.style.backgroundColor = "transparent";
					}
				}
			}
			else
			{
				continue;
			}
		}
		newValueArray[newValueArray.length] = valueArray[i];
		if (isDependent || fieldDef.treeDef)
		{
			newSelectionArray[newSelectionArray.length] = selectionArray[2*i];
			newSelectionArray[newSelectionArray.length] = selectionArray[2*i+1];
		}
		else
		{
			newSelectionArray[newSelectionArray.length] = selectionArray[i];
		}
	}
	if (!doHighlighting)
	{
		hiddenFields.valueField.value = formatMultiselectValue(
			newValueArray, fieldDef.multiselectStorageSeparator);
		hiddenFields.selectionField.value = formatMultiselectValue(
			newSelectionArray, fieldDef.multiselectStorageSeparator);
		updateMultiselectDisplay(field, fieldName, hiddenFields);
		if (!fieldDef.treeDef)
		{
			field.selectedIndex = 0;
		}
	}

	idctrace("handleMultiselectItemRemoveEvent() fieldName=" + fieldDef.fieldName 
		+ ", value " + myValue + ", parent " + myParentValue + ", doHighlighting=" + doHighlighting);
	if (convertToBool(fieldDef.multiselectStrictDelete, false))
	{
		var viewDef = getViewDefinition(fieldDef.viewName);
		var childList = g_schemaDefinition.childFields[fieldName];
		var fieldState = getFieldState(fieldId, fieldDef);
		var parentRow = null;
		if (isDependent)
		{
			
			parentRow = getViewValuesFromCacheInternal(
				fieldDef.viewName, fieldDef.dependentRelationship,
				myParentValue, myValue);
			if (!parentRow)
			{
				idctrace("unable to find rows in "
					+ fieldDef.viewName + "/" + fieldDef.dependentRelationship
					+ ", parent: " + myParentValue);
			}
		}
		else
		{
			var parentRows = fieldState.currentRowSet;
			if (parentRows) // Skip case where currentRowSet is not calculated, like trees
			{
				for (var i = 0; i < parentRows.length; i++)
				{
					var currentRow = parentRows[i];
					if (currentRow[viewDef.schInternalColumn] == myValue)
					{
						parentRow = currentRow;
						break;
					}
				}
			}
		}
		if (!parentRow)
		{
			idctrace("unable to find parent row for field "
				+ fieldDef.fieldName + ", value " + myValue);
		}
		for (var i = 0; childList && i < childList.length; i++)
		{
			var childName = childList[i];
			if (childName == fieldName || !parentRow)
			{
				continue;
			}
			var childDef = getFieldDefinition(childName);
			var relationshipDef = 
				getRelationshipDefinition(childDef.dependentRelationship);
			var parentValue = parentRow[relationshipDef.table1Column];
			var childField = getSelectField(childDef.fieldName, field.form);
			if (!childField)
			{
				childField = getField(childDef.fieldName, field.form);
			}
			var sep = childDef.multiselectStorageSeparator;
			if (childDef.optionListType == "multi2")
			{
				var removeList = new Array();
				var childDataFields = getMultiselectDataFields(
					childField, childDef.fieldName);
				var childSelections = parseMultiselectValue(
					childDataFields.selectionField.value, sep);
				for (var j = 0; j < childSelections.length; j++)
				{
					var childParentValue = childSelections[j++];
					var childValue = childSelections[j];
					if (childParentValue == parentValue)
					{
						removeList[removeList.length] = (j-1)/2;
					}
				}
				for (var j = removeList.length-1; j >= 0; j--)
				{
					handleMultiselectItemRemoveEvent(
						childField.id, removeList[j], doHighlighting);
				}
			}
		}
	}
	if (!doHighlighting && !fieldDef.treeDef)
	{
		if (field.value == myValue)
		{
			field.selectedIndex = 0;
		}  
		updateDependentChoices(field.id, fieldName, 1);
	}
}

function parseMultiselectValue(valueString, separator, maxSep)
{
	var result = new Array();
	while (valueString)
	{
		var index = valueString.indexOf(separator);
		var tmp = null;
		if (index >= 0)
		{
			tmp = valueString.substring(0, index);
			valueString = valueString.substring(index + separator.length);
		}
		else
		{
			tmp = valueString;
			valueString = "";
		}
		result[result.length] = tmp;
		if (maxSep && result.length == maxSep - 1)
		{
			result[result.length] = valueString;
			break;
		}
	}
	return result;
}

function formatMultiselectValue(valueArray, separator)
{
	var rc = "";
	for (var i = 0; i < valueArray.length; i++)
	{
		if (i > 0)
		{
			rc += separator;
		}
		rc += valueArray[i];
	}
	return rc;
}

function addOptionFieldForReset(id, name)
{
	var obj = new Object();
	obj.fieldId = id;
	obj.fieldName = name;
	
	g_resetOptionFields[g_opFieldCount] = obj;
	++g_opFieldCount;
}

function resetOptionLists()
{
	for (var i = 0; i < g_resetOptionFields.length; ++i)
	{
		var obj = g_resetOptionFields[i];
		var id = obj.fieldId
		var name = obj.fieldName
		resetOptionDisplay(id, name);
	}
}

function resetOptionDisplay(fieldId, fieldName)
{
	
	var field = document.getElementById(fieldId);
	var fieldDef = getFieldDefinition(fieldName);
	if (fieldDef.optionListType == "multi" ||
		fieldDef.optionListType == "multi2" || fieldDef.usesDisplayLabel)
	{
		var valueArray = parseMultiselectValue(
			fieldDef.defaultValue, 
			fieldDef.multiselectStorageSeparator);
		var selectionArray = parseMultiselectValue(
			fieldDef.defaultSelection,
			fieldDef.multiselectStorageSeparator);
		
		idctrace("resetOptionDisplay() fieldName=" + fieldName + 
			", optionListType=" + fieldDef.optionListType + 
			", defaultValue=" + fieldDef.defaultValue + 
			", defaultSelection=" + fieldDef.defaultSelection);
			
		var hiddenFields = getMultiselectDataFields(field, fieldName);	
		hiddenFields.valueField.value = formatMultiselectValue(
			valueArray, fieldDef.multiselectStorageSeparator);
		if (hiddenFields.selectionField)
		{
			hiddenFields.selectionField.value = formatMultiselectValue(
				selectionArray, fieldDef.multiselectStorageSeparator);
		}
		updateMultiselectDisplay(field, fieldName);
		field.selectedIndex = 0;
	}
	else
	{
		field.value = fieldDef.defaultValue;
	}
	updateDependentChoices(fieldId, fieldName, 0);
}


function getCachedParentInternalValue(viewData, dependentRelationship, 
	parentValue)
{
	if (!dependentRelationship)
	{
		idctrace("getCachedParentInternalValue() view " + viewData.viewName + " called without a dependentRelationship");
		return null;
	}
	var dependencyDefinition = viewData.deps[jsFilename(dependentRelationship)];
	if (typeof dependencyDefinition != "undefined" && 
		typeof dependencyDefinition.valueMap != "undefined")
	{
		idctrace("getCachedParentInternalValue() valueMap[" + parentValue + "]=" + dependencyDefinition.valueMap[parentValue]);
		return dependencyDefinition.valueMap[parentValue];
	}
	else
	{
		idctrace("getCachedParentInternalValue() view " + viewName + " did not have a correct dependencyDefinition " 
			+ dependentRelationship);
	} 
}

function getViewValuesFromCacheInternal(viewName, dependentRelationship, 
	parentValue, childValue)
{
	var viewData = getViewDefinition(viewName);
	if (typeof viewData == "undefined")
	{
		return null;
	}
	
	var theValue = null;
	var theRows = null;
	var i;
	if (!dependentRelationship)
	{
		theRows = viewData.rows;
		if (theRows && childValue)
		{
			for (var i = 0; i < theRows.length; i++)
			{
				var tmp = viewData.rows[i];
				if (tmp[viewData.schInternalColumn] == childValue)
				{
					theValue = tmp;
					break;
				}
			}
		}
		if (theValue == null)
		{
			theValue = theRows;
		}
	}
	else
	{
		if (typeof viewData.deps != "undefined")
		{
			var dependencyDefinition = viewData.deps[jsFilename(dependentRelationship)];
			if (typeof dependencyDefinition != "undefined" && 
				typeof dependencyDefinition.subsets != "undefined")
			{   
				theRows = dependencyDefinition.subsets[parentValue];
				if (theRows && childValue)
				{
					for (var i = 0; i < theRows.length; i++)
					{
						var tmp = theRows[i];
						if (tmp[viewData.schInternalColumn] == childValue)
						{
							theValue = tmp;
							break;
						}
					}
				}
				if (theValue == null)
				{
					theValue = theRows;
				}
			}
		}
	}

	return theValue;
}

function getViewValueFromCache(viewName, dependentRelationship, 
	parentValue, childValue)
{
	var theValue = getViewValuesFromCacheInternal(viewName, 
		dependentRelationship, parentValue, childValue);
	return theValue;
}

function getViewValuesFromCache(viewName, dependentRelationship, 
	parentValue)
{
	var theValues = getViewValuesFromCacheInternal(viewName, 
		dependentRelationship, parentValue, null);
	return theValues;
}
function loadViewValuesAndRunCallback(args)
{
	var viewName = args[1];
	var dependentRelationship = args[2];
	var parentValue = args[3];
	var callback = args[4];
	
}

function loadViewValuesAndRunFunction(viewName, dependentRelationship, parentValue, pFunc)
{
	// make a callback
	var callback = new Array(pFunc);

	// check if the view is loaded
	var data = getViewValuesFromCache(viewName, dependentRelationship, parentValue);
	if (data == null)
	{
		// determine the path to load the view data
		var viewPathInfo = constructViewPathInfo(viewName, dependentRelationship, parentValue);

		// register a callback to run after the view is fully loaded
		registerViewCallback(viewPathInfo.path, callback);
		
		// load the view
		loadViewValues(new Array(null, viewPathInfo.url, null));
	}
	else
	{
		// otherwise just run the callback
		callback[0](callback);
	}
}

function isUpEvent(editField, fieldName)
{
	var fieldDef = getFieldDefinition(fieldName);
	var field = getSelectField(fieldName, editField.form);
	var fieldState = getFieldState(field.id, fieldDef);
	var isSelect = isSelectField(field);
	if (isSelect)
	{
		index = field.selectedIndex;
		if (addEmptyOption(fieldDef)) index--;
		if (fieldDef.treeDef && fieldState &&
			fieldState.selection && 
			fieldState.selection.length > 0 && index == 0)
		{
			return 1;
		}
	}
	return 0;
}

function getFieldValue(editField)
{
	var value = null;
	if (editField.type == "select-one")
	{
		var index = editField.selectedIndex;
		if (index >= 0)
		{
			value = editField.options.item(index).value;
		}
	}
	return value;
}

function getMultiselectDataFields(editField, fieldName)
{
	var hiddenFields = new Array();
	if (!editField.form)
	{
		idctrace("getMultiselectDataFields() was passed an edit field "
			+ editField.id + "with a null form attribute.");
		if (editField.id)
		{
			editField = getField(editField.id);
		}
	}
	hiddenFields.valueField = 
		getField(fieldName, editField.form);
	var selectionField = 
		getField(fieldName + "_Selections", editField.form);
	hiddenFields.selectionField = selectionField;
	if (!selectionField)
	{
		idctrace("unable to find selectionField for " + editField.id
			 + ", fieldName: " + fieldName + ", form: " + editField.form);
	}
	return hiddenFields;
}

function useUnionMultiselect(childFieldDef, parentFieldDef)
{
	var useUnion = ((parentFieldDef.optionListType == "multi" 
		|| parentFieldDef.optionListType == "multi2") 
		&& convertToBool(childFieldDef.multiselectUnionParentValues, 0));
	idctrace("useUnionMultiselect(" + childFieldDef.fieldName +
		", " + parentFieldDef.fieldName + "): " + useUnion);
	return useUnion;
}

function getMultiselectParentValues(editField, fieldName, relationshipDef)
{
	var fieldDef = getFieldDefinition(fieldName);
	
	var viewDefinition = getViewDefinition(fieldDef.viewName);
	var dataFields = getMultiselectDataFields(editField, fieldName);
	var valueArray = parseMultiselectValue(
		dataFields.valueField.value, 
		fieldDef.multiselectStorageSeparator);
	
	var parentValues = new Array();
	var valueList = parentValues.valueList = new Array();
	var pkIndex = viewDefinition.pkIndex;
	var parentField = relationshipDef.table1Column;
	for (var i = 0; i < valueArray.length; i++)
	{
		var key = valueArray[i];
		var row = pkIndex[key];
		if (!row)
		{
			idctrace("row '" + key + "' not loaded in view "
				+ viewDefinition.viewName);
			continue;
		}
		var parentValue = row[parentField];
		if (!parentValue)
		{
			idctrace("row '" + key + "' missing field '"
				+ parentField + "'");
			continue;
		}
		valueList[valueList.length] = parentValue;
	}

	return parentValues;
}

function getParentValue(editField, fieldName, relationshipDef)
{
	var fieldDef = getFieldDefinition(fieldName);
	var field = getSelectField(fieldName, editField.form);
	if (!field)
	{
		field = getField(fieldName, editField.form);
	}
	var fieldState = getFieldState(field.id);

	var isSelect = isSelectField(field);
	var value = null;
	var index = -1;
	var rc = new Array();
	rc.value = "";
	if (isSelect)
	{
		index = field.selectedIndex;
		if (index == -1) 
		{
			rc.isNonselect = 1;
			return rc;
		}
		if (addEmptyOption(fieldDef)) index--;
		if (fieldDef.treeDef && fieldState &&
			fieldState.selection && 
			fieldState.selection.length > 0)
		{
			if (index == 0)
			{
				rc.isUpEvent = 1;
				return rc;
			}
			else
			{
				index--;
			}
		}
		if (index < 0)
		{
			rc.isNonselect = 1;
			return rc;
		}
	}
	else
	{
		if (!field || typeof field == "undefined")
		{
			rc.isNonselect = 1;
			return rc;
		}
		if (field.value && typeof field.value != "undefined")
		{
			value = field.value;
		}
		if (!value || typeof value == "undefined" && !field.text && field.text != "undefined")
		{
			value = field.text;
		}
		if (!value || typeof value == "undefined")
		{
			rc.isNonselect = 1;
			return rc;
		}
		if (!fieldDef || typeof fieldDef == "undefined")
		{
			idctrace("getParentValue() fieldDef not found for fieldName " + fieldName + " but did find value " + value);
			rc.value = value;
			rc.isNonSelect = 1;
			return rc;
		}
	}
	var theView = getViewDefinition(fieldDef.viewName);
	if (!theView)
	{
		alert("Schema view not defined for " + fieldDef.viewName + " (" + fieldName + ")");
		rc.isNonselect = 1;
		rc.isError = 1;
		return rc;
	}
	if (!isSelect && !theView.schInternalColumn)
	{
		rc.value = value;
		return rc;
	}

	var theField;
	if (!relationshipDef)
	{
		idctrace("getParentValue() relationshipDef is undefined for field '" 
			+ fieldName + "' relationship name '" 
			+ fieldDef.dependentRelationship + "'.  Returning error.");
		rc.isError = 1;
		rc.isNonselect = 1;
		return rc;
	}
	theField = relationshipDef.table1Column;

	var theRows = fieldState.currentRowSet;
	var theValue = "";
	if (!theRows)
	{
		alert("Values for field " + fieldName + " being retrieved before they are loaded from schema js file.");
		rc.isNonselect = 1;
		rc.isError = 1;
		return rc;
	}
	if (!isSelect)
	{
		// Find matching row by checking for matching field value in all rows.
		var valueTrim = schemaTrim(value);
		for (var i = 0; i < theRows.length; i++)
		{
			var row = theRows[i];
			var testValue = row[theView.schInternalColumn];
			var testValueTrim = schemaTrim(testValue);
			if (valueTrim == testValueTrim)
			{
				index = i;
				break;
			}
		}
		if (index < 0)
		{
			rc.isNonselect = 1;
			return rc;
		}
	}
	if (index >= theRows.length)
	{
		idctrace("it's odd for the selected index "
			+ "to be larger than the number of values");
		rc.isNonselect = 1;
		rc.isError = 1;
		return rc;
	}
	var theRow = theRows[index];
	var theValue = theRow[theField];
	rc.value = theValue;
	rc.valueRow = theRow;
	return rc;
}

function getMulti2ParentValue(editField, parentFieldName, 
	relationshipDef, myValue)
{
	var rc = new Array();
	rc.isNonselect = rc.isError = 1;
	var fieldDef = getFieldDefinition(editField.name);
	if (!fieldDef)
	{
		idctrace("can't find field definition for field " 
			+ editField.name);
		return rc;
	}
	var viewDef = getViewDefinition(fieldDef.viewName);
	if (viewDef == null)
	{
		idctrace("can't fiend view definition for field "
			+ fieldDef.fieldName + ", view " 
			+ fieldDef.viewName);
		return rc;
	}

	var selectField = getSelectField(editField.name, editField.form);
	if (!selectField)
	{
		idctrace("can't find selection field for field " + fieldDef.fieldName +
			", multi select parent value cannot be found");
		return rc;
	}
	
	var fieldState = getFieldState(selectField.id);
	var currentRows = fieldState.currentRowSet;
	if (currentRows)
	{
		var internalColumn = viewDef.schInternalColumn;
		var parentColumn = relationshipDef.table2Column;
		for (var i = 0; i < currentRows.length; i++)
		{
			var theRow = currentRows[i];
			var key = theRow[internalColumn];
			var parentValue = theRow[parentColumn];
			if (key == myValue)
			{
				rc.isNonselect = rc.isError = 0;
				rc.value = parentValue;
				return rc;
			}
		}
	}
	idctrace("unable to find parent value for " + myValue +
		" in field " + fieldDef.fieldName);
	return rc;
}

function updateDependentChoicesCallback(arg)
{
	var fieldId = arg[1];
	var isUserEvent = 0;

	if (arg.length > 2)
	{
		isUserEvent = arg[2];
	}
	updateDependentChoices(fieldId, fieldName, isUserEvent);
}

function setFieldOption(fieldName, optionName, value)
{
	var fieldDef = getFieldDefinition(fieldName);
	if (typeof fieldDef == "undefined")
	{
		fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, fieldName, "fieldName");
	}
	var scriptVal = "fieldDef." + optionName + " = " + value;
	eval(scriptVal);
}

function getField(fieldName, form)
{
	var field = document.getElementById(fieldName);
	if (field && (!field.id || field.id != fieldName))
	{
		idctrace("getElementById() lied by returning an object with id="
			+ field.id + ", name=" + field.name + " when asked for id="
			+ fieldName + ".  Ignoring.")
		field = null;
	}
	if (!field && form)
	{
		if (form.elements.namedItem)
		{
			field = form.elements.namedItem(fieldName);
		}
		else
		{
			field = form.elements[fieldName];
		}
		if (field)
		{
			return field;
		}
		for (var i = 0; i < form.elements.length; i++)
		{
			var element = form.elements.item(i);
			if (element && element.name && element.name == fieldName)
			{
				field = element;
				break;
			}
		}
	}

	return field;
}

function getSelectField(fieldName, form)
{
	var field = null;
	var fieldState = getFieldState(fieldName);
	if (fieldState && fieldState.optionListField)
	{
		return fieldState.optionListField;
	}
	field = document.getElementById(fieldName);
	if (field && field.id == fieldName)
	{
		return field;
	}
	if (form)
	{
		field = getField(fieldName, form);
		if (!field || field && field.type != "select-one")
		{
			field = getField(fieldName + "_Options", form);
			if (!field)
			{
				field = getField(fieldName + ".Options", form);
			}
		}
		if (field && field.type == "select-one")
		{
			return field;
		}
	}

	idctrace("getSelectField() looking for field " + fieldName);
	var nodeListArray = new Array();
	nodeListArray[0] = document.getElementsByName(fieldName);
	nodeListArray[1] = document.getElementsByName(fieldName + ".Options");
	nodeListArray[2] = document.getElementsByName(fieldName + "_Options");
	field = null;
	for (var i = 0; !field && i < nodeListArray.length; i++)
	{
		var nodeList = nodeListArray[i];
		for (j = 0; j < nodeList.length; j++)
		{
			var tmpField = nodeList.item(j);
			if (tmpField.type == "select-one")
			{
				field = tmpField;
				break;
			}
		}
	}
	if (field == null)
	{
		idctrace("Form field " + fieldName + " not yet defined");
	}
	
	return field;
}

function removeFieldNameSuffixes(fieldName)
{
	var index = fieldName.indexOf("_Options");
	if (index > 0)
	{
		return fieldName.substring(0, index);
	}
	index = fieldName.indexOf(".Options");
	if (index > 0)
	{
		return fieldName.substring(0, index);
	}
	return fieldName;
}

function isSelectField(field)
{
	return (field != null && field.type == "select-one");
}

function getRelationshipDefinition(relationshipName)
{
	var name = jsFilename(relationshipName);
	var relationshipDef = g_schemaDefinition.relationships[name];
	if (!relationshipDef)
	{
		relationshipDef = g_schemaDefinition.relationships[relationshipName];
		if (relationshipDef)
		{
			idctrace("using legacy getRelationshipDefinition key");
		}
	}
	return relationshipDef;
}

function getFieldSettings(fieldName)
{
	var name = jsFilename(fieldName);
	var fieldDef = g_schemaDefinition.fieldSettings[name];
	if (!fieldDef)
	{
		fieldDef = g_schemaDefinition.fieldSettings[name];
		if (fieldDef)
		{
			idctrace("using legacy getFieldSettings key");
		}
	}
	return fieldDef;
}

function getViewDefinition(viewName)
{
	var name = jsFilename(viewName);
	var viewDef = g_schemaDefinition.views[name];
	if (!viewDef)
	{
		viewDef = g_schemaDefinition.views[viewName];
		if (viewDef)
		{
			idctrace("using legacy getViewDefinition key");
		}
	}
	return viewDef;
}

function getFieldDefinition(fieldName)
{
	if (typeof(fieldName) == "undefined")
	{
		idctrace("getFieldDefinition() called with an undefined argument");
		return null;
	}
	var fieldDef = getFieldSettings(fieldName);
	if (fieldDef)
	{
		checkFieldDefinition(fieldDef);
		return fieldDef;
	}
	var index = fieldName.indexOf(".Options");
	if (index < 0)
	{
		index = fieldName.indexOf("_Options");
	}
	if (index < 0)
	{
		index = fieldName.indexOf("_edit");
	}
	if (index < 0)
	{
		index = fieldName.indexOf("_Selections");
	}
	if (index > 0)
	{
		fieldName = fieldName.substring(0, index);
		fieldDef = getFieldDefinition(fieldName);
		if (typeof(fieldDef) != "undefined")
		{
			checkFieldDefinition(fieldDef);
		}
		return fieldDef;
	}
}

function checkFieldDefinition(fieldDefinition)
{
	if (!fieldDefinition.treeNodeStorageSeparator)
	{
		fieldDefinition.treeNodeStorageSeparator = "/";
	}
	if (!fieldDefinition.treeNodeDisplaySeparator)
	{
		fieldDefinition.treeNodeDisplaySeparator = "/";
	}
	if (!fieldDefinition.multiselectStorageSeparator)
	{
		fieldDefinition.multiselectStorageSeparator = ", ";
	}
	if (!fieldDefinition.multiselectDisplaySeparator)
	{
		fieldDefinition.multiselectDisplaySeparator = ", ";
	}
}

function getFieldState(fieldId, fieldDefinition)
{
	var fieldState = g_schemaDefinition.fieldState[fieldId];
	if (!fieldState)
	{
		g_schemaDefinition.fieldState[fieldId] = 
			fieldState = new Array();
		fieldState.fieldId = fieldId;

		if (fieldDefinition)
		{
			fieldState.fieldDefinition = fieldDefinition;
		}
	}

	if (!fieldState.treeNodeStorageSeparator && fieldDefinition)
	{
		fieldState.treeNodeStorageSeparator = 
			fieldDefinition.treeNodeStorageSeparator;
	}
	if (!fieldState.treeNodeStorageSeparator)
	{
		fieldState.treeNodeStorageSeparator = "/";
	}

	if (!fieldState.treeNodeDisplaySeparator && fieldDefinition)
	{
		fieldState.treeNodeDisplaySeparator = 
			fieldDefinition.treeNodeDisplaySeparator;
	}
	if (!fieldState.treeNodeDisplaySeparator)
	{
		fieldState.treeNodeDisplaySeparator = "/";
	}

	return fieldState;
}

function resetSelection(field, captureState)
{
	var fieldState = getFieldState(field.id);
	if (fieldState)
	{
		if (field.value && captureState)
		{
			fieldState.currentValue = field.value;
			idctrace("resetSelection() captured value is " + field.value);
		}
		else
		{
			idctrace("resetSelection() cleared captured value");
			fieldState.currentValue = null;
		}
		fieldState.selection = new Array();
	}
}

function resetField(field, setInitialElement, 
	initialElementLabel, initialElementValue)
{
		if (!isSelectField(field))
		{
			return;
		}
		while (field.length > 0)
		{
			try
			{
				field.remove(0);
			}
			catch (e)
			{
			}
		}

		var tempChildNodes = field.childNodes;
		var tempLength = tempChildNodes.length;
		
		for (var i = tempLength - 1 ; i >=0 ; i--)
		{
			try
			{
				if (tempChildNodes[i].label)
				{	
					field.removeChild(tempChildNodes[i]);
				}	
			}
			catch (e)
			{
			}
		}

		if (setInitialElement)
		{
			if (!initialElementValue) initialElementValue="";
			if (!initialElementLabel) initialElementLabel="";
			var element = document.createElement("option");
			if (its.ie)
			{
				element.value = initialElementValue;
				element.selected = true;
				element.text = initialElementLabel;
				field.add(element);

				var setToLength = initialElementLabel.length;
				setToLength += g_schemaDefinition.optionListSmallWidthCompensation;
				setToLength *= g_schemaDefinition.optionListSizingFactor;
				if (setToLength > g_schemaDefinition.optionListMaxSize) setToLength = g_schemaDefinition.optionListMaxSize;
				if (setToLength < 2)
				{
					setToLength = 2;
				}
				field.style.width = setToLength + "em";
			}
			else
			{
				element.value = initialElementValue;
				element.selected = true;
				element.appendChild(document.createTextNode(initialElementLabel));
				field.appendChild(element);
			}
		}
}

function addGoUpOption(field, text)
{
	var element = document.createElement("option");
	element.value = "";
	if (!text)
	{
		text = lc("wwSchemaGoUp");
	}
	element.appendChild(document.createTextNode(text));
	field.appendChild(element);
}

function parseTreeSelection(treeSelectionString, separator)
{
	var selection = new Array();
	var index = 0;
	while (index < treeSelectionString.length)
	{
		var nextSeparator = treeSelectionString.indexOf(separator, index);
		if (nextSeparator == -1)
		{
			selection[selection.length] = 
				treeSelectionString.substring(index);
			break;
		}
		selection[selection.length] = 
			treeSelectionString.substring(index, nextSeparator);
		index = nextSeparator+1;
	}
	return selection;
}

function copyCallbacks(source, target)
{
	while (source.length > 0)
	{
		var callback = source.shift();
		target[target.length] = callback;
	}
}

function doCallbacks(callbacks, errorPrefix)
{
	if (typeof callbacks == "undefined")
	{
		return;
	}
	while (callbacks.length > 0)
	{
		var callback = callbacks.shift();
		if (!callback)
		{
			continue;
		}
		callback[0](callback);
	}
}


function registerDefinition(viewPath, isDynamic)
{
	idctrace("registerDefinition(" + viewPath + ") called.");
	if (g_schemaDefinition.pendingViews[viewPath])
	{
		isDynamic = 1;
	}
	g_schemaDefinition.loadedViews[viewPath] = 1;
	if (g_schemaDefinition.viewCallbacks[viewPath])
	{
		var callbacks = g_schemaDefinition.viewCallbacks[viewPath];
		if (g_schemaDefinition.state == g_schemaDefinition.STATE_INIT)
		{
			copyCallbacks(callbacks, g_schemaDefinition.globalCallbacks);
		}
		else
		{
			doCallbacks(callbacks, "registerDefinition(" + viewPath + "): ");
		}
	}
	if (isDynamic || g_schemaDefinition.state != g_schemaDefinition.STATE_INIT)
	{
		if (g_schemaDefinition.viewLoaders.length == 0)
		{
			doCallbacks(g_schemaDefinition.globalCallbacks, 
				"registerDefinition() globals: ");
		}
	}
	idctrace("registerDefinition(" + viewPath + ") finished.");
}

function loadViewValues(arg)
{
		var viewPath = arg[1];
		var fieldId = arg[2];
		idctrace("loadViewValues() with view '" + viewPath 
			+ "' field='" + fieldId + "'.");
		if (fieldId)
		{
			g_schemaDefinition.pendingFields[fieldId] = "1";
		}
		var scriptChildNode = document.createElement("script");
		scriptChildNode.src = viewPath;
		document.body.appendChild(scriptChildNode);
}

function addEmptyOption(fieldDef)
{
	if (typeof fieldDef == "undefined")
	{
		return 0;
	}
	return (convertToBool(fieldDef.addEmptyOption, true) || 
		!convertToBool(fieldDef.allowPreselect, false));
}

function getDisplayString(row, viewDefinition, defaultValue, l10nType)
{
	var label = null;
	if (l10nType == null)
	{
		l10nType = "Display";
	}
	if (row)
	{
		if (label == null || typeof label == "undefined") label = row[l10nType + "." + g_schemaDefinition.userLocale];
		if (label == null || typeof label == "undefined") label = row[l10nType + "." + g_schemaDefinition.userLanguage];
		if (label == null || typeof label == "undefined") label = row[l10nType + ".default"];
		if ((label == null || typeof label == "undefined") && l10nType == "Display") label = row[viewDefinition.schLabelColumn];
	}
	if (l10nType == "Display")
	{
		if (label != null && typeof label != "undefined")
		{
			if (viewDefinition.schLocalizeWhenDisplayed == 1)
			{
				var lcLabel = lc(label);
				if (lcLabel != null && typeof label != "undefined")
				{
					label = lcLabel;
				}
			}
		}
		else
		{
			if (l10nType == "Display") label = defaultValue;
			if (label == null || typeof label == "undefined") label = "undefined";
		}
	}
	return label;
}

function publishViewValues(arg)
{
	var fieldState = null;
	try
	{
		var viewName = arg[1];
		var fieldId = arg[2];
		var fieldValue = arg[3];
		var depName = arg[4];
		var parentValue = arg[5];

		if (depName)
		{
			idctrace("publishViewValues() starting with view=" + viewName + 
				", fieldId=" + fieldId + ", fieldValue=" + fieldValue + ", depName=" +
				depName + ", parentValue=" + parentValue);
		}
		else
		{
			idctrace("publishViewValues() starting with view \"" + viewName + 
				"\" and fieldId \"" + fieldId + "\"");
		}
		var field = getSelectField(fieldId);
		if (!field)
		{
			field = getField(fieldId);
			if (field.id)
			{
				fieldId = field.id;
			}
		}
		g_schemaDefinition.pendingFields[fieldId] = null;
		if (typeof field == "undefined")
		{
			alert("publishViewValues(): the field " + fieldId + " is not defined.");
			return;
		}
		var fieldDef = getFieldDefinition(field.name);
		if (!fieldDef)
		{
			fieldDef = new Array();
			idctrace("publishViewValues() the field '" 
				+ field.name + "' not found.");
		}
		fieldState = getFieldState(fieldId, fieldDef);
		fieldState.isBusy = 1;

		var viewData = getViewDefinition(viewName);
		if (typeof viewData == "undefined")
		{
			g_schemaDefinition.traceExecution = 1;
			idctrace("publishViewValues() the view " + viewName + " is not defined.");
			return;
		}
		var rows;
		if (typeof depName == "undefined")
		{
			rows = getViewValuesFromCache(viewName);
		}
		else
		{
			if (parentValue.valueList)
			{
				rows = new Array();
				var usedValues = new Array();
				for (var i = 0; i < parentValue.valueList.length; i++)
				{
					var tmpValue = parentValue.valueList[i];
					if (usedValues[tmpValue])
					{
						continue;
					}
					usedValues[tmpValue] = 1;
					var tmpRows = getViewValuesFromCache(
						viewName, depName, tmpValue);
					if (!tmpRows)
					{
						idctrace("publishViewValues() cache missing values for view "
							+ viewName + ", rel " + depName 
							+ ", value " + tmpValue);
						return;
					}
					for (var j = 0; j < tmpRows.length; j++)
					{
						rows[rows.length] = tmpRows[j];
					}
				}
				doClientViewProcessing(null, viewData, rows,
					g_schemaDefinition.IS_CACHED_DATA);
			}
			else
			{
				rows = getViewValuesFromCache(viewName, depName, parentValue);
			}
		}
		
		var profileDef = g_docProfiles.lists[fieldDef.fieldName];
		if (typeof profileDef != "undefined" && typeof rows != "undefined" && rows != null)
		{
			rows = determineRestrictedList(viewData, profileDef, rows);
		}
		
		
		fieldState.currentRowSet = rows;
		
		if (!isSelectField(field))
		{
			// No more to do than to update the children.
			updateDependentChoices(field.id, fieldDef.fieldName, 0);
			return;
		}
		
		var hasEmptyOption = false;
		if (fieldDef && (addEmptyOption(fieldDef) || 
			fieldDef.treeDef && fieldState.selection && 
			fieldState.selection.length > 0))
		{
			hasEmptyOption = true;
			resetField(field, 1, "", "");
		}
		else
		{
			resetField(field);
		}

		if (fieldDef && fieldDef.treeDef && 
			fieldState.selection && fieldState.selection.length > 0)
		{
			addGoUpOption(field);
		}
		
		var setToLength = 18;
		if (!fieldValue && fieldState.currentValue)
		{
			fieldValue = fieldState.currentValue;
		}
		if (typeof rows != "undefined" && rows != null)
		{
			var elementTemplate = document.createElement("option");
			var fieldValueTrimmed = schemaTrim(fieldValue);
			var fieldValueLower = schemaToLower(fieldValueTrimmed);
			var lastGroup = null;
			var groupContainers = new Array();
			var htmlArray, innerSpan, onChangeScript, htmli;
			

			var useInnerHtml = g_schemaDefinition.useInnerHTML ||
				(its.ie && rows.length > 100);
			if (useInnerHtml)
			{
				onChangeScript = field.onchange;
				
				htmlArray = new Array(5*rows.length);
				htmli = 0;
				innerSpan = document.getElementById(field.id + "_span");
				if (!innerSpan)
				{
					idctrace("no span for field " + field.id);
					useInnerHtml = 0;
				}
				else
				{
					var origHtml = innerSpan.innerHTML;
					
					var startIndex = origHtml.toUpperCase().indexOf("<SELECT");
					var finalHtml = null;
					if (startIndex >= 0)
					{
						htmlArray[htmli++] = 
							origHtml.substring(0, startIndex);
						origHtml = origHtml.substring(startIndex);
						var endIndex = origHtml.indexOf(">");
						htmlArray[htmli++] = 
							origHtml.substring(0, endIndex+1);
						origHtml = origHtml.substring(endIndex+1);
						startIndex = origHtml.toUpperCase().indexOf("</SELECT>");
						if (startIndex >= 0)
						{
							finalHtml = origHtml.substring(startIndex);
						}
					}
					if (hasEmptyOption)
					{
						htmlArray[htmli++] = "<option></option>";
					}
				}
			}
			var group = null;
			for (var i = 0; i < rows.length; i++)
			{   
				var row = rows[i];
				if (!row)
				{
					idctrace("publishViewValues(): null row found.");
					continue;
				}
				var value;
				if (viewData.schInternalColumn)
				{
					value = row[viewData.schInternalColumn];
				}
				var label = getDisplayString(row, viewData, value);
				var title = getDisplayString(row, viewData, value, "Title");
				group = getDisplayString(row, viewData, value, "Group");
	
				if (value == null || typeof value == "undefined") value = label;
				var valueTrimmed = schemaTrim(value);
				var valueLower = schemaToLower(valueTrimmed);
				var isSelected = false;
				if (fieldValueLower && fieldValueLower.length > 0 && valueLower == fieldValueLower)
				{
					isSelected = true;
				}
				if (label.length > setToLength) setToLength = label.length;

				if (useInnerHtml)
				{
					if (htmlArray.length == htmli)
					{
						htmlArray.length = 2*htmli;
						idctrace("publishViewValues() increasing htmlArray to " + htmlArray.length);
					}
					if (group && group != lastGroup)
					{
						if (lastGroup)
						{
							htmlArray[htmli++] = "</optgroup>";
						}
						htmlArray[htmli++] = '<optgroup label="';
						htmlArray[htmli++] = xmlEncode(group);
						htmlArray[htmli++] = '">';
						lastGroup = group;
					}
					htmlArray[htmli++] = '<option value="';
					htmlArray[htmli++] = xmlEncode(value);
					if (isSelected)
					{
						htmlArray[htmli++] = '" selected>';
					}
					else
					{
						htmlArray[htmli++] = '">';
					}
					htmlArray[htmli++] = xmlEncode(label);
				}
				else
				{
					var element = elementTemplate.cloneNode(false);
					element.value = value;
					if (title)
					{
						element.title = title;
					}
					if (isSelected)
					{
						element.selected = true;
						element.defaultSelected = true;
					}
					if (its.ie && !group)
					{
						element.text = label;
					}
					else
					{
						element.appendChild(document.createTextNode(label));
					}
					if (group)
					{
						var groupContainer = groupContainers[group];
						if (!groupContainer)
						{
							groupContainer = document.createElement("optgroup");
							groupContainer.label = group;
							groupContainers[group] = groupContainer;
							field.appendChild(groupContainer);
						}
						groupContainer.appendChild(element);
						lastGroup = group;
					}
					else if (its.ie)
					{
						
						field.add(element);
						if (isSelected)
						{
							// Should not need to do this since the element knows it is selected,
							// but when option list is shown in an iFrame, this code seems to be
							// needed.
							field.selectedIndex = element.index;
						}
					}
					else
					{
						field.appendChild(element);
					}
				}
			}
			if (useInnerHtml)
			{
				if (group)
				{
					htmlArray[htmli++] = "</optgroup>";
				}
				htmlArray[htmli++] = finalHtml;
				idctrace("publishViewValues() setting innerHTML");
				innerSpan.innerHTML = htmlArray.join("");
				idctrace("publishViewValues() finished innerHTML");
				var oldField = field;
				field = getSelectField(fieldId);
				if (onChangeScript)
				{
					if (its.ie && typeof(optionListFixOnChangeCommands[fieldId]) != 'undefined'
						&& typeof(optionListFixOnChangeCommands[fieldId].originalObject) != 'undefined')
					{
						optionListFixOnChangeCommands[fieldId].originalObject = field;
					}
					field.onchange = onChangeScript;
				}
				oldField.name = "old:" + oldField.name;
			}
		}
		updateDependentChoices(field.id, fieldDef.fieldName, 0);
		setToLength += g_schemaDefinition.optionListSmallWidthCompensation;
		setToLength *= g_schemaDefinition.optionListSizingFactor;
		if (setToLength > g_schemaDefinition.optionListMaxSize) 
		{
			setToLength = g_schemaDefinition.optionListMaxSize;
		}
		var setLength = 0;
		if (its.ie) setLength = 1;
		if (typeof(viewData.optionListLength) != "undefined")
		{
			setLength = 1;
			setToLength = viewData.optionListLength;
		}
		if (typeof(fieldDef.optionListLength) != "undefined")
		{
			setLength = 1;
			setToLength = fieldDef.optionListLength;
		}
		if (setLength) field.style.width = setToLength + "em";

		idctrace("publishViewValues() finished with view \"" + viewName + 
			"\" and fieldId \"" + fieldId + "\"");
	}
	
	finally
	{
		if (fieldState)
		{
			fieldState.isBusy = 0;
		}
	}
}



function registerViewLoader(callback)
{
	var loaders = g_schemaDefinition.viewLoaders;
	if (typeof loaders == "undefined")
	{
		loaders = g_schemaDefinition.viewLoaders = new Array();
	}
	loaders[loaders.length] = callback;
}


function registerViewCallback(viewName, callback)
{
	var callbacks = getOrCreateSchemaArray(
		g_schemaDefinition.viewCallbacks, viewName);
	callbacks[callbacks.length] = callback;
}


function registerInitCallback(callback)
{
	if (!g_schemaDefinition.initCallbacks)
	{
		g_schemaDefinition.initCallbacks = new Array();
	}
	var initCallbacks = g_schemaDefinition.initCallbacks;
	initCallbacks[initCallbacks.length] = callback;
}


function registerGlobalCallback(callback)
{
	if (typeof g_schemaDefinition.globalCallbacks == "undefined")
	{
		g_schemaDefinition.globalCallbacks = new Array();
	}
	idctrace("registerGlobalCallback -- stack trace " + createStackTrace());
	var globalCallbacks = g_schemaDefinition.globalCallbacks;
	globalCallbacks[globalCallbacks.length] = callback;
}


function registerView(viewName, fieldId, initialValue)
{
	var selectField = getSelectField(fieldId);
	if (!selectField)
	{
		alert("registerView: unable to find field " + fieldId);
		return;
	}
	resetField(selectField, 1, lc("wwSchemaLoadingValues"), initialValue);
	registerViewWithArgs(viewName, fieldId, selectField, initialValue);
}

function updateFieldDisplayAfterExternalChanges(fieldId, curValue)
{
	var selectField = getSelectField(fieldId);
	if (!selectField)
	{
		selectField = getField(fieldId);
	}
	var params = new Object();
	params.isUpdate = 1;
	registerViewWithArgs(null, fieldId, selectField, curValue, params);
}
	
function registerViewWithArgs(viewName, fieldId, selectField, initialValue, params)
{
	var isUpdate = (params && params.isUpdate);
	var fieldName = selectField.name;
	var fieldState = getFieldState(fieldId);
	var fieldDef;
	if (fieldState && fieldState.fieldDefinition)
	{
		fieldDef = fieldState.fieldDefinition;
	}
	else if (fieldName)
	{
		fieldDef = getFieldDefinition(fieldName);
	}
	if (!fieldDef)
	{
		idctrace("registerView() fieldDef not defined for " + fieldId);
		fieldDef = new Array();
	}
	else if (!fieldDef.viewName && viewName)
	{	
		fieldDef.viewName = viewName;
	}
	if (!fieldState)
	{
		fieldState = getFieldState(fieldId, fieldDef);
	}
	
	// If isUpdate is true, then initialValue is actually current value.
	if (!fieldState.currentValue || isUpdate)
	{
		fieldState.currentValue = initialValue;
	}
		
	var isDependent = convertToBool(fieldDef.isDependentList, false);
	var viewPathInfo = null;
	var loadCallback = null;
	var publishCallback = null;
	var doDisplaySelectLabelProcessing = false;
	var doTreeDef = false;
	var loadAll = false;
	var firstPassCallbacks = null;
	firstPassCallbacks = new Array();
	firstPassViewPathInfo = new Array();
	var usesDisplayLabel = (fieldDef.optionListType == "multi2" && !fieldDef.treeDef) ||
		fieldDef.usesDisplayLabel;

	if (usesDisplayLabel && (isDependent || fieldDef.treeDef))
	{
		doDisplaySelectLabelProcessing = true;
	}
	else if (isDependent && fieldDef.treeDef)
	{
		doTreeDef = true;
	}
	else if (!isDependent)
	{
		loadAll = true;
   	}
   	if (!doDisplaySelectLabelProcessing && !doTreeDef && !loadAll)
   	{
   		return;
   	}
	if (doDisplaySelectLabelProcessing)
	{
		
		doTreeDef = false;
		var hiddenFields = getMultiselectDataFields(
			selectField, fieldDef.fieldName);
		if (hiddenFields && hiddenFields.selectionField)
		{
			var storageSep = fieldDef.multiselectStorageSeparator;
			var selectionArray = parseMultiselectValue(
				hiddenFields.selectionField.value, storageSep);
			var selLoadedParents = new Array();
			for (var i = 0; i < selectionArray.length; i++)
			{
				var selParentData = selectionArray[i++];
				var selDependentRelationship = null;
				var selViewName = null;
				var selParentId = null;
				if (fieldDef.treeDef)
				{
					var parentArray = parseMultiselectValue(selParentData, ":", 3);
					selViewName = parentArray[0];
					if (!parentArray[1] || parentArray[1].length == 0)
					{
						// Allow top level values to be loaded.
						doTreeDef = true;
						continue;
					}
					selDependentRelationship = parentArray[1];
					selParentId = parentArray[2];
				}
				else
				{
					selParentId = selParentData;
					selViewName = fieldDef.viewName;
					selDependentRelationship = fieldDef.dependentRelationship;
				}
				if (selParentId == "err")
				{
					idctrace("registerViewWithArgs() ignoring 'err' parent, fieldName=" + 
						fieldDef.fieldName + ", viewName=" + fieldDef.viewName + ", i=" + i + ", selectionArray=" + selectionArray);
					continue;
				}
				if (selLoadedParents[selParentId])
				{
					continue;
				}
				selLoadedParents[selParentId] = 1;
				var myId = selectionArray[i];
				var selViewPathInfo = constructViewPathInfo(
					selViewName, selDependentRelationship, selParentId);
				var selLoadCallback = new Array(loadViewValues,
					selViewPathInfo.url, fieldId);
				firstPassCallbacks[firstPassCallbacks.length] = selLoadCallback;
				firstPassViewPathInfo[firstPassViewPathInfo.length] = selViewPathInfo;
			}
		}
	}
	if (doTreeDef)
	{
		var treeDef = fieldDef.treeDef;
		var lastNode = treeDef[treeDef.length-1];
		viewName = treeDef[0][1].viewName;

		if (lastNode[0] == "i" && lastNode[1] == 0)
		{
			var relationshipName = treeDef[1][1].relationName;
			var tmpInitialValue;
			if (lastNode.length > 2)
			{
				tmpInitialValue = lastNode[2];
			}
			else
			{
				tmpInitialValue = "0";
			}
			if (!initialValue || fieldDef.usesDisplayLabel)
			{
				fieldState.selection = new Array();
			}
			else
			{
				fieldState.selection = parseTreeSelection(initialValue, 
					fieldState.treeNodeStorageSeparator);
			}

			viewPathInfo = constructViewPathInfo(
				viewName, relationshipName, tmpInitialValue);
			loadCallback = new Array(loadViewValues, viewPathInfo.url, fieldId);
			if (!doDisplaySelectLabelProcessing)
			{
				publishCallback = new Array(publishViewValues, viewName,
					fieldId, "", relationshipName, tmpInitialValue);
			}
		}
		else
		{
			if (!initialValue)
			{
				initialValue = fieldDef.initialValue;
			}
			if (!initialValue)
			{
				initialValue = "";
			}
			if (doDisplaySelectLabelProcessing)
			{
				// If using a special area to present choices, then we are not using
				// a full path to construct a choice list path.
				fieldState.selection = new Array();
			}
			else
			{
				// Parse out full path.
				fieldState.selection = parseTreeSelection(initialValue, 
					fieldState.treeNodeStorageSeparator);
			}
			if (fieldState.selection.length == 0)
			{
				if (!isDependent)
				{
					viewName = treeDef[0][1].viewName;
					viewPathInfo = constructViewPathInfo(viewName);
					loadCallback = new Array(loadViewValues, 
						viewPathInfo.url, fieldId);
					if (!doDisplaySelectLabelProcessing)
					{
						publishCallback = new Array(publishViewValues, 
							viewName, fieldId, initialValue);
					}
				}
			}
		}
		
		
		var finishedPaths = new Array();
		for (var i = 0; i < fieldState.selection.length; i++)
		{
			var nextLevelInfo = computeTreeInfoForDepth(fieldDef.treeDef, i);
			if (!nextLevelInfo)
			{
				break;
			}
			initialValue = fieldState.selection[i];
			viewPathInfo = constructViewPathInfo(nextLevelInfo.viewDef.viewName,
				nextLevelInfo.relationshipDef.relationName,
				initialValue);
			publishCallback = new Array(
				publishViewValues, 
				nextLevelInfo.viewDef.viewName, fieldId, "", 
				nextLevelInfo.relationshipDef.relationName, 
				initialValue);
			loadCallback = new Array(loadViewValues,
				viewPathInfo.url, fieldId);
			if (finishedPaths[viewPathInfo.path])
			{
				continue;
			}
			finishedPaths[viewPathInfo.path] = 1;
			if (i+1 < fieldState.selection.length)
			{
				firstPassCallbacks[firstPassCallbacks.length] = loadCallback;
				firstPassViewPathInfo[firstPassViewPathInfo.length] = viewPathInfo;
			}
		}
	}
	if (loadAll)
	{
		if (!viewName)
		{
			viewName = fieldDef.viewName;
		}
		viewPathInfo = constructViewPathInfo(viewName);
		
		var pending = g_schemaDefinition.pendingViews;
		if (!pending[viewPathInfo.path] && !isUpdate)
		{
			loadCallback = new Array(loadViewValues, 
				viewPathInfo.url, fieldId);
		}
		pending[viewPathInfo.path] = "1";
		if (!fieldDef.treeView || !usesDisplayLabel)
		{
			publishCallback = new Array(publishViewValues, viewName,
				fieldId, initialValue);
		}
	}
	
	if (loadCallback)
	{
		firstPassCallbacks[firstPassCallbacks.length] = loadCallback;
		firstPassViewPathInfo[firstPassViewPathInfo.length] = viewPathInfo;
	}

	var doBackgroundCall = false;
	for (var i = 0; i < firstPassViewPathInfo.length; i++)
	{
		var viewPathInfoForCallback = firstPassViewPathInfo[i];
		if (!g_schemaDefinition.loadedViews[viewPathInfoForCallback.path])
		{
			
			if (getViewValuesFromCache(viewPathInfoForCallback.viewName, 
				viewPathInfoForCallback.relationshipName, viewPathInfoForCallback.parentValue))
			{
				g_schemaDefinition.loadedViews[viewPathInfoForCallback.path] = 1;
			}
		}
		if (g_schemaDefinition.loadedViews[viewPathInfoForCallback.path])
		{
			// Suppress this loading.
			firstPassViewPathInfo[i] = null;
			firstPassCallbacks[i] = null;
		}
		else
		{
			doBackgroundCall = true;	
		}
	}

	if (usesDisplayLabel)
	{
		
		if (doBackgroundCall)
		{
			var multiselectCallback = new Array(callbackTwo, 
				checkUpdateMultiselectDisplay,
				document.getElementById(fieldId),
				fieldDef.fieldName);
			var pendingDisplayViews = new Array();
			for (var i = 0; i < firstPassViewPathInfo.length; i++)
			{
				var viewPathInfoForCallback = firstPassViewPathInfo[i];
				if (viewPathInfoForCallback)
				{
					registerViewCallback(viewPathInfoForCallback.path, multiselectCallback);
					pendingDisplayViews[pendingDisplayViews.length] = viewPathInfoForCallback.path;
				}
			}
			fieldState.pendingDisplayViews = pendingDisplayViews;
		}
		else if (!isUpdate)
		{
			var multiselectCallback = new Array(callbackTwo, 
				updateMultiselectDisplay,
				document.getElementById(fieldId),
				fieldDef.fieldName);
			registerGlobalCallback(multiselectCallback);
		}
		else
		{
			// Do it immediately.
			updateMultiselectDisplay(document.getElementById(fieldId), fieldDef.fieldName);
		}
	}
	
	if (publishCallback)
	{
		// loadCallback was stuck in at the end, publishCallback is linked with loadCallback and
		// viewPathInfo.
		var doingLoadViewValues = (loadCallback && viewPathInfo &&
			firstPassViewPathInfo.length > 0 && firstPassViewPathInfo[firstPassViewPathInfo.length - 1]);
		var registerToView = doingLoadViewValues;
		if (!registerToView && loadAll && viewPathInfo)
		{
			if (!g_schemaDefinition.loadedViews[viewPathInfo.path])
			{
				
				idctrace("adding to view callback for fieldName=" + fieldName + " viewName=" + viewName);
				registerToView = true;
			}
		}
		if (registerToView)
		{
			registerViewCallback(viewPathInfo.path, publishCallback);
		}
		else
		{
			if (!isUpdate)
			{
				// Global callbacks go off before dynamically loaded view data is loaded. For dependent
				// views, this does not matter because the parent views drive the publishing.
				registerGlobalCallback(publishCallback);
			}
			else
			{	
				publishCallback[0](publishCallback);
			}
		}
	}
	if (!isUpdate)
	{
		for (var i = 0; i < firstPassCallbacks.length; i++)
		{
			var firstPassCallback = firstPassCallbacks[i];
			if (firstPassCallback)
			{
				registerViewLoader(firstPassCallback);
			}
		}
	}
	else
	{
		doCallbacks(firstPassCallbacks, "registerViewWithArgsUpdate");
	}
	
	
}

function constructViewPathInfo(viewName, relationshipName, parentValue)
{
	var info = new Array();
	info.viewName = viewName;
	if (relationshipName)
	{
		info.relationshipName = relationshipName;
	}
	if (parentValue)
	{
		info.parentValue = parentValue;
	}
	var path = jsFilename(viewName);
	var suffix = "";
	if (relationshipName)
	{
		path += "/" + jsFilename(relationshipName) +
			"/" + jsFilename(parentValue);
	}
	info.path = path;

	var viewDef = getViewDefinition(viewName);
	if (viewDef && viewDef.publishViewData == 1)
	{
		var url = jsFilename(viewName);
		if (relationshipName && parentValue)
		{
			url += "/" + jsFilename(relationshipName) +
				"/" + jsFilename(parentValue);
			suffix = ".js";
		}
		else
		{
			suffix = "/all.js";
		}
		info.url = g_schemaDefinition.schemaBaseUrl + "views/" + url + suffix;
	}
	else
	{
		var url = "?IdcService=GET_SCHEMA_VIEW_FRAGMENT&schViewName=" +
			escape(jsFilename(viewName));
		if (relationshipName && parentValue)
		{
			url += "&schRelationName=" + escape(jsFilename(relationshipName)) +
				"&schParentValue=" + escape(jsFullEncode(parentValue));
		}
		info.url = httpCgiPath + url;
	}
	return info;
}

function ViewValuesComparator(theViewDefinition)
{
	viewDefinition = theViewDefinition;
	fieldName = viewDefinition.schClientSortField;
	var sortOrder = viewDefinition.schClientSortOrder;
	if (sortOrder)
	{
		isAscending = (sortOrder.indexOf("d") != 0)
	}
	else
	{
		isAscending = 1;
	}

	if (isAscending)
	{
		this.compare = compareAscending;
	}
	else
	{
		this.compare = compareDescending;
	}
	function compareAscending(arg1, arg2)
	{
		var str1;
		var str2;
		if (fieldName != "localizedDisplay")
		{
			str1 = arg1[fieldName];
			str2 = arg2[fieldName];
		}
		else
		{
			str1 = getDisplayString(arg1, viewDefinition, null);
			str2 = getDisplayString(arg2, viewDefinition, null);
		}
		if (str1 > str2)
		{
			return 1;
		}
		else if (str1 == str2)
		{
			return 0;
		}
		else
		{
			return -1;
		}
	}

	function compareDescending(arg1, arg2)
	{
		var str1;
		var str2;
		if (fieldName != "localizedDisplay")
		{
			str1 = arg1[fieldName];
			str2 = arg2[fieldName];
		}
		else
		{
			str1 = getDisplayString(arg1, viewDefinition, null);
			str2 = getDisplayString(arg2, viewDefinition, null);
		}
		if (str1 > str2)
		{
			return -1;
		}
		else if (str1 == str2)
		{
			return 0;
		}
		else
		{
			return 1;
		}
	}
}



function doClientViewProcessing(viewPath, viewDefinition, newRows, 
	isCachedData)
{
	if (viewDefinition.schIsClientSorted &&
		viewDefinition.schClientSortField)
	{
		var sortOrder = viewDefinition.schClientSortOrder;
		if (sortOrder == null)
		{
			sortOrder = "ascending"
		}
		var comparator = new ViewValuesComparator(viewDefinition);
		idctrace("doClientViewProcessing() sorting " + newRows.length + " rows");
		newRows.sort(comparator.compare);
	}

	if (convertToBool(isCachedData, 0))
	{
		return;
	}
	var pkIndex = viewDefinition.pkIndex;
	for (var i = 0; i < newRows.length; i++)
	{
		var row = newRows[i];
		var pk = row[viewDefinition.schInternalColumn];
		pkIndex[pk] = row;
	}
}

function finalizeDisplay()
{
	if (g_schemaDefinition.state == g_schemaDefinition.STATE_FINALIZED)
	{
		idctrace("finalizeDisplayImplementor() already initialized");
		return;
	}
	if (g_schemaDefinition.state == g_schemaDefinition.STATE_FINALIZING)
	{
		idctrace("finalizeDisplayImplementor() already finalizing");
		return;
	}
	setTimeout("finalizeDisplayImplementor()", 0);
}

function finalizeDisplayImplementor()
{   
	if (g_schemaDefinition.state == g_schemaDefinition.STATE_FINALIZING)
	{
		idctrace("finalizeDisplayImplementor() already finalizing");
		return;
	}
	try
	{
		idctrace("finalizeDisplayImplementor() started");
		g_schemaDefinition.state = g_schemaDefinition.STATE_FINALIZING;
		try
		{
			if (g_schemaDefinition.priorOnLoadScript)
			{
				var onLoadScript = g_schemaDefinition.priorOnLoadScript;
				g_schemaDefinition.priorOnLoadScript = null;
				
				idctrace("finalizeDisplayImplementor() running priorOnLoadScript");
				if (its.ie)
				{
					onLoadScript();
				}
				else
				{
					eval(onLoadScript);
				}
			}
		}
		catch (e)
		{
			idctrace("finalizeDisplayImplementor() exception while "
				+ "running priorOnLoadScript: " + e);
		}
		if (g_schemaDefinition.viewLoaders.length == 0)
			doCallbacks(g_schemaDefinition.globalCallbacks, 
				"finalizeDisplayImplementor(): ");
		else
			doCallbacks(g_schemaDefinition.viewLoaders, 
				"finalizeDisplayImplementor(): ");
		idctrace("finalizeDisplayImplementor() done");
	}
	finally
	{
		g_schemaDefinition.state = g_schemaDefinition.STATE_FINALIZED;
	}

}





function refreshViewEdit(formId, viewName, relationName, parentValue)
{
	var view = getViewDefinition(viewName);
	if (!view)
	{
		var msg = lc("wwSchemaObjectDoesntExist_view", viewName);
		alert(msg);
		return;
	}

	view.publishViewData = 0;
	var pathInfo = constructViewPathInfo(viewName, relationName, parentValue);
	var callback = new Array(refreshViewEditCallback, formId, 
		viewName, relationName, parentValue);
	registerViewCallback(pathInfo.path, callback);

	var loadCallback = new Array(loadViewValues, pathInfo.url);
	registerViewLoader(loadCallback);
}

function refreshViewEditCallback(callback)
{
	var formId = callback[1];
	var viewName = callback[2];
	var relationName = callback[3];
	var parentValue = callback[4];
	var view = getViewDefinition(viewName);
	var viewColumns = view.viewColumns;
	var rows;
	
	if (!relationName)
	{
		rows = view.rows;
	}
	else
	{
		rows = view.deps[jsFilename(relationName)].subsets[parentValue];
	}

	var form = document.getElementById(formId);
	var parent = document.getElementById(formId + "_div");
	var lastRowIndexField = getField("lastRowIndex", form);

	var table = document.createElement("table");
	table.style.tableLayout = "fixed";
	table.style.overflow = "hidden";
	var tableBody = document.createElement("tbody");
	tableBody.id = formId + "_editBody";
	var tableRow = document.createElement("tr");
	var tableHeader = document.createElement("th");
	var tableData = document.createElement("td");
	var inputField = document.createElement("input");
	var spanElement = document.createElement("span");

	var myTableColumn = null;
	if (relationName)
	{
		myTableColumn = getMyTableColumn(viewName, relationName);
	}

	var columnOrder = "";
	for (var i = 0; i < viewColumns.length; i++)
	{
		var columnName = viewColumns[i];
		if (skipColumnForEdit(columnName, view, myTableColumn))
		{
			continue;
		}
		if (columnOrder.length > 0)
		{
			columnOrder += ",";
		}
		columnOrder += viewColumns[i];
		tableHeader = tableHeader.cloneNode(false);
		var textNode = document.createTextNode(columnName);
		tableHeader.appendChild(textNode);
		tableHeader.style.overflow = "hidden";
		tableRow.appendChild(tableHeader);
	}
	var clientViewColumnsField = form.clientViewColumns;
	clientViewColumnsField.value = columnOrder;

	tableHeader = tableHeader.cloneNode(false);
	tableHeader.appendChild(document.createTextNode(lc("wwFilterActions")));
	tableRow.appendChild(tableHeader);
	tableBody.appendChild(tableRow);

	inputField = inputField.cloneNode(false);
	inputField.id = formId + "_selected";
	inputField.type = "text";
	inputField.style.display = "none";
	inputField.name = "selectedId";
	inputField.value = "";
	parent.appendChild(inputField);

	for (var i = 0; rows && i < rows.length; i++)
	{
		var row = rows[i];
		tableRow = tableRow.cloneNode(false);
		var counter = 0;
		for (var j = 0; j < viewColumns.length; j++)
		{
			var columnName = viewColumns[j];
			if (skipColumnForEdit(columnName, view, myTableColumn))
			{
				continue;
			}
			var dataId = formId + "." + i + "." + counter;
			tableData = tableData.cloneNode(false);
			tableData.id = dataId;
			var isMutable = 1;
			if (columnName == view.schInternalColumn)
			{
				isMutable = 0;
			}
			var text = row[columnName];

			var textNode = document.createTextNode(text);
			spanElement = spanElement.cloneNode(false);
			spanElement.id = dataId + "_t";
			spanElement.appendChild(textNode);
			if (isMutable)
			{
				tableData.onclick = handleElementClick;
			}
			tableData.appendChild(spanElement);
			tableRow.appendChild(tableData);

			inputField = inputField.cloneNode(false);
			inputField.id = dataId + "_e";
			inputField.name = "d " + i + " " + counter;
			inputField.value = text;
			inputField.setAttribute("onkeydown", "handleKeyPress(this)");
			inputField.onkeydown = handleKeyPress;
			tableData.appendChild(inputField);
			counter++;
		}
		inputField = inputField.cloneNode(false);
		inputField.name = "f " + i;
		tableData = tableData.cloneNode(false);
		tableData.appendChild(inputField);
		var deleteControl = createDeleteControl(formId, i);
		tableData.appendChild(deleteControl);
		tableRow.appendChild(tableData);
		tableBody.appendChild(tableRow);
	}

	table.appendChild(tableBody);
	parent.appendChild(table);

	if (rows)
	{
		lastRowIndexField.value = rows.length-1;
	}
	else
	{
		lastRowIndexField.value = -1;
		handleNewRow(formId);
	}
}

function handleKeyPress(event)
{
	var target;
	if (event)
	{
		target = event.target;
	}
	else
	{
		target = this;
		if (window.event)
		{
			event = window.event;
		}
	}
	if (!event)
	{
		idctrace("handleKeyPress() unable to find event object");
		return;
	}
	if (event.keyCode != 9) // tab
	{
		return;
	}
	var id = target.id;
	var index = id.indexOf(".");
	var formId = id.substring(0, index);
	id = id.substring(index+1);
	index = id.indexOf(".");
	var row = id.substring(0, index);
	id = id.substring(index+1);
	index = id.indexOf("_");
	var column = id.substring(0, index);
	column++;

	var form = document.getElementById(formId);
	var viewName = form.viewName.value;
	var view = getViewDefinition(viewName);
	var fieldList = form.clientViewColumns.value.split(",");
	if (column >= fieldList.length)
	{
		column = 0;
		row++;
	}
	var flagsField = getField("f " + row, form);
	var flags = "";
	if (flagsField)
	{
		flags = flagsField.value;
	}
	var internalColumn = view.schInternalColumn;
	if (fieldList[column] == internalColumn && flags.indexOf("new") < 0)
	{
		column++;
		if (column >= fieldList.length)
		{
			column = 0;
			row++;
		}
	}

	var lastRowIndex = parseInt(form.lastRowIndex.value);
	if (row > lastRowIndex)
	{
		window.setTimeout(
			"handleNewRow('" + form.id + "')");
	}
	else
	{
		id = formId + "." + row + "." + column + "_t";
		window.setTimeout("handleElementClick(null, '" + id + "')");
	}
}

function handleElementClick(event, id)
{
	var target;
	if (event)
	{
		target = event.target;
	}
	else
	{
		if (id)
		{
			target = document.getElementById(id);
		}
		else
		{
			target = this;
		}
	}
	if (!id)
	{
		id = target.id;
	}
	var index = id.indexOf("_");
	if (index > 0)
	{
		id = id.substring(0, index);
	}
	var targetId;
	var length = id.length;
	var selectedFieldField = null;
	index = id.indexOf(".");
	var prefix = "";
	if (index > 0)
	{
		prefix = id.substring(0, index);
	}
	selectedFieldField = document.getElementById(prefix + "_selected");
	if (selectedFieldField && selectedFieldField.value.length > 0)
	{
		var tmpId = selectedFieldField.value;
		var selectedField = document.getElementById(tmpId + "_e");
		selectedField.style.display = "none";
		if (!selectedField.value)
		{
			selectedField.parentNode.style.background = "gray";
		}
		else
		{
			selectedField.parentNode.style.background = "";
		}
		var newValue = selectedField.value;
		tmpId = tmpId + "_t";
		selectedField = document.getElementById(tmpId);
		selectedField.style.display = "inline";
		var oldText = selectedField.childNodes.item(0);
		var newText = document.createTextNode(newValue);
		selectedField.replaceChild(newText, oldText);

	}
	targetId = id + "_t";
	target = document.getElementById(targetId);
	target.style.display = "none";
	targetId = id + "_e";
	target = document.getElementById(targetId);
	if (target)
	{
		target.style.display = "inline";

		if (selectedFieldField)
		{
			selectedFieldField.value = id;
		}
		if (target.focus)
		{
			target.focus();
		}
	}
}

function handleNewRow(formId)
{
	var form = document.getElementById(formId);
	var lastRowIndexField = getField("lastRowIndex", form);
	var tableBody = document.getElementById(formId + "_editBody");
	var index = parseInt(lastRowIndexField.value) + 1;
	lastRowIndexField.value = index;
	
	var tableRow = document.createElement("tr");
	var viewName = form.viewName.value;
	var relationName = form.schRelationName.value;
	var view = getViewDefinition(viewName);
	var viewColumns = view.viewColumns;
	var tableData = null;
	var firstTableData = null;

	var myTableColumn = null;
	if (relationName)
	{
		myTableColumn = getMyTableColumn(viewName, relationName);
	}

	var counter = 0;
	for (var i = 0; i < viewColumns.length; i++)
	{
		var columnName = viewColumns[i];
		if (skipColumnForEdit(columnName, view, myTableColumn))
		{
			continue;
		}
		var textNode = document.createTextNode("");
		var spanElement = document.createElement("span");
		var dataId = formId + "." + index + "." + counter;
		spanElement.id = dataId + "_t";
		spanElement.appendChild(textNode);
		tableData = document.createElement("td");
		if (firstTableData == null)
		{
			firstTableData = spanElement;
		}
		tableData.id = dataId;
		tableData.style.height = "2em";
		tableData.appendChild(spanElement);
		tableData.onclick = handleElementClick;
		tableData.style.background = "gray";
		tableRow.appendChild(tableData);

		var inputField = document.createElement("input");
		inputField.id = dataId + "_e";
		inputField.name = "d " + index + " " + counter;
		inputField.value = "";
		inputField.style.display = "none";
		inputField.setAttribute("onkeydown", "handleKeyPress(this)");
		inputField.onkeydown = handleKeyPress;
		tableData.appendChild(inputField);
		counter++;
	}
	inputField = inputField.cloneNode(false);
	inputField.name = "f " + index;
	inputField.value = "new";
	tableData = tableData.cloneNode(false);
	tableData.appendChild(inputField);
	var deleteControl = createDeleteControl(formId, index);
	tableData.appendChild(deleteControl);
	tableData.style.background = "";
	tableRow.appendChild(tableData);
	tableBody.appendChild(tableRow);
	var event = new Array();
	event.target = firstTableData;
	handleElementClick(event);
}

function handleDelete(index, formId)
{
	var flagFieldName = "f " + index;
	var form = document.getElementById(formId);
	var flagField = getField(flagFieldName, form);
	var sourceAnchor = document.getElementById(formId + "_delete_" + index);
	var text = sourceAnchor.childNodes.item(0);
	var newText;
	if (text.data == lc("wwDelete"))
	{
		flagField.value = flagField.value + ":delete";
		newText = document.createTextNode(lc("wwUndelete"));
	}
	else
	{
		newText = lc("wwDelete");
		if (flagField.value.indexOf("new") >= 0)
		{
			flagField.value = "new";
		}
		else
		{
			flagField.value = "";
		}
		newText = document.createTextNode(lc("wwDelete"));
	}
	sourceAnchor.replaceChild(newText, text);
}

function skipColumnForEdit(columnName, viewDef, parentColumn)
{
	if (columnName == viewDef.tableRowCreateTimestamp ||
		columnName == viewDef.tableRowModifyTimestamp ||
		columnName == parentColumn ||
		columnName == "schSourceID")
	{
		return 1;
	}
	return 0;
}

function createDeleteControl(formId, index)
{
	var deleteControl = document.createElement("a");
	deleteControl.id = formId + "_delete_" + index;
	deleteControl.href = "javascript:handleDelete(" +
		"'" + index + "', '" + formId + "')";
	deleteControl.appendChild(document.createTextNode(lc("wwDelete")));
	return deleteControl;
}

function getOtherTableColumn(viewName, relationName)
{
	var view = getViewDefinition(viewName);
	var relation = getRelationshipDefinition(relationName);
	var myTable = view.tableName;
	if (relation.table2Table == myTable)
	{
		return relation.table1Column;
	}
	else
	{
		return relation.table2Column;
	}
}

function getMyTableColumn(viewName, relationName)
{
	var view = getViewDefinition(viewName);
	var relation = getRelationshipDefinition(relationName);
	var myTable = view.tableName;
	if (relation.table2Table == myTable)
	{
		return relation.table2Column;
	}
	else
	{
		return relation.table1Column;
	}
}

function getNewId(prefix)
{
	var id = g_schemaDefinition.idCounter++;
	if (prefix)
	{
		return prefix + " " + id;
	}
	else
	{
		return id;
	}
}


function isSchemaStable()
{
	var pendingFields = g_schemaDefinition.pendingFields;
	var viewCallbacks = g_schemaDefinition.viewCallbacks;
	var globalCallbacks = g_schemaDefinition.globalCallbacks;

	var pendingField;
	for (pendingField in pendingFields)
	{
		var value = pendingFields[pendingField];
		if (typeof value == "string" && value != null)
		{
			idctrace("isSchemaStable() is false because field '" +
				pendingField + "' is not ready");
			return 0;
		}
	}
	/* Checking for pending callbacks only works on well structured data. 
	
	var viewName;
	for (viewName in viewCallbacks)
	{
		var callbacks = viewCallbacks[viewName];
		if (typeof callbacks == "object" && callbacks.length > 0)
		{
			idctrace("isSchemaStable() is false because view '" +
				viewName + "' is not ready");
			return 0;
		}
	}
	*/

	if (globalCallbacks.length > 0)
	{
		idctrace("isSchemaStable is false because globalCallbacks still has " + 
			globalCallbacks.length + " entries");
		return 0;
	}
	idctrace("isSchemaStable is true");
	return 1;
}


function determineRestrictedList(viewData, profileDef, rows)
{
	var restrictedRows = new Array();
	var matchedRows = new Array(); 
	var isStrict = profileDef.type == "strict";
	
	var profileRows = profileDef.rows;
	var count = 0;
	for (var i = 0; i < profileRows.length; i++)
	{   
		var value = schemaTrim(profileRows[i]);
		var re;
		if (value.length == 0)
		{
			continue;
		}
		if (!isStrict)
		{
			re = new RegExp(value);
		}

		for (var j = 0; j < rows.length; j++)
		{
			var isMatched = matchedRows[j];
			if (typeof isMatched == "undefined")
			{
				var row = rows[j];
				var val = row[viewData.schInternalColumn];
				isMatched = true;
				if (isStrict)
				{
					isMatched = (val == value);
				}
				else 
				{
					isMatched = (val.match(re));
				}
				
				if (isMatched)
				{
					restrictedRows[count] = row;
					matchedRows[j] = val;
					count++;
					if (isStrict)
					{
						break;
					}
				}
			}	
		}
	}		
	return restrictedRows;
}


if (!g_schemaDefinition.views)
{
	g_schemaDefinition.views = new Array();
}
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "StorageRuleView", "viewName");
    p.schInternalColumn = "StorageRule";
    p.schLabelColumn = "Display";
    	p.schLocalizeWhenDisplayed = 1;
p.tableName = "StorageRules";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "StorageRule";
p.viewColumns[1] = "StorageType";
p.viewColumns[2] = "IsWeblessStore";
p.viewColumns[3] = "RenditionsOnFileSystem";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "CustomBooleanList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "DCOMM_StatusList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "AccountsView", "viewName");
    p.schInternalColumn = "dDocAccount";
    p.schLabelColumn = "dDocAccount";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDocAccount\"]";
l["Espa\u00f1ol"] = "row[\"dDocAccount\"]";
l["Fran\u00e7ais"] = "row[\"dDocAccount\"]";
l["English-UK"] = "row[\"dDocAccount\"]";
p.tableName = "DocumentAccounts";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dDocAccount";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ApplicationFields", "viewName");
    p.schInternalColumn = "schFieldName";
    p.schLabelColumn = "schFieldName";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"schFieldName\"]";
l["Espa\u00f1ol"] = "row[\"schFieldName\"]";
l["Fran\u00e7ais"] = "row[\"schFieldName\"]";
l["English-UK"] = "row[\"schFieldName\"]";
p.tableName = "SchemaFieldConfig";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "schFieldName";
p.viewColumns[1] = "schFieldType";
p.viewColumns[2] = "schFieldCaption";
p.viewColumns[3] = "dIsRequired";
p.viewColumns[4] = "dIsOptionList";
p.viewColumns[5] = "dOptionListType";
p.viewColumns[6] = "dOptionListKey";
p.viewColumns[7] = "schOrder";
p.viewColumns[8] = "schFieldTarget";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_OFFICES_VIEW", "viewName");
    p.schInternalColumn = "dDocAccount";
    p.schLabelColumn = "dDocAccount";
    p.schIsClientSorted = 1;
	p.schClientSortField="dDocAccount";
	p.schClientSortOrder="ascending";
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDocAccount\"]";
l["English-UK"] = "row[\"dDocAccount\"]";
l["Espa\u00f1ol"] = "row[\"dDocAccount\"]";
l["Fran\u00e7ais"] = "row[\"dDocAccount\"]";
l["Chinese-Simplified"] = "row[\"dDocAccount\"]";
p.tableName = "ILO_OFFICES";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dDocAccount";
p.viewColumns[1] = "WEBSITE_ID";
p.viewColumns[2] = "CLASSIFICATION_ID";
p.viewColumns[3] = "OWNS_WEBSITE_ID";
p.viewColumns[4] = "DESC_FR";
p.viewColumns[5] = "URL_FR";
p.viewColumns[6] = "DESC_EN";
p.viewColumns[7] = "URL_EN";
p.viewColumns[8] = "DESC_ZH";
p.viewColumns[9] = "URL_ZH";
p.viewColumns[10] = "DESC_ES";
p.viewColumns[11] = "URL_ES";
p.viewColumns[12] = "DESC_IT";
p.viewColumns[13] = "URL_IT";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "Folders", "viewName");
    p.schInternalColumn = "dCollectionID";
    p.schLabelColumn = "dCollectionName";
    p.schIsClientSorted = 1;
	p.schClientSortField="dCollectionName";
	p.schClientSortOrder="ascending";
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dCollectionName\"]";
l["English-UK"] = "row[\"dCollectionName\"]";
l["Espa\u00f1ol"] = "row[\"dCollectionName\"]";
l["Fran\u00e7ais"] = "row[\"dCollectionName\"]";
l["Chinese-Simplified"] = "row[\"dCollectionName\"]";
p.tableName = "Collections";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dCollectionID";
p.viewColumns[1] = "dParentCollectionID";
p.viewColumns[2] = "dCollectionName";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "HiddenList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "IdentifierList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "approvedForReplicationList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_FACETS_CLASSIFICATION_VIEW", "viewName");
    p.schInternalColumn = "XCLASSIFICATIONFACETS";
    p.schLabelColumn = "XCLASSIFICATIONFACETS";
        var l = p.schClientLabelExpression = new Array();
    l["Chinese-Simplified"] = "row[\"XCLASSIFICATIONFACETS\"]";
l["English-US"] = "row[\"XCLASSIFICATIONFACETS\"]";
l["English-UK"] = "row[\"XCLASSIFICATIONFACETS\"]";
l["Espa\u00f1ol"] = "row[\"XCLASSIFICATIONFACETS\"]";
l["Fran\u00e7ais"] = "row[\"XCLASSIFICATIONFACETS\"]";
p.tableName = "ILO_FACETS_CLASSIFICATION";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "XCLASSIFICATIONFACETS";
p.viewColumns[1] = "CLASSIFICATIONTYPE";
p.viewColumns[2] = "dDocName";
p.viewColumns[3] = "FROMTABLE";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "TemplateTypeList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["Chinese-Simplified"] = "row[\"dOption\"]";
l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "InlineDisplayList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "view://Folders.TrueFalseView", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "TrueFalseView", "viewName");
    p.schInternalColumn = "ynValue";
    p.schLabelColumn = "ynTrueFalseLabel";
    	p.schLocalizeWhenDisplayed = 1;
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ynTrueFalseLabel\"]";
l["English-UK"] = "row[\"ynTrueFalseLabel\"]";
l["Espa\u00f1ol"] = "row[\"ynTrueFalseLabel\"]";
l["Fran\u00e7ais"] = "row[\"ynTrueFalseLabel\"]";
p.tableName = "YesNoTable";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ynValue";
p.viewColumns[1] = "ynYesNoLabel";
p.viewColumns[2] = "ynTrueFalseLabel";
p.viewColumns[3] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_REGIONS_VIEW", "viewName");
    p.schInternalColumn = "REGION_ID";
    p.schLabelColumn = "REGION_NAME_EN";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"REGION_NAME_EN\"]";
l["English-UK"] = "row[\"REGION_NAME_EN\"]";
l["Espa\u00f1ol"] = "row[\"REGION_NAME_EN\"]";
l["Fran\u00e7ais"] = "row[\"REGION_NAME_EN\"]";
l["Chinese-Simplified"] = "row[\"REGION_NAME_EN\"]";
p.tableName = "ILO_REGIONS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "REGION_ID";
p.viewColumns[1] = "REGION_NAME_EN";
p.viewColumns[2] = "REGION_NAME_FR";
p.viewColumns[3] = "REGION_NAME_ES";
p.viewColumns[4] = "SORT_ORDER";
p.viewColumns[5] = "REGION_NAME_ZH";
p.viewColumns[6] = "REGION_NAME_RU";
p.viewColumns[7] = "REGION_NAME_AR";
p.viewColumns[8] = "REGION_NAME_IT";
p.viewColumns[9] = "REGION_NAME_DE";
p.viewColumns[10] = "REGION_NAME_NL";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ForceFolderSecurityList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "DocumentAccounts", "viewName");
    p.schInternalColumn = "dDocAccount";
    p.schLabelColumn = "dDocAccount";
    p.schIsClientSorted = 1;
	p.schClientSortField="localizedDisplay";
	p.schClientSortOrder="ascending";
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDocAccount\"]";
l["English-UK"] = "row[\"dDocAccount\"]";
l["Espa\u00f1ol"] = "row[\"dDocAccount\"]";
l["Fran\u00e7ais"] = "row[\"dDocAccount\"]";
p.tableName = "DocumentAccounts";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dDocAccount";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "docFormats", "viewName");
    p.schInternalColumn = "dFormat";
    p.schLabelColumn = "dFormat";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dFormat\"]";
l["English-UK"] = "row[\"dFormat\"]";
l["Espa\u00f1ol"] = "row[\"dFormat\"]";
l["Fran\u00e7ais"] = "row[\"dFormat\"]";
p.tableName = "DocFormats";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dFormat";
p.viewColumns[1] = "dConversion";
p.viewColumns[2] = "dDescription";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ByPassReviewList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "InhibitUpdateList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "docAuthors", "viewName");
    p.schInternalColumn = "dName";
    p.schLabelColumn = "dName";
    p.schIsClientSorted = 1;
	p.schClientSortField="localizedDisplay";
	p.schClientSortOrder="ascending";
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dName\"]";
l["English-UK"] = "row[\"dName\"]";
l["Espa\u00f1ol"] = "row[\"dName\"]";
l["Fran\u00e7ais"] = "row[\"dName\"]";
p.tableName = "Users";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dName";
p.viewColumns[1] = "dFullName";
p.viewColumns[2] = "dEmail";
p.viewColumns[3] = "dUserType";
p.viewColumns[4] = "dUserAuthType";
p.viewColumns[5] = "dUserOrgPath";
p.viewColumns[6] = "dUserSourceOrgPath";
p.viewColumns[7] = "dUserSourceFlags";
p.viewColumns[8] = "dUserArriveDate";
p.viewColumns[9] = "dUserChangeDate";
p.viewColumns[10] = "dUserLocale";
p.viewColumns[11] = "dUserTimeZone";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_STATUS_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_STATUS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_FR";
p.viewColumns[2] = "DESC_EN";
p.viewColumns[3] = "DESC_ZH";
p.viewColumns[4] = "DESC_ES";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "Users_UserLocaleList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "";
p.pkIndex = new Array();

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_DOCUMENT_LANGUAGES_VIEW", "viewName");
    p.schInternalColumn = "ISOCODE";
    p.schLabelColumn = "DESCR_LOCAL";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"DESCR_LOCAL\"]";
l["English-UK"] = "row[\"DESCR_LOCAL\"]";
l["Espa\u00f1ol"] = "row[\"DESCR_LOCAL\"]";
l["Fran\u00e7ais"] = "row[\"DESCR_LOCAL\"]";
p.tableName = "ILO_DOCUMENT_LANGUAGES";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "DESCR_EN";
p.viewColumns[1] = "DESCR_ES";
p.viewColumns[2] = "DESCR_FR";
p.viewColumns[3] = "ISOCODE";
p.viewColumns[4] = "DESCR_LOCAL";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_CLASSIFICATION_TREE_VIEW", "viewName");
    p.schInternalColumn = "CLASSIFICATION_ID";
    p.schLabelColumn = "CLASSIFICATION_ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"CLASSIFICATION_ID\"]";
l["English-UK"] = "row[\"CLASSIFICATION_ID\"]";
l["Espa\u00f1ol"] = "row[\"CLASSIFICATION_ID\"]";
l["Fran\u00e7ais"] = "row[\"CLASSIFICATION_ID\"]";
p.tableName = "ILO_CLASSIFICATION_TREE";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "CLASSIFICATION_ID";
p.viewColumns[1] = "PARENT_NODE_ID";
p.viewColumns[2] = "CHILD_NODE_ID";
p.viewColumns[3] = "POSITION";
p.viewColumns[4] = "NODE_TYPE";
p.viewColumns[5] = "USAGE_START_DATE";
p.viewColumns[6] = "USAGE_END_DATE";
p.viewColumns[7] = "DESC_AR";
p.viewColumns[8] = "DESC_DE";
p.viewColumns[9] = "DESC_EN";
p.viewColumns[10] = "DESC_ES";
p.viewColumns[11] = "DESC_FR";
p.viewColumns[12] = "DESC_RU";
p.viewColumns[13] = "DESC_ZH";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "Users_UserTypeList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "";
p.pkIndex = new Array();

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_AUDIENCE_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_AUDIENCE";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_FR";
p.viewColumns[2] = "DESC_EN";
p.viewColumns[3] = "DESC_ES";
p.viewColumns[4] = "DESC_ZH";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_WEBSITE_OBJECT_TYPE_VIEW", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "ILO_WEBSITE_OBJECT_TYPE";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dOption";
p.viewColumns[1] = "dOrder";
p.viewColumns[2] = "dSecurityGroup";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_FACETS_CLASS_LABELS_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "DESC_EN";
        var l = p.schClientLabelExpression = new Array();
    l["Chinese-Simplified"] = "row[\"DESC_EN\"]";
l["English-US"] = "row[\"DESC_EN\"]";
l["English-UK"] = "row[\"DESC_EN\"]";
l["Espa\u00f1ol"] = "row[\"DESC_EN\"]";
l["Fran\u00e7ais"] = "row[\"DESC_EN\"]";
p.tableName = "ILO_FACETS_CLASS_LABELS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_EN";
p.viewColumns[2] = "DESC_ES";
p.viewColumns[3] = "DESC_FR";
p.viewColumns[4] = "DESC_ZH";
p.viewColumns[5] = "DESC_AR";
p.viewColumns[6] = "DESC_DE";
p.viewColumns[7] = "DESC_RU";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "docTypes", "viewName");
    p.schInternalColumn = "dDocType";
    p.schLabelColumn = "dDocType";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDocType\"]";
l["English-UK"] = "row[\"dDocType\"]";
l["Espa\u00f1ol"] = "row[\"dDocType\"]";
l["Fran\u00e7ais"] = "row[\"dDocType\"]";
p.tableName = "DocTypes";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dDocType";
p.viewColumns[1] = "dDescription";
p.viewColumns[2] = "dGif";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "roles", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "";
p.pkIndex = new Array();

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "WebsiteObjectTypeList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "UniveralSearchLanguages", "viewName");
    p.schInternalColumn = "uslLanguageID";
    p.schLabelColumn = "uslLanguageName";
    p.schIsClientSorted = 1;
	p.schClientSortField="localizedDisplay";
	p.schClientSortOrder="ascending";
	p.schLocalizeWhenDisplayed = 1;
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"uslLanguageName\"]";
l["Espa\u00f1ol"] = "row[\"uslLanguageName\"]";
l["Fran\u00e7ais"] = "row[\"uslLanguageName\"]";
l["English-UK"] = "row[\"uslLanguageName\"]";
p.tableName = "UniveralSearchLanguages";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "uslLanguageID";
p.viewColumns[1] = "uslLanguageName";
p.viewColumns[2] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "UserViews", "viewName");
    p.schInternalColumn = "schViewName";
    p.schLabelColumn = "schViewDescription";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"schViewDescription\"]";
l["Espa\u00f1ol"] = "row[\"schViewDescription\"]";
l["Fran\u00e7ais"] = "row[\"schViewDescription\"]";
l["English-UK"] = "row[\"schViewDescription\"]";
p.tableName = "SchemaViewConfig";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "schViewName";
p.viewColumns[1] = "schCanonicalName";
p.viewColumns[2] = "schViewLastLoaded";
p.viewColumns[3] = "schViewIsUpToDate";
p.viewColumns[4] = "schViewDescription";
p.viewColumns[5] = "schTableName";
p.viewColumns[6] = "schInternalColumn";
p.viewColumns[7] = "schIsSystemObject";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "FieldTypes", "viewName");
    p.schInternalColumn = "schInternal";
    p.schLabelColumn = "schDisplay";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"schDisplay\"]";
l["Espa\u00f1ol"] = "row[\"schDisplay\"]";
l["Fran\u00e7ais"] = "row[\"schDisplay\"]";
l["English-UK"] = "row[\"schDisplay\"]";
p.tableName = "";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "schInternal";
p.viewColumns[1] = "schDisplay";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "TraceSections", "viewName");
    p.schInternalColumn = "itsSections";
    p.schLabelColumn = "itsSections";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"itsSections\"]";
l["Espa\u00f1ol"] = "row[\"itsSections\"]";
l["Fran\u00e7ais"] = "row[\"itsSections\"]";
l["English-UK"] = "row[\"itsSections\"]";
p.tableName = "NodeTracingSections";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "itsSections";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "SecurityGroups", "viewName");
    p.schInternalColumn = "dGroupName";
    p.schLabelColumn = "dDescription";
    p.schIsClientSorted = 1;
	p.schClientSortField="localizedDisplay";
	p.schClientSortOrder="ascending";
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDescription\"]";
l["Espa\u00f1ol"] = "row[\"dDescription\"]";
l["Fran\u00e7ais"] = "row[\"dDescription\"]";
l["English-UK"] = "row[\"dDescription\"]";
p.tableName = "SecurityGroups";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dGroupName";
p.viewColumns[1] = "dDescription";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_RELATIONS_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_RELATIONS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "PARENT";
p.viewColumns[2] = "CHILD";
p.viewColumns[3] = "schCreateTimestamp";
p.viewColumns[4] = "schModifyTimestamp";
p.viewColumns[5] = "schSourceID";
p.viewColumns[6] = "POSITION";
p.viewColumns[7] = "CHILD_ACCOUNT";
p.viewColumns[8] = "PARENT_SECURITY_GROUP";
p.viewColumns[9] = "PARENT_ACCOUNT";
p.viewColumns[10] = "CHILD_SECURITY_GROUP";
p.viewColumns[11] = "USE_ALTERNATIVE_TITLE";
p.tableRowCreateTimestamp = "schCreateTimestamp";
p.tableRowModifyTimestamp = "schModifyTimestamp";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "Users_UserDepartmentList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "";
p.pkIndex = new Array();

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_FORMAT_MEDIUM_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
l["Chinese-Simplified"] = "row[\"ID\"]";
p.tableName = "ILO_FORMAT_MEDIUM";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_FR";
p.viewColumns[2] = "DESC_EN";
p.viewColumns[3] = "DESC_ZH";
p.viewColumns[4] = "DESC_ES";
p.viewColumns[5] = "DESC_IT";
p.viewColumns[6] = "DESC_NL";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ReadOnlyList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_SCOPE_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_SCOPE";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_FR";
p.viewColumns[2] = "DESC_EN";
p.viewColumns[3] = "DESC_ZH";
p.viewColumns[4] = "DESC_ES";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "PublishList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_LANGUAGEVERSIONS_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_LANGUAGEVERSIONS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "PARENT";
p.viewColumns[2] = "CHILD";
p.viewColumns[3] = "schCreateTimestamp";
p.viewColumns[4] = "schSourceID";
p.viewColumns[5] = "schModifyTimestamp";
p.viewColumns[6] = "CHILD_ACCOUNT";
p.viewColumns[7] = "PARENT_SECURITY_GROUP";
p.viewColumns[8] = "PARENT_ACCOUNT";
p.viewColumns[9] = "CHILD_SECURITY_GROUP";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "LmLayouts", "viewName");
    p.schInternalColumn = "id";
    p.schLabelColumn = "label";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"label\"]";
l["English-UK"] = "row[\"label\"]";
l["Espa\u00f1ol"] = "row[\"label\"]";
l["Fran\u00e7ais"] = "row[\"label\"]";
p.tableName = "LmLayouts";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "id";
p.viewColumns[1] = "label";
p.viewColumns[2] = "enabled";
p.viewColumns[3] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "Folders.TrueFalseView", "viewName");
    p.schInternalColumn = "ynValue";
    p.schLabelColumn = "ynTrueFalseLabel";
    	p.schLocalizeWhenDisplayed = 1;
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ynTrueFalseLabel\"]";
l["English-UK"] = "row[\"ynTrueFalseLabel\"]";
l["Espa\u00f1ol"] = "row[\"ynTrueFalseLabel\"]";
l["Fran\u00e7ais"] = "row[\"ynTrueFalseLabel\"]";
p.tableName = "Folders.TrueFalse";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ynValue";
p.viewColumns[1] = "ynYesNoLabel";
p.viewColumns[2] = "ynTrueFalseLabel";
p.viewColumns[3] = "idcComponentName";
p.publishViewData = 0;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "YesNoView", "viewName");
    p.schInternalColumn = "ynValue";
    p.schLabelColumn = "ynYesNoLabel";
    	p.schLocalizeWhenDisplayed = 1;
    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ynYesNoLabel\"]";
l["English-UK"] = "row[\"ynYesNoLabel\"]";
l["Espa\u00f1ol"] = "row[\"ynYesNoLabel\"]";
l["Fran\u00e7ais"] = "row[\"ynYesNoLabel\"]";
p.tableName = "YesNoTable";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ynValue";
p.viewColumns[1] = "ynYesNoLabel";
p.viewColumns[2] = "ynTrueFalseLabel";
p.viewColumns[3] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "MigrationStatusList", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_COUNTRIESVIEW", "viewName");
    p.schInternalColumn = "COUNTRY_ISO_3CHAR";
    p.schLabelColumn = "COUNTRY_NAME_EN";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"COUNTRY_NAME_EN\"]";
l["Espa\u00f1ol"] = "row[\"COUNTRY_NAME_EN\"]";
l["Fran\u00e7ais"] = "row[\"COUNTRY_NAME_EN\"]";
l["English-UK"] = "row[\"COUNTRY_NAME_EN\"]";
l["Chinese-Simplified"] = "row[\"COUNTRY_NAME_EN\"]";
p.tableName = "ILO_COUNTRIES";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "COUNTRY_ISO2_ID";
p.viewColumns[1] = "COUNTRY_ILO_CODE";
p.viewColumns[2] = "COUNTRY_NAME_FR";
p.viewColumns[3] = "COUNTRY_ISO_NUMERIC";
p.viewColumns[4] = "COUNTRY_ISO_3CHAR";
p.viewColumns[5] = "COUNTRY_NAME_EN";
p.viewColumns[6] = "COUNTRY_NAME_ES";
p.viewColumns[7] = "INCOME_GROUP_ID";
p.viewColumns[8] = "REGION_ID";
p.viewColumns[9] = "COUNTRY_NAME_ZH";
p.viewColumns[10] = "COUNTRY_NAME_DE";
p.viewColumns[11] = "COUNTRY_NAME_RU";
p.viewColumns[12] = "COUNTRY_NAME_AR";
p.viewColumns[13] = "COUNTRY_NAME_IT";
p.viewColumns[14] = "COUNTRY_NAME_NL";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "OptionListTypes", "viewName");
    p.schInternalColumn = "schInternal";
    p.schLabelColumn = "schDisplay";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"schDisplay\"]";
l["Espa\u00f1ol"] = "row[\"schDisplay\"]";
l["Fran\u00e7ais"] = "row[\"schDisplay\"]";
l["English-UK"] = "row[\"schDisplay\"]";
l["Chinese-Simplified"] = "row[\"schDisplay\"]";
p.tableName = "";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "schInternal";
p.viewColumns[1] = "schDisplay";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_SUBDOCTYPES_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_SUBDOCTYPES";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "dDocType";
p.viewColumns[2] = "KEYDESCRIPTION";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "EnabledLmLayouts", "viewName");
    p.schInternalColumn = "id";
    p.schLabelColumn = "label";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"label\"]";
l["English-UK"] = "row[\"label\"]";
l["Espa\u00f1ol"] = "row[\"label\"]";
l["Fran\u00e7ais"] = "row[\"label\"]";
p.tableName = "LmLayouts";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "id";
p.viewColumns[1] = "label";
p.viewColumns[2] = "enabled";
p.viewColumns[3] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_CLASSIFICATION_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_CLASSIFICATION";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_EN";
p.viewColumns[2] = "DESC_ES";
p.viewColumns[3] = "DESC_FR";
p.viewColumns[4] = "MULTIPLE_SELECTION";
p.viewColumns[5] = "DESC_ZH";
p.viewColumns[6] = "DESC_AR";
p.viewColumns[7] = "DESC_DE";
p.viewColumns[8] = "DESC_RU";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_LANG_RESOURCES_VIEW", "viewName");
    p.schInternalColumn = "KEY";
    p.schLabelColumn = "LABEL_EN";
        var l = p.schClientLabelExpression = new Array();
    l["Chinese-Simplified"] = "row[\"LABEL_EN\"]";
l["English-US"] = "row[\"LABEL_EN\"]";
l["English-UK"] = "row[\"LABEL_EN\"]";
l["Espa\u00f1ol"] = "row[\"LABEL_EN\"]";
l["Fran\u00e7ais"] = "row[\"LABEL_EN\"]";
p.tableName = "ILO_LANG_RESOURCES";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "KEY";
p.viewColumns[1] = "LABEL_EN";
p.viewColumns[2] = "LABEL_ES";
p.viewColumns[3] = "LABEL_FR";
p.viewColumns[4] = "LABEL_IT";
p.viewColumns[5] = "LABEL_ZH";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "LmLayoutSkinPairs", "viewName");
    p.schInternalColumn = "skin";
    p.schLabelColumn = "skin";
        var l = p.schClientLabelExpression = new Array();
    l["Chinese-Simplified"] = "row[\"skin\"]";
l["English-US"] = "row[\"skin\"]";
l["English-UK"] = "row[\"skin\"]";
l["Espa\u00f1ol"] = "row[\"skin\"]";
l["Fran\u00e7ais"] = "row[\"skin\"]";
p.tableName = "LmLayoutSkinPairs";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "layout";
p.viewColumns[1] = "skin";
p.viewColumns[2] = "skinDir";
p.viewColumns[3] = "enabled";
p.viewColumns[4] = "idcComponentName";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_TAXONOMY_VIEW", "viewName");
    p.schInternalColumn = "TAXONOMY_CODE";
    p.schLabelColumn = "TAXONOMY_NAME_EN";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"TAXONOMY_NAME_EN\"]";
l["English-UK"] = "row[\"TAXONOMY_NAME_EN\"]";
l["Espa\u00f1ol"] = "row[\"TAXONOMY_NAME_EN\"]";
l["Fran\u00e7ais"] = "row[\"TAXONOMY_NAME_EN\"]";
l["Chinese-Simplified"] = "row[\"TAXONOMY_NAME_EN\"]";
p.tableName = "ILO_TAXONOMY";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "TAXONOMY_ID";
p.viewColumns[1] = "TAXONOMY_CODE";
p.viewColumns[2] = "TAXONOMY_NAME_EN";
p.viewColumns[3] = "TAXONOMY_NAME_FR";
p.viewColumns[4] = "TAXONOMY_NAME_ES";
p.viewColumns[5] = "USAGE_START_DATE";
p.viewColumns[6] = "USAGE_END_DATE";
p.viewColumns[7] = "TAXONOMY_NAME_DE";
p.viewColumns[8] = "TAXONOMY_NAME_ZH";
p.viewColumns[9] = "TAXONOMY_NAME_RU";
p.viewColumns[10] = "TAXONOMY_NAME_AR";
p.viewColumns[11] = "TAXONOMY_NAME_IT";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "view://ILO_WEBSITE_OBJECT_TYPE_VIEW", "viewName");
    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
l["English-UK"] = "row[\"dOption\"]";
l["Espa\u00f1ol"] = "row[\"dOption\"]";
l["Fran\u00e7ais"] = "row[\"dOption\"]";
l["Chinese-Simplified"] = "row[\"dOption\"]";
p.tableName = "OptionsList";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "dKey";
p.viewColumns[1] = "dOption";
p.viewColumns[2] = "dOrder";

p.publishViewData = 1;
	var p = getOrCreateSchemaArray(g_schemaDefinition.views, "ILO_COLLECTION_OPTIONS_VIEW", "viewName");
    p.schInternalColumn = "ID";
    p.schLabelColumn = "ID";
        var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"ID\"]";
l["English-UK"] = "row[\"ID\"]";
l["Espa\u00f1ol"] = "row[\"ID\"]";
l["Fran\u00e7ais"] = "row[\"ID\"]";
p.tableName = "ILO_COLLECTION_OPTIONS";
p.pkIndex = new Array();
p.viewColumns = new Array();
p.viewColumns[0] = "ID";
p.viewColumns[1] = "DESC_FR";
p.viewColumns[2] = "DESC_EN";
p.viewColumns[3] = "DESC_ZH";
p.viewColumns[4] = "DESC_ES";

p.publishViewData = 1;
function registerChildField(thisField, childField)
{
	var children = g_schemaDefinition.childFields[thisField];
	if (typeof children == "undefined")
	{
		children = g_schemaDefinition.childFields[thisField] = new Array();
	} 
	children.push(childField);
} 

// Script to create an option list.
function buildOptionList(fieldName, onChangeScript)
{
	var list = document.createElement("select");
	var theSpan = document.getElementById(fieldName);
	theSpan.appendChild(list);
}


if (!g_schemaDefinition.relationships)
{
	g_schemaDefinition.relationships = new Array();
}
var relationDef = getOrCreateSchemaArray(g_schemaDefinition.relationships, "Folders", "relationName");
relationDef.relationName = "Folders";
relationDef.table1Table = "Collections";
relationDef.table1Column = "dCollectionID";
relationDef.table2Table = "Collections";
relationDef.table2Column = "dParentCollectionID";
var relationDef = getOrCreateSchemaArray(g_schemaDefinition.relationships, "LmLayoutToSkin", "relationName");
relationDef.relationName = "LmLayoutToSkin";
relationDef.view1Name = "LmLayouts";
relationDef.table1Column = "id"; 
relationDef.view1Column = "id";
relationDef.view2Name = "LmLayoutSkinPairs";
relationDef.table2Column = "layout"; 
relationDef.view2Column = "layout";
var relationDef = getOrCreateSchemaArray(g_schemaDefinition.relationships, "DocTypesILOSubDocTypes", "relationName");
relationDef.relationName = "DocTypesILOSubDocTypes";
relationDef.table1Table = "DocTypes";
relationDef.table1Column = "dDocType";
relationDef.table2Table = "ILO_SUBDOCTYPES";
relationDef.table2Column = "dDocType";
if (!g_schemaDefinition.fields)
{

	g_schemaDefinition.fields = g_schemaDefinition.fieldSettings = new Array();
	g_schemaDefinition.childFields = new Array();
}

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationIsFormatOf", "fieldName");
fieldDef.fieldName = "xRelationIsFormatOf";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationIsFormatOf";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xClassification", "fieldName");
fieldDef.fieldName = "xClassification";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOClassification";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xWebFlag", "fieldName");
fieldDef.fieldName = "xWebFlag";
fieldDef.type = "Text";
fieldDef.isEnabled = false;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apFsWebFlag";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDescription", "fieldName");
fieldDef.fieldName = "xDescription";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODescription";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xFormat", "fieldName");
fieldDef.fieldName = "xFormat";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOFormat";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xAudience", "fieldName");
fieldDef.fieldName = "xAudience";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOAudience";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_AUDIENCE_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xFormatMedium", "fieldName");
fieldDef.fieldName = "xFormatMedium";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOFormatMedium";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_FORMAT_MEDIUM_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDescriptionHeading", "fieldName");
fieldDef.fieldName = "xDescriptionHeading";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxDescriptionHeading";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xPublisher", "fieldName");
fieldDef.fieldName = "xPublisher";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOPublisher";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDescriptionTableOfContents", "fieldName");
fieldDef.fieldName = "xDescriptionTableOfContents";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODescriptionTableOfContents";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTitleAlternative", "fieldName");
fieldDef.fieldName = "xTitleAlternative";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOTitleAlternative";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationHasPart", "fieldName");
fieldDef.fieldName = "xRelationHasPart";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationHasPart";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCoverageTemporalStartDate", "fieldName");
fieldDef.fieldName = "xCoverageTemporalStartDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCoverageTemporalStartDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xLinkingMarker", "fieldName");
fieldDef.fieldName = "xLinkingMarker";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOLinkingMarker";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xSubjectKeywords", "fieldName");
fieldDef.fieldName = "xSubjectKeywords";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOSubjectKeywords";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xOwner", "fieldName");
fieldDef.fieldName = "xOwner";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOOwner";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_OFFICES_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xPublish", "fieldName");
fieldDef.fieldName = "xPublish";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "Yes";
fieldDef.caption = "apxPublish";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "1";
fieldDef.optionListType = "choice";
fieldDef.viewName = "PublishList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xWebsiteObjectType", "fieldName");
fieldDef.fieldName = "xWebsiteObjectType";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwxWebsiteObjectType";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_WEBSITE_OBJECT_TYPE_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xReadOnly", "fieldName");
fieldDef.fieldName = "xReadOnly";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "FALSE";
fieldDef.caption = "apxReadOnly";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "Folders.TrueFalseView";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTrashDeleter", "fieldName");
fieldDef.fieldName = "xTrashDeleter";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxTrashDeleter";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateIssued", "fieldName");
fieldDef.fieldName = "xDateIssued";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateIssued";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xStatus", "fieldName");
fieldDef.fieldName = "xStatus";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOStatus";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_STATUS_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateValidEndDate", "fieldName");
fieldDef.fieldName = "xDateValidEndDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateValidEndDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xContextNodeID", "fieldName");
fieldDef.fieldName = "xContextNodeID";
fieldDef.type = "Int";
fieldDef.isEnabled = false;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOContextNodeID";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xForceFolderSecurity", "fieldName");
fieldDef.fieldName = "xForceFolderSecurity";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "FALSE";
fieldDef.caption = "apxForceFolderSecurity";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "chunval";
fieldDef.viewName = "Folders.TrueFalseView";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRegionDefinition", "fieldName");
fieldDef.fieldName = "xRegionDefinition";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwxRegionDefinition";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xWebsiteSection", "fieldName");
fieldDef.fieldName = "xWebsiteSection";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwxWebsiteSection";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCustomBoolean", "fieldName");
fieldDef.fieldName = "xCustomBoolean";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxCustomBoolean";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "CustomBooleanList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xMigrationStatus", "fieldName");
fieldDef.fieldName = "xMigrationStatus";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxMigrationStatus";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "chunval";
fieldDef.viewName = "MigrationStatusList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xHidden", "fieldName");
fieldDef.fieldName = "xHidden";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "FALSE";
fieldDef.caption = "apxHidden";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "Folders.TrueFalseView";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDescriptionAbstract", "fieldName");
fieldDef.fieldName = "xDescriptionAbstract";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODescriptionAbstract";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xAvailabilityContact", "fieldName");
fieldDef.fieldName = "xAvailabilityContact";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOAvailabilityContact";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xInlineDisplay", "fieldName");
fieldDef.fieldName = "xInlineDisplay";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "yes";
fieldDef.caption = "apxILOInlineDisplay";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "InlineDisplayList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateAvailableEndDate", "fieldName");
fieldDef.fieldName = "xDateAvailableEndDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateAvailableEndDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTrashDeleteName", "fieldName");
fieldDef.fieldName = "xTrashDeleteName";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxTrashDeleteOldName";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xSubject", "fieldName");
fieldDef.fieldName = "xSubject";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOSubject";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "multi";
fieldDef.viewName = "ILO_TAXONOMY_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTypeSubtype", "fieldName");
fieldDef.fieldName = "xTypeSubtype";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOTypeSubtype";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_SUBDOCTYPES_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";
fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "dDocType";
fieldDef.dependentRelationship = "DocTypesILOSubDocTypes";
fieldDef.addEmptyOption = 0;
registerChildField("dDocType", "xTypeSubtype");
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationHasFormat", "fieldName");
fieldDef.fieldName = "xRelationHasFormat";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationHasFormat";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCollectionID", "fieldName");
fieldDef.fieldName = "xCollectionID";
fieldDef.type = "Int";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxFolder";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRights", "fieldName");
fieldDef.fieldName = "xRights";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORights";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xMigrationOldURL", "fieldName");
fieldDef.fieldName = "xMigrationOldURL";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxMigrationOldURL";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateCreated", "fieldName");
fieldDef.fieldName = "xDateCreated";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateCreated";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCoverageTemporalEndDate", "fieldName");
fieldDef.fieldName = "xCoverageTemporalEndDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCoverageTemporalEndDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xAvailabilityLocation", "fieldName");
fieldDef.fieldName = "xAvailabilityLocation";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOAvailabilityLocation";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateModified", "fieldName");
fieldDef.fieldName = "xDateModified";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateModified";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xStorageRule", "fieldName");
fieldDef.fieldName = "xStorageRule";
fieldDef.type = "Text";
fieldDef.isEnabled = false;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "default";
fieldDef.caption = "apFsStorageRule";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "StorageRuleView";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTemplateType", "fieldName");
fieldDef.fieldName = "xTemplateType";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwCheckinTemplateTemplateType";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "combo";
fieldDef.viewName = "TemplateTypeList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xByPassReview", "fieldName");
fieldDef.fieldName = "xByPassReview";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "No";
fieldDef.caption = "apxByPassReview";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ByPassReviewList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTrashDeleteDate", "fieldName");
fieldDef.fieldName = "xTrashDeleteDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxTrashDeleteDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateAvailableStartDate", "fieldName");
fieldDef.fieldName = "xDateAvailableStartDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateAvailableStartDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xPartitionId", "fieldName");
fieldDef.fieldName = "xPartitionId";
fieldDef.type = "Text";
fieldDef.isEnabled = false;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apFsPartitionId";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationHasVersion", "fieldName");
fieldDef.fieldName = "xRelationHasVersion";
fieldDef.type = "Memo";
fieldDef.isEnabled = false;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationHasVersion";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xContributor", "fieldName");
fieldDef.fieldName = "xContributor";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOContributor";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDateValidStartDate", "fieldName");
fieldDef.fieldName = "xDateValidStartDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILODateValidStartDate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationIsPartOf", "fieldName");
fieldDef.fieldName = "xRelationIsPartOf";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationIsPartOf";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCollection", "fieldName");
fieldDef.fieldName = "xCollection";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCollection";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_COLLECTION_OPTIONS_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xInhibitUpdate", "fieldName");
fieldDef.fieldName = "xInhibitUpdate";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "FALSE";
fieldDef.caption = "apxInibitMetadataUpdate";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "chunval";
fieldDef.viewName = "Folders.TrueFalseView";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xIdentifier", "fieldName");
fieldDef.fieldName = "xIdentifier";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOIdentifier";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCoverageSpatialRegions", "fieldName");
fieldDef.fieldName = "xCoverageSpatialRegions";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCoverageSpatialRegions";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "multi";
fieldDef.viewName = "ILO_REGIONS_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xLocation", "fieldName");
fieldDef.fieldName = "xLocation";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOLocation";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCoverageSpatialCountries", "fieldName");
fieldDef.fieldName = "xCoverageSpatialCountries";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCoverageSpatialCountries";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "multi";
fieldDef.viewName = "ILO_COUNTRIESVIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xComments", "fieldName");
fieldDef.fieldName = "xComments";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwComments";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDCOMM_Status", "fieldName");
fieldDef.fieldName = "xDCOMM_Status";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.defaultValue = "No";
fieldDef.caption = "apxDCOMM_Status";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "DCOMM_StatusList";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRightsAccessRights", "fieldName");
fieldDef.fieldName = "xRightsAccessRights";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORightsAccessRights";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCreator", "fieldName");
fieldDef.fieldName = "xCreator";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOCreator";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xCustomText", "fieldName");
fieldDef.fieldName = "xCustomText";
fieldDef.type = "BigText";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxCustomText";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xLanguage", "fieldName");
fieldDef.fieldName = "xLanguage";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOLanguage";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_DOCUMENT_LANGUAGES_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xDontShowInListsForWebsites", "fieldName");
fieldDef.fieldName = "xDontShowInListsForWebsites";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwxDontShowInListsForWebsites";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xScope", "fieldName");
fieldDef.fieldName = "xScope";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOScope";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";
fieldDef.optionListType = "choice";
fieldDef.viewName = "ILO_SCOPE_VIEW";
fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xTrashDeleteLoc", "fieldName");
fieldDef.fieldName = "xTrashDeleteLoc";
fieldDef.type = "Int";
fieldDef.isEnabled = true;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxTrashDeleteLocation";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xWebsites", "fieldName");
fieldDef.fieldName = "xWebsites";
fieldDef.type = "Memo";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  true
					,
					"DATABASE.FULLTEXT":  true
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "wwxWebsites";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xRelationIsVersionOf", "fieldName");
fieldDef.fieldName = "xRelationIsVersionOf";
fieldDef.type = "Text";
fieldDef.isEnabled = false;
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILORelationIsVersionOf";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "xFormatExtent", "fieldName");
fieldDef.fieldName = "xFormatExtent";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
					
					"DATABASE":  false
					,
					"DATABASE.FULLTEXT":  false
	};

fieldDef.isPlaceholderField = "0";
fieldDef.caption = "apxILOFormatExtent";
fieldDef.allowPreselect = "";
fieldDef.isRequired = "0";

fieldDef.multiselectStorageSeparator = ", ";
fieldDef.multiselectDisplaySeparator = ", ";

var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dDocName", "fieldName");
fieldDef.fieldName = "dDocName";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdDocName";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dDocType", "fieldName");
fieldDef.fieldName = "dDocType";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdDocType";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.viewName = "docTypes"
fieldDef.isZoneSearchField = {
		
		"DATABASE":   true
		,
		"DATABASE.FULLTEXT":   true
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dDocTitle", "fieldName");
fieldDef.fieldName = "dDocTitle";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdDocTitle";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dDocAuthor", "fieldName");
fieldDef.fieldName = "dDocAuthor";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdDocAuthor";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dSecurityGroup", "fieldName");
fieldDef.fieldName = "dSecurityGroup";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdSecurityGroup";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.viewName = "SecurityGroups"
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dDocAccount", "fieldName");
fieldDef.fieldName = "dDocAccount";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdDocAccount";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.viewName = "DocumentAccounts"
fieldDef.isZoneSearchField = {
		
		"DATABASE":   true
		,
		"DATABASE.FULLTEXT":   true
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dRevLabel", "fieldName");
fieldDef.fieldName = "dRevLabel";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdRevLabel";
fieldDef.isRequired = "1";
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dCheckoutUser", "fieldName");
fieldDef.fieldName = "dCheckoutUser";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdCheckoutUser";
fieldDef.isRequired = "1";
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dCreateDate", "fieldName");
fieldDef.fieldName = "dCreateDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdCreateDate";
fieldDef.isRequired = "1";
fieldDef.isSearchable = false;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dInDate", "fieldName");
fieldDef.fieldName = "dInDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdInDate";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dOutDate", "fieldName");
fieldDef.fieldName = "dOutDate";
fieldDef.type = "Date";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdOutDate";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dFormat", "fieldName");
fieldDef.fieldName = "dFormat";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdFormat";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dExtension", "fieldName");
fieldDef.fieldName = "dExtension";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdExtension";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
var fieldDef = getOrCreateSchemaArray(g_schemaDefinition.fieldSettings, "dWebExtension", "fieldName");
fieldDef.fieldName = "dWebExtension";
fieldDef.type = "Text";
fieldDef.isEnabled = true;
fieldDef.caption = "wwdWebExtension";
fieldDef.isRequired = "1";
fieldDef.isSearchable = true;
fieldDef.isZoneSearchField = {
		
		"DATABASE":  false
		,
		"DATABASE.FULLTEXT":  false
		};
if (schemaDefCallback)
{
	schemaDefCallback();
}
else
{
	idctrace("base.js: schemaDefCallback() not defined.");
}

