/**
 * Helper component to load LOMs.
 */
function LOMLoader () {
	LOMLoader.baseConstructor.call(this, null, "lomLoader");
	
	this.lastLoadedId = null;
	
	this.lomLoadedEvent = new YAHOO.util.CustomEvent("lomLoaded", this);
	this.lomLoadErrorEvent = new YAHOO.util.CustomEvent("lomLoadError", this);	
}
LOMLoader.extend(Component);

LOMLoader.loadURL = MACEConstants.componentsURL + "detailview/php/LOMLoader.php";

/**
 * Loads a LOM. After successful loading the lomLoaded event will be fired.
 * 
 * @param {String} id The id of the LOM to load.
 */
LOMLoader.prototype.loadLOM = function(id) {
	console.log("LOMLoader.loadLOM");
	
	this.lastLoadedId = id;
	
	var _this = this;
	// REVISIT get XML not possible from different server (JSONP). Wrap XML in JSON?
	// http://www.pathf.com/blogs/2007/02/101_ideas_for_j/
	$.get(LOMLoader.loadURL, {"id" : id}, function(result) {
		_this._onLomXmlLoaded(result);
	});
}	

/**
 * Private method to convert the loaded result to a LOM object and fires the lomLoaded event.
 */
LOMLoader.prototype._onLomXmlLoaded = function(result) {
	console.log("_onLomXmlLoaded");
	
	var $lomXml = $(result);
	if ($lomXml.find("lom").length > 0) {
		var lom = new LOM($lomXml);
		this.lomLoadedEvent.fire(lom);
	}
	else {
		console.warn("No LOM found for " + this.lastLoadedId);
		this.lomLoadErrorEvent.fire(result);
	}
}

/**
 * Returns lomLoaded as events this will broadcast.
 */
LOMLoader.prototype.getBroadcastEvents = function() {
	console.log("LOMLoader broadcasts: lomLoaded");
	return [this.lomLoadedEvent, this.lomLoadErrorEvent];
}

/**
 * Creates an Entry with given params but without children.
 * 
 * A single entry created from the vocabulary, could  be either
 * a category and/or a value
 * 
 * @param {String} id Id of this entry
 * @param {String|Array} labels The label or labels of this entry.
 * @param {Entry} parent The parent of this entry. Can be null.
 * @param {boolean} selectable If this entry is selectable for one LOM or only for taxonomy structuring.
 * @param {String} description The description. (optional: if not specified it will be generated from labels)
 */
function Entry(id, labels, parent, selectable, description) {
	// Identifier
	this.id = id;
	
	// References to related hierarchical entries 
	this.parent = parent;
	this.children = [];
	this.facet = null;
	this.group = null;
	
	// Flag whether users are able to use this entry. 
	this.selectable = selectable;
	
	
	// Label(s) and description
	this.label = "n/a";
	this.labels = null;
	this.description = null;
	
	if (!description) {
		this.description = description;
	}
	
	if (typeof labels == 'string') {
		this.label = labels;
		this.labels = null;
	}
	else if (typeof labels == 'object') {
		// First default language label is the main label
		this.label = labels.get(Entry.DEFAULT_LANG)[0];
		this.labels = labels;
		
		if (!this.description) {
			this.description = this._getDescriptionFromLabels();
		}
	}
}

// Levels of the taxonomy hierarchy
Entry.ROOT_LEVEL = 0;
Entry.GROUP_LEVEL = 1;
Entry.FACET_LEVEL = 2;
// items still can be hierarchical
Entry.ITEM_LEVEL = 3; 

/** The string to use as separator between hierarchical levels. Used in the full label. */
// NB: If separator is HTML entity '&gt;' the display is only correct if highlight of the autocomplete plugin is used. 
Entry.HIERARCHY_SEPARATOR = " » ";

/** The default language to use. If multiple default lang labels exist, the first one is used. */
Entry.DEFAULT_LANG = "en";

/**
 * Creates a nicely formatted description text from the synonym and localized labels. 
 */
Entry.prototype._getDescriptionFromLabels = function() {
	var description = "";
	
	var languages = this.labels.getKeys();
	for (var i = 0; i < languages.length; i++) {
		var lang = languages[i];
		var values = this.labels.get(lang);
		for (var j = 0; j < values.length; j++) {
			// Does not use first default lang label, as that's already the main this.label
			if (!(lang == Entry.DEFAULT_LANG && j == 0)) {
				var value = values[j];
				description += value + " (" + lang + "), ";
			} 
		}
	}
	// Remove last comma
	description = description.substring(0, description.length - 2);
	return description;
}

/**
 * Gets the full hierarchical label of this entry.
 * Includes all visible ancestors, i.e. without groups and root.
 *  
 * @param {String} The full label.
 */
Entry.prototype.getFullLabel = function() {
	var fullLabel = "";
	if (this.parent != null && Entry.isVisibleEntry(this.parent.id)) {
		fullLabel = this.parent.getFullLabel() + Entry.HIERARCHY_SEPARATOR;
	}
	fullLabel += this.label;
	return fullLabel;
}

/**
 * Returns the facet of this entry.
 */
Entry.prototype.getFacet = function() {
	if (this.facet == null) {
		this.facet = this._getAncestor(Entry.FACET_LEVEL);
	}
	return this.facet;
}

/**
 * Returns the group of this entry.
 */
Entry.prototype.getGroup = function() {
	if (this.group == null) {
		this.group = this._getAncestor(Entry.GROUP_LEVEL);
	}
	return this.group;
}

Entry.prototype._getAncestor = function(levelOfAncestor) {
	var p = this.parent;
	var level = 0;
	while (p.parent != null) {
		p = p.parent;
		level++;
	}
	p = this.parent;
	while (level > levelOfAncestor) {
		p = p.parent;
		level--;
	}
	return p;
}


Entry.prototype.toString = function() {
	return this.id + " (" + this.label + ")";
}

Entry.prototype.toLongString = function() {
	return "Entry \"" + this.id + "\" label=" + this.label + ", desc=" + this.description;
}

Entry.prototype.toJSON = function() {
	return '{"termId":"' + this.id + '",' + 
		'"term":"' + encodeURIComponent(this.label) + '",' +
		'"purpose":"' + encodeURIComponent(this.getGroup().label) + '",' +
		'"source":"MACE ' + encodeURIComponent(this.getFacet().label) + ' Catalog"}';
}

/**
 * Indicates whether this entry has children.
 * 
 * @return true if children list is not empty.
 */
Entry.prototype.hasChildren = function() {
	return this.children.length > 0;
}

/**
 * Adds a child to this entry. Additionally, its parent is set to this entry.
 * @param {Entry} child The child entry.
 */
Entry.prototype.addChild = function(child) {
	child.setParent(this);
	this.children.push(child);
}

/**
 * Sets the parent entry of this entry.
 * @param {Entry} parent The direct ancestor entry. 
 */
Entry.prototype.setParent = function(parent) {
	this.parent = parent;
}

/**
 * Indicates whether this entry is selectable.
 */
Entry.prototype.isSelectable = function() {
	return this.selectable;
}

/**
 * Indicates whether the given entry is visible or not.
 * 
 * @param {String} entryId The id of the entry to check.
 * @return true if visible, false otherwise.
 */
Entry.isVisibleEntry = function(entryId) {
	return entryId != "root" && !entryId.startsWith("group");
}

/**
 * Compares two entries, used for sorting algorithms.
 * @param {Entry} a
 * @param {Entry} b
 */
Entry.compareEntries = function(a, b) {
	if (a.label) a = a.label;
	if (b.label) b = b.label;
	
	a = a.toLowerCase();
	b = b.toLowerCase();
	
	try {
		if (a == b){
			return 0;	
		} else if (a > b) {
			return 1;
		} else {
			return -1;	
		}
	} catch (error) {
		// REVISIT Why does IE throw an error sometimes?
		// (because params are sometimes null, but why??)
		return 0;
	}
}


function TaxonomyComponent() {
	TaxonomyComponent.baseConstructor.call(this, null, "taxonomyComponent");
	
	// The root entry of the hierarchical hierarchy
	this.rootEntry = null;
	// List of all entries
	this.entriesList = [];
	// HashMap of all entries
	this.entriesHashMap = new HashMap();
	
	// raw XML string, needed by classification browser
	// NB Currently not used, due to problems in Internet Explorer (see BrowseByClassificationApp)
	this.xml = "";
	
	this.taxonomyLoadedEvent = new YAHOO.util.CustomEvent("taxonomyLoaded", this);
}
TaxonomyComponent.extend(Component);

TaxonomyComponent.TAXONOMY_URL = MACEConstants.rootURL + "components/taxonomy/php/vocabulary.xml.php";
//TaxonomyComponent.TAXONOMY_URL = MACEConstants.rootURL + "components/taxonomy/vocabulary.xml";
//TaxonomyComponent.TAXONOMY_URL = "../../components/taxonomy/vocabulary-part-s.xml";


/**
 * Returns login and logout as events this will broadcast.
 */
TaxonomyComponent.prototype.getBroadcastEvents = function() {
	console.log("TaxonomyComponent broadcasts: taxonomyLoaded");
	return [this.taxonomyLoadedEvent];
}

// Vocabulary handling methods ----------------------------

/**
 * Creates hierarchical vocabulary entries from Protegé's taxonomy XML. 
 * 
 * For each taxonomy item an Entry is created.
 */
TaxonomyComponent.prototype.loadTaxonomy = function(noParsing) {
	var _this = this;
	$.get(TaxonomyComponent.TAXONOMY_URL, {}, function(xml) {
		console.log("Loading taxonomy ...");
			
		if (!noParsing) {
			// parse into jQuery object, create lookup tables
			_this.parseXML(xml);
		} else {
			// raw XML string, needed by classification browser
			_this.xml = xml;
		}
		// Fires event and passes itself as argument
		_this.taxonomyLoadedEvent.fire(_this);
		
		// in order to retrieve raw text : type="text", else "xml"
	}, noParsing ? "text" : "xml");

}

/**
 * Creates a jQuery object from this.xml
 * 
 */
TaxonomyComponent.prototype.parseXML = function(xml) {
	console.log("Parsing taxonomy ...");
	// console.profile('Measuring time');
	var $rootItem = $(xml).find("item#root");
	this.rootEntry = this.createEntryWithChildren($rootItem);
	this.entriesList = this.getFlatEntryListFromAncestorEntry(this.rootEntry);
	// console.profileEnd();
	console.log("Taxonomy with " + this.entriesList.length + " entries parsed.");
}

/**
 * Creates entry tree from the XML.
 * Iterates recursively over all children XML items and adds them to the tree.
 * 
 * @param {jQuery} item The XML item to create an Entry with
 * @return {Entry} The created entry with its children
 */
TaxonomyComponent.prototype.createEntryWithChildren = function($item) {
	var entry = this.createEntryFromVocabularyItem($item);
	var _this = this;
	$item.children("children").children("item").each(function() {
		var $childItem = $(this);
		var child = _this.createEntryWithChildren($childItem);
		entry.addChild(child);
	});
	return entry;
}

/**
 * Gets a flat list with all descendant entries beneath the given entry.
 * Iterates recursively over all children entries and adds them to the list. 
 *
 * @param {Entry} entry The ancestor entry.
 * @param {boolean} addToList Indicates whether to add the given entry itself to the entry list.
 * @return {Array} The flat entry list.
 */
TaxonomyComponent.prototype.getFlatEntryListFromAncestorEntry = function(entry, addToList) {
	var entryList = [];
	// Do not add very first parent entry to the list (recursive calls set flag to true)
	if (addToList) {
		entryList.push(entry);
	}
	
	for (var i = 0; i < entry.children.length; i++) {
		var childEntry = entry.children[i];
		var childrenEntryList = this.getFlatEntryListFromAncestorEntry(childEntry, true);
		entryList = entryList.concat(childrenEntryList);
	}
	
	return entryList;	
}

/**
 * Creates a single Entry from given XML item.
 * 
 * @param {jQuery} $item The item to read.
 */
TaxonomyComponent.prototype.createEntryFromVocabularyItem = function($item) {
	// Reads all properties of an item
	var id = $item.attr("id");
	// any string evaluates to true, even "false", so we need to check for == "true"
	var selectable = $item.attr("selectable") == "true";
	
	// Create language-based hashmap with all synonyms
	var labels = new HashMap();
	$item.children("label").each(function (i) {
		var $label = $(this);
		var lang = $label.attr("lang");
		if (labels.get(lang) == null) {
			labels.add(lang, new Array());
		}
		labels.get(lang).push($label.text());
	});
	
	var entry = new Entry(id, labels, null, selectable, null);
	
	// REVISIT Add storing to map in Entry constructor?
	this.entriesHashMap.add(entry.id, entry);
	// REVISIT: (hopefully) temporary hack to enable faceted search lookup (ids are in lowercase)
	this.entriesHashMap.add(entry.id.toLowerCase(), entry);
	
	return entry;
}


// Search and find methods ----------------------------

/**
 * Finds an entry by given id (in given entries list).
 * 
 * @param {String} id The id of the entry to search for.
 * @return {Entry} Found entry or null if none found.
 */
TaxonomyComponent.prototype.findEntryById = function(id) {
	return this.entriesHashMap.get(id);
}

/**
 * Finds an entry by given label (in given entries list).
 * @param {List of Entry} entries
 * @param {String} label
 */
TaxonomyComponent.findEntryByLabel = function(entries, label) {
	if (!entries) return null;
	
	var i = 0;
	var found = false;
	
	var entry = null;
	
	while (i < entries.length && !found) {
		entry = entries[i];
		if (entry.label == label) {
			found = true;
		}
		i++;
	}
	
	return found ? entry : null;
}

/**
 * PageNavigation
 *	
 */

function PageNavigation($domElem, options) {
	
	this.$domElem=$domElem;
	this.initDOMElems();

	this.options = options;
	if (typeof this.options == 'undefined') {
		this.options = {};
	}
	if (typeof this.options.showFirstRange == 'undefined') {
		this.options.showFirstRange = PageNavigation.DEFAULT_SHOW_FIRST_RANGE;
	}
	if (typeof this.options.showLastRange == 'undefined') {
		this.options.showLastRange = PageNavigation.DEFAULT_SHOW_LAST_RANGE;
	}
	if (typeof this.options.showAroundSelectionRange == 'undefined') {
		this.options.showAroundSelectionRange = PageNavigation.DEFAULT_SHOW_AROUND_SELECTION_RANGE;
	}

	this.reset();
}

PageNavigation.DEFAULT_SHOW_FIRST_RANGE = 2;
PageNavigation.DEFAULT_SHOW_LAST_RANGE = 2;
PageNavigation.DEFAULT_SHOW_AROUND_SELECTION_RANGE = 2;

/*
var showFirstRange = this.options.showFirstRange; // 2 normal, 1 comments
	var showLastRange = this.options.showLastRange;  // 2 normal, 1 comments
	var showAroundSelectionRange = this.options.showAroundSelectionRange;  // 2 normal
	*/
	
/*

	PUBLIC 
	methods and event handlers

*/



PageNavigation.prototype.reset = function(maxPages, currentPage){
	console.log("PageNavigation.init "+[maxPages, currentPage]);
	this.maxPages=maxPages;
	
	if(currentPage){
		this.currentPage=currentPage;
	} else {
		this.currentPage=1;
	}	
	this.checkButtons();
}

PageNavigation.prototype.goToPage = function(pageNum){
	this.setCurrentPage(pageNum);
	this.onPageChanged(this.currentPage);
}

PageNavigation.prototype.setCurrentPage = function(pageNum){
	if(pageNum<1 || pageNum>this.maxPages){
		console.warn("PageNavigation: invalid page num "+pageNum);
		return;
	}
	this.currentPage=pageNum;
	this.checkButtons();
}

PageNavigation.prototype.setNumPages = function(numPages){
	if(numPages<1){
		console.warn("PageNavigation.setNumPages: invalid argument "+numPages);
		return;
	}
	this.maxPages=numPages;
}

/*

	"OVERWRITEABLES" 

*/

PageNavigation.prototype.onPageChanged = function(pageNum){

}


/*

	CLASS ATTRIBUTES
	for default values
	
*/

/*

	PRIVATE

*/

PageNavigation.prototype.initDOMElems = function(){
	this.$domElem.empty();
	
	this.$domElem.append('<div><a class="button small next noText" style=""><span class="icon">&nbsp;</span></a></div>');
	this.$nextButton=$(".next", this.$domElem);
	
	this.$domElem.append('<div><a class="button small previous noText" style="margin-right:0; margin-left:1em;"><span class="icon">&nbsp;</span></a></div>');
	this.$prevButton=$(".previous", this.$domElem);
		
	var _this=this;
	this.$nextButton.click(function(){
		_this.onNext();
	});
	this.$prevButton.click(function(){
		_this.onPrev();
	});

	this.$domElem.append('<ol class="pageNumberButtons"></ol>');
	this.$pageNumberButtons=$(".pageNumberButtons", this.$domElem);
}

PageNavigation.prototype.onNext = function(){
	console.log("next clicked");
	this.goToPage(this.currentPage+1);
}

PageNavigation.prototype.onPrev = function(){
	console.log("prev clicked");	
	this.goToPage(this.currentPage-1);
}

PageNavigation.prototype.checkButtons = function(){
	this.$pageNumberButtons.empty();
		
	var showFirstRange = this.options.showFirstRange;
	var showLastRange = this.options.showLastRange;
	var showAroundSelectionRange = this.options.showAroundSelectionRange;
	
	// create first few buttons
	var i=1;
	for(; i<=Math.min(showFirstRange, this.maxPages); i++){
		this.createPageButton(i);			
	}
	
	if(this.currentPage>i+showAroundSelectionRange){
		this.createPageOmissionSymbol();
	}

	// create middle part	
	i=Math.max(this.currentPage-showAroundSelectionRange, i);
	for(; i<=Math.min(this.currentPage+showAroundSelectionRange, this.maxPages); i++){
		this.createPageButton(i);
	}
	
	if(i<this.maxPages-showLastRange){
		this.createPageOmissionSymbol();
	}
	
	// create end
	i=Math.max(this.maxPages-showLastRange, i);
	for(; i<=this.maxPages; i++){
		this.createPageButton(i);
	}

	
	if(this.currentPage==1){
		this.$prevButton.addClass("disabled");
	} else {
		this.$prevButton.removeClass("disabled");
	}
	

	$("#page-"+this.currentPage).addClass("selected");
}

PageNavigation.prototype.createPageButton = function(index){
	if(	$("#page-"+index).length || index<1 || index>this.maxPages){
		return;
	}
	this.$pageNumberButtons.append('<li><a id="page-'+index+'" class="button small">'+index+'</a></li>');
	var _this=this;
	$("#page-"+index).click(
		function(){
			_this.goToPage(index);
			return false;
		}
	);
}

PageNavigation.prototype.createPageOmissionSymbol = function(){
	this.$pageNumberButtons.append('<li class="omission">&nbsp;...&nbsp;</li>');
}

/*
	Query class 
	for storing search constraints 
	and transforming them to PLQL queries
	
	requires mace.utils.js (fillInTemplateTags)

*/

function Query(){
	this.reset();
}

Query.prototype.reset=function(){
	this.clearConstraints();
}

Query.prototype.addConstraint=function(type, params){
	console.log("Query.addConstraint", type, params);
			
	switch(type){
		case "classification":
			this.constraints.classification.push(params);
			break;
			
		case "context":
			// {lat, lng, zoom}
			this.constraints.context.push(params);
			break;	

		case "searchTerm":
			// test 1 "test 2" -> "test" AND "1" AND "test 2"
			var atoms=[];
			if(params.indexOf("\"")==-1){
				// no quoted entries
				atoms=params.split(" ");
			} else {
				// split by quotations
				var parts= params.split("\"");
				for (var i=0; i<parts.length; i++){
					if((i % 2) == 0){
						// only for even indices: split by blank
						// recursion w00t					
						this.addConstraint("searchTerm", parts[i]);
					} else {
						// add it as it is	
						atoms.push(parts[i]);
					}
				}
			}
			for (var i in atoms) {
				if(atoms[i]!=null && atoms[i].length){
					this.constraints.searchTerm.push(atoms[i]);
				}
			}
			break;		
			
		case "LOMconstraint":
			this.constraints.LOMconstraints.push(params);
			break;
			
		default:
			console.warn("Query.addConstraint: Type not recognized "+type+":"+params);
			
	}
	console.log("current query", this);
}

Query.prototype.addLOMConstraint=function(key, value, label){
	this.addConstraint("LOMconstraint", {key:key, value:value, label:label});
}

Query.prototype.replaceLOMConstraint=function(key, value, label){
	this.clearLOMConstraint(key);
	this.addLOMConstraint(key, value, label);
}

// delete all LOMcontraints with type key
Query.prototype.clearLOMConstraint=function(key){
	for (var i=0; i<this.constraints.LOMconstraints.length; i++){
		var l=this.constraints.LOMconstraints[i];
		if(l.key==key){
			this.constraints.LOMconstraints.splice(i,1);
			i--;
		}
	}
}

Query.prototype.isEmpty = function(){
	for (var i in this.constraints){
		if(this.constraints[i].length){
			return false;
		}
	} 
	return true;
}

Query.prototype.clearConstraints = function(type){
	if(type){
		// clear one type
		this.constraints[type]=[];
	} else {
		// clear all
		this.constraints={
			classification:	[],
			context:		[],
			searchTerm:		[],
			LOMconstraints:	[]
		};	
	}
}

Query.prototype.constructFromURLString=function(s){
	this.reset();
	if(Utils.isUndefined(s) || !s.length){
		return;
	}
	var s=s.split("/");
	for (var i in s){
		var q=s[i].split(",");
		for (var j in q) q[j] = this.decodeValue(q[j]);
		if (q[0] == "searchTerm") {
			this.addConstraint("searchTerm", q[1]);
		} else if (q[0] == "context") {
			this.addConstraint("context", {lat: q[1], lng: q[2], zoom: q[3]});
		} else {
			this.addConstraint(q[0], {key:q[1], value:q[2], label:q[3]});
		}
		
	}
}

Query.prototype.toURLString=function(){
	var result=[];

	// Free from keywords
	for(var i in this.constraints.searchTerm){
		result.push("searchTerm,"+encodeURIComponent(this.constraints.searchTerm[i]));
	}
	
	// Classification
	var t='classification,{key},{value},{label}';
	for(var i in this.constraints.classification){
		var c=this.constraints.classification[i];
		var o={};
		o.key=this.encodeValue(c.key);
		o.value=this.encodeValue(c.value);
		o.label=this.encodeValue(c.label);
		result.push(t.fillInTemplateTags(o));
	}
	
	// LOMconstraints	
	var t='LOMconstraint,{key},{value},{label}';
	for(var i in this.constraints.LOMconstraints){
		var c=this.constraints.LOMconstraints[i];
		var o={};
		o.key=this.encodeValue(c.key);
		o.value=this.encodeValue(c.value);
		o.label=this.encodeValue(c.label);
		result.push(t.fillInTemplateTags(o));	
	}

	// Context
	var t='context,{lat},{lng},{zoom}';
	for(var i in this.constraints.context){
		var c=this.constraints.context[i];
		var o={};
		o.lat=this.encodeValue(c.lat);
		o.lng=this.encodeValue(c.lng);
		o.zoom=this.encodeValue(c.zoom);
		result.push(t.fillInTemplateTags(o));
	}
	
	return result.join("/");
}

Query.prototype.encodeValue=function(v){
	//v=v.replace(/:/, "__");
	v=encodeURIComponent(v);
	return v;
}

Query.prototype.decodeValue=function(v){
	//v=v.replace(/__/, ":");
	v=decodeURIComponent(v);
	return v;
}


