/**
 * @class MbUtil
 * MbUtil is a utility class to access common functions for working with MotionBased
 * activities.
 */
var MbUtil = Class.create();
MbUtil.prototype = {
    /**
     * Instantiates an MbUtil object from which you can access all MotionBased utility functions
     * @param {String} trailWebAddress
     * @constructor 
     * @member MbUtil
     */
	initialize: function(trailWebAddress) {
		this.trailWebAddress = trailWebAddress;
	},

	 /**
     * Deletes aall pending activities in the users inbox
     * @param {Function} onFinishFunction 
     * @member MbUtil
     */	
	pendingDeleteAll: function(onFinishFunction) {
		var url = this.trailWebAddress + "/inbox/activity/delete/all.mb";

		new Ajax.Request(url, {
			onSuccess: onFinishFunction,
			onFailure: function(resp) {
				alert("Error deleting all pending activities");
			}
		});
	},

	 /**
     * Deletes an activity by activityId
     * @param {Function} onFinishFunction 
     * @param {Integer} activityId 
     * @member MbUtil
     */	
	deleteActivity: function(onFinishFunction, activityId) {
		var url = this.trailWebAddress + "/episode/delete.mb?";
		url += "episodePkValues=" + activityId + "&";
	
		new Ajax.Request(url, {
			onSuccess: onFinishFunction,
			onFailure: function(resp) {
				alert("Error deleting activities");
			}
		});
	},
	
	 /**
     * Edits an activity by activityId with the given information
     * @param {Function} onFinishFunction 
     * @param {Integer} activityId 
     * @param {String} activityName 
     * @param {Integer} activityType 
     * @param {Integer} eventType
     * @param {Boolean} private
     * @param {String} description 
     * @member MbUtil
     */	
	editActivity: function(onFinishFunction, activityId, activityName, activityType, eventType, privateView, description) {
		var url = this.trailWebAddress + "/episode/edit.mb?";
		url += "activityReviewContext=successAjax.xml&";
		url += "saveImageButton.x=1&";
		url += "episodePk.pkValue=" + activityId + "&";
		url += "episodeForEdit.name=" + escape(activityName) + "&";
		url += "activityTypePk.pkValue=" + activityType + "&";
		url += "eventTypePk.pkValue=" + eventType + "&";
		url += "episodeForEdit.description=" + escape(description) + "&";
		url += "episodeForEdit.privateView=" + privateView + "&";
		url += "episodeForEdit.pending=false&";
		url += "episodeForEdit.reportable=true&";  // TODO: what should this value be?
		url += "applyCorrections=on&";
		url += "applyElevationCorrections=on&";
		
		new Ajax.Request(url, {
			onSuccess: onFinishFunction,
			onFailure: function(resp) {
				alert("Error editing activities");
			}
		});
	},

	 /**
     * Combines multiple activities
     * @param {Function} onFinishFunction 
     * @param {Array} activityIdArray
     * @member MbUtil
     */	
	combineActivities: function(onFinishFunction, activityIdArray) {
		var url = this.trailWebAddress + "/episode/merge.mb?";
		for(var n = 0; n < activityIdArray.length; n++) {
			url += "episodePkValues=" + activityIdArray[n] + "&";
		}
		url += "inboxMerge=true&";

		new Ajax.Request(url, {
			onSuccess: onFinishFunction,
			onFailure: function(resp) {
				alert("Error combining activities");
			}
		});
	}
};