// wrapper around YUI Connection library to handle a few common tasks
var OTMConnection = function() {
	var Connection = function(method, url, successHandler, failureHandler, argument, postData, form, allowCache) {
		function innerCallback(o) {
			var status = o.responseXML.getElementsByTagName('status')[0].firstChild.data;
			if (status == 'success') {
				successHandler(o);
			} else {
				failureHandler(o);
			}
		}

		this.connect = function() {
			var thisUrl;
			if (allowCache) {
				thisUrl = url;
			} else {
				var sep = url.indexOf('?') < 0 ? '?' : '&';
				thisUrl = url + sep + 'r=' + Math.random();
			}

			if (form) YAHOO.util.Connect.setForm(form);
			YAHOO.util.Connect.asyncRequest(method, thisUrl,
				{ success: innerCallback, failure: failureHandler, argument: argument }, postData);
		}
	}

	var JSONConnection = function(method, url, successHandler, failureHandler, argument, postData, form) {
		function innerCallback(o) {
			try {
				var json = YAHOO.lang.JSON.parse(o.responseText);
				successHandler(json, o.argument);
			} catch(err) {
				if (failureHandler) failureHandler();
			}
		}

		this.connect = function() {
			var sep = url.indexOf('?') < 0 ? '?' : '&';
			var thisUrl = url + sep + 'r=' + Math.random();

			if (form) YAHOO.util.Connect.setForm(form);
			YAHOO.util.Connect.asyncRequest(method, thisUrl, { success: innerCallback, failure: failureHandler, argument: argument }, postData);
		}
	}

	return {
		connect : function(method, url, successHandler, failureHandler, argument, postData, form) {
			var conn = new Connection(method, url, successHandler, failureHandler, argument, postData, form);
			conn.connect();
		},
		connectJSON : function(method, url, successHandler, failureHandler, argument, postData, form) {
			var conn = new JSONConnection(method, url, successHandler, failureHandler, argument, postData, form);
			conn.connect();
		}
	}
}();
