
// 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.pendingFields = 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 = "/fzk/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)
{
	// Note editField can be null, undefined or may be any type of field. Be careful
	// in handling it.
	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);
		
		// Variable 'field' can potentially be null or any type of form field.
		var field = getField(childDef.fieldName);
		if (!parentValue || parentValue.length == 0)
		{
			if (field) 
			{
				resetField(field, 1, "", "");

				updateDependentChoices(field, childName);
			}
			g_schemaDefinition.pendingFields[childDef.fieldName] = null;
			continue;
		}
		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)
			{
				resetField(field, 1, lc("wwSchemaLoadingValues"), ""); 
			}
			loadViewValues(new Array(loadViewValues, 
				childValuePath + ".js", childDef.fieldName));
		}
		else
		{
			idctrace("republishing based on values already retrieved from " 
				+ childValuePath);
			if (field)
			{
				resetField(field, 1, lc("wwSchemaLoadingValues"), ""); 
			}
			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 field = getField(fieldName);

	var isSelect = isSelectField(field);
	var value = null;
	var index = -1;
	if (isSelect)
	{
		index = field.selectedIndex;
		if (index == -1) return "";
		if (addEmptyOption(fieldDef)) index--;
		if (index < 0) return "";
	}
	else
	{
		if (!field || typeof field == "undefined")
		{
			return "";
		}
		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")
		{
			return "";
		}
	}
	var theView = g_schemaDefinition.views[fieldDef.viewName];
	if (!theView)
	{
		alert("Schema view not defined for " + fieldDef.viewName + " (" + fieldName + ")");
		return "";
	}
	if (!isSelect && !theView.schInternalColumn)
	{
		return value;
	}

	var theField;
	if (!childDef.isDependentList)
	{
		g_schemaDefinition.traceExecution = 1;
		idctrace("Getting parent but " + fieldName + " is not a dependent list");
		return "";
	}
	var relationship = g_schemaDefinition.relationships
		[childDef.dependentRelationship];
	theField = relationship.table1Column;

	var theRows = fieldDef.currentRowSet;
	var theValue = "";
	if (!theRows)
	{
		alert("Values for field " + fieldName + " being retrieved before they are loaded from schema js file.");
		return "";
	}
	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)
		{
			return "";
		}
	}
	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 getField(fieldName)
{
	var field = null;
	var fieldList = document.getElementsByName(fieldName);
	if (fieldList != null && typeof fieldList != "undefined")
	{
		field = fieldList.item(0);
	
		if (field == null || typeof field == "undefined" || field.type != "select-one")
		{
			fieldList = document.getElementsByName(fieldName + ".Options");
			if (fieldList != null && typeof fieldList != "undefined")
			{
				// Do not use this field unless it is really
				// truly an options list.
				var tField = fieldList.item(0);
				if (tField != null && tField.type == "select-one")
				{
					field = tField;
				}
			}
		}
	}
	if (field == null)
	{
		idctrace("getField - No such form field as " + fieldName);
	}
	
	return field;
}

