jQuery(function($) {

			$("#thing")
				.freebaseSuggest()
				.bind("fb-select", function(e, data) {
				    thingid = data.id;
				    thingtype = data.type;
				    thinglink = '<a href="http://freebase.com/view'.concat(thingid, '">',data.name,'</a>');
				    document.getElementById("msg").innerHTML=thinglink;
				    document.getElementById("msg2").innerHTML="";       	
				    document.getElementById("msg3").innerHTML="";       		
				    for (var key in thingtype){
				        if (thingtype[key].name) {
				        	if (thingtype[key].name != "Topic" && !(thingtype[key].id.match('/user'))) {
				    			mylog(thingtype[key].name);
				    			getProperties(thingtype[key].id);
				    		}
				    	}
				    } 				
		    });	

			$("#has")
				.freebaseSuggest({filter:filter_items, ac_param:{type:'/type/property', limit: '200'}})
				.bind("fb-select", function(e, data) {
				    propertyid = data.id
				    document.getElementById("msg3").innerHTML="";
					getValue(thingid, data.id);
				});								
		});
		
filter_items = function(data, txt) {
   for (var key in thingtype){
		if (data.id.match(thingtype[key].id)) {
			return true;
		}
  }
  return false;
};

function mylog() {
	var msg = "";
	$.each(arguments, function(i,n) {
		msg += n;
	});
	if (msg) {
		$("#msg").append("<li>" + msg + "</li>");
	}
};

function myloghas() {
	var msg = "";
	$.each(arguments, function(i,n) {
		msg += n;
	});
	if (msg) {
		$("#msg2").append("<li>" + msg + "</li>");
	}
};

function mylogvalue() {
	var msg = "";
	$.each(arguments, function(i,n) {
		msg += n;
	});
	if (msg) {
		$("#msg3").append("<li>" + msg + "</li>");
	}
};

function getProperties(typeid) {
	var query = {     
		"type": typeid, 
		"id": thingid,
		"*": []
	};
	Metaweb.read(query, printProperties);
};
		
function printProperties(result) {
	if (!result) {
		return;
	}
	for(var key in result) {
		if (result[key].length > 0 && !(key in {'key':'','permission':'','attribution':'','timestamp':'','id':'','guid':'','type':'','creator':'','name':''})) {
			if ((is_string_or_int(result[key]) || result[key].length == 1) && result[key] != "") {
				myloghas(key, " : ",result[key]);
			} else {
				myloghas(key," (", result[key].length,")");
			}
		}
	}
};

function getValue(thingid, propertyid) {
	propertyarray = propertyid.split("/",3)	
	var typeid	 = "/".concat(propertyarray[0],propertyarray[1],"/",propertyarray[2]);
	var query = {     
		type: typeid, 
		id: thingid
	};
	query[propertyid]=[{}];
	Metaweb.read(query, printValue);
};

function printValue(result) {
	if (!result) {
		return;
	}
	resultArray = result[propertyid];
	for(var key in resultArray) {
		if (resultArray[key].name) {
			mylogvalue(resultArray[key].name);
		} else if (resultArray[key].value) {
			mylogvalue(resultArray[key].value);
		} else if (resultArray[key].id) {
			getInfo(resultArray[key].id, resultArray[key].type[0]);
		}			
	}
};

function is_string_or_int(mixed_var){
	return (typeof(mixed_var) == 'string' || typeof(mixed_var) == 'number');
};

function getInfo(id, typeid) {
		var query = {
		"type": typeid,
		"*" : null,
		"id": id,
	};
	Metaweb.read(query, printInfo);
};

function printInfo(result) {
	var list = "";
	for(var key in result) {
		if (result[key] != null && result[key] != "" && result[key][0] != '/' && result[key][0] != '#' && key != 'timestamp') {
			list = list.concat(key, " : ",result[key],"<br>");
		}
	}
	mylogvalue(list);
};