/*
 * Mach-II Helper Class
 * Created: June 2009
 * Author: Phil Harvey
 * 
 * Requires:
 * - Prototype 1.6.0+
 */

var MachII = Class.create({});
Object.extend(MachII, {
	buildUrl: function(eventName, urlParameters, urlBase) {
		return MachII.buildUrlToModule(MachII.getCurrentModuleName(), eventName, urlParameters, urlBase);
	},
	buildUrlToModule: function(moduleName, eventName, urlParameters, urlBase) {
		var url = MachII.templates.prolog();
		var parameters = '';
		
		urlBase = urlBase || location.protocol + '//' + location.host + '/';
		
		if(!urlBase.endsWith('/')) {
			urlBase = urlBase.concat('/');
		}
		
		if(!urlBase.startsWith('http://') && !urlBase.startsWith('https://')) {
			urlBase = location.protocol.concat('//').concat(urlBase);
		}
		
		if(!Object.isUndefined(urlParameters)) {
			if(Object.isString(urlParameters)) {
				// parse the string
				$A(urlParameters.split('|')).each(function(pair) {
					pair = pair.split('=');
					var parameter = MachII.templates.parameter().interpolate({key:pair[0], value:pair[1]});
					parameters = parameters.concat(parameter);
				});
			} else {
				// assume it's a hash
				$H(urlParameters).each(function(pair) {
					var parameter = MachII.templates.parameter().interpolate({key:pair.key, value:pair.value});
					parameters = parameters.concat(parameter);
				});
			}
		}
		
		return url.interpolate({
			urlBase: urlBase,
			moduleName: moduleName,
			eventName: eventName,
			parameters: parameters});
	},
	getCurrentModuleName: function() {
		/*
		var moduleName = '';
		if(MachII.buildFriendlyUrls() == false && location.search.length > 0) {
			moduleName = location.search.split('&')[0].split(':')[0].split('=')[1] + MachII.templates.moduleSeparator();
		} else if(location.pathname.length > 1) {
			moduleName = location.pathname.split('/')[1];
		}*/
		return MachII.config.currentModuleName;
	},
	buildFriendlyUrls: function() {
		return MachII.config.urlParseSES;
	},
	templates: {
		parameter: function() {
			return MachII.buildFriendlyUrls() ? '/#{key}/#{value}' : '&#{key}=#{value}';
		},
		prolog: function() {
			return MachII.buildFriendlyUrls() ? '#{urlBase}#{moduleName}/#{eventName}#{parameters}' : '#{urlBase}index.cfm?event=#{moduleName}:#{eventName}#{parameters}';
		},
		moduleSeparator: function() {
			return MachII.buildFriendlyUrls() ? '/' : ':';
		}
	},
	config: {
		urlParseSES: window.MachII_config_urlParseSES,
		currentModuleName: window.MachII_config_currentModuleName
	}
});