function isSelectField(field)
{
	return (field != null && field.type == "select-one");
}

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 resetField(field, setInitialElement, 
	initialElementLabel, initialElementValue)
{
	
		if (!isSelectField(field))
		{
			return;
		}
		try
		{
			while (field.length > 0)
			{
				field.remove(0);
			}
		}
		catch (e)
		{
			idctrace("resetField: suppressing IE bug with timing issues on removal of elements from option lists." + e);
		}
		if (setInitialElement)
		{
			if (!initialElementValue) initialElementValue="";
			if (!initialElementLabel) initialElementLabel="";
			var element = document.createElement("option");
			element.value = initialElementValue;
			element.selected = true;
			element.appendChild(document.createTextNode(initialElementLabel));
			field.appendChild(element);
			if (its.ie)
			{
				var setToLength = initialElementLabel.length;
				setToLength *= g_schemaDefinition.optionListSizingFactor;
				if (setToLength > g_schemaDefinition.optionListMaxSize) setToLength = g_schemaDefinition.optionListMaxSize;
				if (setToLength < 2)
				{
					setToLength = 2;
				}
				field.style.width = setToLength + "em";
			}
		}
	
}

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];
		var fieldName = arg[2];
		idctrace("loadViewValues() with view '" + viewPath 
			+ "' field: '" + fieldName + "'.");
		if (typeof fieldName != "undefined")
		{
			g_schemaDefinition.pendingFields[fieldName] = "1";
		}
		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 + "\"");
		g_schemaDefinition.pendingFields[fieldName] = null;
		var field = getField(fieldName);
		if (typeof field == "undefined")
		{
			alert("publishViewValues(): the field " + fieldName + " is not defined.");
			return;
		}
		var fieldDef = getFieldDefinition(fieldName);
		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 = getViewValuesFromCache(viewName);
		}
		else
		{
			rows = getViewValuesFromCache(viewName, depName, parentValue);
		}
	
		fieldDef.currentRowSet = rows;
		
		if (!isSelectField(field))
		{
			// No more to do than to update the children.
			updateDependentChoices(fieldDef, fieldDef.fieldName);
			return;
		}
		
		if (fieldDef && addEmptyOption(fieldDef))
		{
			resetField(field, 1, "", "");
		}
		else
		{
			resetField(field);
		}

		var setToLength = 18;
		if (typeof rows != "undefined" && rows != null)
		{
			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 (value == null || typeof value == "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 getViewValuesFromCache(viewName, dependentRelationship, parentValue)
{
	var viewData =  g_schemaDefinition.views[viewName];
	if (typeof viewData == "undefined")
	{
		return null;
	}

	var theValues = null;
	if (typeof dependentRelationship == "undefined")
	{
		theValues = viewData.rows;
	}
	else
	{
		if (typeof viewData.deps != "undefined")
		{   
			var dependencyDefinition = viewData.deps[dependentRelationship];
			if (typeof dependencyDefinition != "undefined" && 
				typeof dependencyDefinition.subsets != "undefined")
			{   
				theValues = dependencyDefinition.subsets[parentValue];
			}
		}
	}
	return theValues;
}


function registerViewLoader(callback)
{
	var loaders = g_schemaDefinition.viewLoaders;
	if (typeof loaders == "undefined")
	{
		loaders = g_schemaDefinition.viewLoaders = new Array();
	}
	loaders[loaders.length] = callback;
	g_schemaDefinition.globalCounter++;
}


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 selectField = getField(fieldName);
	if (selectField)
	{   
		resetField(selectField, 1, lc("wwSchemaLoadingValues"), initialValue);
	}

	var fieldDef = getFieldDefinition(fieldName);
	if (!fieldDef)
	{
		alert("registerView fieldDef not defined for " + fieldName);
		return;
	}
	else if (!fieldDef.viewName)
	{
		// Augment field definition dynamically so that it will support dependent fields.
		fieldDef.viewName = viewName;
	}
	if (fieldDef && convertToBool(fieldDef.isDependentList, false))
	{
		return;
	}

    var loadCallback = new Array(loadViewValues, 
		jsFilename(viewName) + "/all.js", fieldName);
    var publishCallback = new Array(publishViewValues, viewName,
        fieldName, initialValue);

	registerViewLoader(loadCallback);
	registerViewCallback(viewName, publishCallback);
}

function finalizeDisplay()
{   
	
		idctrace("finalizeDisplay() started");
		doCallbacks(g_schemaDefinition.viewLoaders, "finalizeDisplay(): ");
		idctrace("finalizeDisplay() done");
	
}


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)
	{
		return 0;
	}
	return 1;
}

