
// 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
var g_schemaDefinition = new Object();
g_schemaDefinition.views = new Array();
g_schemaDefinition.viewLoaders = new Array();
g_schemaDefinition.viewCallbacks = new Array();
g_schemaDefinition.globalCallbacks = new Array();
g_schemaDefinition.initCallbacks = new Array();
g_schemaDefinition.globalCounter = 0;
g_schemaDefinition.traceExecution = 0;
g_schemaDefinition.optionListSizingFactor = 0.6
g_schemaDefinition.optionListMaxSize = 30
g_schemaDefinition.schemaBaseUrl = "/main/resources/schema/";
g_schemaDefinition.alreadyLoadedViews = new Array();

function idctrace(message)
{
	if (g_schemaDefinition.traceExecution)
	{
		alert(message);
	}
}

// Use "schema" as prefix for function name to avoid function global name collisions.
function schemaStartsWith(str, value)
{
	return (str.indexOf(value) == 0);
}

function schemaTrim(value)
{
	if (typeof value == "string")
	{
		var i = 0;
		if (value.length > 0)
		{
	 		for (i = 0; value.charAt(i) <= " "; i++);
	 		value = value.substring(i,value.length);
	 	}
	 	if (value.length > 0)
	 	{
	 		for (i = value.length-1; value.charAt(i) <= " "; i--);
	 		value = value.substring(0, i + 1);
	 	}
	}
	return value;
}

function convertToBool(value, defaultValue)
{
	if (typeof value == "undefined")
	{
		return defaultValue;
	}

	if (typeof value == "string")
	{
		value = schemaTrim(value.toLowerCase());
		if (value.length == 0)
		{
			return defaultValue;
		}
		if (defaultValue)
		{
			return !(schemaStartsWith(value,"0") || schemaStartsWith(value, "f") 
				|| schemaStartsWith(value, "n"));
		}
		return (schemaStartsWith(value, "1") || schemaStartsWith(value, "t") || 
			schemaStartsWith(value, "y") || schemaStartsWith(value, "-1"));
	}
	
	return value;
}

function updateDependentChoices(editField, fieldName)
{
	if (typeof fieldName == "undefined")
	{
		fieldName = editField.name;
	}
	var childList = g_schemaDefinition.childFields[fieldName];
	if (typeof childList == "undefined")
	{
		idctrace("childList is undefined for field " + fieldName);
		return;
	}
	for (var i = 0; i < childList.length; i++)
	{
		var childName = childList[i];
		var childDef = g_schemaDefinition.fields[childName];
		var parentExpression = childDef.parentKeyExpression;
		if (typeof parentExpression == "undefined")
		{
			parentExpression = "getParentValue(editField, fieldName, childDef)";
		}
		var parentValue = eval(parentExpression);
		var field = getSelectField(childDef.fieldName);
		if (!parentValue || parentValue.length == 0)
		{
			if (field) 
			{
				if (childDef && addEmptyOption(childDef))
				{
					resetSelectField(field, 1, "");
				}
				else
				{
					resetSelectField(field);
				}
				updateDependentChoices(field, childName);
			}
			return;
		}
		var relationshipPath = jsFilename(childDef.dependentRelationship);
		var childValuePath = jsFilename(childDef.viewName)
			+ "/" + relationshipPath + "/" 
			+ jsFilename(parentValue);
		if (g_schemaDefinition.alreadyLoadedViews[childValuePath] == null ||
			typeof g_schemaDefinition.alreadyLoadedViews[childValuePath] == "undefined")
		{
			registerViewCallback(childValuePath, new Array(
				publishViewValues, childDef.viewName, 
				childDef.fieldName, childDef.currentValue,
				childDef.dependentRelationship, parentValue));
			if (field)
			{
				resetSelectField(field, 1, "Loading values..."); 
			}
			loadViewValues(new Array(loadViewValues, childValuePath + ".js"));
		}
		else
		{
			idctrace("republishing based on values already retrieved from " + childValuePath);
			if (field)
			{
				resetSelectField(field, 1, "Loading values..."); 
			}
			publishViewValues(new Array(
				publishViewValues, childDef.viewName, 
				childDef.fieldName, childDef.currentValue,
				childDef.dependentRelationship, parentValue));
		}
	}
}

