/*
 * zlstMetadata.js
 *
 * Copyright (c) 2007-2010 by Zelestra, ZELESTRA.COM. All Rights Reserved.
 * @author David C. Tessman
 * @version 3.2 2010-10-12
 * Requires: prototype.js version v1.6.1
 */

// Private Functions

function _zlstPostMetadataSuccess(uri,callback,data) {
	var metadata = data.evalJSON();
	var result = {};
	result["uri"] = uri;
	for(var i = 0; i < metadata.length; ++i) {
		if ((metadata[i][0] == "dc:title") && (metadata[i][1] == "")) {
			result["name"] = metadata[i][2];
		} else if ((metadata[i][0] == "dc:type") && (metadata[i][1] == "dctypes:Category")) {
			result["category"] = metadata[i][2];
		} else if ((metadata[i][0] == "dc:description") && (metadata[i][1] == "")) {
			result["description"] = metadata[i][2];
		} else if ((metadata[i][0] == "dc:description") && (metadata[i][1] == "dcterms:URI")) {
			result["homePage"] = metadata[i][2];
		} else if ((metadata[i][0] == "dc:description") && (metadata[i][1] == "dctypes:Caption")) {
			result["caption"] = metadata[i][2];
		} else if ((metadata[i][0] == "dcterms:extent") && (metadata[i][1] == "dctypes:WxH")) {
			var tmpStr = metadata[i][2];
			var idx = tmpStr.indexOf("x");
			if (idx != -1) {
				result["width"] = parseInt(tmpStr.substring(0,idx));
				result["height"] = parseInt(tmpStr.substring(idx + 1));
			}
		}
		if (!result[metadata[i][0]])
			result[metadata[i][0]] = {};
		if (!result[metadata[i][0]][metadata[i][1]])
			result[metadata[i][0]][metadata[i][1]] = metadata[i][2];
		else {
			if (!result[metadata[i][0]][metadata[i][1] + "[]"]) {
				result[metadata[i][0]][metadata[i][1] + "[]"] = new Array();
				result[metadata[i][0]][metadata[i][1] + "[]"].push(result[metadata[i][0]][metadata[i][1]]);
			}
			result[metadata[i][0]][metadata[i][1] + "[]"].push(metadata[i][2]);
		}
	}
	callback(result);
}

/*
 * Posts a metadata request to the specified URI.
 * Options are an associative array:
 * options {
 *	onSuccess: null,
 *	onFail: null,
 *	onProgress: null,
 *	include: null,
 *	exclude: null
 * }
 * The include option is any array of metadata include parameters
 * @param uri the URI to load
 * @param options optional options
 */
document.postMetadataRequest = function(uri,options) {
	var tmpOpts = {};
	var includes = "";
	var excludes = "";
	if (options) {
		if (options.onSuccess)
			tmpOpts.onSuccess = _zlstPostMetadataSuccess.bind(this,uri,options.onSuccess);
		if (options.onFail)
			tmpOpts.onFail = options.onFail;
		if (options.onProgress)
			tmpOpts.onProgress = options.onProgress;
		if (options.include)
			includes = "&include=" + options.include.join("&include=");
		if (options.exclude)
			excludes = "&exclude=" + options.exclude.join("&exclude=");
	}
	var requireAuthn = "";
	if (document.parameters["requireAuthn"] == "true")
		requireAuthn = "&requireAuthn=true";
	document.postAjaxRequest("/services/2001/Metadata/get?json=true&uri=" + encodeURIComponent(uri) + requireAuthn + includes + excludes, tmpOpts);
};