// Build up the child to parent relationship array.
g_schemaDefinition.views = new Array();





	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 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 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 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 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 p = g_schemaDefinition.views["OrganisationseinheitList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["OrganisationseinheitList"] = new Object();
		p.viewName = "OrganisationseinheitList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "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 p = g_schemaDefinition.views["AblageList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["AblageList"] = new Object();
		p.viewName = "AblageList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["StrukturList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["StrukturList"] = new Object();
		p.viewName = "StrukturList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["AufStartseiteList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["AufStartseiteList"] = new Object();
		p.viewName = "AufStartseiteList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["Ebene1List"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Ebene1List"] = new Object();
		p.viewName = "Ebene1List";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["Ebene2List"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Ebene2List"] = new Object();
		p.viewName = "Ebene2List";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["Ebene3List"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Ebene3List"] = new Object();
		p.viewName = "Ebene3List";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["Ebene4List"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["Ebene4List"] = new Object();
		p.viewName = "Ebene4List";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["KategorieList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["KategorieList"] = new Object();
		p.viewName = "KategorieList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "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 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 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 p = g_schemaDefinition.views["PublishServersList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["PublishServersList"] = new Object();
		p.viewName = "PublishServersList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["FZK_RANDOM_IMAGES"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["FZK_RANDOM_IMAGES"] = new Object();
		p.viewName = "FZK_RANDOM_IMAGES";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["ClosedUserGroupList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["ClosedUserGroupList"] = new Object();
		p.viewName = "ClosedUserGroupList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    








	var p = g_schemaDefinition.views["StandList"];
	if (typeof p == "undefined")
	{
		p = g_schemaDefinition.views["StandList"] = new Object();
		p.viewName = "StandList";
	}

// Standard properties for the view

    p.schInternalColumn = "dOption";
    p.schLabelColumn = "dOption";
    






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 = "xTemplateType";
fieldDef.viewName = "TemplateTypeList";

g_schemaDefinition.fields["xTemplateType"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xComments";


g_schemaDefinition.fields["xComments"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xTitel";


g_schemaDefinition.fields["xTitel"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xMappe1";


g_schemaDefinition.fields["xMappe1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xStand";
fieldDef.viewName = "StandList";

g_schemaDefinition.fields["xStand"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xAufStartseite";
fieldDef.viewName = "AufStartseiteList";

g_schemaDefinition.fields["xAufStartseite"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_FZK_Themen_Tree";


g_schemaDefinition.fields["xdms_FZK_Themen_Tree"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_FZK_Typ_Tree";


g_schemaDefinition.fields["xdms_FZK_Typ_Tree"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xKategorie";
fieldDef.viewName = "KategorieList";

g_schemaDefinition.fields["xKategorie"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xJahr";


g_schemaDefinition.fields["xJahr"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xDatum";


g_schemaDefinition.fields["xDatum"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xUhrzeit";


g_schemaDefinition.fields["xUhrzeit"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_zahl1";


g_schemaDefinition.fields["xdms_zahl1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang6";


g_schemaDefinition.fields["xdms_lang6"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xClbraAliasList";


g_schemaDefinition.fields["xClbraAliasList"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xHidden";
fieldDef.viewName = "HiddenList";

g_schemaDefinition.fields["xHidden"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xMETAKeywords";


g_schemaDefinition.fields["xMETAKeywords"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xMETAContent";


g_schemaDefinition.fields["xMETAContent"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xWiedervorlagedatum";


g_schemaDefinition.fields["xWiedervorlagedatum"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xSchlagworte";


g_schemaDefinition.fields["xSchlagworte"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang7";


g_schemaDefinition.fields["xdms_lang7"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang8";


g_schemaDefinition.fields["xdms_lang8"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xReadOnly";
fieldDef.viewName = "ReadOnlyList";

g_schemaDefinition.fields["xReadOnly"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang9";


g_schemaDefinition.fields["xdms_lang9"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xClbraUserList";


g_schemaDefinition.fields["xClbraUserList"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xCollectionInhibitUpdateMeta";
fieldDef.viewName = "CollectionInhibitUpdateMetaList";

g_schemaDefinition.fields["xCollectionInhibitUpdateMeta"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xExpOldRev";


g_schemaDefinition.fields["xExpOldRev"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xLanguages";


g_schemaDefinition.fields["xLanguages"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xTranslations";


g_schemaDefinition.fields["xTranslations"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xPublishLocations";


g_schemaDefinition.fields["xPublishLocations"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xObjectType";


g_schemaDefinition.fields["xObjectType"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xSammelmappe";


g_schemaDefinition.fields["xSammelmappe"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext6";


g_schemaDefinition.fields["xdms_treetext6"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xDeckblatt";


g_schemaDefinition.fields["xDeckblatt"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xVerweise1";


g_schemaDefinition.fields["xVerweise1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xVerweise2";


g_schemaDefinition.fields["xVerweise2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xVerweise3";


g_schemaDefinition.fields["xVerweise3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xProvideWeb";


g_schemaDefinition.fields["xProvideWeb"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xProvideSource";


g_schemaDefinition.fields["xProvideSource"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xInfoTitel";


g_schemaDefinition.fields["xInfoTitel"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xInfoText";


g_schemaDefinition.fields["xInfoText"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xLfdNr";


g_schemaDefinition.fields["xLfdNr"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang1";


g_schemaDefinition.fields["xdms_lang1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang2";


g_schemaDefinition.fields["xdms_lang2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_memo1";


g_schemaDefinition.fields["xdms_memo1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_memo2";


g_schemaDefinition.fields["xdms_memo2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_memo3";


g_schemaDefinition.fields["xdms_memo3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_memo4";


g_schemaDefinition.fields["xdms_memo4"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_memo5";


g_schemaDefinition.fields["xdms_memo5"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text1";


g_schemaDefinition.fields["xdms_text1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text2";


g_schemaDefinition.fields["xdms_text2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text3";


g_schemaDefinition.fields["xdms_text3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text4";


g_schemaDefinition.fields["xdms_text4"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text5";


g_schemaDefinition.fields["xdms_text5"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text6";


g_schemaDefinition.fields["xdms_text6"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text7";


g_schemaDefinition.fields["xdms_text7"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text8";


g_schemaDefinition.fields["xdms_text8"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_text9";


g_schemaDefinition.fields["xdms_text9"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_datum1";


g_schemaDefinition.fields["xdms_datum1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_LzVon";


g_schemaDefinition.fields["xdms_LzVon"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_LzBis";


g_schemaDefinition.fields["xdms_LzBis"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_LzUschriftDaten";


g_schemaDefinition.fields["xdms_LzUschriftDaten"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_LzUnbefristet";


g_schemaDefinition.fields["xdms_LzUnbefristet"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xNoLinkCheck";


g_schemaDefinition.fields["xNoLinkCheck"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xPublish";


g_schemaDefinition.fields["xPublish"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xDokumentTyp";


g_schemaDefinition.fields["xDokumentTyp"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang3";


g_schemaDefinition.fields["xdms_lang3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang4";


g_schemaDefinition.fields["xdms_lang4"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang5";


g_schemaDefinition.fields["xdms_lang5"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_datum2";


g_schemaDefinition.fields["xdms_datum2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_datum3";


g_schemaDefinition.fields["xdms_datum3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_datum4";


g_schemaDefinition.fields["xdms_datum4"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_datum5";


g_schemaDefinition.fields["xdms_datum5"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext1";


g_schemaDefinition.fields["xdms_treetext1"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext2";


g_schemaDefinition.fields["xdms_treetext2"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext3";


g_schemaDefinition.fields["xdms_treetext3"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext4";


g_schemaDefinition.fields["xdms_treetext4"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext5";


g_schemaDefinition.fields["xdms_treetext5"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xPublishServers";
fieldDef.viewName = "PublishServersList";

g_schemaDefinition.fields["xPublishServers"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_FZK_Tree";


g_schemaDefinition.fields["xdms_FZK_Tree"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_IWR_Tree";


g_schemaDefinition.fields["xdms_IWR_Tree"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xClosedUserGroup";


g_schemaDefinition.fields["xClosedUserGroup"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xLayout";


g_schemaDefinition.fields["xLayout"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext7";


g_schemaDefinition.fields["xdms_treetext7"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext8";


g_schemaDefinition.fields["xdms_treetext8"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_treetext9";


g_schemaDefinition.fields["xdms_treetext9"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang10";


g_schemaDefinition.fields["xdms_lang10"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang11";


g_schemaDefinition.fields["xdms_lang11"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang12";


g_schemaDefinition.fields["xdms_lang12"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang13";


g_schemaDefinition.fields["xdms_lang13"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang14";


g_schemaDefinition.fields["xdms_lang14"] = fieldDef;



var fieldDef = new Object();
fieldDef.fieldName = "xdms_lang15";


g_schemaDefinition.fields["xdms_lang15"] = fieldDef;



g_schemaDefinition.relationships = new Array();



if (schemaDefCallback)
{
	schemaDefCallback();
}
else
{
	idctrace("base.js: schemaDefCallback() not defined.");
}