function getParentValue(editField, fieldName, childDef)
{
    var fieldDef = g_schemaDefinition.fields[fieldName];
	var selectField = getSelectField(fieldName);
    var index = selectField.selectedIndex;
    if (index == -1) return "";
    if (addEmptyOption(fieldDef)) index--;
    if (index < 0) return "";
    var theView = g_schemaDefinition.views[fieldDef.viewName];
	var theField;
    if (!childDef.isDependentList)
    {
		g_schemaDefinition.traceExecution = 1;
        idctrace("not a dependent list");
		return "";
	}
	var relationship = g_schemaDefinition.relationships
		[childDef.dependentRelationship];
	theField = relationship.table1Column;
	var theRows = fieldDef.currentRowSet;
	if (index >= theRows.length)
	{
		idctrace("it's odd for the selected index "
			+ "to be larger than the number of values");
		return "";
	}
    var theRow = theRows[index];
    var theValue = theRow[theField];
    return theValue;
}

function updateDependentChoicesCallback(arg)
{
    var fieldName = arg[1];
    var editField = document.getElementsByName(fieldName).item(0);
    updateDependentChoices(editField, fieldName);
}

function setFieldOption(fieldName, optionName, value)
{
	var fieldDef = g_schemaDefinition.fields[fieldName];
	if (typeof fieldDef == "undefined")
	{
		fieldDef = g_schemaDefinition.fields[fieldName] = new Object();
		fieldDef.fieldName = fieldName;
	}
	eval("fieldDef." + optionName + " = " + value);
}

function getSelectField(fieldName)
{
	var field = document.getElementsByName(fieldName).item(0);
	if (typeof field == "undefined" || field.type != "select-one")
	{
		field = document.getElementsByName(fieldName + ".Options").item(0);
	}
	return field;
}

function getFieldDefinition(fieldName)
{
	var fieldDef = g_schemaDefinition.fields[fieldName];
	if (fieldDef)
	{
		return fieldDef;
	}
	var index = fieldName.indexOf(".Options");
	if (index > 0)
	{
		fieldName = fieldName.substring(0, index);
		fieldDef = getFieldDefinition(fieldName);
		return fieldDef;
	}
}

function resetSelectField(field, setInitialElement, initialElementValue)
{
	
		try
		{
			while (field.length > 0)
			{
				field.remove(0);
			}
		}
		catch (e)
		{
			idctrace("resetSelectField: suppressing IE bug with timing issues on removal of elements from option lists." + e);
		}
		if (setInitialElement)
		{
			if (!initialElementValue) initialElementValue="";
			var element = document.createElement("option");
			element.value = "";
			element.selected = true;
			element.appendChild(document.createTextNode(initialElementValue));
			field.appendChild(element);
		}
	
}

function toHexString(v, padTo)
{
	var hexString = "";
	var zeroCharCode = "0".charCodeAt(0);
	var aCharCode = "a".charCodeAt(0);
	var r = "";
	for (var j = 0; v > 0 || j < padTo; j++)
	{
		var tmp = v & 15;
		if (tmp >= 10) tmp = aCharCode + tmp - 10;
		else tmp = zeroCharCode + tmp;
		r = String.fromCharCode(tmp) + r;
		v = (v >> 4);
	}
	return r;
}

function jsFilename(arg)
{
	var rc = "";
	var length = arg.length;
	for (var i = 0; i < length; i++)
	{
		var theChar = arg.charAt(i);
		var c = arg.charCodeAt(i);
		switch (c)
		{
		case '/'.charCodeAt(0):
		case '\\'.charCodeAt(0):
		case '\''.charCodeAt(0):
		case ':'.charCodeAt(0):
		case '#'.charCodeAt(0):
		case '@'.charCodeAt(0):
		case ' '.charCodeAt(0):
			rc += "@";
			rc += toHexString(c, 4);
			break;
		default:
			if (c > 32 && c < 128) rc += theChar;
			else rc += "@" + toHexString(c, 4);
		}
	}
	return rc.toLowerCase();
}


function doCallbacks(callbacks, errorPrefix)
{
	if (!callbacks)
	{
		
		return;
	}
	while (callbacks.length > 0)
	{
		var callback = callbacks.shift();
	
		callback[0](callback);
	
	}
}

