/**
 * @filename RestClient.js
 * 
 * @description This is the base class for all client library classes.
 * 		It contains methods for performing all of the different HTTP methods
 * 		neccesary to make calls to the web service.
 * 
 * @author Michael Bina
 * @email michael.bina@garmin.com
 *
 * Copyright(c) 2008, Garmin International
 */

if(Garmin == undefined) var Garmin = {};
if(Garmin.service == undefined) Garmin.service = {};

var defaultCallbacks = {
	onFailure: function(transport) {
		alert(transport.statusText);
/*
		Ext.MessageBox.show({
			title: 'Error',
			msg: transport.statusText,
			buttons: Ext.MessageBox.OK,
			icon: Ext.MessageBox.ERROR
		});
*/
	}
}

/**
 * @class Garmin.service.RestClient
 * 
 * @constructor
 * @param {Object} config
 * 
 */
Garmin.service.Client = function(config){
	this.config = config;	
}

Garmin.service.Client.prototype = {

	/**
	 * Make a request with the GET method
	 * 
	 * @param {String} restUrl
	 * @param {Object} parameters
	 * @param {Object} callbackFunctions
	 */
	getResource : function(restUrl, parameters, callbackFunctions){
		new Ajax.Request(restUrl, Object.extend({
			method: 'get',
			parameters: parameters
		}, Object.extend(defaultCallbacks, callbackFunctions)));
	},
	
	/**
	 * Make a request with the POST method
	 * 
	 * @param {String} restUrl
	 * @param {Object} parameters
	 * @param {Object} callbackFunctions
	 */
	postResource : function(restUrl, parameters, callbackFunctions) {
		new Ajax.Request(restUrl, Object.extend({
			method: 'post',
			parameters: parameters
		}, Object.extend(defaultCallbacks, callbackFunctions)));
	},
  
	/**
	 * Make a request with the PUT method
	 * 
	 * @param {String} restUrl
	 * @param {Object} parameters
	 * @param {Object} callbackFunctions
	 */
	putResource : function(restUrl, parameters, callbackFunctions){
		new Ajax.Request(restUrl, Object.extend({
			method: 'get',
			parameters: parameters,
			requestHeaders: ['X-HTTP-Method-Override', 'PUT']
		}, Object.extend(defaultCallbacks, callbackFunctions)));	
	},
	
	/**
	 * Make a request with the DELETE method
	 * 
	 * @param {String} restUrl
	 * @param {Object} callbackFunctions
	 */
	deleteResource : function(restUrl, parameters, callbackFunctions) {
		new Ajax.Request(restUrl, Object.extend({
			method: 'get',
			parameters: parameters,
			requestHeaders: ['X-HTTP-Method-Override', 'DELETE']
		}, Object.extend(defaultCallbacks, callbackFunctions)));	
	}
};