Query.prototype.toHTMLString=function(){
	var result=[];
	
	// Free from keywords
	if(this.constraints.searchTerm.length>0){
		var queryTemplateString='<span class="searchTerm">"{value}"</span>';
		for(var i in this.constraints.searchTerm){
			result.push(queryTemplateString.fillInTemplateTags({value:this.constraints.searchTerm[i]}));
		}
	}

	// Classification	
	if(this.constraints.classification.length>0){
		var queryTemplateString='<span class=\"classificationTerm\">{label}</span>';
		for(var i in this.constraints.classification){
			var c=this.constraints.classification[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	// LOMconstraints	
	if(this.constraints.LOMconstraints.length>0){
		var queryTemplateString='<span class=\"classificationTerm\">{label}</span>';
		
		for(var i in this.constraints.LOMconstraints){
			var c=this.constraints.LOMconstraints[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	// Context	
	if (this.constraints.context.length > 0) {
		var queryTemplateString = '<span class=\"classificationTerm\">around {lat}°, {lng}° (zoom:{zoom})</span>';
		for(var i in this.constraints.context){
			var c=this.constraints.context[i];
			c.lat = Math.round(c.lat * 10000) / 10000;
			c.lng = Math.round(c.lng * 10000) / 10000;
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}

	return result.join(" + ");
}

Query.prototype.toTitleString=function(){
	var result=[];
	
	// Free from keywords
	if(this.constraints.searchTerm.length>0){
		var queryTemplateString='"{value}"';
		for(var i in this.constraints.searchTerm){
			result.push(queryTemplateString.fillInTemplateTags({value:this.constraints.searchTerm[i]}));
		}
	}

	// Classification	
	if(this.constraints.classification.length>0){
		var queryTemplateString='{label}';
		for(var i in this.constraints.classification){
			var c=this.constraints.classification[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	// LOMconstraints	
	if(this.constraints.LOMconstraints.length>0){
		var queryTemplateString='{label}';
		for(var i in this.constraints.LOMconstraints){
			var c=this.constraints.LOMconstraints[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	return result.join(" + ");
}
/**
 * 
 * @param {Object} owner 
 */
function ServiceConnector (owner) {
	this.owner = owner;
	this.searchURL = null;
	this.params = {};
}

// construct parameters object for AJAX call in getResults
ServiceConnector.prototype.setParams = function(args){
	// implement in subclass
}

// takes a Query object and returns the respective query string for the service
ServiceConnector.prototype.queryToSearchString = function (query){
	// implement in subclass
}

// takes a server response and returns an object with (at least) resultList and numResults attributes
ServiceConnector.prototype.parseResults = function (results){
	// implement in subclass
}


// load the results with the current params
ServiceConnector.prototype.getResults = function(){

	var _this = this;
	var callback = function (results, msg) {
		console.log("ServiceConnector.callback " +  msg  + ", " + results);
		if(msg == "success" && (!Utils.isUndefined(results.success) && results.success)) {
			_this.onResult(results);
		} else {
			_this.onError(results);
		}
	};
	
	// load results
	console.log("ServiceConnector.getResults", _this, this.params, callback);
	$.getJSON(this.searchURL, this.params, callback, this.onError);
}

ServiceConnector.prototype.onResult = function (results){
	if($(results).find("error").size()>0){
		this.onError(results);
		return;
	}
	var parsedResult=this.parseResults(results);
	// REVISIT Use own result class?
	this.owner.onResult(parsedResult.resultList, parsedResult.numResults, parsedResult.facetCounts);
}

ServiceConnector.prototype.onError = function (results){
	console.warn("error",$(results).find("error").text());
	this.owner.onError();
}
function SQIServiceConnector (owner){
	this.owner=owner;
	// TODO: change to SQIServiceConnector
	this.searchURL = MACEConstants.componentsURL+"search/php/SQIServiceConnector.php";
}
SQIServiceConnector.extend(ServiceConnector);

// load the results with the current params
SQIServiceConnector.prototype.getResults = function(){
	console.log("SQIServiceConnector.getResults", this.params);
	
	// Safari 3 does not like console.time and console.timeEnd
	try{
		console.time("SQI search");
	} catch(e){};

	
	var _this = this;
	var callback=function (results, msg) {
		console.log("SQIServiceConnector.callback ", msg);
		// Safari 3 does not like console.time and console.timeEnd
		try{
			console.timeEnd("SQI search");
		} catch(e){};
		
		if(msg=="success"){
			_this.onResult(results);
		} else {
			_this.onError(results);
		}
	};
	
	$.get(this.searchURL, this.params, callback, "xml");
}



// construct parameters object for AJAX call in getResults
SQIServiceConnector.prototype.setParams = function(query, currentPage, itemsPerPage){
	this.params = {};
	
	// index of first result
	this.params.startIndex = 1 + (currentPage - 1) * itemsPerPage;	
	this.params.resultNumber = itemsPerPage;

	if(getObjectClass(query) == "Query"){
		this.params.PLQLstring = this.queryToSearchString(query);
	} else {
		this.params.PLQLstring = '""';
	}
	// unranked lom
	// this.params.resultsFormat = "lom";
	
	// ranked lom
	this.params.resultsFormat = "rlom";

}

// takes a Query object and returns the respective PLQL query string for the SQI service
SQIServiceConnector.prototype.queryToSearchString = function (query){
	var result=[];
	
	// Free from keywords wrapped in quotes
	if(query.constraints.searchTerm.length>0){
		for(var i in query.constraints.searchTerm){
			result.push("\""+query.constraints.searchTerm[i]+"\"");
		}
	}
	
	// classification
	if(query.constraints.classification.length>0){
		var queryTemplateString='lom.classification.taxonpath.taxon.id="{value}"';
		
		for(var i in query.constraints.classification){
			var c=query.constraints.classification[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	// LOM constraints
	if(query.constraints.LOMconstraints.length>0){
		var constraintObj={};
		var queryTemplateString='{key}="{value}"';
		
		for(var i in query.constraints.LOMconstraints){
			var c=query.constraints.LOMconstraints[i];
			result.push(queryTemplateString.fillInTemplateTags(c));
		}	
	}
	
	result=result.join(" AND ");
	console.log("PLQL string: "+result);
	return result;
}

// takes a server response and returns an object with (at least) resultList and numResults attributes
SQIServiceConnector.prototype.parseResults = function (results){
	console.log("SQIServiceConnector.parseResults");
	var r={resultList:[], numResults:0};
	
	// parse LOM results
	var $results=$(results);
	r.numResults=$results.find("results").attr("cardinality");
	
	$results.find("lom").each(function(){
		r.resultList.push(new LOM($(this, $results)));
	});
	
	return r;
}

function SolrServiceConnector (owner){
	SolrServiceConnector.baseConstructor.call(this, owner);
}

SolrServiceConnector.extend(SQIServiceConnector);

// load the results with the current params
SolrServiceConnector.prototype.getResults = function(){
	var _this = this;
	
	var callback=function (results, msg) {
		console.log("SolrServiceConnector.callback ", msg);
		// console.log(results);
			
		// Safari 3 does not like console.time and console.timeEnd
		try{
			console.timeEnd("Solr request");
		} catch(e){};		

		if(msg=="success"){
			_this.onResult(results);
		} else {
			_this.onError(results);
		}
	};
	// load results
	console.log("SolrServiceConnector.getResults", this.params, callback);
	
	// Safari 3 does not like console.time and console.timeEnd
	try{
		console.time("Solr request");
	} catch(e){};

	// real
	$.get(this.searchURL, this.params, callback, "xml");

	// testing
	//$.get(MACEConstants.toolsURL+"filteredSearch/mock/initialValues.xml", {}, callback, "xml");	
}

// construct parameters object for AJAX call in getResults
SolrServiceConnector.prototype.setParams = function(query){
	this.params = {};

	if(getObjectClass(query) == "Query" && !query.isEmpty()){
		this.params.PLQLstring = this.queryToSearchString(query);
	} else {
		this.params.PLQLstring = "lom.solr = \"all\"";
	}
	this.params.resultsFormat = "solr";
}

// resturns a dictionary (by field) of dictionaries (by value id) of values (facetCounts)
SolrServiceConnector.prototype.parseResults = function (xml){
	console.log("SolrServiceConnector.parseResults");
	/* 
	<response>
		<facets>
			<facet_field name="lom.general.identifier.catalog">
				<facet_count name="DYNAMO">1212</facet_count>
	*/
	var r={};
	
	$(xml).find("facet_field").each(function(){
		// create field dicts
		var fieldName = $(this).attr("name");
		var currentField = r[fieldName] = {};
	
		// parse values and pull labels from labelDict
		$(this).find("facet_count").each(function(){		
			var id = $(this).attr("name");
			var o = currentField[id] = {};
			o.id = id;
			o.numItems = Number($(this).text());
			if(fieldName == "lom.metametadata.identifier.catalog"){
				var properCatalogLabel = LOM.guessCatalog(id).name;
				o.label = (properCatalogLabel != "" && !Utils.isUndefined(properCatalogLabel)) ? properCatalogLabel : id;
			} else {
				try {
					o.label = MACE.labelDict[fieldName][id];				
				} catch (e) {}
	
				if(Utils.isUndefined(o.label)){
					o.label= o.id;
				}
			}			
		});
	});
	
	// special hacks
	// remove OAI IDs
	if(r["lom.general.identifier.catalog"] && r["lom.general.identifier.catalog"]["oai"]){
		delete r["lom.general.identifier.catalog"]["oai"];
	}
	
	if(r["lom.metametadata.identifier.catalog"] && r["lom.metametadata.identifier.catalog"]["oai"]){
		delete r["lom.metametadata.identifier.catalog"]["oai"];
	}
	
	// remove classification root node
	if(r["lom.classification.taxonpath.taxon.id"] && r["lom.classification.taxonpath.taxon.id"]["root"]){
		delete r["lom.classification.taxonpath.taxon.id"]["root"];
	}
	
	console.log("facets parsed", r);
	return r;
}

SolrServiceConnector.prototype.onResult = function (results){
	console.log("SolrServiceConnector.onResult", results, this.owner);
	if($(results).find("error").size()>0){
		this.onError(results);
		return;
	}
	this.owner.onFacetResult(this.parseResults(results));
}

function ALOEServiceConnector (owner){
	this.owner=owner;
	this.searchURL = MACEConstants.componentsURL+"search/php/ServiceConnectorAloe.php";
	console.log("new ALOEServiceConnector");
	this.queryCache={};
}

ALOEServiceConnector.extend(ServiceConnector);

// construct parameters object for AJAX call in getResults
ALOEServiceConnector.prototype.setParams = function(query, currentPage, itemsPerPage){
	console.log("ALOEServiceConnector: set Params");
	this.currentPage=currentPage;
	this.itemsPerPage=itemsPerPage;
	this.params={tag:this.queryToSearchString(query), currentPage:this.currentPage, itemsPerPage:this.itemsPerPage};	
}

// load the results with the current params
ALOEServiceConnector.prototype.getResults = function(){
	// ALOE has no paging, so if we did the same query already, we return the cached response
	// for faster page navigation...
	if(this.queryCache[this.params.tag]){
		this.onResult(this.queryCache[this.params.tag]);
		return;
	}
	
	var _this = this;
	var callback=function (results, text) {
		console.log("ALOEServiceConnector.callback", results, text);
		if(!results.success){
			console.log("ALOEServiceConnector.onError");
			_this.onError(results);
		} else {
			console.log("ALOEServiceConnector.onSuccess");
			_this.onResult(results);
		}
	};
	// load results
	console.log("ALOEServiceConnector.getResults", _this, this.params, callback);
	$.getJSON(this.searchURL, this.params, callback, this.onError);
}

// takes a Query object and returns the respective ALOE query string 
ALOEServiceConnector.prototype.queryToSearchString = function (query){
	return query.constraints.searchTerm.join(" ");
}

// takes a server response and returns an object with (at least) resultList and numResults attributes
ALOEServiceConnector.prototype.parseResults = function (results){
	// store whole result in cache
	/*
	if(Utils.isUndefined(this.queryCache[this.params.tag])){
		this.queryCache[this.params.tag]=results;
	}
	*/
	// slice out the current page
	var resultList=results.resultList;
	$(resultList).each(function(){this.catalog = LOM.guessCatalog(this.catalog)});
	return {resultList:resultList, numResults:results.numResults};
}



/**
 *
 * @param {Object} owner Application to call result handlers at.
 */
function ContextServiceConnector(owner){
	this.owner = owner;
	
	this.queryCache = {};
}

ContextServiceConnector.extend(ServiceConnector);

ContextServiceConnector.prototype.getResults = function(){
	//console.log("ContextServiceConnector.getResults. not implemented");
}

ContextServiceConnector.prototype.setParams = function(query, currentPage, itemsPerPage){
	if (getObjectClass(query) == "Query") {
		this.params = {
			lat: query.constraints.context[0].lat,
			lng: query.constraints.context[0].lng,
			zoom: query.constraints.context[0].zoom,
		};
	}
	else {
		this.params = {};
	}
	
	this.params.currentPage = currentPage;
	this.params.itemsPerPage = itemsPerPage;
	
}

/**
 * Parses and creates result list out of the locations (loaded by the MapWidget)
 * @param {HashMap} locations The locations to parse
 * @param {int} numResults The overall number of results
 */
ContextServiceConnector.prototype.parseLocations = function(locations, numResults) {
	var r = {
		resultList: [],
		numResults: numResults
	};

	var locationsArray = locations.valSet();

	// Was used while ContextService did not support paging
	//r.numResults = locations.size();
	//locationsArray = locationsArray.slice((this.params.currentPage-1)*this.params.itemsPerPage, this.params.currentPage*this.params.itemsPerPage);
	
	for (var i = 0; i < locationsArray.length; i++) {
		var pc = locationsArray[i].positionedContent;
		var lom = {
			id: pc.id,
			title: pc.title,
			description: pc.description,
			url: MACEConstants.rootURL + "resource/" + encodeURIComponent(pc.id),
			catalog: LOM.guessCatalogFromId(pc.id)
		}
		lom.shortTitle = LOM.createShortTitle(lom.title);
		
		r.resultList.push(lom);
	}
	
	return r;
}


/**

	PagedSearch class
	
 */

function PagedSearch($element, serviceConnector, useFacetedSearch) {
	this.$element = $element;
	PagedSearch.baseConstructor.call(this, $element, "search");
	
	// ServiceConnector and params 
	
	this.serviceConnector = serviceConnector ? serviceConnector : new SQIServiceConnector(this);
	
	// TODO Move to FilteredSearch
	this.useFacetedSearch = useFacetedSearch;
	if(useFacetedSearch){
		this.solrServiceConnector = new SolrServiceConnector(this);	
	}	
	
	
	this.query = new Query();
	this.currentPage = 1;
	this.itemsPerPage = PagedSearch.defaultItemsPerPage;	
	
	this.baseTitle = SWFAddress.getTitle();
	this.lastSWFAddressValue = "startUp";
	
	// Components
	
	this.componentController = new ComponentController();
	this.componentController.register(this);
			
	this.loginComponent = new LoginComponent($("#loginComponent"));
	this.componentController.register(this.loginComponent);
	
	this.SessionTracker = new Tracker();
	this.componentController.register(this.SessionTracker);
	
	this.taxonomyComponent = new TaxonomyComponent();
	this.componentController.register(this.taxonomyComponent);
	
	// Init
		
	this.startUp();
}

PagedSearch.extend(Component);

/*
	DEFAULTS
*/
		
PagedSearch.defaultItemsPerPage=12;

/*
	INIT
*/

// simplest case; overwrite if preloading is necessary etc.
PagedSearch.prototype.startUp = function(){
	this.componentController.init();
	this.initDOMElems();
	this.onAppReady();
}

// trigger when everything is ready
PagedSearch.prototype.onAppReady = function(){
	this.initHistory();	
	this.onStateChange();
}


PagedSearch.prototype.initDOMElems = function(){
	this.resultList=new ResultList(this.$element);
	this.componentController.register(this.resultList);	
	
	var _this=this;
	// overwrites event handlers, could be done with proper events!
	this.resultList.onPageChanged=function(pageNum){
		_this.currentPage=pageNum;
		_this.onPageChanged();
	}
	this.messageBox = new MessageBox($("#searchMessageBox"));
}

/*
	STATES + HISTORY
*/

// set up SWFaddress listener to get notified of URL parameters
PagedSearch.prototype.initHistory=function(){
	var _this=this;
	var h = function(event) {
		_this.onStateChange(event);	
	}
	SWFAddress.addEventListener(SWFAddressEvent.CHANGE, h);
}

// call this when query is changed
PagedSearch.prototype.onQueryChanged=function(){
	this.currentPage=1;
	this.storeStateInURL();
	// -> will call onStateChange via SWFAddress listener
}

// call this when query remains the same, but the current page is changed
PagedSearch.prototype.onPageChanged=function(){
	this.storeStateInURL();
}

// store application state in URL
// -> will call onStateChange via SWFAddress listener
PagedSearch.prototype.storeStateInURL=function(){
	var q=this.query.toURLString();
	SWFAddress.setValue("?page="+this.currentPage+"&query="+q);
}

// update browser window title
PagedSearch.prototype.updateWindowTitle=function(){
	SWFAddress.setTitle(this.baseTitle + " : " +this.query.toTitleString());
}

// callback from app when URL params are changed, triggers new service call
PagedSearch.prototype.onStateChange=function(event){
	console.log("------- PagedSearch.onStateChange", event);
	
	if(unescape(SWFAddress.getValue()) == this.lastSWFAddressValue){
		console.warn("Executing the same query twice?");
		return;
	}	
	
	this.lastSWFAddressValue = unescape(SWFAddress.getValue());
		
	// get query
	var urlParams=SWFAddress.getParameter("query");

	this.query.constructFromURLString(urlParams);

	this.updateWindowTitle();
	
	// get pagenum
	var p=Number(SWFAddress.getParameter("page"));
	this.loadResults(p);
	
}


/*
	SEARCHES
	
	TODO These are also specific. Why are those not in subclasses? e.g. doClassificationSearch in BrowseByClassApp
*/


// replace existing search terms
PagedSearch.prototype.doTermSearch = function(term){
	console.log("PagedSearch.doTermSearch "+term);
	this.query.clearConstraints("searchTerm");
	this.query.addConstraint("searchTerm", term);
	this.onQueryChanged();
}

// replaces existing classification terms
PagedSearch.prototype.doClassificationSearch = function(value, label){
	console.log("PagedSearch.doClassificationSearch", value, label);
	this.query.clearConstraints("classification");
	this.query.addConstraint("classification", {key:"", value:value, label:label});
	this.onQueryChanged();
}

// replaces existing classification terms
PagedSearch.prototype.doCompetenceSearch = function(competenceIDs, EQFLevels){
	console.log("PagedSearch.doCompetenceSearch", competenceIDs, EQFLevels);
	this.query.clearConstraints("competence");
	this.query.addConstraint("competence", {competenceIDs:competenceIDs, EQFLevels:EQFLevels});
	this.onQueryChanged();
}

// TODO: accessor methods for LOM

/*
	RESULT LOADING	
*/


PagedSearch.prototype.loadResults = function(pageNum) {
	console.log("loadResults");

	if(this.useFacetedSearch && (this.lastSolrQueryString != this.query.toURLString())){
		console.log("loading facet results");
		this.lastSolrQueryString=this.query.toURLString();
		
		// TODO setParams and getResults are always together, why not combine?
		this.solrServiceConnector.setParams(this.query);
		this.solrServiceConnector.getResults();
	}
	
	if(Utils.isUndefined(this.query) || this.query.isEmpty()) {
		console.log("empty query, display nothing");
		this.onResult([]);	
	} else {
		pageNum = Number(pageNum);
		
		if(Utils.isUndefined(pageNum) || isNaN(pageNum)==-1 || isNaN(pageNum) || pageNum < 1){
			// bad pageNum
			console.log("bad pageNum", pageNum);
			this.currentPage =  1;
		} else {
			// good pageNum
			console.log("good pageNum", pageNum);
			this.currentPage = pageNum;
		}
		
		this.resultList.displayMessage(ResultList.LOADING_MESSAGE, this.query.toHTMLString());
		this.serviceConnector.setParams(this.query, this.currentPage, this.itemsPerPage);
		this.serviceConnector.getResults();	
	}
}

PagedSearch.prototype.onFacetResult = function (facetCounts){
	this.facetCounts=facetCounts;
	this.displayFacetResults();
}

PagedSearch.prototype.onResult = function (searchResults, numTotal, facetCounts){
	this.numResults = numTotal ? numTotal : 0;
	this.searchResults=searchResults;
	this.facetCounts=facetCounts;
	
	this.displayResults();
	
	//track search & filters
	this.trackCurrentState();
}

PagedSearch.prototype.onError = function() {
	this.resultList.displayResults([], "An error has occurred.", 1, 0);
}


PagedSearch.prototype.displayResults = function() {
	if(this.query.isEmpty()){
		var msg="No search - no results.";		
		this.resultList.displayResults([], msg, 1, 0);
	} else{
		var msg="<span class=\"numResults\">" + this.numResults+"</span> results for: "+this.query.toHTMLString();
		this.resultList.displayResults(this.searchResults, msg, this.currentPage, Math.ceil(this.numResults/this.itemsPerPage));
	}	
}

PagedSearch.prototype.displayFacetResults = function() {
	/*
	// clean up and label classification entries
	var classificationCounts = this.facetCounts["lom.classification.taxonpath.taxon.id"];
	for (var key in classificationCounts){
		var value = classificationCounts[key];
		var entry = this.taxonomyComponent.findEntryById(value.id);
		if(entry){
			value.label = entry.label;
		} else{
			// no label found?
			delete this.facetCounts["lom.classification.taxonpath.taxon.id"][key];
		}
		if(key=="root"){
			delete this.facetCounts["lom.classification.taxonpath.taxon.id"][key];
		}
	} 
	*/
}

/*	
	TRACKING	
*/

PagedSearch.prototype.trackCurrentState =function(){
	
	if(Utils.isUndefined(app) || Utils.isUndefined(app.SessionTracker)){
		console.warn("PagedSearch.prototype.trackCurrentState: app or SessionTracker is null");
		return;
	}

   if(this.query.constraints.LOMconstraints.length > 0){
	   	var filter_types=[];
		var filter_values=[];
		var filter_labels=[];
	
		var _this=this;  	
  		$.each(this.query.constraints.LOMconstraints, function(i,obj) {
  			filter_types.push(_this.query.constraints.LOMconstraints[i].key);
			filter_values.push(_this.query.constraints.LOMconstraints[i].value);
			filter_labels.push(_this.query.constraints.LOMconstraints[i].label);
		 });
		app.SessionTracker.saveFilter(filter_types,filter_labels,this.numResults);
		
	} else if(this.query.constraints.classification.length >0){
   		app.SessionTracker.saveSearch(this.query.constraints.classification[0].value,this.numResults);
   		
   	} else{
		app.SessionTracker.saveSearch(this.query.constraints.searchTerm.join(" "),this.numResults);
	}
}


/**
 * A simple LOM object.
 *
 * Be aware this only is used for converting single loaded LOM XML into an object.
 * Multiple (e.g. search result lists) are created in PHP.
 *
 * @param {jQuery Object} xml The whole LOM XML as jQuery
 */
function LOM($lomXml){

	//console.log("new LOM", $lomXml);
	this.$xml = $lomXml;
	
	if ($lomXml.find("general").length > 1) {
		console.warn("Converting from LOM XML resulted in too many same elements.");
	}
	
	// The id of the LOM (i.e. the metaMetadata identifier)
	// Gets the only entry, or if multiple tries to find the oai one, or if not found, the first one.
	if ($lomXml.find("metaMetadata > identifier").length > 1) {
		// NB The contains-jQuery does work in IE only if patched jQuery! http://dev.jquery.com/ticket/1612
		//if ($lomXml.find("metaMetadata > identifier > catalog:contains('oai')").length > 0) {
		var $oaiCatalog = $lomXml.find("metaMetadata > identifier > catalog").filter(function(i){
			return $(this).text().startsWith("oai");
		});
		if ($oaiCatalog.length > 0) {
			this.id = $oaiCatalog.siblings("entry").text();
		}
		else {
			this.id = $lomXml.find("metaMetadata > identifier > entry:first").text()
		}
	}
	else {
		this.id = $lomXml.find("metaMetadata > identifier > entry").text();
	}
	
	// The title of the LO
	// try to find the English title
	this.title = $lomXml.find("general > title > string[language='en']").text();
	// else: pick the first one
	if (!this.title) {
		this.title = $lomXml.find("general > title > string:first").text();
	}
	
	this.shortTitle = LOM.createShortTitle(this.title);
	
	// The description of the LO
	// try to find the English description
	this.description = $lomXml.find("general > description > string[language='en']").text();
	// else: pick the first one
	if (!this.description) {
		this.description = $lomXml.find("general > description > string:first").text();
	}
	// Strips tags (as jQuery changes entity encoded angle brackets "&gt" in real ones "<" )
	this.description = this.description.replace(/<.*?>/g, "");
	
	// The original URL in repository (technical location)
	this.repositoryURL = $lomXml.find("technical > location").filter(function(index){
		return $(this).text().startsWith("http");
	}).text();
	this.url = this.repositoryURL;
	
	if (this.url == null || this.url == "") {
		this.url = this.repositoryURL = MACEConstants.detailsBaseSrc + this.id;
	}
	
	this.resourceTypes = [];
	var _this = this;
	$lomXml.find("educational > learningResourceType > value").each(function(){
		_this.resourceTypes.push($(this).text());
	});
	
	// NB: Because jQuery lacks correct namespace handling, weird construction
	this.resourceKind = null;
	var $lokValue = $lomXml.find("general mace\\:value");
	if ($lokValue.length > 0 && $lokValue.parent()[0].tagName == "mace:learningObjectKind") {
		this.resourceKind = $lokValue.text();
	}
	
	this.languageCode = $lomXml.find("general > language").text() || $lomXml.find("educational > language").text() || "en";
	this.language = LOM.languageMap[this.languageCode];
	if (Utils.isUndefined(this.language)) {
		this.language = this.languageCode;
	}
	
	// number of classification terms
	this.classificationNumber = $lomXml.find("classification > taxonPath").size();
	
	/*
	 dbpedia ID
	 */
	var _this = this;
	$lomXml.find("relation > resource > identifier").each(function(){
		if ($(this).find("catalog").text() == "dbpedia") {
			_this.dbpediaID = $(this).find("entry").text().split("dbpedia:http://dbpedia.org/resource/").join("");
			console.log("found dbpedia ID", _this.dbpediaID);
		}
	});
	
	/*
	 catalogID
	 */
	// Gets catalog from metaMetadata-ID
	this.catalog = this.id.substring(4, this.id.indexOf("."));
	
	var _this = this;
	$lomXml.find("metaMetadata > identifier > catalog").each(function(){
		var t = $(this).text();
		if (t != "oai") {
			_this.catalogID = t.toLowerCase().split("\n").join("").split("\r").join("").split(" ").join("");
		}
	});
	
	if (Utils.isUndefined(this.catalogID)) {
		this.catalogID = this.catalog;
	}
	this.catalog = LOM.guessCatalog(this.catalogID);
}

LOM.createShortTitle = function(title){
	var shortTitle = null;
	// An abbreviated title to fit better into small spaces
	if (title.length > LOM.shortTitleLength) {
		shortTitle = title.replace(new RegExp("^(.{0," + (LOM.shortTitleLength - 3) + "}\\b).*"), "$1...");
	}
	else {
		shortTitle = title;
	}
	return shortTitle;
}


LOM.shortTitleLength = 40;
LOM.languageMap = {
	"bg": "Bulgarian",
	"cs": "Czech",
	"da": "Danish",
	"nl": "Dutch",
	"en": "English",
	"et": "Estonian",
	"fi": "Finnish",
	"fr": "French",
	"de": "German",
	"el": "Greek",
	"hu": "Hungarian",
	"ga": "Irish",
	"it": "Italian",
	"lv": "Latvian",
	"lt": "Lithuanian",
	"mt": "Maltese",
	"pl": "Polish",
	"pt": "Portuguese",
	"ro": "Romanian",
	"sk": "Slovak",
	"sl": "Slovenian",
	"es": "Spanish",
	"sv": "Swedish",
	
	"hr": "Croatian",
	"li": "Limburgish",
	"ru": "Russian",
	"zh": "Chinese"
};

Catalog = function(name, URL, iconURL){
	this.name = name;
	this.URL = URL;
	this.iconURL = iconURL;
}

/**
 * Guesses a catalog based on the catalog name from the contentId.
 *
 * (See func_inc_global.php get_catalog_fromID() for same functionality)
 *
 * @param {Object} contentId
 */
LOM.guessCatalogFromId = function(contentId) {
	var key = "";
	var prefix = contentId.substring(0, contentId.indexOf(":"));
	var suffix = contentId.substring(contentId.indexOf(":") + 1, contentId.length);
	
	if (prefix == "oai") {
		// Gets first string after prefix
		// e.g. oai:dynamo.asro.kuleuven.be:1MD, oai:oaicat.iconda.org:2
		key = suffix.substring(0, suffix.indexOf("."));
	}
	else if (prefix == 'mace') {
		// Gets first string after prefix
		// e.g. mace:rwo:1MD, mace:external:2MD
		key = suffix.substring(0, suffix.indexOf(":"));
	}
	else {
		// Uses prefix
		// e.g. dbpedia:162419b3-3e1a-11de
		key = prefix;
	}
	
	var catalog = LOM.guessCatalog(key);
	if (catalog.URL == "") {
		console.log("\tcontentId=" + contentId + ", suffix=" + suffix);
	}
	return catalog;
}

/**
 * Tries to create a catalog based on a key string.
 * Key is either from LOM.catalog, or from the beginning of the ID.
 */
LOM.guessCatalog = function(key){
	var catalog = new Catalog();
	
	if (!Utils.isUndefined(key) && key != null) 
		key = key.toLowerCase();
	
	/*
    * Arch'it (it)
      digital architecture magazine
    * Archiplanet (en)
      Wiki for architecture
    * architonic (en de it fr es)
      Products, Materials and Concepts in Architecture and Design
    * ARIADNE (en)
      Literature and documents
    * CUMINCAD (en)
      articles, in full or as references, from all major CAAD conferences worldwide
    * DYNAMO (en)
      DYNAmic Memory Online - case base containing more than 1000 reviewed architectural projects
    * ICONDA (en)
      The International CONstruction DAtabase
    * WINDS (en de)
      Web-based INtelligent Design tutoring System - architectural and construction course material
	*/
	
	switch (key) {
		case "dynamo":
			catalog.name = "DYNAMO";
			catalog.URL = "http://dynamo.asro.kuleuven.be";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/dynamo.gif";
			catalog.description = "DYNAmic Memory Online: more than 1000 reviewed architectural cases";
			break;
			
		case "winds":
			catalog.name = "WINDS";
			catalog.URL = "http://raft-app.fit.fraunhofer.de/cgi-bin/WebObjects/ale-ng";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/winds.gif";
			catalog.description = "Web-based INtelligent Design tutoring System: architectural and construction course material";
			break;
			
		case "deirb":
		case "iconda":
		case "oaicat":
			catalog.name = "ICONDA";
			catalog.URL = "http://www.irbdirekt.de/iconda/ppv.htm";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/iconda.gif";
			catalog.description = "The International CONstruction DAtabase";
			break;
			
		case "mace:rwo":
		case "dbpedia":
		case "rwo":
			catalog.name = "dbpedia";
			catalog.URL = "http://dbpedia.org";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/rwo.gif";
			catalog.description = "Extracted structured information from Wikipedia by the community";
			break;
			
		case "mace:external":
		case ":external:www":
		case "external:www":
		case "external":
			catalog.name = "web";
			catalog.URL = "";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/external.gif";
			catalog.description = "External web pages";
			break;
			
		case "cumincad":			
		case "cumincad:works":
		case "cumincad : works":
			catalog.name = "CUMINCAD";
			catalog.URL = "http://cumincad.scix.net/cgi-bin/works/Home";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/cumincad.gif";
			catalog.description = "References and full articles from all major CAAD conferences worldwide";
			break;
		
		case "archiplanet":	
		case "archiplanet.org":
			catalog.name = "archiplanet";
			catalog.URL = "http://www.archiplanet.org/wiki/Main_Page";
			// TODO: create thumbnail
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/archiplanet.gif";
			catalog.description = "Wiki for architecture";
			break;
			
		case "www.nextroom.at":
			catalog.name = "nextroom";
			catalog.URL = "http://www.nextroom.at";
			// TODO: create thumbnail
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/nextroom.gif";
			catalog.description = "European architecture webzine";
			break;

		case "arch'it":			
		case "www.architettura.supereva.com":
			catalog.name = "arch'it";
			catalog.URL = "http://architettura.it";
			// TODO: create thumbnail
			catalog.description = "Digital architecture magazine";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/archit.gif";
			break;
			
		case "columbus":
		case "columbus-portal.eu":
			catalog.name = "Columbus";
			catalog.URL = "http://www.columbus-portal.eu/";
			// TODO: create thumbnail
			catalog.description = "Innovative eLearning marketplace";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/columbus.gif";
			break;
			
		case "architonic.com":
		case "www.architonic.com":
			catalog.name = "Architonic";
			catalog.URL = "http://www.architonic.com/";
			// TODO: create thumbnail
			catalog.description = "Products, Materials and Concepts in Architecture and Design";
			catalog.iconURL = MACEConstants.rootURL + "img/repositories/architonic.gif";
			break;	
			
		case "architecture.it":
			catalog.name = "Architecture.it";
			catalog.URL = "http://www.architecture.it/";
			catalog.description = "Italian architectural portal";
			break;
		
		case "mimoa.eu":
			catalog.name = "MIMOA";
			catalog.URL = "http://mimoa.eu/";
			catalog.description = "mi modern architecture - a free user generated Modern Architecture guide with addresses and maps";
			break;
		
		case "copyrightbookshop.be":
			catalog.name = "copyrightbookshop";
			catalog.URL = "http://www.copyrightbookshop.be";
			catalog.description = "Art and Architecture Bookshop";
			break;
		
		case "whc.unesco.org":
			catalog.name = "UNESCO World Heritage List of Sites";
			catalog.URL = "http://whc.unesco.org/";
			catalog.description = "UNESCO List of heritage sites";
			break;
		
		case "cad-3d.blogspot.com":
			catalog.name = "CAD-3D";
			catalog.URL = "http://cad-3d.blogspot.com/";
			catalog.description = "Blog on CAD, CAAD and 3D tools for use in architecture";
			break;
		
		case "caadasro":
			catalog.name = "CAAD@ASRO";
			catalog.URL = "http://caad.asro.kuleuven.be";
			catalog.description = "CAAD Tutorials for students of Architecture";
			break;
		
		case "macerepodb":
			catalog.name = "ASRO MACE repo DB";
			catalog.URL = "http://caad.asro.kuleuven.be/MACEREPODB/";
			catalog.description = "Database of architectural repositories";
			break;
		
		case "baufo.irbdirekt.de":
			catalog.name = "BAUFO";
			catalog.URL = "http://www.irbdirekt.de/baufo/";
			catalog.description = "Descriptions of building research projects";
			break;
		
		case "retro.seals.ch":
			catalog.name = "Baugedächtnis Schweiz Online";
			catalog.URL = "http://retro.seals.ch/";
			catalog.description = "Digitized journals 'Memory of Swiss construction'";
			break;
		
		case "archdaily.com":
			catalog.name = "Arch Daily";
			catalog.URL = "http://www.archdaily.com";
			catalog.description = "aily blog with project reviews";
			break;	
			
		default:
			console.warn("unrecognized catalog", key);
			catalog.name = key;
			catalog.URL = "";
			catalog.iconURL = "";
	}
	
	return catalog;
}



/**
 * ResultList component.
 *	
 */

function ResultList($element) {
	ResultList.baseConstructor.call(this, $element);

	this.initDOMElems();
	this.initPageNavigation();

	this.listElementTemplate = ResultList.defaultListElementTemplate;
	// extra for author42-integration
	var context = parent.document.getElementById("externalIFrame");
	if(context != null){
		this.listElementTemplate = ResultList.author42ListElementTemplate;
	}
	// end

	this.reset();
}

ResultList.extend(Component);

ResultList.LOADING_MESSAGE="loading_message";

/*

	PUBLIC 
	methods and event handlers

*/

ResultList.prototype.reset = function(){		
	this.displayResults();
}

ResultList.prototype.displayResults = function(results, message, currentPage, numPages) {
	
	if(results == undefined){
		results=[];
	}
	
	if(numPages == undefined || currentPage==undefined || numPages<2){
		this.$pageNavigation.hide();
	} else {
		this.$pageNavigation.show();
		this.pageNavigation.reset(numPages, currentPage);
	}
	
	this.displayMessage(message);
	this.createTiles(results);
	
	// add "next page" link
	if(currentPage<numPages){

		this.$resultList.addClass("clearfix");
		this.$resultList.append("<button id='nextPage' style='float:right; margin-right:20px;'>Next page</button>");
		var _this=this;
		$("#nextPage").click(function(){_this.onPageChanged(++currentPage);return false;});
	}
}

ResultList.prototype.displayMessage = function(msg, text){
	if(msg==ResultList.LOADING_MESSAGE){
		this.$resultListTitle.empty().append("<span class=\"resultListLoadingMessage\">Searching for: "+ text + "...</span>");
		this.$resultList.hide();
	} else {
		this.$resultList.fadeIn();
		this.$resultListTitle.empty().append(msg);
	};
}

ResultList.prototype.setListElementTemplate = function(htmlTemplate){
	this.listElementTemplate=htmlTemplate;
}

/*
	"OVERWRITEABLES" 
*/

// triggered when a result tile is clicked
// @param searchResult: a structured search result object passed from the serviceConnector


ResultList.prototype.onPageChanged = function(pageNum){
	console.log("ResultList onPageChanged "+pageNum);
}

/*
	
	List tile templates
	
*/

// normal search result display
ResultList.defaultListElementTemplate = ''
	+ '<li>'
	
	+ '<a class="searchResultLink" style="background-image:url('+MACEConstants.rootURL+'components/search/php/getThumbnail.php?lomId={%=id%});" title="View this content" onclick="app.SessionTracker.saveAction(\'resultList\', \'goToPage\', \'{%=url%}\', \'{%=id%}\');" href="{%=url%}" target="_blank">'	

	+ '<span class="title"><span class="repository showTooltip" title="{%=catalog.description%}">{%=catalog.name%}</span>{%=shortTitle%}</span>'
	+ '<span class="description">{%=description%}</span>'

 	+ '<a class="metaDataBar clearfix" title="View and edit MACE metadata" href="'+MACEConstants.detailsBaseSrc + '{%=id%}">'	
	
	+ '<div class="viewMetadata">more info</div>'
	+ '</a>'

	+ '</a></li>';

// for author42 context
ResultList.author42ListElementTemplate = ''
	+ '<li>'
	
	+ '<a class="searchResultLink" style="background-image:url('+MACEConstants.rootURL+'components/search/php/getThumbnail.php?lomId={%=id%});" title="View this content" onclick="app.SessionTracker.saveAction(\'resultList\', \'goToPage\', \'{%=url%}\', \'{%=id%}\');" href="{%=url%}" target="_blank">'	

	+ '<span class="title"><span class="repository showTooltip" title="{%=catalog.description%}">{%=catalog.name%}</span>{%=shortTitle%}</span>'
	+ '<span class="description">{%=description%}</span>'
	+ '</a>'

	+ '<div style="text-align: right; font-size: 0.9em; padding: 0.3em 1em; border: 1px solid #999999; border-left-color: #FFF; border-top-color: #FFF; background-color: #EEEEEE; ">select for use <input type="checkbox" name="inputauthor42" value="{%=url%}" onclick="if(this.checked) parent.takeSelected(this.value); else parent.deleteSelected(this.value);" /></div>'
	
	+ '</li>';
	
// for user page
ResultList.bookmarkListElementTemplate = ''
	+ '<li>'
	
	+ '<a class="searchResultLink" style="background-image:url('+MACEConstants.rootURL+'components/search/php/getThumbnail.php?lomId={%=id%});" title="View this content" onclick="app.SessionTracker.saveAction(\'resultList\', \'goToPage\', \'{%=url%}\', \'{%=id%}\');" href="{%=url%}" target="_blank">'	

	+ '<span class="title"><span class="repository showTooltip" title="{%=catalog.description%}">{%=catalog.name%}</span>{%=title%}</span>'
	+ '<div class="tags clearfix">'
	+ '{% var tagArray = tags.split(","); %}'
	+ '{% for (var i = 0; i < tagArray.length; i++) { %}'
	+ '{% if (tagArray[i].length > 0) { %}'
	+ '<span>{%= tagArray[i] %}</span>'
	+ '{% } %}'
	+ '{% } %}</div>'
	+ '<span class="description">{%=description%}</span>'

	
 	+ '<a class="metaDataBar clearfix" title="View and edit MACE metadata" href="'+MACEConstants.detailsBaseSrc + '{%=id%}">'	
	//+ '<div class="rating_{%=myRating%} rating " title="Rating:{%=myRating%}">&nbsp;</div>'	
	+ '<div class="viewMetadata">more info</div>'
	+ '</a>'

	+ '</a></li>';
	/*
	+ '<li>'
	
 	+ '<a class="metaDataBar clearfix" title="View and edit MACE metadata" href="' + MACEConstants.detailsBaseSrc + '{%=id%}">'	
	+ '<div class="repository" style="background-image:url({%=catalog.iconURL%})">{%=catalog.name%}</div>'
	+ '<div class="rating_{%=myRating%} rating " title="Rating:{%=myRating%}">&nbsp;</div>'
	+ '</a>'
	
	+ '<a class="searchResultLink" title="View this content" onclick="app.SessionTracker.saveAction(\'resultList\', \'goToPage\', \'{%=url%}\', \'{%=id%}\');" href="{%=url%}" target="_blank">'	
	+ '<span class="title" title="{%=title%}">{%=title%}</span>'
	+ '<div class="tags clearfix">'
	+ '{% var tagArray = tags.split(","); %}'
	+ '{% for (var i = 0; i < tagArray.length; i++) { %}'
	+ '{% if (tagArray[i].length > 0) { %}'
	+ '<span>{%= tagArray[i] %}</span>'
	+ '{% } %}'
	+ '{% } %}</div>'
	
	+ '</a></li>';
	*/
/*

	INTERNAL

*/

ResultList.prototype.initDOMElems = function(){
	this.$element.empty();
	
	this.$element.append('<div class="resultListHeader"></div>');
	this.$header=$(".resultListHeader", this.$element);
	
	this.$header.append('<div class="pageNavigation"></div>');
	this.$pageNavigation=$(".pageNavigation", this.$element);
	
	this.$header.append('<div class="resultListTitle"></div>');
	this.$resultListTitle=$(".resultListTitle", this.$element);
	
	this.$element.append('<div class="searchResults"><ul class="resultList"></ul></div>');	
	this.$resultList=$(".searchResults > ul", this.$element);
}

ResultList.prototype.initPageNavigation = function(){
	this.pageNavigation=new PageNavigation(this.$pageNavigation, this);

	var _this=this;
	this.pageNavigation.onPageChanged = function(pageNum){
		_this.onPageChanged(pageNum);
	}

}

ResultList.prototype.createTiles = function(results){
	this.$resultList.empty();
	
	for (var i = 0; i < results.length; i++) {
		// REVISIT: HACK for old ALOE urls
		results[i].url=results[i].url.split("http://mace-project").join("http://portal.mace-project");
		
		var htmlString = tmpl(this.listElementTemplate, results[i]);
		var t = this.$resultList.append(htmlString);
	}	
	
	// add tooltip
	this.$resultList.find("a").tipsy({fade: true, gravity:"s"});

}

/*
 * jQuery UI 1.7
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
 * jQuery UI Tabs 1.7
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	ui.core.js
 */(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;
// global object to store display labels for efficient access
	MACE = (typeof MACE != "undefined") ? MACE : {};
	var l = MACE.labelDict={};
	/*
CLASSIFICATION
*/
l["lom.classification.taxonpath.taxon.id"] = {
	"root":	"MACE taxonomy",
	"group3":	"Conceptual design",
	"id5":	"Functional Typology",
	"functionalTypology110":	"commercial",
	"functionalTypology120":	"banking",
	"functionalTypology170":	"supermarket",
	"functionalTypology140":	"shop",
	"functionalTypology130":	"fair",
	"functionalTypology150":	"market",
	"functionalTypology180":	"mall",
	"functionalTypology160":	"open air market",
	"Thesaurus_Instance_10085":	"laundry",
	"Thesaurus_Instance_10000":	"warehouse",
	"functionalTypology370":	"recreational facilities",
	"functionalTypology450":	"urban park",
	"functionalTypology460":	"exposition pavilion",
	"functionalTypology420":	"cinema",
	"functionalTypology470":	"baths",
	"functionalTypology390":	"cultural center",
	"functionalTypology410":	"auditorium",
	"functionalTypology440":	"restaurant",
	"functionalTypology400":	"theater",
	"functionalTypology430":	"museum",
	"Thesaurus_Instance_10142":	"aquarium",
	"Thesaurus_Instance_10143":	"planetarium",
	"Thesaurus_Instance_10145":	"greenhouse",
	"Thesaurus_Instance_10179":	"zoo",
	"Thesaurus_Instance_10191":	"playground",
	"functionalTypology700":	"infrastructure",
	"functionalTypology760":	"aqueduct",
	"functionalTypology750":	"bridge",
	"functionalTypology770":	"covered passage",
	"functionalTypology710":	"tunnel",
	"functionalTypology720":	"shaft",
	"functionalTypology790":	"pipeline",
	"functionalTypology730":	"embankment",
	"functionalTypology800":	"street",
	"functionalTypology780":	"tower",
	"functionalTypology740":	"tank",
	"functionalTypology810":	"square",
	"Thesaurus_Instance_10178":	"power station",
	"Thesaurus_Instance_10195":	"noise protection wall",
	"Thesaurus_Instance_10196":	"subway",
	"Thesaurus_Instance_20003":	"fence",
	"functionalTypology670":	"rural buildings",
	"Thesaurus_Instance_10194":	"rural home",
	"Thesaurus_Instance_10001":	"winery",
	"functionalTypology680":	"monuments",
	"Thesaurus_Instance_10187":	"cenotaph",
	"functionalTypology690":	"castles",
	"functionalTypology480":	"tourism facilities",
	"functionalTypology490":	"hotel",
	"functionalTypology510":	"touristic village",
	"functionalTypology500":	"campsite",
	"Thesaurus_Instance_10192":	"marina",
	"Thesaurus_Instance_10193":	"bathing center",
	"Thesaurus_Instance_10198":	"shelter",
	"functionalTypology300":	"educational facilities",
	"functionalTypology360":	"archives",
	"functionalTypology350":	"library",
	"functionalTypology330":	"university",
	"functionalTypology310":	"school",
	"functionalTypology340":	"research institute",
	"functionalTypology320":	"nursery school",
	"Thesaurus_Instance_10141":	"congress center",
	"Thesaurus_Instance_10154":	"conservatory",
	"Thesaurus_Instance_10199":	"observatory",
	"Thesaurus_Instance_10197":	"meeting center",
	"functionalTypology520":	"sports facilities",
	"functionalTypology550":	"pool",
	"functionalTypology540":	"gymnasium",
	"functionalTypology530":	"stadium",
	"Thesaurus_Instance_10184":	"skating rink",
	"Thesaurus_Instance_10185":	"indoor tennis court",
	"functionalTypology560":	"religious buildings",
	"functionalTypology580":	"cathedral",
	"functionalTypology650":	"funerary sepulchral architecture",
	"functionalTypology610":	"mosque",
	"functionalTypology620":	"minaret",
	"functionalTypology600":	"convent",
	"functionalTypology640":	"cemetery",
	"functionalTypology590":	"monastic building",
	"functionalTypology570":	"church",
	"functionalTypology660":	"temple",
	"functionalTypology630":	"synagogue",
	"Thesaurus_Instance_10188":	"pantheon",
	"Thesaurus_Instance_10186":	"sanctuary",
	"functionalTypology60":	"offices",
	"functionalTypology260":	"health facilities",
	"functionalTypology290":	"thermal bath",
	"functionalTypology270":	"hospital",
	"functionalTypology280":	"charitable institution",
	"Thesaurus_Instance_10089":	"retirement home",
	"functionalTypology250":	"industrial",
	"Thesaurus_Instance_10086":	"mill",
	"Thesaurus_Instance_10087":	"mine",
	"Thesaurus_Instance_10088":	"paper mill",
	"functionalTypology190":	"transportation",
	"functionalTypology200":	"underground station",
	"functionalTypology210":	"bus station",
	"functionalTypology220":	"garage",
	"functionalTypology240":	"airport",
	"functionalTypology230":	"dock",
	"Thesaurus_Instance_20002":	"gas station",
	"functionalTypology70":	"public buildings",
	"functionalTypology80":	"government",
	"functionalTypology90":	"courthouse",
	"functionalTypology100":	"military installation",
	"Thesaurus_Instance_10082":	"police headquarters",
	"Thesaurus_Instance_10083":	"police station",
	"Thesaurus_Instance_10084":	"post office",
	"Thesaurus_Instance_10183":	"fire station",
	"Thesaurus_Instance_10190":	"prison",
	"functionalTypology00":	"residential",
	"functionalTypology40":	"palace",
	"functionalTypology10":	"apartment building",
	"functionalTypology30":	"multiple family dwelling",
	"functionalTypology50":	"social housing",
	"functionalTypology20":	"single family dwelling",
	"Thesaurus_Instance_10147":	"boat house",
	"Thesaurus_Instance_10151":	"cottage",
	"Thesaurus_Instance_10180":	"student housing",
	"Thesaurus_Instance_10181":	"weekend house",
	"Thesaurus_Instance_10182":	"home for disabled",
	"Thesaurus_Instance_10189":	"orphanage",
	"functionalTypology380":	"multi-functional center",
	"id15":	"Form Typology",
	"formTypology100":	"tower",
	"formTypology540":	"bit-hilani",
	"formTypology690":	"thòlos",
	"formTypology710":	"mègaron",
	"formTypology530":	"tucul",
	"formTypology80":	"palladian villa",
	"formTypology190":	"linear-plan",
	"formTypology120":	"colombaia tower",
	"formTypology30":	"patio building",
	"formTypology480":	"dammuso",
	"formTypology760":	"témenos",
	"formTypology50":	"slab building",
	"formTypology400":	"clear span buildings",
	"formTypology00":	"detached house",
	"formTypology610":	"festung trient",
	"formTypology260":	"arcade building",
	"formTypology430":	"nuraghe",
	"formTypology590":	"trullo",
	"formTypology550":	"pajaru",
	"formTypology740":	"talayotes",
	"formTypology110":	"wind tower",
	"formTypology210":	"cruciform-plan",
	"formTypology90":	"insulae",
	"formTypology750":	"syringe tomb",
	"formTypology290":	"greek temple",
	"formTypology450":	"mastaba",
	"formTypology390":	"cover bridge",
	"formTypology460":	"pagoda (Asian temple)",
	"formTypology200":	"hypostyle-plan",
	"formTypology730":	"well temple",
	"formTypology320":	"greek house",
	"formTypology150":	"balcony building",
	"formTypology130":	"stepped house",
	"formTypology230":	"clustered plan",
	"formTypology600":	"masseria",
	"formTypology140":	"terrace houses",
	"formTypology170":	"greek theatre",
	"formTypology670":	"necropolis",
	"formTypology630":	"maso",
	"formTypology560":	"ghorfa",
	"formTypology60":	"colonnade building",
	"formTypology650":	"qasba",
	"formTypology280":	"egyptian temple",
	"formTypology660":	"tofet",
	"formTypology380":	"suspension bridge",
	"formTypology410":	"skyscraper",
	"formTypology420":	"ziqqurat",
	"formTypology330":	"roman house",
	"formTypology370":	"arch bridge",
	"formTypology350":	"roman baths",
	"formTypology40":	"courtyard building",
	"formTypology160":	"roman theatre",
	"formTypology580":	"french garden",
	"formTypology180":	"central-plan",
	"formTypology70":	"palace",
	"formTypology570":	"italian garden",
	"formTypology700":	"acropolis",
	"formTypology360":	"roman anphitheatre",
	"formTypology440":	"dolmen",
	"formTypology490":	"domus",
	"formTypology500":	"igloo",
	"formTypology510":	"isba",
	"formTypology250":	"grid plan",
	"formTypology680":	"foggare",
	"formTypology240":	"basilican-plan",
	"formTypology270":	"rotunda",
	"formTypology470":	"lombardy court",
	"formTypology770":	"agorà",
	"formTypology20":	"row house",
	"formTypology720":	"dromos",
	"formTypology340":	"roman villa",
	"formTypology310":	"etruscan temple",
	"formTypology620":	"kozolec",
	"formTypology300":	"roman temple",
	"formTypology220":	"claustral-plan",
	"formTypology10":	"semi-detached house",
	"formTypology640":	"jinja",
	"formTypology520":	"curtain",
	"id13":	"Form characteristics",
	"formCharacteristics00":	"formal composition concepts",
	"formCharacteristics250":	"plasticity",
	"formCharacteristics200":	"complexity",
	"formCharacteristics180":	"symmetry",
	"formCharacteristics260":	"liquid shape",
	"formCharacteristics30":	"asymmetry",
	"formCharacteristics170":	"setback",
	"formCharacteristics230":	"simplicity",
	"formCharacteristics90":	"horizontality",
	"formCharacteristics40":	"balance",
	"formCharacteristics140":	"plan",
	"formCharacteristics220":	"harmony",
	"formCharacteristics130":	"obliquity",
	"formCharacteristics100":	"linearity",
	"formCharacteristics70":	"enfilade",
	"formCharacteristics240":	"unity",
	"formCharacteristics10":	"alignment",
	"formCharacteristics60":	"disproportion",
	"formCharacteristics50":	"contrast",
	"formCharacteristics190":	"verticality",
	"formCharacteristics80":	"frontality",
	"formCharacteristics270":	"carved shape",
	"formCharacteristics210":	"radiality",
	"formCharacteristics120":	"monumentality",
	"formCharacteristics150":	"proportion",
	"formCharacteristics160":	"golden section",
	"formCharacteristics110":	"massing",
	"formCharacteristics20":	"articulation",
	"formCharacteristics280":	"geometric figures",
	"formCharacteristics400":	"blob",
	"formCharacteristics360":	"pyramid",
	"formCharacteristics320":	"hemisphere",
	"formCharacteristics370":	"tetrahedron",
	"formCharacteristics310":	"cylinder",
	"formCharacteristics330":	"polyhedron",
	"formCharacteristics390":	"spiral",
	"formCharacteristics340":	"cube",
	"formCharacteristics350":	"parallelepiped",
	"formCharacteristics290":	"plane figure",
	"formCharacteristics380":	"sphere",
	"formCharacteristics410":	"hyperbola",
	"formCharacteristics300":	"cone",
	"id11":	"Project Actions",
	"projectActions330":	"distortion",
	"projectActions350":	"shearing",
	"projectActions380":	"distorting",
	"projectActions460":	"scaling",
	"projectActions370":	"compressing",
	"projectActions530":	"wrapping",
	"projectActions440":	"morphing",
	"projectActions510":	"warping",
	"projectActions480":	"torquing",
	"projectActions420":	"inclining",
	"projectActions500":	"voiding",
	"projectActions450":	"nesting",
	"projectActions400":	"extruding",
	"projectActions410":	"folding",
	"projectActions390":	"extending",
	"projectActions520":	"weaving",
	"projectActions360":	"bending",
	"projectActions470":	"thinning",
	"projectActions340":	"interferencing",
	"projectActions490":	"twisting",
	"projectActions430":	"inverting",
	"Thesaurus_Instance_10139":	"sweep",
	"projectActions00":	"composition",
	"projectActions60":	"closing",
	"projectActions50":	"bordering",
	"projectActions220":	"striating",
	"projectActions120":	"doubling",
	"projectActions160":	"isolating",
	"projectActions100":	"disassembling",
	"projectActions90":	"decomposing",
	"projectActions190":	"marking",
	"projectActions230":	"superposition",
	"projectActions200":	"repeating",
	"projectActions140":	"gridding",
	"projectActions130":	"grafting",
	"projectActions180":	"limiting",
	"projectActions110":	"displacing",
	"projectActions30":	"alternating",
	"projectActions210":	"shielding",
	"projectActions20":	"adding",
	"projectActions150":	"hierarchizing",
	"projectActions80":	"covering",
	"projectActions40":	"bonding",
	"projectActions170":	"layering",
	"projectActions10":	"including",
	"projectActions70":	"connecting",
	"projectActions240":	"disposition",
	"projectActions300":	"projecting",
	"projectActions270":	"grouping",
	"projectActions250":	"flipping over",
	"projectActions260":	"gathering",
	"projectActions280":	"intersecting",
	"projectActions320":	"shifting",
	"projectActions310":	"rotating",
	"projectActions290":	"interweaving",
	"id10":	"Project Cues",
	"projectCues00":	"expression form",
	"projectCues60":	"fragmentary",
	"projectCues40":	"dark",
	"projectCues50":	"discontinuity",
	"projectCues90":	"modular",
	"projectCues20":	"bundles",
	"projectCues100":	"rhythmical",
	"projectCues80":	"light",
	"projectCues110":	"slender",
	"projectCues120":	"slight",
	"projectCues70":	"irregular",
	"projectCues30":	"continuous",
	"projectCues10":	"bulky",
	"projectCues130":	"deep sense",
	"projectCues190":	"conventional",
	"projectCues410":	"raw",
	"projectCues380":	"pleasant",
	"projectCues300":	"homogeneous",
	"projectCues430":	"regular",
	"projectCues240":	"flexible",
	"projectCues530":	"unitary",
	"projectCues220":	"elegant",
	"projectCues490":	"stiff",
	"projectCues320":	"irregular",
	"projectCues330":	"light",
	"projectCues210":	"dynamical",
	"projectCues250":	"fragile",
	"projectCues260":	"free",
	"projectCues280":	"heavy",
	"projectCues450":	"rigid",
	"projectCues400":	"rational",
	"projectCues140":	"accordant",
	"projectCues150":	"arbitrary",
	"projectCues460":	"rigorous",
	"projectCues170":	"complex",
	"projectCues390":	"powerful",
	"projectCues370":	"noisy",
	"projectCues360":	"natural",
	"projectCues520":	"uncertain",
	"projectCues270":	"harmonious",
	"projectCues420":	"regular",
	"projectCues540":	"unstuctured",
	"projectCues340":	"limpid",
	"projectCues230":	"evocative",
	"projectCues180":	"compression",
	"projectCues480":	"static",
	"projectCues350":	"metaphor",
	"projectCues500":	"strong",
	"projectCues440":	"resistant",
	"projectCues470":	"simple",
	"projectCues160":	"artificial",
	"projectCues510":	"technological",
	"projectCues550":	"weak",
	"projectCues290":	"heterogenous",
	"projectCues200":	"definite",
	"projectCues310":	"innovative",
	"projectCues560":	"metaphoric reference",
	"projectCues620":	"mineral",
	"projectCues660":	"vegetation",
	"projectCues590":	"dance",
	"projectCues570":	"blades",
	"projectCues610":	"insect kin",
	"projectCues630":	"pixelation",
	"projectCues580":	"cloud",
	"projectCues600":	"explosion",
	"projectCues640":	"ribbon",
	"projectCues670":	"wings",
	"projectCues650":	"slabs",
	"Thesaurus_Instance_10136":	"water",
	"Thesaurus_Instance_10149":	"silo",
	"id12":	"Relation with Context",
	"relationWithTheContext50":	"conceptual relation",
	"relationWithTheContext80":	"inversion",
	"relationWithTheContext120":	"uniformity",
	"relationWithTheContext90":	"typological uniformity",
	"relationWithTheContext100":	"estrangement",
	"relationWithTheContext60":	"hiding",
	"relationWithTheContext70":	"contrast",
	"relationWithTheContext110":	"dialogue",
	"relationWithTheContext00":	"spatial relation",
	"relationWithTheContext20":	"receding",
	"relationWithTheContext10":	"alignment",
	"relationWithTheContext30":	"advancing",
	"relationWithTheContext40":	"heading",
	"id14":	"Perceptive Qualities",
	"perceptiveQuality230":	"visual qualities",
	"perceptiveQuality370":	"transparent",
	"perceptiveQuality240":	"bright",
	"perceptiveQuality330":	"opaque",
	"perceptiveQuality350":	"polychrome",
	"perceptiveQuality360":	"monochrome",
	"perceptiveQuality250":	"dark",
	"perceptiveQuality310":	"reflecting",
	"perceptiveQuality300":	"polish",
	"perceptiveQuality380":	"translucent",
	"perceptiveQuality320":	"mirroring",
	"perceptiveQuality280":	"colourless",
	"perceptiveQuality340":	"sparkling",
	"perceptiveQuality260":	"colorful",
	"perceptiveQuality270":	"vivid",
	"perceptiveQuality290":	"soft coloured",
	"perceptiveQuality390":	"tactile qualities",
	"perceptiveQuality460":	"smooth",
	"perceptiveQuality470":	"rough",
	"perceptiveQuality430":	"cold",
	"perceptiveQuality450":	"hard",
	"perceptiveQuality410":	"wet",
	"perceptiveQuality440":	"soft",
	"perceptiveQuality400":	"dry",
	"perceptiveQuality420":	"warm",
	"perceptiveQuality00":	"psycho perceptive quality",
	"perceptiveQuality210":	"deep",
	"perceptiveQuality130":	"clear",
	"perceptiveQuality60":	"immaterial",
	"perceptiveQuality110":	"strong",
	"perceptiveQuality160":	"clear",
	"perceptiveQuality170":	"precise",
	"perceptiveQuality90":	"materic",
	"perceptiveQuality180":	"indefinite",
	"perceptiveQuality100":	"weak",
	"perceptiveQuality200":	"vague",
	"perceptiveQuality10":	"rigid",
	"perceptiveQuality140":	"muffled",
	"perceptiveQuality40":	"airy",
	"perceptiveQuality120":	"limpid",
	"perceptiveQuality70":	"inconsistent",
	"perceptiveQuality50":	"diaphanous",
	"perceptiveQuality20":	"solid",
	"perceptiveQuality150":	"distorted",
	"perceptiveQuality220":	"gloomy",
	"perceptiveQuality80":	"aint",
	"perceptiveQuality190":	"confuse",
	"perceptiveQuality30":	"soft",
	"group4":	"Context",
	"id9":	"Geographic Context",
	"geographicContext130":	"landforms",
	"geographicContext340":	"valleys",
	"geographicContext270":	"mesas",
	"geographicContext350":	"volcanoes",
	"geographicContext240":	"islands",
	"geographicContext200":	"escarpments",
	"geographicContext150":	"caverns",
	"geographicContext210":	"flats",
	"geographicContext170":	"cliffs",
	"geographicContext230":	"hills",
	"geographicContext300":	"peaks",
	"geographicContext160":	"caves",
	"geographicContext140":	"capes",
	"geographicContext280":	"mountains",
	"geographicContext190":	"eolian landforms",
	"geographicContext180":	"deserts",
	"geographicContext290":	"passes",
	"geographicContext320":	"shores",
	"geographicContext220":	"gullie",
	"geographicContext250":	"isthmuses",
	"geographicContext310":	"peninsulas",
	"geographicContext330":	"swales",
	"geographicContext260":	"massifs",
	"geographicContext00":	"bodies of water",
	"geographicContext50":	"fiords",
	"geographicContext20":	"bays",
	"geographicContext30":	"rivers",
	"geographicContext80":	"lagoons",
	"geographicContext110":	"pack ice",
	"geographicContext10":	"aquifers",
	"geographicContext70":	"icebergs",
	"geographicContext90":	"lakes",
	"geographicContext40":	"estuaries",
	"geographicContext120":	"wetlands",
	"geographicContext60":	"glaciers",
	"geographicContext100":	"oceans",
	"Thesaurus_Instance_2":	"waterfront",
	"id8":	"Urban Context",
	"urbanContext110":	"city center",
	"urbanContext70":	"historic district",
	"urbanContext00":	"agricultural land",
	"urbanContext10":	"historic landscape",
	"urbanContext130":	"rural area",
	"urbanContext30":	"raw land",
	"urbanContext100":	"acropolis",
	"urbanContext60":	"business district",
	"urbanContext150":	"urban fringe",
	"urbanContext40":	"wasteland",
	"urbanContext50":	"park",
	"urbanContext160":	"development area",
	"urbanContext140":	"urban area",
	"urbanContext90":	"residential district",
	"urbanContext170":	"growth city center",
	"urbanContext80":	"industrial district",
	"urbanContext20":	"industrial landscape",
	"urbanContext120":	"old town",
	"group1":	"Identification",
	"id1":	"Project Type",
	"projectType70":	"sculpture design",
	"projectType20":	"urban design",
	"projectType60":	"interior design",
	"projectType10":	"urban planning",
	"projectType00":	"natural landscape design",
	"projectType30":	"infrastructure design",
	"projectType50":	"building element design",
	"projectType40":	"building design",
	"Thesaurus_Instance_10148":	"installation",
	"id7":	"Intervention Type",
	"interventionType40":	"extraordinary maintenance",
	"interventionType70":	"demolition",
	"interventionType00":	"new construction",
	"interventionType60":	"restructuring",
	"interventionType10":	"widening",
	"interventionType30":	"ordinary maintenance",
	"interventionType50":	"restoration",
	"interventionType20":	"consolidation works",
	"group7":	"Theories and concepts",
	"id24":	"Theoretical Concepts",
	"theoreticalConcepts170":	"creative process",
	"theoreticalConcepts350":	"un-built projects",
	"theoreticalConcepts320":	"plan",
	"theoreticalConcepts270":	"genius",
	"theoreticalConcepts180":	"artist's intent",
	"theoreticalConcepts290":	"invention",
	"theoreticalConcepts240":	"designs",
	"theoreticalConcepts220":	"imagination",
	"theoreticalConcepts190":	"authorship",
	"theoreticalConcepts370":	"state",
	"theoreticalConcepts330":	"projects",
	"theoreticalConcepts280":	"influence",
	"theoreticalConcepts340":	"student projects",
	"theoreticalConcepts230":	"inspiration",
	"theoreticalConcepts300":	"model",
	"theoreticalConcepts260":	"expression",
	"theoreticalConcepts360":	"sprezzatura",
	"theoreticalConcepts250":	"execution",
	"theoreticalConcepts210":	"creativity",
	"theoreticalConcepts200":	"craftsmanship",
	"theoreticalConcepts310":	"originality",
	"theoreticalConcepts3170":	"physical sciences concepts",
	"theoreticalConcepts3250":	"spectrum",
	"theoreticalConcepts3190":	"capillarity",
	"theoreticalConcepts3260":	"vibration",
	"theoreticalConcepts3200":	"diffraction",
	"theoreticalConcepts3210":	"earth sciences concepts",
	"theoreticalConcepts3220":	"magnetism and related concepts",
	"theoreticalConcepts3180":	"absorption coefficient",
	"theoreticalConcepts3240":	"reflection",
	"theoreticalConcepts3230":	"oscillation",
	"theoreticalConcepts1810":	"culture and related concepts",
	"theoreticalConcepts2140":	"cultural movements and attitudes",
	"theoreticalConcepts2290":	"feminism",
	"theoreticalConcepts2300":	"golden age",
	"theoreticalConcepts2380":	"multiculturalism",
	"theoreticalConcepts2440":	"traditionalism",
	"theoreticalConcepts2390":	"neo-avant-garde",
	"theoreticalConcepts2360":	"materialism",
	"theoreticalConcepts2330":	"humanism",
	"theoreticalConcepts2220":	"camp",
	"theoreticalConcepts2250":	"ethnocentrism",
	"theoreticalConcepts2430":	"radicalism",
	"theoreticalConcepts2340":	"iconoclasm",
	"theoreticalConcepts2370":	"Medievalism",
	"theoreticalConcepts2240":	"elitism",
	"theoreticalConcepts2200":	"avant-garde",
	"theoreticalConcepts2210":	"Bohemianism",
	"theoreticalConcepts2180":	"antiquarianism",
	"theoreticalConcepts2320":	"hermetism",
	"theoreticalConcepts2420":	"provincialism",
	"theoreticalConcepts2170":	"aniconism",
	"theoreticalConcepts2310":	"Hellenism",
	"theoreticalConcepts2190":	"archaism",
	"theoreticalConcepts2260":	"exoticism",
	"theoreticalConcepts2270":	"Orientalism",
	"theoreticalConcepts2280":	"Japonism",
	"theoreticalConcepts2350":	"illuminism",
	"theoreticalConcepts2230":	"dandyism",
	"theoreticalConcepts2400":	"new wave",
	"theoreticalConcepts2150":	"amateurism",
	"theoreticalConcepts2160":	"dilettantism",
	"theoreticalConcepts2410":	"popular culture",
	"theoreticalConcepts1820":	"culture-related concepts",
	"theoreticalConcepts1970":	"nudity",
	"theoreticalConcepts2110":	"vocabulary",
	"theoreticalConcepts1960":	"mass media",
	"theoreticalConcepts1930":	"language",
	"theoreticalConcepts2010":	"race",
	"theoreticalConcepts2080":	"taboo",
	"theoreticalConcepts1870":	"civilization",
	"theoreticalConcepts1900":	"dress",
	"theoreticalConcepts2030":	"play",
	"theoreticalConcepts1840":	"culture",
	"theoreticalConcepts2120":	"Volksgeist",
	"theoreticalConcepts2100":	"visual literacy",
	"theoreticalConcepts1920":	"fashion",
	"theoreticalConcepts2000":	"philanthropy",
	"theoreticalConcepts1850":	"genius",
	"theoreticalConcepts2040":	"significant",
	"theoreticalConcepts2130":	"Zeitgeist",
	"theoreticalConcepts1980":	"oral tradition",
	"theoreticalConcepts1860":	"postcolonialism",
	"theoreticalConcepts1890":	"customs",
	"theoreticalConcepts1880":	"codes",
	"theoreticalConcepts1950":	"literacy",
	"theoreticalConcepts2050":	"signified",
	"theoreticalConcepts1990":	"peace",
	"theoreticalConcepts2020":	"recreation",
	"theoreticalConcepts2090":	"travel",
	"theoreticalConcepts2060":	"secrecy",
	"theoreticalConcepts1910":	"ethnicity",
	"theoreticalConcepts1940":	"leisure",
	"theoreticalConcepts2070":	"semiotics",
	"theoreticalConcepts1830":	"cultural heritage",
	"theoreticalConcepts2990":	"computer science concepts",
	"theoreticalConcepts3010":	"virtual reality",
	"theoreticalConcepts3000":	"cyberspace",
	"theoreticalConcepts3020":	"mathematical concepts",
	"theoreticalConcepts3040":	"equations",
	"theoreticalConcepts3150":	"statistics-related concepts",
	"theoreticalConcepts3130":	"scalars",
	"theoreticalConcepts3140":	"series",
	"theoreticalConcepts3060":	"geometric concepts",
	"theoreticalConcepts3110":	"ratios",
	"theoreticalConcepts3070":	"infinity",
	"theoreticalConcepts3100":	"numbers",
	"theoreticalConcepts3090":	"mathematical models",
	"theoreticalConcepts3120":	"roots",
	"theoreticalConcepts3080":	"logarithms",
	"theoreticalConcepts3030":	"algorithms",
	"theoreticalConcepts3050":	"functions",
	"theoreticalConcepts3160":	"vectors",
	"theoreticalConcepts620":	"concepts in the arts",
	"theoreticalConcepts1570":	"critical theories",
	"theoreticalConcepts1730":	"period",
	"theoreticalConcepts1580":	"critical regionalism",
	"theoreticalConcepts1620":	"structuralism",
	"theoreticalConcepts1600":	"post-structuralism",
	"theoreticalConcepts1710":	"masterpiece",
	"theoreticalConcepts1680":	"intermedia",
	"theoreticalConcepts1750":	"revival",
	"theoreticalConcepts1780":	"court style",
	"theoreticalConcepts1720":	"paragone",
	"theoreticalConcepts1610":	"psychologism",
	"theoreticalConcepts1760":	"school",
	"theoreticalConcepts1670":	"hermeneutics",
	"theoreticalConcepts1640":	"détournement",
	"theoreticalConcepts1690":	"intertextuality",
	"theoreticalConcepts1660":	"Gesamtkunstwerk",
	"theoreticalConcepts1740":	"provenance",
	"theoreticalConcepts1800":	"theme",
	"theoreticalConcepts1630":	"decorum",
	"theoreticalConcepts1590":	"deconstruction",
	"theoreticalConcepts1770":	"style",
	"theoreticalConcepts1650":	"gaze",
	"theoreticalConcepts1790":	"technique",
	"theoreticalConcepts1700":	"kitsch",
	"theoreticalConcepts630":	"genres in the arts",
	"theoreticalConcepts1040":	"trench art",
	"theoreticalConcepts850":	"figurative art",
	"theoreticalConcepts970":	"religious art",
	"theoreticalConcepts980":	"rock art",
	"theoreticalConcepts760":	"court art",
	"theoreticalConcepts720":	"community art",
	"theoreticalConcepts880":	"funerary art",
	"theoreticalConcepts860":	"folk art",
	"theoreticalConcepts870":	"mingei",
	"theoreticalConcepts920":	"nonrepresentational art",
	"theoreticalConcepts810":	"ecological art",
	"theoreticalConcepts790":	"didactic art",
	"theoreticalConcepts1010":	"serial art",
	"theoreticalConcepts770":	"crafts",
	"theoreticalConcepts1000":	"self-taught art",
	"theoreticalConcepts930":	"outsider art",
	"theoreticalConcepts680":	"academic art",
	"theoreticalConcepts900":	"land arch",
	"theoreticalConcepts1030":	"street art",
	"theoreticalConcepts690":	"apocalyptic art",
	"theoreticalConcepts700":	"children's art",
	"theoreticalConcepts640":	"erotica",
	"theoreticalConcepts960":	"public art",
	"theoreticalConcepts650":	"pastoral",
	"theoreticalConcepts890":	"land art",
	"theoreticalConcepts780":	"cybernetic art",
	"theoreticalConcepts820":	"environmental art",
	"theoreticalConcepts910":	"naive art",
	"theoreticalConcepts710":	"commercial art",
	"theoreticalConcepts730":	"computer art",
	"theoreticalConcepts750":	"generative art",
	"theoreticalConcepts740":	"algorithmic art",
	"theoreticalConcepts840":	"fantastic art",
	"theoreticalConcepts800":	"dissident art",
	"theoreticalConcepts830":	"ethnic art",
	"theoreticalConcepts940":	"political art",
	"theoreticalConcepts990":	"cave art",
	"theoreticalConcepts660":	"propaganda",
	"theoreticalConcepts670":	"agit-prop",
	"theoreticalConcepts1050":	"vernacular furniture",
	"theoreticalConcepts1020":	"sofa art",
	"theoreticalConcepts950":	"primitive art",
	"theoreticalConcepts1060":	"historical, theoretical and critical concepts",
	"theoreticalConcepts1390":	"sculpture",
	"theoreticalConcepts1350":	"poetry",
	"theoreticalConcepts1160":	"artistic change",
	"theoreticalConcepts1310":	"legible",
	"theoreticalConcepts1110":	"modernism",
	"theoreticalConcepts1240":	"architecture",
	"theoreticalConcepts1190":	"oenology",
	"theoreticalConcepts1170":	"connoisseurship",
	"theoreticalConcepts1100":	"anti-modernism",
	"theoreticalConcepts1280":	"iconology",
	"theoreticalConcepts1380":	"revelation",
	"theoreticalConcepts1330":	"order/disorder",
	"theoreticalConcepts1400":	"self-referencial",
	"theoreticalConcepts1410":	"signs",
	"theoreticalConcepts1370":	"poetical message",
	"theoreticalConcepts1300":	"language",
	"theoreticalConcepts1340":	"painting",
	"theoreticalConcepts1210":	"form of contents",
	"theoreticalConcepts1250":	"cipher",
	"theoreticalConcepts1440":	"text",
	"theoreticalConcepts1220":	"substance of expresssion",
	"theoreticalConcepts1420":	"structure",
	"theoreticalConcepts1150":	"art for art's sake",
	"theoreticalConcepts1140":	"appropriation",
	"theoreticalConcepts1070":	"in-between",
	"theoreticalConcepts1130":	"Antique",
	"theoreticalConcepts1080":	"estrangement",
	"theoreticalConcepts1320":	"message",
	"theoreticalConcepts1360":	"poetics",
	"theoreticalConcepts1230":	"form of expression",
	"theoreticalConcepts1290":	"landscape",
	"theoreticalConcepts1200":	"substance of contents",
	"theoreticalConcepts1180":	"gastronomy",
	"theoreticalConcepts1260":	"discourse",
	"theoreticalConcepts1430":	"tectonic",
	"theoreticalConcepts1120":	"utopian architecture",
	"theoreticalConcepts1450":	"visual arts",
	"theoreticalConcepts1530":	"ut pictura poesis",
	"theoreticalConcepts1560":	"rasa",
	"theoreticalConcepts1520":	"primitive hut",
	"theoreticalConcepts1540":	"industry",
	"theoreticalConcepts1500":	"istoria",
	"theoreticalConcepts1550":	"visual language",
	"theoreticalConcepts1490":	"iconology",
	"theoreticalConcepts1480":	"iconography",
	"theoreticalConcepts1510":	"Kunstwollen",
	"theoreticalConcepts1470":	"disegno",
	"theoreticalConcepts1460":	"art theory",
	"theoreticalConcepts1270":	"iconography",
	"theoreticalConcepts1090":	"ambiguity",
	"theoreticalConcepts3740":	"social and economic geography concepts",
	"theoreticalConcepts3750":	"demographics",
	"theoreticalConcepts3840":	"location",
	"theoreticalConcepts3850":	"regions",
	"theoreticalConcepts3780":	"population",
	"theoreticalConcepts3810":	"residential mobility",
	"theoreticalConcepts3800":	"population density",
	"theoreticalConcepts3820":	"settlement patterns",
	"theoreticalConcepts3830":	"student mobility",
	"theoreticalConcepts3790":	"population change",
	"theoreticalConcepts3770":	"land use",
	"theoreticalConcepts3760":	"labor mobility",
	"theoreticalConcepts380":	"forms of expression",
	"theoreticalConcepts470":	"regionalism",
	"theoreticalConcepts400":	"classicism",
	"theoreticalConcepts460":	"realism",
	"theoreticalConcepts430":	"functionalism",
	"theoreticalConcepts410":	"eclecticism",
	"theoreticalConcepts500":	"visual arts",
	"theoreticalConcepts590":	"rationalism",
	"theoreticalConcepts580":	"primitivism",
	"theoreticalConcepts600":	"representation",
	"theoreticalConcepts610":	"Rubenism",
	"theoreticalConcepts520":	"adhocism",
	"theoreticalConcepts530":	"anti-art",
	"theoreticalConcepts540":	"dynamism",
	"theoreticalConcepts560":	"machine aesthetic",
	"theoreticalConcepts550":	"ideism",
	"theoreticalConcepts570":	"Poussinism",
	"theoreticalConcepts510":	"abstraction",
	"theoreticalConcepts420":	"formalism",
	"theoreticalConcepts450":	"occultism",
	"theoreticalConcepts490":	"simultaneism",
	"theoreticalConcepts440":	"historicism",
	"theoreticalConcepts390":	"academicism",
	"theoreticalConcepts480":	"romanticism",
	"theoreticalConcepts2450":	"philosophical concepts",
	"theoreticalConcepts2460":	"aesthetic concepts",
	"theoreticalConcepts2570":	"sublime",
	"theoreticalConcepts2540":	"picturesque",
	"theoreticalConcepts2490":	"grandeur",
	"theoreticalConcepts2510":	"imperfection",
	"theoreticalConcepts2470":	"beauty",
	"theoreticalConcepts2590":	"ethics",
	"theoreticalConcepts2530":	"perfection",
	"theoreticalConcepts2600":	"ideology",
	"theoreticalConcepts2500":	"ideal",
	"theoreticalConcepts2560":	"significant form",
	"theoreticalConcepts2580":	"taste",
	"theoreticalConcepts2550":	"quality",
	"theoreticalConcepts2480":	"empathy",
	"theoreticalConcepts2520":	"mimesis",
	"theoreticalConcepts2690":	"philosophical movements and attitudes",
	"theoreticalConcepts2840":	"nihilism",
	"theoreticalConcepts2730":	"Augustinianism",
	"theoreticalConcepts2930":	"spiritualism",
	"theoreticalConcepts2900":	"rasquachismo",
	"theoreticalConcepts2830":	"naturalism",
	"theoreticalConcepts2810":	"individualism",
	"theoreticalConcepts2970":	"utilitarianism",
	"theoreticalConcepts2910":	"rationalism",
	"theoreticalConcepts2740":	"determinism",
	"theoreticalConcepts2890":	"pragmatism",
	"theoreticalConcepts2860":	"Platonism",
	"theoreticalConcepts2760":	"Enlightenment",
	"theoreticalConcepts2750":	"dualism",
	"theoreticalConcepts2820":	"mysticism",
	"theoreticalConcepts2780":	"globalism",
	"theoreticalConcepts2850":	"nominalism",
	"theoreticalConcepts2800":	"idealism",
	"theoreticalConcepts2940":	"stoicism",
	"theoreticalConcepts2980":	"truth",
	"theoreticalConcepts2960":	"transcendentalism",
	"theoreticalConcepts2880":	"positivism",
	"theoreticalConcepts2920":	"scholasticism",
	"theoreticalConcepts2790":	"holism",
	"theoreticalConcepts2710":	"anthropomorphism",
	"theoreticalConcepts2870":	"pluralism",
	"theoreticalConcepts2720":	"Aristotelianism",
	"theoreticalConcepts2950":	"syncretism",
	"theoreticalConcepts2700":	"aestheticism",
	"theoreticalConcepts2770":	"existentialism",
	"theoreticalConcepts2610":	"metaphysical concepts",
	"theoreticalConcepts2650":	"order",
	"theoreticalConcepts2630":	"dialectic",
	"theoreticalConcepts2620":	"chaos",
	"theoreticalConcepts2640":	"identity",
	"theoreticalConcepts2680":	"nature",
	"theoreticalConcepts2660":	"presence",
	"theoreticalConcepts2670":	"supernatural",
	"theoreticalConcepts3860":	"transportation and related concepts",
	"theoreticalConcepts3910":	"parking",
	"theoreticalConcepts3870":	"transportation",
	"theoreticalConcepts3880":	"air transport",
	"theoreticalConcepts3900":	"water transport",
	"theoreticalConcepts3920":	"traffic",
	"theoreticalConcepts3890":	"urban transportation",
	"theoreticalConcepts3270":	"psychological concepts",
	"theoreticalConcepts3460":	"human behavior",
	"theoreticalConcepts3620":	"sexuality",
	"theoreticalConcepts3550":	"sensation",
	"theoreticalConcepts3590":	"suffering",
	"theoreticalConcepts3570":	"pain",
	"theoreticalConcepts3560":	"comfort",
	"theoreticalConcepts3580":	"pleasure",
	"theoreticalConcepts3600":	"synesthesia",
	"theoreticalConcepts3490":	"memory",
	"theoreticalConcepts3310":	"behavior and mental disorders",
	"theoreticalConcepts3330":	"emotion",
	"theoreticalConcepts3410":	"hate",
	"theoreticalConcepts3380":	"fear",
	"theoreticalConcepts3450":	"eroticism",
	"theoreticalConcepts3440":	"melancholy",
	"theoreticalConcepts3390":	"grief",
	"theoreticalConcepts3420":	"joy",
	"theoreticalConcepts3370":	"envy",
	"theoreticalConcepts3400":	"mourning",
	"theoreticalConcepts3430":	"love",
	"theoreticalConcepts3340":	"anger",
	"theoreticalConcepts3350":	"anxiety",
	"theoreticalConcepts3360":	"awe",
	"theoreticalConcepts3290":	"associationism",
	"theoreticalConcepts3630":	"speech",
	"theoreticalConcepts3480":	"knowledge",
	"theoreticalConcepts3320":	"cognition",
	"theoreticalConcepts3540":	"reason",
	"theoreticalConcepts3470":	"illusion",
	"theoreticalConcepts3280":	"mnemonics",
	"theoreticalConcepts3610":	"sensuality",
	"theoreticalConcepts3640":	"unconscious",
	"theoreticalConcepts3650":	"environmental psychology concepts",
	"theoreticalConcepts3720":	"privacy",
	"theoreticalConcepts3730":	"territoriality",
	"theoreticalConcepts3670":	"personal space",
	"theoreticalConcepts3680":	"place",
	"theoreticalConcepts3700":	"homeland",
	"theoreticalConcepts3710":	"workplace",
	"theoreticalConcepts3690":	"home",
	"theoreticalConcepts3660":	"genius loci",
	"theoreticalConcepts3300":	"automatism",
	"theoreticalConcepts3500":	"perception",
	"theoreticalConcepts3530":	"visual perception",
	"theoreticalConcepts3520":	"space perception",
	"theoreticalConcepts3510":	"intuition",
	"theoreticalConcepts00":	"artistic devices",
	"theoreticalConcepts130":	"irony",
	"theoreticalConcepts160":	"synecdoche",
	"theoreticalConcepts110":	"analogy",
	"theoreticalConcepts70":	"satire",
	"theoreticalConcepts100":	"allegory",
	"theoreticalConcepts80":	"stylization",
	"theoreticalConcepts120":	"ekphrasis",
	"theoreticalConcepts10":	"allusion",
	"theoreticalConcepts60":	"personification",
	"theoreticalConcepts50":	"parody",
	"theoreticalConcepts30":	"imagery",
	"theoreticalConcepts40":	"narrative",
	"theoreticalConcepts20":	"humor",
	"theoreticalConcepts140":	"metaphor",
	"theoreticalConcepts150":	"metonymy",
	"theoreticalConcepts90":	"symbolism",
	"theoreticalConcepts3930":	"architectural and urban concepts",
	"theoreticalConcepts4170":	"configuration of buildings",
	"theoreticalConcepts3960":	"movement area",
	"theoreticalConcepts4050":	"urban facts",
	"theoreticalConcepts3970":	"planning criteria",
	"theoreticalConcepts3940":	"assignment of functions",
	"theoreticalConcepts4040":	"urban analysis",
	"theoreticalConcepts4160":	"surface design",
	"theoreticalConcepts4140":	"building shape",
	"theoreticalConcepts4080":	"urban spaces",
	"theoreticalConcepts3990":	"space requirement",
	"theoreticalConcepts4150":	"choice of materials",
	"theoreticalConcepts4110":	"colour scheme",
	"theoreticalConcepts4120":	"facade design",
	"theoreticalConcepts4190":	"design projection",
	"theoreticalConcepts4180":	"design description",
	"theoreticalConcepts3980":	"room size",
	"theoreticalConcepts4030":	"place",
	"theoreticalConcepts4210":	"site selection",
	"theoreticalConcepts4090":	"urban infrastructures",
	"theoreticalConcepts4000":	"city",
	"theoreticalConcepts4130":	"facade organization",
	"theoreticalConcepts4060":	"urban planning",
	"theoreticalConcepts4100":	"colour concept",
	"theoreticalConcepts4020":	"context",
	"theoreticalConcepts4070":	"urban plan",
	"theoreticalConcepts4010":	"construction",
	"theoreticalConcepts4200":	"design concept",
	"theoreticalConcepts3950":	"mixing of functions",
	"Thesaurus_Instance_10138":	"urbanization",
	"Thesaurus_Instance_10150":	"diagram",
	"id25":	"Styles, Periods and Trends",
	"stylesPeriodsAndTrends00":	"styles and periods by region",
	"stylesPeriodsAndTrends610":	"Early Western World",
	"stylesPeriodsAndTrends620":	"European Lower Paleolithic",
	"stylesPeriodsAndTrends680":	"European Iron Age",
	"stylesPeriodsAndTrends650":	"European Mesolithic",
	"stylesPeriodsAndTrends750":	"Arabian",
	"stylesPeriodsAndTrends730":	"Near Eastern",
	"stylesPeriodsAndTrends720":	"Egyptian",
	"stylesPeriodsAndTrends700":	"Aegean",
	"stylesPeriodsAndTrends790":	"Persian",
	"stylesPeriodsAndTrends670":	"European Bronze Age",
	"stylesPeriodsAndTrends780":	"Mesopotamian",
	"stylesPeriodsAndTrends800":	"Armenian",
	"stylesPeriodsAndTrends760":	"Cypriote",
	"stylesPeriodsAndTrends740":	"Anatolian",
	"stylesPeriodsAndTrends770":	"Levantine",
	"stylesPeriodsAndTrends640":	"European Upper Paleolithic",
	"stylesPeriodsAndTrends630":	"European Middle Paleolithic",
	"stylesPeriodsAndTrends690":	"Mediterranean",
	"stylesPeriodsAndTrends710":	"ancient Italian",
	"stylesPeriodsAndTrends660":	"European Neolithic",
	"stylesPeriodsAndTrends2330":	"Oceanic",
	"stylesPeriodsAndTrends2360":	"Micronesian",
	"stylesPeriodsAndTrends2390":	"Oceanic ceramic",
	"stylesPeriodsAndTrends2340":	"Australian",
	"stylesPeriodsAndTrends2380":	"Oceanic sculpture",
	"stylesPeriodsAndTrends2370":	"Polynesian",
	"stylesPeriodsAndTrends2350":	"Melanesian",
	"stylesPeriodsAndTrends10":	"African",
	"stylesPeriodsAndTrends40":	"Colonial African",
	"stylesPeriodsAndTrends50":	"modern Africans",
	"stylesPeriodsAndTrends30":	"ancient African",
	"stylesPeriodsAndTrends60":	"African sculpture styles",
	"stylesPeriodsAndTrends20":	"prehistoric African",
	"stylesPeriodsAndTrends810":	"European",
	"stylesPeriodsAndTrends1400":	"Neoclassical",
	"stylesPeriodsAndTrends1490":	"Barbizon School",
	"stylesPeriodsAndTrends1750":	"modern Polish",
	"stylesPeriodsAndTrends1340":	"Fin de siècle",
	"stylesPeriodsAndTrends1370":	"Modernist",
	"stylesPeriodsAndTrends1450":	"Modern Movement",
	"stylesPeriodsAndTrends1790":	"Nazarene",
	"stylesPeriodsAndTrends1240":	"Counter-Reformation",
	"stylesPeriodsAndTrends1770":	"modern Spanish",
	"stylesPeriodsAndTrends1580":	"New Vision",
	"stylesPeriodsAndTrends1380":	"Bauhaus",
	"stylesPeriodsAndTrends1510":	"Cubist",
	"stylesPeriodsAndTrends1610":	"Realist",
	"stylesPeriodsAndTrends1410":	"Romantic",
	"stylesPeriodsAndTrends1730":	"modern German",
	"stylesPeriodsAndTrends1190":	"Renaissance",
	"stylesPeriodsAndTrends1570":	"Néo-Réalisme",
	"stylesPeriodsAndTrends1620":	"Rosicrucian",
	"stylesPeriodsAndTrends1330":	"Expressionist",
	"stylesPeriodsAndTrends1120":	"Medieval",
	"stylesPeriodsAndTrends1720":	"modern French",
	"stylesPeriodsAndTrends1760":	"modern Russian",
	"stylesPeriodsAndTrends1520":	"Dada",
	"stylesPeriodsAndTrends820":	"European regions",
	"stylesPeriodsAndTrends910":	"French",
	"stylesPeriodsAndTrends830":	"Albanian",
	"stylesPeriodsAndTrends970":	"Netherlandish",
	"stylesPeriodsAndTrends1070":	"Yugoslav",
	"stylesPeriodsAndTrends950":	"Irish",
	"stylesPeriodsAndTrends940":	"Hungarian",
	"stylesPeriodsAndTrends1010":	"Russian",
	"stylesPeriodsAndTrends870":	"British",
	"stylesPeriodsAndTrends900":	"Czech",
	"stylesPeriodsAndTrends1050":	"Spanish",
	"stylesPeriodsAndTrends930":	"Greek",
	"stylesPeriodsAndTrends880":	"Bulgarian",
	"stylesPeriodsAndTrends860":	"Belorussian",
	"stylesPeriodsAndTrends890":	"Croatian",
	"stylesPeriodsAndTrends980":	"Polish",
	"stylesPeriodsAndTrends1000":	"Romanian",
	"stylesPeriodsAndTrends1030":	"Serbian",
	"stylesPeriodsAndTrends840":	"Austrian",
	"stylesPeriodsAndTrends920":	"German",
	"stylesPeriodsAndTrends1040":	"Slovene",
	"stylesPeriodsAndTrends850":	"Belgian",
	"stylesPeriodsAndTrends1060":	"Swiss",
	"stylesPeriodsAndTrends990":	"Portuguese",
	"stylesPeriodsAndTrends960":	"Italian",
	"stylesPeriodsAndTrends1020":	"Scandinavian",
	"stylesPeriodsAndTrends1320":	"Biedermeier",
	"stylesPeriodsAndTrends1360":	"Decadent Movement",
	"stylesPeriodsAndTrends1470":	"Abbotsford",
	"stylesPeriodsAndTrends1160":	"Late Medieval",
	"stylesPeriodsAndTrends1080":	"Early Christian-Byzantine",
	"stylesPeriodsAndTrends1700":	"modern Danish",
	"stylesPeriodsAndTrends1350":	"Belle époque",
	"stylesPeriodsAndTrends1690":	"modern Czech",
	"stylesPeriodsAndTrends1210":	"High Renaissance",
	"stylesPeriodsAndTrends1480":	"Abstract",
	"stylesPeriodsAndTrends1710":	"modern Dutch",
	"stylesPeriodsAndTrends1250":	"Baroque",
	"stylesPeriodsAndTrends1440":	"International Style",
	"stylesPeriodsAndTrends1680":	"modern British",
	"stylesPeriodsAndTrends1660":	"Unanimist",
	"stylesPeriodsAndTrends1530":	"Impressionist",
	"stylesPeriodsAndTrends1270":	"Mannerist",
	"stylesPeriodsAndTrends1310":	"Art Nouveau",
	"stylesPeriodsAndTrends1590":	"Pictorialist",
	"stylesPeriodsAndTrends1670":	"modern Austrian",
	"stylesPeriodsAndTrends1390":	"Neo-Romantic",
	"stylesPeriodsAndTrends1640":	"Surrealist",
	"stylesPeriodsAndTrends1740":	"modern Italian",
	"stylesPeriodsAndTrends1460":	"Neues Bauen",
	"stylesPeriodsAndTrends1650":	"Symbolist",
	"stylesPeriodsAndTrends1300":	"Art Deco",
	"stylesPeriodsAndTrends1430":	"Beaux-Arts",
	"stylesPeriodsAndTrends1560":	"Neo-Idealism",
	"stylesPeriodsAndTrends1630":	"Straight",
	"stylesPeriodsAndTrends1420":	"Secession Movement",
	"stylesPeriodsAndTrends1600":	"Post-Impressionist",
	"stylesPeriodsAndTrends1230":	"Reformation",
	"stylesPeriodsAndTrends1290":	"Palladian",
	"stylesPeriodsAndTrends1090":	"Early Christian",
	"stylesPeriodsAndTrends1170":	"Proto-Renaissance",
	"stylesPeriodsAndTrends1780":	"modern Yugoslav",
	"stylesPeriodsAndTrends1500":	"Concrete art",
	"stylesPeriodsAndTrends1130":	"Early Medieval",
	"stylesPeriodsAndTrends1110":	"Latin Empire",
	"stylesPeriodsAndTrends1180":	"Pecheneg",
	"stylesPeriodsAndTrends1280":	"Romanist",
	"stylesPeriodsAndTrends1200":	"Early Renaissance",
	"stylesPeriodsAndTrends1150":	"Gothic",
	"stylesPeriodsAndTrends1140":	"Romanesque",
	"stylesPeriodsAndTrends1220":	"Late Renaissance",
	"stylesPeriodsAndTrends1100":	"Byzantine",
	"stylesPeriodsAndTrends1550":	"Neo-Florentine",
	"stylesPeriodsAndTrends1260":	"Rococo",
	"stylesPeriodsAndTrends1540":	"Magic Realist",
	"stylesPeriodsAndTrends70":	"The Americas",
	"stylesPeriodsAndTrends380":	"Monterey Style",
	"stylesPeriodsAndTrends160":	"Latin American",
	"stylesPeriodsAndTrends270":	"Gingerbread",
	"stylesPeriodsAndTrends330":	"City Beautiful Movement",
	"stylesPeriodsAndTrends550":	"Central Asian",
	"stylesPeriodsAndTrends310":	"Château Style",
	"stylesPeriodsAndTrends490":	"African Brazilian",
	"stylesPeriodsAndTrends210":	"African American",
	"stylesPeriodsAndTrends410":	"Prairie School",
	"stylesPeriodsAndTrends480":	"No Wave",
	"stylesPeriodsAndTrends80":	"American regions",
	"stylesPeriodsAndTrends100":	"Native American",
	"stylesPeriodsAndTrends500":	"Creationist",
	"stylesPeriodsAndTrends420":	"Pueblo Revival",
	"stylesPeriodsAndTrends400":	"New Urbanism",
	"stylesPeriodsAndTrends450":	"Shingle Style",
	"stylesPeriodsAndTrends180":	"antebellum Modern",
	"stylesPeriodsAndTrends560":	"East Asian",
	"stylesPeriodsAndTrends300":	"California Modernism",
	"stylesPeriodsAndTrends120":	"Cajun",
	"stylesPeriodsAndTrends240":	"Colonial Revival",
	"stylesPeriodsAndTrends390":	"Neotraditional",
	"stylesPeriodsAndTrends140":	"Pennsylvania German",
	"stylesPeriodsAndTrends530":	"Mexican Muralist",
	"stylesPeriodsAndTrends350":	"Italianate",
	"stylesPeriodsAndTrends200":	"Aesthetic Movement",
	"stylesPeriodsAndTrends600":	"West Asian",
	"stylesPeriodsAndTrends250":	"Craftsman",
	"stylesPeriodsAndTrends580":	"South Asian",
	"stylesPeriodsAndTrends290":	"Hispanic American",
	"stylesPeriodsAndTrends570":	"Siberian",
	"stylesPeriodsAndTrends280":	"Grunge",
	"stylesPeriodsAndTrends260":	"Federal",
	"stylesPeriodsAndTrends440":	"Santa Fe Style",
	"stylesPeriodsAndTrends460":	"Stick Style",
	"stylesPeriodsAndTrends220":	"border art",
	"stylesPeriodsAndTrends540":	"Asian",
	"stylesPeriodsAndTrends170":	"modern American",
	"stylesPeriodsAndTrends520":	"Indigenismo",
	"stylesPeriodsAndTrends430":	"Richardsonian Romanesque",
	"stylesPeriodsAndTrends230":	"Carpenter Gothic",
	"stylesPeriodsAndTrends340":	"Collegiate Gothic",
	"stylesPeriodsAndTrends130":	"Creole",
	"stylesPeriodsAndTrends110":	"Colonial American styles",
	"stylesPeriodsAndTrends370":	"Mayan Revival",
	"stylesPeriodsAndTrends320":	"Chicago School",
	"stylesPeriodsAndTrends360":	"Italian Villa Style",
	"stylesPeriodsAndTrends190":	"New Deal",
	"stylesPeriodsAndTrends150":	"Pilgrim",
	"stylesPeriodsAndTrends470":	"Territorial Style",
	"stylesPeriodsAndTrends510":	"Estridentismo",
	"stylesPeriodsAndTrends90":	"Pre-Columbian",
	"stylesPeriodsAndTrends590":	"Southeast Asian",
	"stylesPeriodsAndTrends1800":	"The Islamic World",
	"stylesPeriodsAndTrends2020":	"arabian peninsula",
	"stylesPeriodsAndTrends2050":	"Rasulid",
	"stylesPeriodsAndTrends2030":	"Ya 'Furid",
	"stylesPeriodsAndTrends2040":	"Sulayhid",
	"stylesPeriodsAndTrends2060":	"arabian peninsula. Hadrami",
	"stylesPeriodsAndTrends2290":	"Iranian after Mongols. Safavid",
	"stylesPeriodsAndTrends2320":	"Pahlevi",
	"stylesPeriodsAndTrends2310":	"Qajar",
	"stylesPeriodsAndTrends2300":	"Zand",
	"stylesPeriodsAndTrends1860":	"spanish and north african",
	"stylesPeriodsAndTrends1870":	"moorish",
	"stylesPeriodsAndTrends1940":	"hafsid",
	"stylesPeriodsAndTrends1890":	"idrisid",
	"stylesPeriodsAndTrends1900":	"aghlabid",
	"stylesPeriodsAndTrends1930":	"almohad",
	"stylesPeriodsAndTrends1920":	"almoravid",
	"stylesPeriodsAndTrends1880":	"nasrid",
	"stylesPeriodsAndTrends1910":	"zirid",
	"stylesPeriodsAndTrends2170":	"Anatolian after Manzikert",
	"stylesPeriodsAndTrends2190":	"Seljuk of Rum",
	"stylesPeriodsAndTrends2180":	"Qaramanid",
	"stylesPeriodsAndTrends2200":	"Ottoman",
	"stylesPeriodsAndTrends1950":	"egyptian",
	"stylesPeriodsAndTrends1970":	"Ikhshidid",
	"stylesPeriodsAndTrends1990":	"Hamdanid",
	"stylesPeriodsAndTrends1980":	"Fatimid",
	"stylesPeriodsAndTrends2000":	"Ayyubid",
	"stylesPeriodsAndTrends1960":	"Tulunid",
	"stylesPeriodsAndTrends2010":	"Mamluk",
	"stylesPeriodsAndTrends1830":	"ortodox caliphate",
	"stylesPeriodsAndTrends2070":	"iranian",
	"stylesPeriodsAndTrends2130":	"Ghurid",
	"stylesPeriodsAndTrends2110":	"Ghaznavid",
	"stylesPeriodsAndTrends2120":	"Qarakhanid",
	"stylesPeriodsAndTrends2080":	"Buyid",
	"stylesPeriodsAndTrends2100":	"Saffarid",
	"stylesPeriodsAndTrends2090":	"Samanid",
	"stylesPeriodsAndTrends1810":	"Saracenic",
	"stylesPeriodsAndTrends1820":	"pre-Islamic",
	"stylesPeriodsAndTrends2140":	"seljuk and atabeg",
	"stylesPeriodsAndTrends2160":	"Atabeg",
	"stylesPeriodsAndTrends2150":	"Seljuk",
	"stylesPeriodsAndTrends1840":	"umayyad",
	"stylesPeriodsAndTrends2210":	"Iranian after Mongols",
	"stylesPeriodsAndTrends2230":	"Mongol",
	"stylesPeriodsAndTrends2280":	"Akkoyunlu",
	"stylesPeriodsAndTrends2240":	"Il-Khanid",
	"stylesPeriodsAndTrends2260":	"Timurid",
	"stylesPeriodsAndTrends2250":	"Muzaffarid",
	"stylesPeriodsAndTrends2220":	"Jalayirid",
	"stylesPeriodsAndTrends2270":	"Karakoyunlu",
	"stylesPeriodsAndTrends2400":	"international post-1945",
	"stylesPeriodsAndTrends2410":	"Minimal",
	"stylesPeriodsAndTrends2590":	"Color-field",
	"stylesPeriodsAndTrends2520":	"Post-Functionalism",
	"stylesPeriodsAndTrends2530":	"Abstract Expressionist",
	"stylesPeriodsAndTrends2460":	"Googie",
	"stylesPeriodsAndTrends2610":	"Constructionist",
	"stylesPeriodsAndTrends2440":	"Post Brutalist",
	"stylesPeriodsAndTrends2910":	"Situationist",
	"stylesPeriodsAndTrends2450":	"Deconstructivist",
	"stylesPeriodsAndTrends2680":	"Kinetic",
	"stylesPeriodsAndTrends2830":	"Pattern painting",
	"stylesPeriodsAndTrends2690":	"Lettrist",
	"stylesPeriodsAndTrends2470":	"High-Tech",
	"stylesPeriodsAndTrends2430":	"Punk",
	"stylesPeriodsAndTrends2640":	"Fantastic Realist",
	"stylesPeriodsAndTrends2930":	"Spatialist",
	"stylesPeriodsAndTrends3000":	"Young British Art",
	"stylesPeriodsAndTrends2770":	"Neue Rheinische Sezession",
	"stylesPeriodsAndTrends2660":	"Funk",
	"stylesPeriodsAndTrends2740":	"Neo-Expressionist",
	"stylesPeriodsAndTrends2580":	"Chicago Imagist",
	"stylesPeriodsAndTrends2650":	"Fluxus",
	"stylesPeriodsAndTrends2850":	"Pittura Colta",
	"stylesPeriodsAndTrends2420":	"Postmodern",
	"stylesPeriodsAndTrends2920":	"Sky art",
	"stylesPeriodsAndTrends2700":	"Lyrical Abstraction",
	"stylesPeriodsAndTrends2880":	"Postminimal",
	"stylesPeriodsAndTrends2970":	"Systemic",
	"stylesPeriodsAndTrends2630":	"Eccentric Abstraction",
	"stylesPeriodsAndTrends2960":	"Supermannerist",
	"stylesPeriodsAndTrends2900":	"Psychedelic",
	"stylesPeriodsAndTrends2810":	"New Modernist",
	"stylesPeriodsAndTrends2670":	"Hard-edge",
	"stylesPeriodsAndTrends2730":	"Neo-Dada",
	"stylesPeriodsAndTrends2750":	"Neo-Geo",
	"stylesPeriodsAndTrends2490":	"Metabolism",
	"stylesPeriodsAndTrends2760":	"Neo-Pop",
	"stylesPeriodsAndTrends2560":	"Art Informel",
	"stylesPeriodsAndTrends2870":	"Post-Conceptual",
	"stylesPeriodsAndTrends2540":	"Abstract Impressionist",
	"stylesPeriodsAndTrends3010":	"Avantgarde",
	"stylesPeriodsAndTrends2790":	"New Image",
	"stylesPeriodsAndTrends2940":	"Stuckist",
	"stylesPeriodsAndTrends2820":	"New Realist",
	"stylesPeriodsAndTrends2480":	"Memphis",
	"stylesPeriodsAndTrends2860":	"Pop",
	"stylesPeriodsAndTrends2510":	"Nuovo Design",
	"stylesPeriodsAndTrends2890":	"Process art",
	"stylesPeriodsAndTrends2990":	"Trans-avantgarde",
	"stylesPeriodsAndTrends2550":	"Arte Povera",
	"stylesPeriodsAndTrends2710":	"Matter art",
	"stylesPeriodsAndTrends2720":	"Neo-Constructivist",
	"stylesPeriodsAndTrends2950":	"Subjective photography",
	"stylesPeriodsAndTrends2840":	"Photorealist",
	"stylesPeriodsAndTrends2570":	"Bad Painting",
	"stylesPeriodsAndTrends2980":	"Systems art",
	"stylesPeriodsAndTrends2600":	"Conceptual",
	"stylesPeriodsAndTrends2800":	"New Italian Manner",
	"stylesPeriodsAndTrends2500":	"Neo-Rationalist",
	"stylesPeriodsAndTrends2780":	"New Figuration",
	"stylesPeriodsAndTrends2620":	"Direct art",
	"stylesPeriodsAndTrends3020":	"Architectural trends",
	"stylesPeriodsAndTrends3070":	"organic architecture",
	"stylesPeriodsAndTrends3180":	"movement architecture",
	"stylesPeriodsAndTrends3110":	"fluid architecture",
	"stylesPeriodsAndTrends3130":	"landscape hybrid architecture",
	"stylesPeriodsAndTrends3140":	"Land Arch",
	"stylesPeriodsAndTrends3160":	"facade architecture",
	"stylesPeriodsAndTrends3030":	"academic architecture",
	"stylesPeriodsAndTrends3060":	"visionary architecture",
	"stylesPeriodsAndTrends3050":	"fantastic architecture",
	"stylesPeriodsAndTrends3190":	"contemporary architecture",
	"stylesPeriodsAndTrends3120":	"transparent architecture",
	"stylesPeriodsAndTrends3080":	"sustainable architecture",
	"stylesPeriodsAndTrends3150":	"information architecture",
	"stylesPeriodsAndTrends3090":	"vernacular architecture",
	"stylesPeriodsAndTrends3170":	"typological architecture",
	"stylesPeriodsAndTrends3040":	"blob architecture",
	"stylesPeriodsAndTrends3100":	"primitive architecture",
	"stylesPeriodsAndTrends1850":	"abbasyd",
	"Thesaurus_Instance_10137":	"digital architecture",
	"group2":	"Technical design",
	"id2":	"Building Element",
	"buildingElement780":	"installations",
	"buildingElement820":	"lifts and escalators",
	"buildingElement790":	"power",
	"buildingElement800":	"lighting",
	"buildingElement810":	"telecommunication",
	"buildingElement840":	"lightning protection and conductors",
	"buildingElement830":	"electrical",
	"buildingElement110":	"ground and foundation",
	"buildingElement190":	"pad foundations",
	"buildingElement120":	"ground shapes",
	"buildingElement150":	"roads or paths or hard surfaces",
	"buildingElement130":	"ditches or ducts or drains",
	"buildingElement170":	"substructures",
	"buildingElement140":	"retaining walls or soil supports",
	"buildingElement200":	"footings",
	"buildingElement260":	"diaphragram",
	"buildingElement220":	"ground beam",
	"buildingElement250":	"grillages",
	"buildingElement210":	"strip",
	"buildingElement240":	"bases",
	"buildingElement230":	"pads",
	"buildingElement180":	"pile foundations",
	"buildingElement160":	"soft surfaces or lawns or planted areas",
	"buildingElement270":	"foundation beams",
	"buildingElement600":	"finishes",
	"buildingElement610":	"external wall finishes",
	"buildingElement660":	"roof finishes",
	"buildingElement650":	"ceiling finishes",
	"buildingElement680":	"completions to roof coverings",
	"buildingElement640":	"stair finishes",
	"buildingElement630":	"floor finishes",
	"buildingElement670":	"roof coverings",
	"buildingElement620":	"internal wall finishes",
	"buildingElement850":	"fixtures",
	"buildingElement860":	"circulation fixtures",
	"buildingElement890":	"sanitary fixtures",
	"buildingElement870":	"general room and secondary spaces fixtures",
	"buildingElement880":	"culinary fixtures",
	"buildingElement900":	"cleaning fixtures",
	"buildingElement440":	"secondary elements",
	"buildingElement550":	"terrace lights",
	"buildingElement450":	"external walls",
	"buildingElement460":	"windows",
	"buildingElement480":	"sunbreaks",
	"buildingElement490":	"sun control screen",
	"buildingElement470":	"louvres",
	"buildingElement590":	"roof walkways",
	"buildingElement510":	"additions to floors and floating floors",
	"buildingElement500":	"doors",
	"buildingElement580":	"eaves or gutters or downpipes",
	"buildingElement560":	"balcony balustrades and parapets",
	"buildingElement520":	"ceilings and suspended",
	"buildingElement540":	"gates and barred openings",
	"buildingElement570":	"roof lights and roof trap doorways",
	"buildingElement530":	"handrails and balustrades for stairs",
	"buildingElement690":	"services",
	"buildingElement760":	"space heating",
	"buildingElement700":	"refuse disposal in general",
	"buildingElement730":	"hot and cold water",
	"buildingElement770":	"HVAC",
	"buildingElement720":	"drainage",
	"buildingElement750":	"refrigeration",
	"buildingElement710":	"culverts and chutes and other",
	"buildingElement740":	"gas and compressed air",
	"buildingElement00":	"substructure",
	"buildingElement60":	"floor beds",
	"buildingElement80":	"dramp-proof course",
	"buildingElement100":	"reinforcement",
	"buildingElement70":	"base layer",
	"buildingElement90":	"insulation",
	"buildingElement10":	"excavations",
	"buildingElement40":	"land drains",
	"buildingElement20":	"subsoil drainage",
	"buildingElement30":	"ground water control",
	"buildingElement50":	"dewatering",
	"Thesaurus_MACE_Instance_2":	"arcades",
	"buildingElement280":	"primary elements",
	"buildingElement400":	"flat roofs and terraces",
	"buildingElement410":	"roofs",
	"buildingElement340":	"partitions",
	"buildingElement420":	"roofs inclined",
	"buildingElement290":	"external walls",
	"buildingElement320":	"curtain walling",
	"buildingElement310":	"non-loadbearing walls",
	"buildingElement300":	"loadbearing walls",
	"buildingElement430":	"building elements above roof",
	"buildingElement330":	"internal walls",
	"buildingElement350":	"partition screens",
	"buildingElement370":	"frames",
	"buildingElement390":	"ceilings",
	"buildingElement380":	"floors",
	"buildingElement360":	"stairs and ladders",
	"id18":	"Systems and Equipments",
	"systemsAndEquipments840":	"communications",
	"systemsAndEquipments960":	"intranets",
	"systemsAndEquipments880":	"doorbells",
	"systemsAndEquipments920":	"television antenna systems",
	"systemsAndEquipments860":	"sound systems",
	"systemsAndEquipments890":	"intercom systems",
	"systemsAndEquipments970":	"police communication systems",
	"systemsAndEquipments900":	"public address systems",
	"systemsAndEquipments980":	"radio (telecommunication system)",
	"systemsAndEquipments950":	"Internet",
	"systemsAndEquipments910":	"sound-reproducing systems",
	"systemsAndEquipments940":	"signage",
	"systemsAndEquipments1000":	"television",
	"systemsAndEquipments990":	"telephone systems",
	"systemsAndEquipments850":	"clock and program systems",
	"systemsAndEquipments930":	"film projection systems",
	"systemsAndEquipments870":	"audio guides",
	"systemsAndEquipments00":	"water",
	"systemsAndEquipments60":	"stormwater systems",
	"systemsAndEquipments30":	"water distribution systems",
	"systemsAndEquipments40":	"downfeed systems",
	"systemsAndEquipments50":	"upfeed systems",
	"systemsAndEquipments10":	"plumbing systems",
	"systemsAndEquipments70":	"waterworks",
	"systemsAndEquipments20":	"sanitary drainage systems",
	"systemsAndEquipments1010":	"protection",
	"systemsAndEquipments1050":	"security systems",
	"systemsAndEquipments1020":	"fire protection systems",
	"systemsAndEquipments1040":	"fire extinguishing systems",
	"systemsAndEquipments1030":	"fire alarm systems",
	"systemsAndEquipments80":	"HVAC",
	"systemsAndEquipments180":	"heating systems",
	"systemsAndEquipments300":	"resistance heating",
	"systemsAndEquipments310":	"solar heating",
	"systemsAndEquipments320":	"active solar heating",
	"systemsAndEquipments330":	"passive solar heating",
	"systemsAndEquipments210":	"heat-distributing units",
	"systemsAndEquipments240":	"radiators",
	"systemsAndEquipments220":	"baseboard units",
	"systemsAndEquipments250":	"thermal masses",
	"systemsAndEquipments230":	"convectors",
	"systemsAndEquipments350":	"warm air heating",
	"systemsAndEquipments400":	"on-dols",
	"systemsAndEquipments360":	"forced air heating",
	"systemsAndEquipments370":	"gravity heating",
	"systemsAndEquipments380":	"hypocausts",
	"systemsAndEquipments390":	"kangs",
	"systemsAndEquipments260":	"hot water heating",
	"systemsAndEquipments270":	"radiant heating",
	"systemsAndEquipments290":	"panel heating",
	"systemsAndEquipments280":	"heat exchangers",
	"systemsAndEquipments190":	"furnaces",
	"systemsAndEquipments340":	"steam and vacuum heating",
	"systemsAndEquipments200":	"warm air furnaces",
	"systemsAndEquipments560":	"heat-distributing units",
	"systemsAndEquipments590":	"radiators",
	"systemsAndEquipments570":	"baseboard units",
	"systemsAndEquipments580":	"convectors",
	"systemsAndEquipments600":	"thermal masses",
	"systemsAndEquipments490":	"cooling, heating and humidifying components",
	"systemsAndEquipments540":	"thermostats",
	"systemsAndEquipments500":	"furnaces",
	"systemsAndEquipments530":	"radiator enclosures",
	"systemsAndEquipments520":	"heat pumps",
	"systemsAndEquipments550":	"trompes",
	"systemsAndEquipments510":	"heat exchangers",
	"systemsAndEquipments90":	"air conditioning",
	"systemsAndEquipments110":	"central air conditioning",
	"systemsAndEquipments120":	"incremental air conditioning",
	"systemsAndEquipments100":	"air washers",
	"systemsAndEquipments410":	"ventilation",
	"systemsAndEquipments460":	"boilers",
	"systemsAndEquipments450":	"air washers",
	"systemsAndEquipments430":	"mechanical ventilation",
	"systemsAndEquipments440":	"natural ventilation",
	"systemsAndEquipments420":	"exhaust ventilation",
	"systemsAndEquipments470":	"breechings",
	"systemsAndEquipments480":	"cooling towers",
	"systemsAndEquipments130":	"air cooling",
	"systemsAndEquipments160":	"passive cooling",
	"systemsAndEquipments150":	"ice storage systems",
	"systemsAndEquipments170":	"refrigerant systems",
	"systemsAndEquipments140":	"chilled water systems",
	"systemsAndEquipments610":	"ventilation system components",
	"systemsAndEquipments700":	"plenum chambers",
	"systemsAndEquipments690":	"dampers",
	"systemsAndEquipments710":	"registers",
	"systemsAndEquipments640":	"air ducts",
	"systemsAndEquipments720":	"ventilators",
	"systemsAndEquipments620":	"air diffusers",
	"systemsAndEquipments680":	"cowls",
	"systemsAndEquipments650":	"air filters",
	"systemsAndEquipments630":	"air distribution systems",
	"systemsAndEquipments670":	"blowers",
	"systemsAndEquipments660":	"air-handling units",
	"systemsAndEquipments1130":	"electrical",
	"systemsAndEquipments1170":	"components",
	"systemsAndEquipments1340":	"transformers",
	"systemsAndEquipments1360":	"step-up transformers",
	"systemsAndEquipments1350":	"step-down transformers",
	"systemsAndEquipments1260":	"panelboards",
	"systemsAndEquipments1330":	"switchboards",
	"systemsAndEquipments1180":	"circuits",
	"systemsAndEquipments1210":	"electric conduits",
	"systemsAndEquipments1290":	"power outlets",
	"systemsAndEquipments1320":	"receptacles",
	"systemsAndEquipments1250":	"occupancy sensors",
	"systemsAndEquipments1280":	"solar cells",
	"systemsAndEquipments1220":	"electric switches",
	"systemsAndEquipments1190":	"electric cables",
	"systemsAndEquipments1230":	"electric wiring",
	"systemsAndEquipments1300":	"raceways",
	"systemsAndEquipments1310":	"busways",
	"systemsAndEquipments1200":	"armoured cables",
	"systemsAndEquipments1240":	"ground-fault circuit interruptors",
	"systemsAndEquipments1270":	"photovoltaic cells",
	"systemsAndEquipments1160":	"circuit breakers",
	"systemsAndEquipments1150":	"grounded systems",
	"systemsAndEquipments1140":	"emergency power supply",
	"systemsAndEquipments730":	"lighting",
	"systemsAndEquipments820":	"fluorescent lighting",
	"systemsAndEquipments760":	"exterior lighting",
	"systemsAndEquipments790":	"artificial lighting",
	"systemsAndEquipments810":	"electric lighting",
	"systemsAndEquipments830":	"gas-lighting",
	"systemsAndEquipments800":	"day lighting",
	"systemsAndEquipments780":	"stage lighting",
	"systemsAndEquipments750":	"emergency lighting",
	"systemsAndEquipments740":	"architectural lighting",
	"systemsAndEquipments770":	"interior lighting",
	"systemsAndEquipments1060":	"services-parts of elements",
	"systemsAndEquipments1110":	"Package units",
	"systemsAndEquipments1090":	"Distribution",
	"systemsAndEquipments1070":	"Energy generation/storage/conversion",
	"systemsAndEquipments1100":	"Terminals",
	"systemsAndEquipments1080":	"Non-energy treatment/storage",
	"systemsAndEquipments1120":	"Monitoring and control",
	"id19":	"Maintenance and Conservation",
	"maintenanceAndConservation00":	"risk",
	"maintenanceAndConservation10":	"risk control reduction strategy",
	"maintenanceAndConservation40":	"environmental air-danger",
	"maintenanceAndConservation30":	"structural danger",
	"maintenanceAndConservation50":	"human danger",
	"maintenanceAndConservation20":	"static danger",
	"maintenanceAndConservation90":	"requalified or restored build",
	"maintenanceAndConservation100":	"new functional use",
	"maintenanceAndConservation60":	"priority intervention strategy",
	"maintenanceAndConservation80":	"real vulnerability",
	"maintenanceAndConservation70":	"survey of the condition",
	"maintenanceAndConservation110":	"technology",
	"maintenanceAndConservation210":	"composite cleaning",
	"maintenanceAndConservation220":	"paint cleaning",
	"maintenanceAndConservation250":	"stone cleaning",
	"maintenanceAndConservation260":	"strengthening",
	"maintenanceAndConservation280":	"fixing",
	"maintenanceAndConservation300":	"reinforcement",
	"maintenanceAndConservation270":	"consolidation",
	"maintenanceAndConservation290":	"cradling",
	"maintenanceAndConservation320":	"waterproofing",
	"maintenanceAndConservation120":	"architectural woodwork cleaning",
	"maintenanceAndConservation310":	"unit masonry cleaning",
	"maintenanceAndConservation230":	"plastic cleaning",
	"maintenanceAndConservation240":	"stabilizing",
	"maintenanceAndConservation130":	"abrasion",
	"maintenanceAndConservation140":	"sanding abrasion",
	"maintenanceAndConservation200":	"component preserving",
	"maintenanceAndConservation150":	"cleaning",
	"maintenanceAndConservation170":	"abrasive cleaning",
	"maintenanceAndConservation190":	"shotblasting",
	"maintenanceAndConservation180":	"sandblasting",
	"maintenanceAndConservation160":	"dry cleaning",
	"maintenanceAndConservation330":	"type",
	"maintenanceAndConservation470":	"stone maintenance",
	"maintenanceAndConservation480":	"stone restoration",
	"maintenanceAndConservation460":	"maintenance of stone assemblies",
	"maintenanceAndConservation450":	"testing and sampling brick units for restoration",
	"maintenanceAndConservation440":	"unit masonry restoration",
	"maintenanceAndConservation430":	"unit masonry maintenance",
	"maintenanceAndConservation680":	"plastic preservation",
	"maintenanceAndConservation660":	"plastic rehabilitation",
	"maintenanceAndConservation670":	"plastic restoration",
	"maintenanceAndConservation620":	"architectural woodwork refinishing",
	"maintenanceAndConservation630":	"architectural woodwork restoration",
	"maintenanceAndConservation420":	"replacement",
	"maintenanceAndConservation490":	"maintenance of refractory masonry",
	"maintenanceAndConservation500":	"maintenance of corrosion-resistant masonry",
	"maintenanceAndConservation510":	"maintenance of manufactured masonry",
	"maintenanceAndConservation530":	"maintenance of rough carpentry",
	"maintenanceAndConservation940":	"preliminary investigation",
	"maintenanceAndConservation930":	"rehabilitation measure",
	"maintenanceAndConservation880":	"repainting",
	"maintenanceAndConservation890":	"paint restoration",
	"maintenanceAndConservation910":	"paint preservation",
	"maintenanceAndConservation920":	"modernization measure",
	"maintenanceAndConservation900":	"coating restoration",
	"maintenanceAndConservation870":	"maintenance coatings",
	"maintenanceAndConservation860":	"maintenance repainting",
	"maintenanceAndConservation340":	"conservation",
	"maintenanceAndConservation350":	"redecoration",
	"maintenanceAndConservation360":	"overhaul",
	"maintenanceAndConservation370":	"repair",
	"maintenanceAndConservation390":	"reconstruction",
	"maintenanceAndConservation410":	"renewal",
	"maintenanceAndConservation400":	"renovation",
	"maintenanceAndConservation520":	"maintenance of wood",
	"maintenanceAndConservation560":	"rough carpentry preservation",
	"maintenanceAndConservation540":	"rough carpentry rehabilitation",
	"maintenanceAndConservation550":	"rough carpentry restoration",
	"maintenanceAndConservation570":	"maintenance of finish carpentry",
	"maintenanceAndConservation600":	"finish carpentry preservation",
	"maintenanceAndConservation580":	"finish carpentry rehabilitation",
	"maintenanceAndConservation590":	"finish carpentry restoration",
	"maintenanceAndConservation610":	"maintenance of architectural woodwork",
	"maintenanceAndConservation650":	"maintenance of plastic fabrications",
	"maintenanceAndConservation640":	"maintenance of structural plastics",
	"maintenanceAndConservation690":	"maintenance of structural composites",
	"maintenanceAndConservation700":	"maintenance of composite assemblies",
	"maintenanceAndConservation730":	"composite preservation",
	"maintenanceAndConservation710":	"composite rehabilitation",
	"maintenanceAndConservation720":	"composite restoration",
	"maintenanceAndConservation740":	"maintenance of finishes",
	"maintenanceAndConservation750":	"maintenance of plaster and gypsum board",
	"maintenanceAndConservation760":	"plaster restoration",
	"maintenanceAndConservation770":	"maintenance of tiling",
	"maintenanceAndConservation780":	"tile restoration",
	"maintenanceAndConservation790":	"maintenance of ceilings",
	"maintenanceAndConservation800":	"maintenance of flooring",
	"maintenanceAndConservation810":	"flooring restoration",
	"maintenanceAndConservation820":	"maintenance of wall finishes",
	"maintenanceAndConservation830":	"wall finish restoration",
	"maintenanceAndConservation840":	"maintenance of acoustic treatment",
	"maintenanceAndConservation850":	"maintenance of painting and coating",
	"id4":	"Material",
	"material1170":	"innovative materials",
	"material1230":	"safety film",
	"material1300":	"Phase Change Material",
	"material1220":	"holographic diffraction film",
	"material1200":	"optical commutation material",
	"material1180":	"light-transporting material",
	"material1280":	"low-emitting film",
	"material1240":	"reflecting film",
	"material1310":	"aerogel",
	"material1260":	"polyester film",
	"material1290":	"ceramic laminated",
	"material1270":	"sputtering film",
	"material1190":	"chromogenic material",
	"material1250":	"thermo-reflector film",
	"material1210":	"solar refrangent",
	"Thesaurus_Instance_10037":	"Glass Reinforced Concrete",
	"material800":	"glass",
	"material820":	"coloured glass",
	"material930":	"heat glass",
	"material970":	"rejecting glass",
	"material1030":	"gas fill and gap width in multiple-glass unit",
	"material1050":	"active glass",
	"material1060":	"photochromic glass",
	"material1070":	"thermochronic glass",
	"material1090":	"liquid crystal glass",
	"material1080":	"electrochromic glass",
	"material1040":	"multiple panel and suspend plastic film",
	"material890":	"opal glass",
	"material920":	"multiple glazed",
	"material1020":	"double-glass unit with clear glass remain",
	"material830":	"tinted glass",
	"material810":	"clear glass",
	"material850":	"translucent thermal insulation glass",
	"material910":	"wired glass",
	"material980":	"mirrored glass",
	"material1100":	"high performance material",
	"material1140":	"double-glazing with evacuated cavity",
	"material1110":	"prismatic glass component",
	"material1160":	"transparent insulation materials",
	"material1120":	"aerogel monolithic and granular",
	"material1130":	"geometric capillary and alveolar",
	"material1150":	"glass with evacuated cavity",
	"material840":	"translucent glass",
	"material860":	"opaque thermo insulators glass",
	"material1000":	"cellular glass",
	"material880":	"foamed glass",
	"material940":	"x-ray absorbing glass",
	"material990":	"toughened glass",
	"material1010":	"insulate glass",
	"material900":	"opaque glass",
	"material950":	"reflective coating",
	"material870":	"variable transmission glass",
	"material960":	"low-E coating",
	"Thesaurus_Instance_10039":	"insulating glass",
	"Thesaurus_Instance_10046":	"crystal glass",
	"Thesaurus_Instance_10047":	"coated glass",
	"Thesaurus_Instance_10067":	"laminated glass",
	"Thesaurus_Instance_10068":	"anti-sun glass",
	"Thesaurus_Instance_10069":	"laminated safety glass",
	"Thesaurus_Instance_10074":	"toughened safety glass",
	"material90":	"formed precast",
	"material150":	"terrazzo or cast stone or granolithic",
	"material110":	"sandlime concrete",
	"material130":	"flint lime",
	"material100":	"concrete",
	"material180":	"foamed concrete",
	"material120":	"calcium silicate",
	"material200":	"asbestos-based materials",
	"material220":	"magnesium-based materials",
	"material160":	"lightweight concrete",
	"material170":	"aerated concrete cellular",
	"material140":	"heavyweight concrete",
	"material190":	"lightweight aggregate concrete including sawdust concrete",
	"material210":	"gypsum preformed",
	"Thesaurus_Instance_10167":	"reinforced concrete",
	"Thesaurus_Instance_10168":	"prestressed concrete",
	"material00":	"natural stone",
	"material10":	"granite and igneous",
	"material60":	"freestone",
	"material30":	"lime stone",
	"material40":	"sandstone",
	"material70":	"slate",
	"material80":	"reconstructured stone",
	"material20":	"marble",
	"material50":	"gritstone",
	"Thesaurus_Instance_10038":	"alabaster",
	"Thesaurus_Instance_10064":	"basalt",
	"Thesaurus_Instance_10063":	"gypsum",
	"Thesaurus_Instance_10065":	"gravel",
	"Thesaurus_Instance_10071":	"gneiss",
	"Thesaurus_Instance_10073":	"calcareous tuff",
	"material600":	"natural fibres",
	"material630":	"animal fibres",
	"material620":	"vegetables fibres",
	"material640":	"leather",
	"material650":	"mixed natural",
	"material610":	"paper",
	"material660":	"synthetic fibres",
	"Thesaurus_Instance_10066":	"cellulose",
	"material230":	"clay",
	"material350":	"refractory ware fireclay",
	"material250":	"cob",
	"material300":	"semi-vitreous clay",
	"material270":	"faience glazed fireclay",
	"material320":	"terracotta clay",
	"material330":	"vitreous clay",
	"material240":	"adobe",
	"material310":	"stoneware clay",
	"material280":	"ceramic clay",
	"material340":	"heat-resistant material clay",
	"material290":	"salt glazed ware clay",
	"material260":	"pise",
	"material670":	"mineral fibres",
	"material680":	"asbestos fibre",
	"material690":	"glass fibres including roc and slag",
	"Thesaurus_Instance_10048":	"mineral wool",
	"Thesaurus_Instance_10076":	"glass-fibre reinforced plastic",
	"material510":	"wood",
	"material560":	"plywood wood",
	"material590":	"wood wool",
	"material570":	"wood fibre",
	"material530":	"wrot soft wood",
	"material580":	"wood particles",
	"material550":	"laminated wood",
	"material540":	"wrot hardwood",
	"material520":	"timber",
	"Thesaurus_Instance_10058":	"plywood",
	"Thesaurus_Instance_10060":	"glued laminated timber",
	"Thesaurus_Instance_10061":	"hardwood",
	"Thesaurus_Instance_10062":	"bamboo",
	"Thesaurus_Instance_10077":	"laminated plywood",
	"Thesaurus_Instance_10078":	"cork",
	"material360":	"metal",
	"material380":	"steel",
	"material480":	"nickel",
	"material410":	"aluminium",
	"material450":	"lead",
	"material420":	"copper",
	"material490":	"titanium",
	"material440":	"zinc",
	"material390":	"steel alloys",
	"material400":	"stainless steel",
	"material430":	"copper alloy",
	"material370":	"cast iron",
	"material470":	"chromium",
	"material500":	"titanium-zinc",
	"material460":	"tin",
	"Thesaurus_Instance_10041":	"bronze",
	"Thesaurus_Instance_10042":	"corten steel",
	"Thesaurus_Instance_10043":	"brass",
	"Thesaurus_Instance_10044":	"Tombasil",
	"Thesaurus_Instance_10045":	"expanded metal",
	"Thesaurus_Instance_10049":	"iron",
	"Thesaurus_Instance_10075":	"light metal",
	"Thesaurus_Instance_10050":	"austenitc steel",
	"material700":	"plastics",
	"material790":	"laminated plastics",
	"material710":	"asphalt",
	"material730":	"linoleum",
	"material760":	"composites plastic",
	"material780":	"reinforced plastics",
	"material720":	"impregnated fibre and felt",
	"material740":	"rubbers natural and elastomers",
	"material770":	"cellular plastics",
	"material750":	"general thermoplastics/thermosets plastics",
	"Thesaurus_Instance_10040":	"acrylic glass",
	"Thesaurus_Instance_10051":	"polyester",
	"Thesaurus_Instance_10052":	"PVC",
	"Thesaurus_Instance_10053":	"silicone",
	"Thesaurus_Instance_10054":	"Teflon",
	"Thesaurus_Instance_10055":	"ETFE",
	"Thesaurus_Instance_10056":	"polycarbonate",
	"Thesaurus_Instance_10057":	"polyurethane",
	"Thesaurus_Instance_10059":	"rubber",
	"Thesaurus_Instance_10155":	"aggregates",
	"Thesaurus_Instance_10080":	"gravel",
	"Thesaurus_Instance_10144":	"sand",
	"Thesaurus_Instance_10156":	"vermiculite",
	"Thesaurus_Instance_10157":	"LECA",
	"Thesaurus_Instance_10158":	"clinker",
	"Thesaurus_Instance_10159":	"perlite",
	"Thesaurus_Instance_10160":	"ceramic",
	"Thesaurus_Instance_10161":	"grès",
	"Thesaurus_Instance_10162":	"glazed ceramic",
	"Thesaurus_Instance_10163":	"terracotta",
	"Thesaurus_Instance_10164":	"clinker",
	"Thesaurus_Instance_10165":	"porcelain",
	"Thesaurus_Instance_10169":	"Products in general",
	"Thesaurus_Instance_10170":	"bitumen",
	"Thesaurus_Instance_10171":	"additives",
	"Thesaurus_Instance_10172":	"adhesives",
	"Thesaurus_Instance_10173":	"lime",
	"Thesaurus_Instance_10174":	"cement",
	"id17":	"Technological Profile",
	"technologicalProfile2900":	"roof",
	"technologicalProfile2980":	"interior shape",
	"technologicalProfile3010":	"open-timbered roof",
	"technologicalProfile3000":	"compass roof",
	"technologicalProfile2990":	"barrel roof",
	"technologicalProfile2910":	"exterior shape",
	"technologicalProfile2970":	"sawtooth roof",
	"technologicalProfile2960":	"rainbow roof",
	"technologicalProfile2940":	"pitched roofs",
	"technologicalProfile2950":	"platform roof",
	"technologicalProfile2930":	"flat roof",
	"technologicalProfile2920":	"butterfly roof",
	"technologicalProfile3050":	"membrane structures",
	"technologicalProfile3070":	"canopied",
	"technologicalProfile3080":	"hoods",
	"technologicalProfile3060":	"awning",
	"technologicalProfile3090":	"marquees",
	"technologicalProfile3100":	"pneumatic structures",
	"technologicalProfile3120":	"air-supported structures",
	"technologicalProfile3110":	"air-inflated structures",
	"technologicalProfile3130":	"tent structure",
	"technologicalProfile3140":	"truss and beam structure",
	"technologicalProfile3160":	"hammer-beam roof",
	"technologicalProfile3190":	"trussed rafter roof",
	"technologicalProfile3180":	"queen-post roof",
	"technologicalProfile3170":	"king-post roof",
	"technologicalProfile3150":	"couple roof",
	"technologicalProfile3020":	"rafter structure",
	"technologicalProfile3040":	"double-framed roof",
	"technologicalProfile3030":	"single-framed roof",
	"technologicalProfile3200":	"frame components",
	"technologicalProfile3220":	"sprockets",
	"technologicalProfile3300":	"vertical frame components",
	"technologicalProfile3310":	"crown posts",
	"technologicalProfile3320":	"pendant posts",
	"technologicalProfile3230":	"horizontal frame components",
	"technologicalProfile3240":	"beams",
	"technologicalProfile3280":	"ridgeboards",
	"technologicalProfile3250":	"collar beams",
	"technologicalProfile3270":	"purlins",
	"technologicalProfile3260":	"pole plates",
	"technologicalProfile3290":	"tie beams",
	"technologicalProfile3210":	"rafters",
	"technologicalProfile3330":	"exterior components",
	"technologicalProfile3360":	"lookouts",
	"technologicalProfile3380":	"roof appendages",
	"technologicalProfile3390":	"bell cotes",
	"technologicalProfile3410":	"cupolas",
	"technologicalProfile3500":	"monitors",
	"technologicalProfile3490":	"lantern",
	"technologicalProfile3420":	"dormers",
	"technologicalProfile3470":	"hipped dormers",
	"technologicalProfile3480":	"shed dormers",
	"technologicalProfile3430":	"chiens-assis",
	"technologicalProfile3450":	"gable dormers",
	"technologicalProfile3440":	"eyebrow dormers",
	"technologicalProfile3460":	"pedimented dormers",
	"technologicalProfile3400":	"belvederes",
	"technologicalProfile3560":	"verges and verge components",
	"technologicalProfile3580":	"verge components",
	"technologicalProfile3570":	"verges",
	"technologicalProfile3590":	"bargeboards",
	"technologicalProfile3610":	"eaves",
	"technologicalProfile3640":	"eaves gutters",
	"technologicalProfile3630":	"open eaves",
	"technologicalProfile3620":	"closed eaves",
	"technologicalProfile3680":	"gutters",
	"technologicalProfile3530":	"show rafters",
	"technologicalProfile3550":	"valleys roof components",
	"technologicalProfile3370":	"ridges",
	"technologicalProfile3350":	"lightning rods",
	"technologicalProfile3510":	"windows' walks",
	"technologicalProfile3340":	"hip rolls",
	"technologicalProfile3650":	"eaves components",
	"technologicalProfile3670":	"fascia boards",
	"technologicalProfile3660":	"eaves boards",
	"technologicalProfile3540":	"snow guards",
	"technologicalProfile3690":	"toplighting openings skylight",
	"technologicalProfile3600":	"chimneys architectural elements",
	"technologicalProfile3520":	"saddle boards",
	"technologicalProfile1180":	"stair",
	"technologicalProfile1420":	"water stairs",
	"technologicalProfile1200":	"flying stair",
	"technologicalProfile1280":	"landings",
	"technologicalProfile1290":	"quarterpace stair",
	"technologicalProfile1300":	"halfpace stair",
	"technologicalProfile1210":	"geometrical stair",
	"technologicalProfile1310":	"turns stair",
	"technologicalProfile1350":	"three-quarter-turn stair",
	"technologicalProfile1340":	"one-turn stair",
	"technologicalProfile1330":	"half-turn stair",
	"technologicalProfile1320":	"quarter-turn stair",
	"technologicalProfile1400":	"perrons",
	"technologicalProfile1220":	"newel stair",
	"technologicalProfile1410":	"stiles",
	"technologicalProfile1230":	"open newel stair",
	"technologicalProfile1240":	"spiral stair",
	"technologicalProfile1390":	"pas-de-souris",
	"technologicalProfile1250":	"double spiral stair",
	"technologicalProfile1360":	"fire escapes",
	"technologicalProfile1370":	"fire stairs",
	"technologicalProfile1270":	"straight stair",
	"technologicalProfile1190":	"disappearing stair",
	"technologicalProfile1380":	"ghats",
	"technologicalProfile1260":	"solid newel stair",
	"technologicalProfile1430":	"stair components",
	"technologicalProfile1480":	"newels",
	"technologicalProfile1490":	"landing newels",
	"technologicalProfile1440":	"apron pieces",
	"technologicalProfile1690":	"wreaths",
	"technologicalProfile1470":	"landings",
	"technologicalProfile1680":	"subrails",
	"technologicalProfile1600":	"step components",
	"technologicalProfile1630":	"treads",
	"technologicalProfile1610":	"nosings",
	"technologicalProfile1620":	"risers",
	"technologicalProfile1540":	"steps",
	"technologicalProfile1550":	"commode steps",
	"technologicalProfile1570":	"hanging steps",
	"technologicalProfile1580":	"spandrel steps",
	"technologicalProfile1590":	"winders",
	"technologicalProfile1560":	"fliers",
	"technologicalProfile1460":	"flights",
	"technologicalProfile1640":	"strings",
	"technologicalProfile1650":	"face strings",
	"technologicalProfile1670":	"wall strings",
	"technologicalProfile1660":	"open strings",
	"technologicalProfile1500":	"newel components",
	"technologicalProfile1530":	"newel drops",
	"technologicalProfile1510":	"newel caps",
	"technologicalProfile1520":	"newel collars",
	"technologicalProfile1450":	"carriage pieces",
	"technologicalProfile1700":	"envelope",
	"technologicalProfile2120":	"structural glazing system",
	"technologicalProfile2130":	"structural framing",
	"technologicalProfile2170":	"structural silicone sealant",
	"technologicalProfile2150":	"metallic profiles",
	"technologicalProfile2140":	"support structure",
	"technologicalProfile2180":	"compatible spacers",
	"technologicalProfile2160":	"glass",
	"technologicalProfile2190":	"setting blocks and gaskets",
	"technologicalProfile1710":	"façade",
	"technologicalProfile1880":	"intelligent glass façade",
	"technologicalProfile1860":	"double-leaf façade",
	"technologicalProfile1950":	"suspended glasses",
	"technologicalProfile2020":	"dynamic double-shell envelope",
	"technologicalProfile2000":	"hanging glazing",
	"technologicalProfile1900":	"exhaust façade",
	"technologicalProfile1990":	"transparent coating",
	"technologicalProfile2050":	"structural sealant glazing",
	"technologicalProfile1890":	"twin skin façades",
	"technologicalProfile1920":	"wall-filter façade",
	"technologicalProfile1910":	"dynamic façade",
	"technologicalProfile2060":	"structural silicone glazing system",
	"technologicalProfile1810":	"double-skin façade",
	"technologicalProfile1820":	"active façade (air cavity mechanical ventilation)",
	"technologicalProfile1830":	"passive façade (air cavity natural ventilation)",
	"technologicalProfile2070":	"double-envelope façade system",
	"technologicalProfile1970":	"double-shell façade with orientable glass slats",
	"technologicalProfile1850":	"energy saving façade",
	"technologicalProfile2090":	"structural curtain walling",
	"technologicalProfile1770":	"multi-storey façade",
	"technologicalProfile1960":	"structural glazing system",
	"technologicalProfile2110":	"slabs façade",
	"technologicalProfile1740":	"multi-functional ventilated façade",
	"technologicalProfile1750":	"box-window façade",
	"technologicalProfile1790":	"double skin façade",
	"technologicalProfile2080":	"double ventilated façade system",
	"technologicalProfile1870":	"multiple-skin façade",
	"technologicalProfile2040":	"active wall",
	"technologicalProfile1800":	"double-skin glazed façade",
	"technologicalProfile1780":	"shaft-box window façade",
	"technologicalProfile1940":	"glass curtain wall",
	"technologicalProfile2010":	"intelligent dynamic building",
	"technologicalProfile1930":	"curtain wall",
	"technologicalProfile1840":	"dual-layered glass façade",
	"technologicalProfile1760":	"corridor façade",
	"technologicalProfile1730":	"ventilated glazed façade",
	"technologicalProfile2100":	"glass façade",
	"technologicalProfile2030":	"single-skin façade",
	"technologicalProfile1980":	"structural façade",
	"technologicalProfile1720":	"ventilated façade",
	"technologicalProfile2540":	"sunscreen",
	"technologicalProfile2560":	"fixed sunscreen system",
	"technologicalProfile2570":	"orientable sunscreen system",
	"technologicalProfile2550":	"sunscreen marquise",
	"technologicalProfile2280":	"shade",
	"technologicalProfile2290":	"solar shading system",
	"technologicalProfile2320":	"solar shade",
	"technologicalProfile2310":	"honeycomb shade",
	"technologicalProfile2340":	"brise soleil fixed",
	"technologicalProfile2330":	"brise soleil orientable",
	"technologicalProfile2300":	"cellular window shade",
	"technologicalProfile2390":	"screen components",
	"technologicalProfile2430":	"insulating glass panel",
	"technologicalProfile2450":	"reflecting lamellas",
	"technologicalProfile2410":	"prismatic panel",
	"technologicalProfile2420":	"reflecting panel",
	"technologicalProfile2400":	"double-glazing panel",
	"technologicalProfile2440":	"micro reflect panel",
	"technologicalProfile2350":	"screening system",
	"technologicalProfile2360":	"refrangent screening",
	"technologicalProfile2380":	"orientable screening",
	"technologicalProfile2370":	"mobile screening",
	"technologicalProfile2200":	"photovoltaic",
	"technologicalProfile2240":	"architecture integrated photovoltaic",
	"technologicalProfile2250":	"structural photovoltaic roof",
	"technologicalProfile2270":	"ventilated photovoltaic façade",
	"technologicalProfile2260":	"photovoltaic façade",
	"technologicalProfile2230":	"photovoltaic cell",
	"technologicalProfile2210":	"photovoltaic system",
	"technologicalProfile2220":	"photovoltaic module",
	"technologicalProfile2460":	"solar panel",
	"technologicalProfile2500":	"solar collector",
	"technologicalProfile2470":	"solar shading protection",
	"technologicalProfile2510":	"solar thermal collector",
	"technologicalProfile2480":	"solar hot water panel",
	"technologicalProfile2490":	"solar heating",
	"technologicalProfile2520":	"solar thermal system",
	"technologicalProfile2530":	"solar refrangent",
	"technologicalProfile00":	"wall",
	"technologicalProfile150":	"battered wall",
	"technologicalProfile180":	"dry wall",
	"technologicalProfile320":	"drums",
	"technologicalProfile90":	"party wall",
	"technologicalProfile100":	"partition",
	"technologicalProfile130":	"folding partition",
	"technologicalProfile110":	"demountable partition",
	"technologicalProfile140":	"movable partition",
	"technologicalProfile120":	"relocatable partition",
	"technologicalProfile160":	"blank wall",
	"technologicalProfile10":	"external wall",
	"technologicalProfile20":	"bearing wall",
	"technologicalProfile30":	"retaining wall",
	"technologicalProfile40":	"masonry cavity wall",
	"technologicalProfile200":	"pierced wall",
	"technologicalProfile290":	"shear wall",
	"technologicalProfile190":	"faced wall",
	"technologicalProfile220":	"climbing wall",
	"technologicalProfile210":	"veneerd wall",
	"technologicalProfile250":	"retaining wall",
	"technologicalProfile280":	"gravity wall",
	"technologicalProfile260":	"bulkheads",
	"technologicalProfile270":	"diaphragm wall",
	"technologicalProfile50":	"internal wall",
	"technologicalProfile70":	"bearing partition",
	"technologicalProfile80":	"bearing wall",
	"technologicalProfile60":	"masonry cavity wall",
	"technologicalProfile310":	"Trombe wall",
	"technologicalProfile170":	"cavity wall",
	"technologicalProfile300":	"sleeper wall",
	"technologicalProfile240":	"hot wall",
	"technologicalProfile230":	"fire wall",
	"technologicalProfile330":	"wall components",
	"technologicalProfile360":	"lunettes",
	"technologicalProfile910":	"cladding",
	"technologicalProfile920":	"internal",
	"technologicalProfile930":	"external",
	"technologicalProfile940":	"profiled sheet",
	"technologicalProfile950":	"insulate brick",
	"technologicalProfile960":	"tiles",
	"technologicalProfile990":	"brick",
	"technologicalProfile970":	"overlap",
	"technologicalProfile980":	"flush",
	"technologicalProfile380":	"responds",
	"technologicalProfile870":	"external coating",
	"technologicalProfile900":	"waterproof",
	"technologicalProfile880":	"renderings",
	"technologicalProfile890":	"lacquers",
	"technologicalProfile460":	"façade components",
	"technologicalProfile490":	"gables",
	"technologicalProfile540":	"courses",
	"technologicalProfile640":	"water tables",
	"technologicalProfile610":	"over sailing courses",
	"technologicalProfile570":	"chain courses",
	"technologicalProfile580":	"corbel tables",
	"technologicalProfile630":	"stringcourses",
	"technologicalProfile620":	"plinth courses",
	"technologicalProfile550":	"bench tables",
	"technologicalProfile560":	"bond courses",
	"technologicalProfile590":	"lacing courses",
	"technologicalProfile600":	"lintel courses",
	"technologicalProfile440":	"parapets",
	"technologicalProfile1000":	"insulation external",
	"technologicalProfile1040":	"mineral wool",
	"technologicalProfile1030":	"insulation foam",
	"technologicalProfile1010":	"sheet",
	"technologicalProfile1020":	"lightweight renders",
	"technologicalProfile340":	"ailerons",
	"technologicalProfile400":	"tableros",
	"technologicalProfile650":	"interior",
	"technologicalProfile680":	"rasa",
	"technologicalProfile700":	"overmantels",
	"technologicalProfile660":	"baseboards",
	"technologicalProfile710":	"picture rails",
	"technologicalProfile730":	"spalliere",
	"technologicalProfile720":	"plate rails",
	"technologicalProfile670":	"chair rails",
	"technologicalProfile740":	"wainscoting",
	"technologicalProfile690":	"coving",
	"technologicalProfile500":	"façade component",
	"technologicalProfile510":	"pilasters",
	"technologicalProfile520":	"estipites",
	"technologicalProfile530":	"pilaster strips",
	"technologicalProfile370":	"putlog holes",
	"technologicalProfile410":	"taludes",
	"technologicalProfile450":	"blind windows",
	"technologicalProfile480":	"niches conchs",
	"technologicalProfile420":	"talud-tableros",
	"technologicalProfile800":	"furniture",
	"technologicalProfile830":	"curtain walling",
	"technologicalProfile860":	"glass or frameless",
	"technologicalProfile850":	"panel load-bearing",
	"technologicalProfile840":	"gasket systems",
	"technologicalProfile810":	"single-panel screen",
	"technologicalProfile820":	"ceiling fixtures",
	"technologicalProfile350":	"false doors",
	"technologicalProfile390":	"revetments",
	"technologicalProfile750":	"decorative",
	"technologicalProfile760":	"bacini",
	"technologicalProfile790":	"roundels",
	"technologicalProfile770":	"chaînes",
	"technologicalProfile780":	"coronets",
	"technologicalProfile470":	"niches",
	"technologicalProfile430":	"wythes",
	"technologicalProfile1050":	"floor",
	"technologicalProfile1090":	"suspended floor",
	"technologicalProfile1080":	"floor platform",
	"technologicalProfile1120":	"flexible pavement",
	"technologicalProfile1130":	"rigid pavement",
	"technologicalProfile1060":	"access floor",
	"technologicalProfile1140":	"finishing",
	"technologicalProfile1170":	"built-up roofing",
	"technologicalProfile1150":	"resilient flooring",
	"technologicalProfile1160":	"tile flooring",
	"technologicalProfile1070":	"floating floor",
	"technologicalProfile1110":	"floor underlayment",
	"technologicalProfile1100":	"subfloor",
	"technologicalProfile2580":	"ceiling",
	"technologicalProfile2650":	"cathedral ceiling",
	"technologicalProfile2630":	"ceiling joists",
	"technologicalProfile2730":	"vaults",
	"technologicalProfile2750":	"corbel vaults",
	"technologicalProfile2760":	"pitched-brick vaults",
	"technologicalProfile2820":	"timbrel vaults",
	"technologicalProfile2830":	"Guastavino vaults",
	"technologicalProfile2740":	"simple vaults",
	"technologicalProfile2770":	"ribbed vaults",
	"technologicalProfile2780":	"fan vaults",
	"technologicalProfile2810":	"stellar vaults",
	"technologicalProfile2790":	"lierne vaults",
	"technologicalProfile2800":	"net vaults",
	"technologicalProfile2840":	"vault components",
	"technologicalProfile2890":	"vaulting courses",
	"technologicalProfile2850":	"groins",
	"technologicalProfile2880":	"vaulting cells",
	"technologicalProfile2860":	"vault bays",
	"technologicalProfile2870":	"vaulting capitals",
	"technologicalProfile2670":	"coffered ceiling",
	"technologicalProfile2690":	"compartment ceiling",
	"technologicalProfile2640":	"camp ceiling",
	"technologicalProfile2720":	"suspended ceiling",
	"technologicalProfile2620":	"beams joists ceiling",
	"technologicalProfile2590":	"acoustical ceiling",
	"technologicalProfile2700":	"cove ceiling",
	"technologicalProfile2680":	"coffer",
	"technologicalProfile2660":	"ceiling fixtures",
	"technologicalProfile2710":	"luminous ceiling",
	"technologicalProfile2600":	"barrel ceiling",
	"technologicalProfile2610":	"beam ceiling",
	"technologicalProfile3700":	"other components",
	"technologicalProfile4210":	"dome",
	"technologicalProfile4300":	"semidome",
	"technologicalProfile4270":	"ribbed dome",
	"technologicalProfile4220":	"beehive dome",
	"technologicalProfile4280":	"saucer dome",
	"technologicalProfile4230":	"calotte",
	"technologicalProfile4310":	"umbrella dome",
	"technologicalProfile4240":	"geodesic dome",
	"technologicalProfile4250":	"onion dome",
	"technologicalProfile4260":	"pendentive dome",
	"technologicalProfile4290":	"Schwedler dome",
	"technologicalProfile3770":	"patio",
	"technologicalProfile4320":	"culminating and edge ornaments",
	"technologicalProfile4330":	"acroteria",
	"technologicalProfile4370":	"cusps",
	"technologicalProfile4410":	"pendants",
	"technologicalProfile4400":	"hip knobs",
	"technologicalProfile4420":	"pinnacles",
	"technologicalProfile4360":	"cheneaux",
	"technologicalProfile4430":	"protomai",
	"technologicalProfile4390":	"épis",
	"technologicalProfile4340":	"antefixes",
	"technologicalProfile4350":	"brattishing",
	"technologicalProfile4380":	"drops",
	"technologicalProfile4160":	"arch components",
	"technologicalProfile4170":	"archivolts",
	"technologicalProfile4180":	"haunches",
	"technologicalProfile4190":	"impost blocks",
	"technologicalProfile4200":	"impost",
	"technologicalProfile3760":	"roof garden",
	"technologicalProfile3790":	"window",
	"technologicalProfile3820":	"exhaust window",
	"technologicalProfile3800":	"airflow window",
	"technologicalProfile3810":	"supply air window",
	"technologicalProfile3780":	"deck",
	"technologicalProfile3730":	"pergolas",
	"technologicalProfile3880":	"arch",
	"technologicalProfile3980":	"rampant arches",
	"technologicalProfile4130":	"Italian pointed arches",
	"technologicalProfile4120":	"Florentine arches",
	"technologicalProfile4020":	"shouldered arches",
	"technologicalProfile4010":	"semicircular arches",
	"technologicalProfile4050":	"triangular arches",
	"technologicalProfile4150":	"French arches",
	"technologicalProfile4090":	"splayed arches",
	"technologicalProfile3950":	"inverted arches",
	"technologicalProfile4060":	"two-hinged arches",
	"technologicalProfile3890":	"bell arches",
	"technologicalProfile3940":	"horseshoe arches",
	"technologicalProfile4110":	"arch dams",
	"technologicalProfile4100":	"arch bridge",
	"technologicalProfile4040":	"surbased arches",
	"technologicalProfile3990":	"segmental arches",
	"technologicalProfile4080":	"skew arches",
	"technologicalProfile3920":	"cusped arches",
	"technologicalProfile4000":	"semiarches",
	"technologicalProfile3960":	"pointed arches",
	"technologicalProfile3910":	"catenary arches",
	"technologicalProfile4030":	"stilted arches",
	"technologicalProfile4140":	"Tudor archs",
	"technologicalProfile3930":	"elliptical arches",
	"technologicalProfile3900":	"blind arches",
	"technologicalProfile4070":	"three-hinged arches",
	"technologicalProfile3970":	"quadrifrontal arches",
	"technologicalProfile3740":	"porches",
	"technologicalProfile3720":	"small balconies",
	"technologicalProfile3830":	"window components",
	"technologicalProfile3840":	"window screens",
	"technologicalProfile3860":	"sun breakers",
	"technologicalProfile3850":	"sun shades",
	"technologicalProfile3870":	"brise soleils",
	"technologicalProfile3750":	"terraces",
	"technologicalProfile3710":	"balcony",
	"id3":	"Construction Form",
	"constructionForm840":	"foldable sheets",
	"constructionForm850":	"sheets",
	"constructionForm870":	"strips",
	"constructionForm860":	"soakers",
	"constructionForm00":	"cast in situ",
	"constructionForm1120":	"rigid sheets",
	"constructionForm1180":	"sheets",
	"constructionForm1160":	"plate",
	"constructionForm1140":	"panes",
	"constructionForm1150":	"panels",
	"constructionForm1170":	"sandwich slabs",
	"constructionForm1130":	"boards",
	"constructionForm1190":	"slabs",
	"constructionForm620":	"mesh",
	"constructionForm690":	"wires",
	"constructionForm630":	"expanded metal",
	"constructionForm680":	"wire netting",
	"constructionForm650":	"mesh",
	"constructionForm660":	"lathing",
	"constructionForm670":	"strings",
	"constructionForm640":	"lines",
	"constructionForm700":	"yarns",
	"constructionForm270":	"blocks",
	"Thesaurus_Instance_10079":	"concrete block",
	"constructionForm1200":	"flexible sheets tiles",
	"constructionForm1210":	"carpets",
	"constructionForm1230":	"tiles",
	"constructionForm1220":	"sheets",
	"constructionForm710":	"quilts",
	"constructionForm760":	"sponge",
	"constructionForm750":	"matting",
	"constructionForm730":	"felted carpet underlay",
	"constructionForm720":	"foamed",
	"constructionForm740":	"lagging",
	"constructionForm510":	"pipes",
	"constructionForm550":	"hose",
	"constructionForm520":	"chutes",
	"constructionForm560":	"linings",
	"constructionForm530":	"conduits",
	"constructionForm540":	"duct tubes and pipes",
	"constructionForm570":	"tiles for drainage",
	"constructionForm770":	"foils",
	"constructionForm820":	"sarking",
	"constructionForm830":	"scrim",
	"constructionForm790":	"canvas",
	"constructionForm800":	"felts",
	"constructionForm810":	"membranes",
	"constructionForm780":	"building papers",
	"constructionForm990":	"thin coatings",
	"constructionForm1100":	"topping",
	"constructionForm1030":	"coat",
	"constructionForm1060":	"screed",
	"constructionForm1110":	"wearing course",
	"constructionForm1090":	"tanking",
	"constructionForm1070":	"sprayed coating",
	"constructionForm1040":	"mortar",
	"constructionForm1010":	"coatings",
	"constructionForm1080":	"surfacing",
	"constructionForm1020":	"finishing",
	"constructionForm1000":	"base course",
	"constructionForm1050":	"render",
	"Thesaurus_Instance_10166":	"plaster",
	"constructionForm310":	"sections",
	"constructionForm370":	"extrusion",
	"constructionForm440":	"planks",
	"constructionForm320":	"angles",
	"constructionForm330":	"bars",
	"constructionForm350":	"boards",
	"constructionForm410":	"linings",
	"constructionForm380":	"gaskets",
	"constructionForm450":	"profiles",
	"constructionForm340":	"beads",
	"constructionForm460":	"rods",
	"constructionForm490":	"trim",
	"constructionForm360":	"channels",
	"constructionForm500":	"weatherboards",
	"constructionForm390":	"joists",
	"constructionForm430":	"mouldings",
	"constructionForm470":	"sections",
	"constructionForm420":	"matchboards",
	"constructionForm480":	"strips",
	"constructionForm400":	"laths",
	"constructionForm280":	"structural units",
	"constructionForm290":	"special formed units",
	"constructionForm300":	"structural units",
	"constructionForm1240":	"components",
	"constructionForm1250":	"tiles on floor",
	"constructionForm1320":	"triple and quadruple glass",
	"constructionForm1260":	"tiles on wall",
	"constructionForm1300":	"multiple panel of glass",
	"constructionForm1270":	"tiles on roof",
	"constructionForm1310":	"double glass",
	"constructionForm1280":	"sheet",
	"constructionForm1290":	"sunscreens",
	"constructionForm1330":	"solatube light pipe",
	"constructionForm940":	"tiles",
	"constructionForm960":	"mosaic",
	"constructionForm970":	"parquet",
	"constructionForm950":	"flags",
	"constructionForm980":	"paviors",
	"constructionForm580":	"wires",
	"constructionForm590":	"cables",
	"constructionForm600":	"chains and chains link",
	"constructionForm610":	"cords",
	"constructionForm10":	"brick",
	"constructionForm80":	"paving brick",
	"constructionForm90":	"pilaster brick",
	"constructionForm70":	"furring brick",
	"constructionForm60":	"floor brick",
	"constructionForm30":	"backing brick",
	"constructionForm100":	"drying process",
	"constructionForm110":	"fired brick",
	"constructionForm120":	"sun-dried brick",
	"constructionForm20":	"air brick",
	"constructionForm40":	"capping brick",
	"constructionForm130":	"shaping process",
	"constructionForm150":	"molded brick",
	"constructionForm170":	"stiff-mud brick",
	"constructionForm160":	"pressed brick",
	"constructionForm140":	"handmade brick",
	"constructionForm210":	"face brick",
	"constructionForm260":	"furring brick",
	"constructionForm250":	"floor brick",
	"constructionForm240":	"fire brick",
	"constructionForm230":	"rustic brick",
	"constructionForm220":	"ashlar brick",
	"constructionForm50":	"fire brick",
	"constructionForm180":	"finished texture",
	"constructionForm200":	"facing block",
	"constructionForm190":	"facing brick",
	"constructionForm1340":	"protective product",
	"constructionForm880":	"overlap sheets and tiles",
	"constructionForm890":	"corrugated sheets",
	"constructionForm930":	"tiles",
	"constructionForm900":	"shingles",
	"constructionForm920":	"slates",
	"constructionForm910":	"sheets",
	"Thesaurus_Instance_10070":	"glass brick",
	"id16":	"Structural Profile",
	"structuralProfile400":	"structural elements",
	"structuralProfile720":	"vaults",
	"structuralProfile750":	"intradoses",
	"structuralProfile540":	"plinths",
	"structuralProfile550":	"socles",
	"structuralProfile450":	"columns",
	"structuralProfile680":	"domes",
	"structuralProfile780":	"headers",
	"structuralProfile560":	"squinches",
	"structuralProfile520":	"pendentives",
	"structuralProfile650":	"lintels",
	"structuralProfile430":	"buttresses",
	"structuralProfile600":	"beams",
	"structuralProfile500":	"masts",
	"structuralProfile630":	"corbels",
	"structuralProfile640":	"decking",
	"structuralProfile710":	"stressed-skin structures",
	"structuralProfile610":	"brackets",
	"structuralProfile730":	"walls",
	"structuralProfile590":	"arches",
	"structuralProfile580":	"trompes",
	"structuralProfile420":	"braces",
	"structuralProfile740":	"extradoses",
	"structuralProfile790":	"plates",
	"structuralProfile670":	"columnar screens",
	"structuralProfile410":	"bell cages",
	"structuralProfile530":	"pillars",
	"structuralProfile770":	"voussoirs",
	"structuralProfile620":	"cantilevers",
	"structuralProfile490":	"grillages",
	"structuralProfile700":	"shell structures",
	"structuralProfile800":	"studs",
	"structuralProfile510":	"pedestals",
	"structuralProfile470":	"cribbing",
	"structuralProfile480":	"foundations",
	"structuralProfile460":	"concrete monoliths",
	"structuralProfile570":	"stays",
	"structuralProfile690":	"membrane structures",
	"structuralProfile660":	"trusses",
	"structuralProfile440":	"cololches",
	"structuralProfile760":	"ribs",
	"structuralProfile810":	"structural elements.trimmers",
	"structuralProfile270":	"structural systems",
	"structuralProfile370":	"timber frame construction",
	"structuralProfile330":	"cable structures",
	"structuralProfile290":	"superstructures",
	"structuralProfile360":	"structural frames",
	"structuralProfile310":	"non-rigid structures",
	"structuralProfile390":	"steel frame construction",
	"structuralProfile350":	"plate structures",
	"structuralProfile300":	"large span structures",
	"structuralProfile340":	"lamella roofs",
	"structuralProfile320":	"rigid structures",
	"structuralProfile280":	"substructures",
	"structuralProfile380":	"concrete frame construction",
	"structuralProfile00":	"structural analysis concept",
	"structuralProfile210":	"span",
	"structuralProfile250":	"statically indeterminate structures",
	"structuralProfile80":	"distributed loads",
	"structuralProfile100":	"impact loads",
	"structuralProfile30":	"axial loads",
	"structuralProfile50":	"concentrated loads",
	"structuralProfile160":	"uniform loads",
	"structuralProfile60":	"construction loads",
	"structuralProfile240":	"statically determinate structures",
	"structuralProfile220":	"structural failures",
	"structuralProfile150":	"traffic loads",
	"structuralProfile190":	"seismic design",
	"structuralProfile140":	"snow loads",
	"structuralProfile90":	"eccentric loads",
	"structuralProfile10":	"equilibrium",
	"structuralProfile260":	"tensile structures",
	"structuralProfile20":	"flutter",
	"structuralProfile70":	"dead loads",
	"structuralProfile200":	"settlement of structures",
	"structuralProfile120":	"live loads",
	"structuralProfile180":	"plastic design",
	"structuralProfile230":	"structural stability",
	"structuralProfile40":	"combined loads",
	"structuralProfile170":	"moments",
	"structuralProfile130":	"moving loads",
	"structuralProfile110":	"lateral loads",
	"id6":	"Technical Performance",
	"technicalPerformance600":	"radiation",
	"technicalPerformance620":	"solar radiation",
	"technicalPerformance630":	"atomic radiation",
	"technicalPerformance610":	"insulation",
	"technicalPerformance70":	"thermal-hygrometric",
	"technicalPerformance140":	"condensation",
	"technicalPerformance100":	"insulation",
	"technicalPerformance120":	"damp proofing",
	"technicalPerformance130":	"weather incidence",
	"technicalPerformance110":	"air water control",
	"technicalPerformance80":	"heating",
	"technicalPerformance90":	"cooling",
	"technicalPerformance150":	"natural ventilation",
	"technicalPerformance00":	"acoustic",
	"technicalPerformance50":	"reflection acoustic",
	"technicalPerformance30":	"trasmission acoustic",
	"technicalPerformance60":	"echo acoustic",
	"technicalPerformance20":	"insulation acoustic",
	"technicalPerformance40":	"absorption acoustic",
	"technicalPerformance10":	"sound quality",
	"technicalPerformance240":	"lighting proprieties",
	"technicalPerformance290":	"refraction",
	"technicalPerformance310":	"distrotion",
	"technicalPerformance250":	"absorption",
	"technicalPerformance270":	"brilliancy",
	"technicalPerformance260":	"reflection",
	"technicalPerformance300":	"dispersion",
	"technicalPerformance280":	"transmission",
	"technicalPerformance520":	"dynamics (mechanics)",
	"technicalPerformance590":	"bond strength (mechanics)",
	"technicalPerformance540":	"soil mechanics or geotechnics (mechanics)",
	"technicalPerformance550":	"vibration (mechanics)",
	"technicalPerformance580":	"adhesion (mechanics)",
	"technicalPerformance530":	"fluid mechanics or hydraulics (mechanics)",
	"technicalPerformance570":	"frictional resistance (mechanics)",
	"technicalPerformance560":	"rheological requirements (mechanics)",
	"technicalPerformance330":	"fire safety",
	"technicalPerformance400":	"fire combustibility",
	"technicalPerformance370":	"fire fighting",
	"technicalPerformance410":	"fire resistance",
	"technicalPerformance340":	"fire prevention",
	"technicalPerformance380":	"fire processes",
	"technicalPerformance390":	"fire proprieties",
	"technicalPerformance360":	"means of escape",
	"technicalPerformance350":	"fire protection",
	"Thesaurus_Instance_10177":	"fire proofing",
	"technicalPerformance160":	"lighting",
	"technicalPerformance170":	"comfort light",
	"technicalPerformance190":	"artificial light",
	"technicalPerformance200":	"daylight",
	"technicalPerformance220":	"proofing against light",
	"technicalPerformance180":	"natural light",
	"technicalPerformance230":	"processes lighting",
	"technicalPerformance210":	"sunlight",
	"technicalPerformance490":	"statics stability",
	"technicalPerformance510":	"plastic behaviour",
	"technicalPerformance500":	"elastic behaviour",
	"technicalPerformance320":	"ergonomic",
	"technicalPerformance420":	"energetic",
	"technicalPerformance450":	"biological factors (physical)",
	"technicalPerformance460":	"density (physical)",
	"technicalPerformance480":	"permeability (physical)",
	"technicalPerformance470":	"porosity (physical)",
	"technicalPerformance440":	"efficiency of energy",
	"technicalPerformance430":	"consumption of energy",
	"Thesaurus_Instance_10175":	"energy saving",
	"Thesaurus_Instance_10176":	"energy optimization",
	"technicalPerformance640":	"weathering (durability)",
	"technicalPerformance650":	"chemical effects",
	"technicalPerformance670":	"biological effects in general (durability)",
	"technicalPerformance700":	"factors for comfort (durability)",
	"technicalPerformance690":	"behaviour during preparation (durability)",
	"technicalPerformance680":	"reaction with other materials (durability)",
	"technicalPerformance660":	"effect of impurities (durability)",
	"group6":	"Constructing",
	"id21":	"Construction Activity",
	"constructionActivity790":	"External works",
	"constructionActivity800":	"Landscaping",
	"constructionActivity810":	"Fencing",
	"constructionActivity820":	"Paving",
	"constructionActivity830":	"Site furniture",
	"constructionActivity00":	"Preliminaries",
	"constructionActivity50":	"Contract definition",
	"constructionActivity10":	"Feasibility study",
	"constructionActivity40":	"Document review",
	"constructionActivity20":	"Team selection",
	"constructionActivity60":	"Tendering",
	"constructionActivity30":	"Production information",
	"constructionActivity70":	"Building permits petition",
	"Thesaurus_Instance_10129":	"Licensing procedure",
	"Thesaurus_Instance_0":	"Client requirements analysis",
	"Thesaurus_Instance_1":	"Market analysis",
	"Thesaurus_Instance_10090":	"Award",
	"Thesaurus_Instance_10092":	"Building data",
	"Thesaurus_Instance_10094":	"Building project",
	"Thesaurus_Instance_10095":	"Building regulations",
	"Thesaurus_Instance_10096":	"Building specification",
	"Thesaurus_Instance_10097":	"Conception",
	"Thesaurus_Instance_10117":	"Manufacturer's information",
	"Thesaurus_Instance_10118":	"Material choice",
	"Thesaurus_Instance_10126":	"Building proposal",
	"constructionActivity140":	"Groundwork",
	"constructionActivity160":	"Excavation",
	"constructionActivity190":	"Ground retention",
	"constructionActivity150":	"Ground stabilisation",
	"constructionActivity170":	"Filling",
	"constructionActivity180":	"Piling",
	"constructionActivity840":	"System installation",
	"constructionActivity870":	"Electrical system installation",
	"constructionActivity880":	"Lighting system installation",
	"constructionActivity900":	"Fire protection system installation",
	"constructionActivity920":	"Gas system installation",
	"constructionActivity850":	"Water system installation",
	"constructionActivity860":	"HVAC system installation",
	"constructionActivity910":	"Security system installation",
	"constructionActivity890":	"Communication system installation",
	"constructionActivity440":	"Insulation works",
	"constructionActivity460":	"Draft and fire stop installation",
	"constructionActivity490":	"Asphalt coating",
	"constructionActivity480":	"Cementitious coating",
	"constructionActivity510":	"Felt sheet",
	"constructionActivity500":	"Liquid applied coating",
	"constructionActivity450":	"Caulk and air seal installation",
	"constructionActivity470":	"Batt insulation installation",
	"constructionActivity520":	"Cladding works",
	"constructionActivity630":	"Plastered coating",
	"constructionActivity540":	"Sheet cladding",
	"constructionActivity620":	"Painting",
	"constructionActivity560":	"Flat sheet cladding",
	"constructionActivity530":	"Glazed cladding",
	"constructionActivity580":	"Slab cladding",
	"constructionActivity610":	"Malleable sheet cladding",
	"constructionActivity590":	"Slate cladding",
	"constructionActivity640":	"Ceiling installation",
	"constructionActivity600":	"Tile cladding",
	"constructionActivity550":	"Profiled sheet cladding",
	"constructionActivity570":	"Panel cladding",
	"constructionActivity330":	"Roofing works",
	"constructionActivity360":	"Metal roof assembly",
	"constructionActivity340":	"Roofing paper installation",
	"constructionActivity370":	"Timber roof assembly",
	"constructionActivity350":	"Roof shingles installation",
	"Thesaurus_Instance_10122":	"Roof structure",
	"constructionActivity200":	"Foundation works",
	"constructionActivity220":	"Form works",
	"constructionActivity230":	"Reinforcement",
	"constructionActivity210":	"Excavation",
	"constructionActivity240":	"In situ casting concrete pouring",
	"constructionActivity250":	"Structural precast concrete assembly",
	"constructionActivity710":	"Carpentry works",
	"constructionActivity760":	"Glazing installation",
	"constructionActivity720":	"Window installation",
	"constructionActivity730":	"Rooflight installation",
	"constructionActivity780":	"Lift installation",
	"constructionActivity740":	"Door installation",
	"constructionActivity770":	"Furniture assembly",
	"constructionActivity750":	"Shutter installation",
	"constructionActivity650":	"Pavement works",
	"constructionActivity680":	"Carpet installation",
	"constructionActivity690":	"Concrete pavement execution",
	"constructionActivity700":	"Natural stone pavement execution",
	"constructionActivity670":	"Ceramic tile installation",
	"constructionActivity660":	"Hard wood floor installation",
	"constructionActivity380":	"Partition works",
	"constructionActivity410":	"Glass block walling",
	"constructionActivity400":	"Block walling",
	"constructionActivity430":	"Sheet walling",
	"constructionActivity390":	"Brick walling",
	"constructionActivity420":	"Stone walling",
	"constructionActivity260":	"Structural works",
	"constructionActivity300":	"Precast concrete structure assembly",
	"constructionActivity290":	"In situ concrete structure construction",
	"constructionActivity320":	"Stair construction",
	"constructionActivity280":	"Timber structure assembly",
	"constructionActivity270":	"Metal structure assembly",
	"constructionActivity310":	"Masonry structure construction",
	"Thesaurus_Instance_10135":	"Shoring",
	"Thesaurus_Instance_10153":	"Reinforced concrete construction",
	"constructionActivity80":	"Site preparation",
	"constructionActivity120":	"Temporary elements installation",
	"constructionActivity110":	"Job site fencing",
	"constructionActivity100":	"Existing material conserving",
	"constructionActivity130":	"Site cleaning",
	"constructionActivity90":	"Existing building demolition",
	"id20":	"Construction Phases",
	"constructionPhases20":	"Ground works",
	"constructionPhases30":	"Foundation works",
	"constructionPhases70":	"Finishes works",
	"constructionPhases50":	"Envelope construction",
	"constructionPhases10":	"Site preparation",
	"constructionPhases00":	"Preliminaries",
	"constructionPhases40":	"Structural works",
	"constructionPhases60":	"System installation",
	"constructionPhases80":	"External works",
	"Thesaurus_Instance_10110":	"Finishing",
	"id23":	"Construction management",
	"constructionManagement130":	"Quality",
	"constructionManagement220":	"Quality commissioning and testing",
	"constructionManagement210":	"Site quality inspection",
	"constructionManagement200":	"Quality defect",
	"constructionManagement170":	"Quality economic aspects",
	"constructionManagement150":	"Quality regulation",
	"constructionManagement160":	"Quality procedure",
	"constructionManagement190":	"Quality plan",
	"constructionManagement140":	"Total quality management (TQM)",
	"constructionManagement180":	"Quality assurance",
	"Thesaurus_Instance_10022":	"quality management",
	"constructionManagement420":	"Environment",
	"constructionManagement460":	"Environment evaluation",
	"constructionManagement450":	"Environment strategies",
	"constructionManagement480":	"Environmental economic aspects",
	"constructionManagement430":	"Environment management",
	"constructionManagement440":	"Environment regulation",
	"constructionManagement470":	"Environment plan",
	"Thesaurus_Instance_10033":	"environment impacts",
	"Thesaurus_Instance_10034":	"environment protection",
	"Thesaurus_Instance_10035":	"recycling",
	"Thesaurus_Instance_10036":	"reuse",
	"Thesaurus_Instance_10119":	"Operational environment protection",
	"constructionManagement230":	"Control",
	"constructionManagement290":	"Environmental control",
	"constructionManagement260":	"Commissioning and testing",
	"constructionManagement300":	"Procedures",
	"constructionManagement270":	"Time control",
	"constructionManagement240":	"Quality control",
	"constructionManagement250":	"site inspection",
	"constructionManagement280":	"Cost control",
	"Thesaurus_Instance_10023":	"Health and safety control",
	"Thesaurus_Instance_10093":	"Building progress",
	"Thesaurus_Instance_10100":	"Coordination",
	"Thesaurus_Instance_10131":	"Project control",
	"constructionManagement310":	"Health and safety",
	"constructionManagement360":	"Health and safety regulation",
	"constructionManagement350":	"Health and safety risk evaluation",
	"constructionManagement320":	"Health and safety plan",
	"constructionManagement390":	"Health and safety economic aspects",
	"constructionManagement370":	"Health and safety preventive measures",
	"constructionManagement410":	"Health and safety tenants' handbook",
	"constructionManagement380":	"Personal safety equipment",
	"constructionManagement340":	"Health and safety management",
	"constructionManagement330":	"Health and safety study",
	"constructionManagement400":	"Health and safety manual",
	"Thesaurus_Instance_10024":	"health and safety audit",
	"Thesaurus_Instance_10025":	"health and safety coordinator",
	"Thesaurus_Instance_10026":	"health and safety incidence",
	"constructionManagement00":	"Planning",
	"constructionManagement60":	"Cost model and indicative costs",
	"constructionManagement40":	"Outline proposal",
	"constructionManagement80":	"Technical risk analysis",
	"constructionManagement90":	"Development control plan",
	"constructionManagement70":	"Energy targets",
	"constructionManagement20":	"Programming",
	"constructionManagement100":	"Site layout programming",
	"constructionManagement110":	"Project meetings",
	"constructionManagement50":	"Report and sketch plan",
	"constructionManagement10":	"Tasks planning",
	"constructionManagement30":	"Critical path analysis",
	"constructionManagement120":	"Human resource management",
	"Thesaurus_Instance_10020":	"Site logistics",
	"Thesaurus_Instance_10021":	"planning techniques",
	"Thesaurus_Instance_10099":	"Construction time",
	"Thesaurus_Instance_10108":	"Execution planning",
	"Thesaurus_Instance_10115":	"Integrated planning",
	"Thesaurus_Instance_10116":	"Logistics system",
	"Thesaurus_Instance_10120":	"Planning process",
	"Thesaurus_Instance_10123":	"Scheduling",
	"Thesaurus_Instance_10128":	"General planning",
	"Thesaurus_Instance_10152":	"planning procedure",
	"Thesaurus_Instance_10132":	"Project development",
	"Thesaurus_Instance_10133":	"Project progress",
	"Thesaurus_Instance_10027":	"Economics",
	"Thesaurus_Instance_10028":	"cash flow",
	"Thesaurus_Instance_10029":	"financial evaluation techniques",
	"Thesaurus_Instance_10030":	"payments",
	"Thesaurus_Instance_10031":	"balance",
	"Thesaurus_Instance_10032":	"budget",
	"Thesaurus_Instance_10091":	"Building costs",
	"Thesaurus_Instance_10102":	"Cost analysis",
	"Thesaurus_Instance_10103":	"Cost minimization",
	"Thesaurus_Instance_10104":	"Cost reduction",
	"Thesaurus_Instance_10105":	"Cost saving",
	"id22":	"Machinery and Equipment",
	"machineryEquipment600":	"Stone production equipment",
	"machineryEquipment690":	"Recycling debris plant",
	"machineryEquipment710":	"Stone cleaving machine",
	"machineryEquipment750":	"Sanding and polishing machine",
	"machineryEquipment770":	"Diamond tool",
	"machineryEquipment700":	"Stone drilling machine",
	"machineryEquipment630":	"Screen",
	"machineryEquipment720":	"Stone sawing equipment",
	"machineryEquipment660":	"Washing machine",
	"machineryEquipment760":	"Slab cutting machine",
	"machineryEquipment680":	"Stacker",
	"machineryEquipment740":	"Milling machine",
	"machineryEquipment650":	"Silo",
	"machineryEquipment730":	"Abrasive cutting off machine",
	"machineryEquipment620":	"Crusher",
	"machineryEquipment610":	"Breaker",
	"machineryEquipment640":	"Drying installation",
	"machineryEquipment670":	"Dust extraction plant",
	"machineryEquipment1000":	"Site temporary services",
	"machineryEquipment1010":	"Toilet vehicle",
	"machineryEquipment1060":	"Drainage equipment",
	"machineryEquipment1030":	"Site electrical equipment",
	"machineryEquipment1020":	"Site lighting equipment",
	"machineryEquipment1040":	"Power generating unit",
	"machineryEquipment1070":	"Rubbish disposal equipment",
	"machineryEquipment1050":	"Frequency and voltage transformer",
	"machineryEquipment440":	"Tunnelling equipment",
	"machineryEquipment510":	"Blasting equipment",
	"machineryEquipment450":	"Cutting machine",
	"machineryEquipment490":	"Ventilation and dust extraction",
	"machineryEquipment500":	"Lining system",
	"machineryEquipment460":	"Shield",
	"machineryEquipment480":	"Drilling vehicle",
	"machineryEquipment470":	"Rough press equipment",
	"machineryEquipment930":	"Testing equipment",
	"machineryEquipment940":	"Concrete testing equipment",
	"machineryEquipment970":	"Vehicle weighing machine",
	"machineryEquipment950":	"Sampling equipment",
	"machineryEquipment990":	"Drain testing equipment",
	"machineryEquipment980":	"Pipe testing equipment",
	"machineryEquipment960":	"Material weighing machine",
	"machineryEquipment70":	"Scaffolding equipment",
	"machineryEquipment80":	"Prefabricated scaffold",
	"machineryEquipment160":	"Stabiliser",
	"machineryEquipment90":	"Mobile elevating work platform",
	"machineryEquipment140":	"Access way",
	"machineryEquipment110":	"Work platform",
	"machineryEquipment100":	"Scaffold frame",
	"machineryEquipment150":	"Scaffold fitting",
	"machineryEquipment180":	"Shoring equipment",
	"machineryEquipment120":	"Cage",
	"machineryEquipment200":	"Tube straightening equipment",
	"machineryEquipment170":	"Protection screen",
	"machineryEquipment190":	"Temporary fencing structure",
	"machineryEquipment130":	"Guardrail",
	"machineryEquipment1080":	"Site equipment",
	"machineryEquipment1170":	"Site hut",
	"machineryEquipment1090":	"Surveying and measuring equipment",
	"machineryEquipment1130":	"Cleaning and surface preparation equipment",
	"machineryEquipment1110":	"Protective equipment",
	"machineryEquipment1160":	"Dehumidifier",
	"machineryEquipment1150":	"Steel reinforcement cutting and bending plant",
	"machineryEquipment1100":	"Welding equipment",
	"machineryEquipment1120":	"DPC equipment",
	"machineryEquipment1140":	"Compressor",
	"Thesaurus_Instance_10002":	"Barriers",
	"Thesaurus_Instance_10003":	"Catwalks",
	"Thesaurus_Instance_10004":	"Cover holes",
	"Thesaurus_Instance_10005":	"Handrails",
	"Thesaurus_Instance_10006":	"Net",
	"Thesaurus_Instance_10007":	"Protective mesh",
	"machineryEquipment520":	"Drilling equipment",
	"machineryEquipment550":	"Canal trimming equipment",
	"machineryEquipment530":	"Drilling machine and plant",
	"machineryEquipment540":	"Piling driver",
	"machineryEquipment780":	"Concrete production and application equipment",
	"machineryEquipment790":	"Concrete and mortar mixer",
	"machineryEquipment870":	"Grouting equipment",
	"machineryEquipment900":	"Gunite equipment",
	"machineryEquipment910":	"Rendering machine",
	"machineryEquipment920":	"Measuring equipment",
	"machineryEquipment800":	"Concrete truck mixer",
	"machineryEquipment830":	"Power driven loading shovel",
	"machineryEquipment810":	"Concrete agitator",
	"machineryEquipment860":	"Batching plant",
	"machineryEquipment840":	"Concrete vibrator",
	"machineryEquipment890":	"Gun",
	"machineryEquipment820":	"Concrete bucket",
	"machineryEquipment880":	"Spreader",
	"machineryEquipment850":	"Concrete finishing equipment",
	"machineryEquipment1180":	"Hand tools",
	"machineryEquipment1330":	"Allen key",
	"machineryEquipment1260":	"Digging tool",
	"machineryEquipment1250":	"Barrow",
	"machineryEquipment1320":	"Spanner",
	"machineryEquipment1230":	"Painting application equipment",
	"machineryEquipment1310":	"Bolt cutter",
	"machineryEquipment1200":	"Pipe work equipment",
	"machineryEquipment1190":	"Saw",
	"machineryEquipment1240":	"Insulation application equipment",
	"machineryEquipment1280":	"Screwdriver",
	"machineryEquipment1210":	"Hammer",
	"machineryEquipment1220":	"Hand-held drill",
	"machineryEquipment1300":	"Float",
	"machineryEquipment1270":	"Electrical tool",
	"machineryEquipment1340":	"Levering bar",
	"machineryEquipment1290":	"Trowel",
	"Thesaurus_Instance_10008":	"Rakes",
	"Thesaurus_Instance_10009":	"Screed",
	"machineryEquipment290":	"Construction vehicles",
	"machineryEquipment340":	"Trailer",
	"machineryEquipment370":	"Excavator",
	"machineryEquipment400":	"Loader",
	"machineryEquipment360":	"Fuel supply vehicle",
	"machineryEquipment310":	"Truck",
	"machineryEquipment410":	"Scraper",
	"machineryEquipment350":	"Water supply vehicle",
	"machineryEquipment320":	"Tractor",
	"machineryEquipment300":	"Lorry",
	"machineryEquipment430":	"Grader",
	"machineryEquipment420":	"Dozer",
	"machineryEquipment330":	"Vehicle superstructure",
	"machineryEquipment390":	"Dredger",
	"machineryEquipment380":	"Combined excavator loader",
	"machineryEquipment210":	"Lifting appliances",
	"machineryEquipment280":	"Lifting and jacking gear",
	"machineryEquipment240":	"Winche",
	"machineryEquipment230":	"Construction lift",
	"machineryEquipment270":	"Lifting platform",
	"machineryEquipment250":	"hoist",
	"machineryEquipment220":	"Crane",
	"machineryEquipment260":	"Lifting truck",
	"machineryEquipment00":	"Pumping equipment",
	"machineryEquipment560":	"Compaction equipment",
	"machineryEquipment570":	"Roller",
	"machineryEquipment590":	"Planer",
	"machineryEquipment580":	"Rammer",
	"machineryEquipment10":	"Formwork equipment",
	"machineryEquipment20":	"Wall and floor formwork system",
	"machineryEquipment60":	"Formwork scaffolding equipment",
	"machineryEquipment40":	"Formwork sealing product",
	"machineryEquipment30":	"Form laying equipment",
	"machineryEquipment50":	"Formwork cleaning product",
	"Thesaurus_Instance_10111":	"Formwork element",
	"Thesaurus_Instance_10113":	"Formwork system",
	"Thesaurus_Instance_10010":	"Personal safety equipment",
	"Thesaurus_Instance_10012":	"Eye protection",
	"Thesaurus_Instance_10013":	"Audible protection",
	"Thesaurus_Instance_10014":	"Boots",
	"Thesaurus_Instance_10015":	"Gloves",
	"Thesaurus_Instance_10016":	"Harness",
	"Thesaurus_Instance_10017":	"Helmet",
	"Thesaurus_Instance_10018":	"Respiratory ways protection",
	"Thesaurus_Instance_10019":	"Work clothes"
};
/*
COMPETENCE
*/
l["lom.classification.taxonpath.taxon.id.competency"] = {
	"159":	"Environmental impact in a product life cycle",
	"158":	"Regulations and norms",
	"157":	"Components and subsystem typologies",
	"156":	"General Strategies of Bio-climatic design",
	"154":	"Living comfort",
	"155":	"Strategies for building integration",
	"153":	"Analysis of infrastructures and technical systems",
	"149":	"Knowledge of engineering biology",
	"150":	"Ability to control the building progress",
	"151":	"Knowledge of business administration",
	"152":	"Climate analysis",
	"148":	"Knowledge of town planning",
	"147":	"Knowledge of regional planning",
	"144":	"Ability to do landscape design",
	"145":	"Ability to do plant planning",
	"146":	"Knowledge of territory planification",
	"16":	"Knowledge of fine arts",
	"143":	"Understanding of environmental protection",
	"142":	"Understanding of forestry",
	"140":	"Understanding of rural development",
	"141":	"Understanding of agriculture",
	"139":	"Knowledge of water engineering",
	"136":	"Knowledge of data processing",
	"137":	"Knowledge of phytosociology",
	"138":	"Knowledge of landscape ecology",
	"134":	"Ability to do earth mass calculation",
	"135":	"Knowledge of structural design",
	"130":	"Knowledge of using plants",
	"131":	"Knowledge of landscaping management",
	"132":	"Knowledge of descriptive geometry",
	"133":	"Knowledge of survey(topography)",
	"122":	"Cooperative Design",
	"125":	"Knowledge of botany",
	"124":	"Use of materials in Urban Design",
	"126":	"Knowledge of landscape design",
	"127":	"Knowledge of garden architecture",
	"29":	"Ability to apply knowledge of basic subjects",
	"30":	"Ability to design a system or component",
	"31":	"Ability to face construction engineering problems",
	"32":	"Ability to design and calculate constructive fields",
	"33":	"Ability to design experiments and interpret data",
	"34":	"Ability to identify research needs and resources",
	"35":	"Ability to use modern engineering tools",
	"36":	"Ability to apply knowledge in construction engineering",
	"37":	"Ability to function in multi-disciplinary teams",
	"38":	"Ability to manage multidisciplinary teams",
	"39":	"Ability to do research, development and innovation",
	"40":	"Ability to elaborate, lead and manage projects",
	"41":	"Ability to develop and apply the strategic planning",
	"42":	"Ability to manage technically and economically",
	"43":	"Ability to solve problematic situations in new environments",
	"44":	"Ability to include social and ethic aspects in complex judgments",
	"45":	"Ability to communicate effectively knowledge to public",
	"46":	"Underst. interaction between technical and environmental issues",
	"47":	"Underst. project's elements and construction management",
	"48":	"Underst. responsibility of construction engineers",
	"49":	"Underst. solution's impact in a global and societal context",
	"50":	"Underst. of the leadership principles and attitudes",
	"117":	"Ability to read a city",
	"178":	"Knowledge to conduct strategic planning",
	"76":	"Ability to adapt to new situations",
	"128":	"Knowledge of green planning",
	"129":	"Knowledge of wildlife protection",
	"102":	"Knowledge of History",
	"103":	"Ability to Create Architectural Design",
	"116":	"Ability to match requirements and cost factors in design",
	"112":	"Ability to engage in life-long learning in an autonomous way",
	"105":	"Knowledge of Urban Design",
	"106":	"Underst. people/building relations",
	"107":	"Underst. of architectural profession",
	"108":	"Underst. project preparation methods",
	"109":	"Underst. of structural and technological design",
	"110":	"Knowledge of internal environment control",
	"111":	"Knowledge of constructive and management procedures",
	"113":	"Capacity to adapt to new situations and generating new solutions",
	"121":	"Representation strategies",
	"120":	"Metadesign in Urban Design",
	"160":	"Technologies and materials at low environmental impact",
	"162":	"Basic knowledge of design",
	"163":	"Knowledge of graphical presentation",
	"164":	"Knowledge of interior design",
	"165":	"Knowledge of furniture design",
	"166":	"Basic knowledge of building design",
	"167":	"Knowledge of history of art",
	"168":	"Knowledge of aesthetics",
	"169":	"Knowledge of materials",
	"170":	"Basic knowledge of structural design",
	"171":	"Knowledge of building technology",
	"172":	"Knowledge of visual perception",
	"173":	"Ability to design interiors of public buildings",
	"174":	"Ability to do experimental design",
	"175":	"Ability to to building design",
	"176":	"Ability to design furniture and components",
	"177":	"Ability to visualize design",
	"179":	"Knowledge, understanding and capacity to implement legislation",
	"180":	"Knowledge of management systems",
	"185":	"Integrating buildings in natural and artificial environments",
	"183":	"Knowledge to implement and control systems and processes",
	"184":	"Knowledge to do quality control",
	"186":	"Principles of bio-climatic design",
	"187":	"Low impact technologies and materials",
	"188":	"Cases of bioclimatic design",
	"189":	"Knowledge of ventilated facades",
	"190":	"knowledge of fixing system for ventilated façade",
	"191":	"knowledge of cladding system",
	"192":	"knowledge of pertinent standards and codes",
	"193":	"knowledge in producing innovative solar shading solutions",
	"194":	"Ability to create 2D drawings",
	"195":	"Understanding 3D modeling",
	"196":	"Ability to create 3D models",
	"197":	"Understanding Building Information Modeling",
	"198":	"Ability to create BIM models",
	"199":	"Ability to create visualizations",
	"200":	"Understanding scripting and programming",
	"201":	"Ability to create procedures and scripts",
	"202":	"Understanding digital image manipulation",
	"203":	"Ability to apply digital image manipulations",
	"204":	"Ability to create a portfolio",
	"205":	"Ability to create presentations",
	"206":	"Surveying building elements with Ground Penetrating Radar",
	"207":	"Survey of Building Elements with ultrasonic device"
}
// Language mapping also in LOM.js

l["lom.educational.language"] =
l["lom.general.language"] = {
	"bg":	"Bulgarian",
	"cs":	"Czech",
	"da":	"Danish",
	"nl":	"Dutch",
	"en":	"English",
	"et":	"Estonian",
	"fi":	"Finnish",
	"fr":	"French",
	"de":	"German",
	"el":	"Greek",
	"hu":	"Hungarian",
	"ga":	"Irish",
	"it":	"Italian",
	"lv":	"Latvian",
	"lt":	"Lithuanian",
	"mt":	"Maltese",
	"pl":	"Polish",
	"pt":	"Portuguese",									
	"ro":	"Romanian",
	"sk":	"Slovak",
	"sl":	"Slovenian",
	"es":	"Spanish",	
	"sv":	"Swedish",
	"hr":	"Croatian",	
	"li":	"Limburgish",
	"ru":	"Russian",
	"zh":	"Chinese"													
};