function registerDefinition(viewName)
{
	idctrace("registerDefinition(" + viewName + ") called.");
	if (g_schemaDefinition.viewCallbacks[viewName])
	{
		var callbacks = g_schemaDefinition.viewCallbacks[viewName];
		doCallbacks(callbacks, "registerDefinition(" + viewName + "): ");
	}
	g_schemaDefinition.globalCounter--;
	if (g_schemaDefinition.globalCounter == 0)
	{
		doCallbacks(g_schemaDefinition.globalCallbacks, 
			"registerDefinition() globals: ");
	}
	idctrace("registerDefinition(" + viewName + ") finished.");
}

function loadViewValues(arg)
{
	
		var viewPath = arg[1];
		idctrace("loadViewValues() with \"" + viewPath + "\".");
		var scriptChildNode = document.createElement("script");
		scriptChildNode.src = g_schemaDefinition.schemaBaseUrl + "views/" + viewPath;
		document.body.appendChild(scriptChildNode);
	
}
function addEmptyOption(fieldDef)
{
	if (typeof fieldDef == "undefined")
	{
		return 0;
	}
	return (fieldDef.addEmptyOption || !fieldDef.optionsAllowPreselect)
}

function publishViewValues(arg)
{
	
		var viewName = arg[1];
		var fieldName = arg[2];
		var fieldValue = arg[3];
		var depName = arg[4];
		var parentValue = arg[5];

		idctrace("starting publishViewValues() with view \"" + viewName + 
			"\" and field \"" + fieldName + "\"");
		var field = getSelectField(fieldName);
		if (typeof field == "undefined")
		{
			alert("publishViewValues(): the field " + fieldName + " is not defined.");
			return;
		}
		var fieldDef = getFieldDefinition(fieldName);
		if (fieldDef && addEmptyOption(fieldDef))
		{
			resetSelectField(field, 1, "");
		}
		else
		{
			resetSelectField(field);
		}

		var viewData = g_schemaDefinition.views[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 = viewData.rows;
		}
		else
		{
			rows = viewData.deps[depName].subsets[parentValue];
		}
		fieldDef.currentRowSet = rows;
		var setToLength = 18;
		for (var i = 0; i < rows.length; i++)
		{   
			var row = rows[i];
			var value;
			if (viewData.schInternalColumn)
			{
				value = row[viewData.schInternalColumn];
			}
			var label = null;
			if (label == null || typeof label == "undefined") label = row["Display_" + g_schemaDefinition.userLocale];
			if (label == null || typeof label == "undefined") label = row["Display_" + g_schemaDefinition.userLanguage];
			if (label == null || typeof label == "undefined") label = row["DefaultDisplay"];
			if (label == null || typeof label == "undefined") label = row[viewData.schLabelColumn];
			if (label == null || typeof label == "undefined") label = value;
			if (label == null || typeof label == "undefined") label = "undefined";
			if (label == null || typeof label == "undefined") value = label;
			// AJK: evaluate script for the label.
			var element = document.createElement("option");
			var valueTrimmed = schemaTrim(value);
			var fieldValueTrimmed = schemaTrim(fieldValue);
			element.value = value;
			if (fieldValueTrimmed && fieldValueTrimmed.length > 0 && valueTrimmed == fieldValueTrimmed)
			{
				element.selected = true;
			}
			if (label.length > setToLength) setToLength = label.length;
			element.appendChild(document.createTextNode(label));
			field.appendChild(element);
		}
		updateDependentChoices(fieldDef, fieldDef.fieldName);
		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 (setLength) field.style.width = setToLength + "em";

		idctrace("finished publishViewValues() with view \"" + viewName + 
			"\" and field \"" + fieldName + "\"");
			
		var viewPath;
		if (typeof depName != "undefined")
		{
			var relationshipPath = jsFilename(depName);
			viewPath = jsFilename(viewName) + "/" + relationshipPath + "/"  + jsFilename(parentValue);
			g_schemaDefinition.alreadyLoadedViews[viewPath] = 1;
		}
		else
		{
			viewPath = jsFilename(viewName);
		}
			
		
		idctrace("finished publishViewValues() with view path \"" + viewPath + 
			"\" and field \"" + fieldName + "\"");
	
}


function registerViewCallback(viewName, callback)
{
	var callbacks = g_schemaDefinition.viewCallbacks[viewName];
	if (!callbacks)
	{
		callbacks = g_schemaDefinition.viewCallbacks[viewName] = new Array();
	}
	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 (!g_schemaDefinition.globalCallbacks)
	{
		g_schemaDefinition.globalCallbacks = new Array();
	}
	var globalCallbacks = g_schemaDefinition.globalCallbacks;
	globalCallbacks[globalCallbacks.length] = callback;
}

function registerView(viewName, fieldName, initialValue)
{
	var fieldDef = getFieldDefinition(fieldName);
	if (fieldDef && convertToBool(fieldDef.isDependentList, false))
	{
		return;
	}

    var loadCallback = new Array(loadViewValues, 
		jsFilename(viewName) + "/all.js");
    var publishCallback = new Array(publishViewValues, viewName,
        fieldName, initialValue);

	var loaders = g_schemaDefinition.viewLoaders;
	loaders[loaders.length] = loadCallback;
	g_schemaDefinition.globalCounter++;
	registerViewCallback(viewName, publishCallback);
}

function finalizeDisplay()
{   
	
		idctrace("finalizeDisplay() started");
		doCallbacks(g_schemaDefinition.viewLoaders, "finalizeDisplay(): ");
		idctrace("finalizeDisplay() done");
	
}


// Build up the child to parent relationship array.
g_schemaDefinition.views = new Array();





	var p = g_schemaDefinition.views["1-Sub"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["1-Sub"] = new Object();
		p.viewName = "1-Sub";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    






	var p = g_schemaDefinition.views["2-Sub"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["2-Sub"] = new Object();
		p.viewName = "2-Sub";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    






	var p = g_schemaDefinition.views["3-Sub"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["3-Sub"] = new Object();
		p.viewName = "3-Sub";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    






	var p = g_schemaDefinition.views["BusinessUnitList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["BusinessUnitList"] = new Object();
		p.viewName = "BusinessUnitList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["Category"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Category"] = new Object();
		p.viewName = "Category";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    






	var p = g_schemaDefinition.views["CategoryList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["CategoryList"] = new Object();
		p.viewName = "CategoryList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["CollectionInhibitUpdateMetaList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["CollectionInhibitUpdateMetaList"] = new Object();
		p.viewName = "CollectionInhibitUpdateMetaList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["docAuthors"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["docAuthors"] = new Object();
		p.viewName = "docAuthors";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["docFormats"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["docFormats"] = new Object();
		p.viewName = "docFormats";
	}

// Standard properties for the view

    p.schInternalColumn = "dFormat";
    p.schLabelColumn = "dFormat";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dFormat\"]";
    






	var p = g_schemaDefinition.views["docTypes"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["docTypes"] = new Object();
		p.viewName = "docTypes";
	}

// Standard properties for the view

    p.schInternalColumn = "dDocType";
    p.schLabelColumn = "dDocType";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dDocType\"]";
    






	var p = g_schemaDefinition.views["GeneralAreaList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["GeneralAreaList"] = new Object();
		p.viewName = "GeneralAreaList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["HiddenList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["HiddenList"] = new Object();
		p.viewName = "HiddenList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["IncludeInTOCList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["IncludeInTOCList"] = new Object();
		p.viewName = "IncludeInTOCList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["InhibitUpdateList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["InhibitUpdateList"] = new Object();
		p.viewName = "InhibitUpdateList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["LanguageList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["LanguageList"] = new Object();
		p.viewName = "LanguageList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["ReadOnlyList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["ReadOnlyList"] = new Object();
		p.viewName = "ReadOnlyList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["roles"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["roles"] = new Object();
		p.viewName = "roles";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["SearchableList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["SearchableList"] = new Object();
		p.viewName = "SearchableList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["SectionList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["SectionList"] = new Object();
		p.viewName = "SectionList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["SubCategoryList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["SubCategoryList"] = new Object();
		p.viewName = "SubCategoryList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["TemplateTypeList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["TemplateTypeList"] = new Object();
		p.viewName = "TemplateTypeList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["testList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["testList"] = new Object();
		p.viewName = "testList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["Theme"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Theme"] = new Object();
		p.viewName = "Theme";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    






	var p = g_schemaDefinition.views["TranslateList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["TranslateList"] = new Object();
		p.viewName = "TranslateList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["TypeSubCategoryList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["TypeSubCategoryList"] = new Object();
		p.viewName = "TypeSubCategoryList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["Users_UserLocaleList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Users_UserLocaleList"] = new Object();
		p.viewName = "Users_UserLocaleList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["Users_UserTypeList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Users_UserTypeList"] = new Object();
		p.viewName = "Users_UserTypeList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["WebsiteList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["WebsiteList"] = new Object();
		p.viewName = "WebsiteList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dOption\"]";
    






	var p = g_schemaDefinition.views["Web Area"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Web Area"] = new Object();
		p.viewName = "Web Area";
	}

// Standard properties for the view

    p.schInternalColumn = "dChoiceName";
    p.schLabelColumn = "dChoiceName";
    



    var l = p.schClientLabelExpression = new Array();
    l["English-US"] = "row[\"dChoiceName\"]";
    




function registerChildField(thisField, childField)
{
    var children = g_schemaDefinition.childFields[thisField];
    if (typeof children == "undefined")
    {
        children = g_schemaDefinition.childFields[thisField] = new Array();
    } 
    children.push(childField);
} 

g_schemaDefinition.childFields = new Array();
g_schemaDefinition.fields = new Array();



var fieldDef = new Object();
fieldDef.fieldName = "xAbstract";


g_schemaDefinition.fields["xAbstract"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xBusinessUnit";
fieldDef.viewName = "Category";

fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "xGeneralArea";
fieldDef.dependentRelationship = "DCL";
fieldDef.addEmptyOption = 0;
registerChildField("xGeneralArea", "xBusinessUnit");

g_schemaDefinition.fields["xBusinessUnit"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xCategory";
fieldDef.viewName = "2-Sub";

fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "xSection";
fieldDef.dependentRelationship = "DCL";
fieldDef.addEmptyOption = 0;
registerChildField("xSection", "xCategory");

g_schemaDefinition.fields["xCategory"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xComments";


g_schemaDefinition.fields["xComments"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xContentOwner";


g_schemaDefinition.fields["xContentOwner"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xDisplayDate";


g_schemaDefinition.fields["xDisplayDate"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xGeneralArea";
fieldDef.viewName = "Theme";

fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "xWebsite";
fieldDef.dependentRelationship = "DCL";
fieldDef.addEmptyOption = 0;
registerChildField("xWebsite", "xGeneralArea");

g_schemaDefinition.fields["xGeneralArea"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xIncludeInTOC";
fieldDef.viewName = "IncludeInTOCList";

g_schemaDefinition.fields["xIncludeInTOC"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xIndexNumber";


g_schemaDefinition.fields["xIndexNumber"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xKeyword";


g_schemaDefinition.fields["xKeyword"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xLanguage";
fieldDef.viewName = "LanguageList";

g_schemaDefinition.fields["xLanguage"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xSearchable";
fieldDef.viewName = "SearchableList";

g_schemaDefinition.fields["xSearchable"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xSection";
fieldDef.viewName = "1-Sub";

fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "xBusinessUnit";
fieldDef.dependentRelationship = "DCL";
fieldDef.addEmptyOption = 0;
registerChildField("xBusinessUnit", "xSection");

g_schemaDefinition.fields["xSection"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xSubCategory";
fieldDef.viewName = "3-Sub";

fieldDef.isDependentList = "1";
fieldDef.dependentOnField = "xCategory";
fieldDef.dependentRelationship = "DCL";
fieldDef.addEmptyOption = 0;
registerChildField("xCategory", "xSubCategory");

g_schemaDefinition.fields["xSubCategory"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xTemplateType";
fieldDef.viewName = "TemplateTypeList";

g_schemaDefinition.fields["xTemplateType"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xTranslate";
fieldDef.viewName = "TranslateList";

g_schemaDefinition.fields["xTranslate"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xTypeSubCategory";
fieldDef.viewName = "TypeSubCategoryList";

g_schemaDefinition.fields["xTypeSubCategory"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xWebsite";
fieldDef.viewName = "Web Area";

g_schemaDefinition.fields["xWebsite"] = fieldDef;



g_schemaDefinition.relationships = new Array();


var relationDef = new Object();
relationDef.relationName = "DCL";
relationDef.table1Table = "ChoiceListItem";
relationDef.table1Column = "dChoiceId";
relationDef.table2Table = "ChoiceListItem";
relationDef.table2Column = "dParentId";
g_schemaDefinition.relationships["DCL"] = relationDef;



if (schemaDefCallback)
{
	schemaDefCallback();
}
else
{
	idctrace("base.js: schemaDefCallback() not defined.");
}




