/**
 * Модуль для работы с API
 *
 * @readme Модуль в разработке. Пока не используется
 * @author М. Кечинов
 */
Vite.api = function ($) {

	// Vite.api
	return {

		// URL прокси для доступа к API
		URL: 'http://' + (typeof(API_URL) != 'undefined' && API_URL != '' ? API_URL : 'api.test8.intive.com' ) + '/',

		/**
		 * Отправляет запрос к API
		 * @param controller:string Имя контроллера API
		 * @param action:string Имя экшна API
		 * @param data:object Словарь данных { param1: value1, param2: value2 }
		 * @param successCallback:callback Функция-обработчик успешного ответа
		 * @param errorCallback:callback Функция-обработчик неудачного ответа
		 * @param httpErrorCallback:callback Функция-обработчик неудачного запроса (ошибка HTTP или сервера)
		 */
		send: function (controller, action, data, successCallback, errorCallback, httpErrorCallback) {

			// Проверяем данные
			if( !controller ) {
				alert('Controller is not defined');
			}
			if( !action ) {
				alert('Action is not defined');
			}

			// Если данныене указаны, объявляем пустой объект
			if( !data ) {
				data = {};
			}

			// Добавляем в параметры локаль
			data.locale = LOCALE;

			// Готовим URL
			var url = this.URL + controller + '/' + action + '.json';

			// Замыкание
			var _this = this;

			// Выполняем запрос и возвращаем объект запроса
			return $.ajax({
				
				// Метод (GET обязателен)
				type: "GET",

				// Запрещаем кеширование
				cache: false,

				// Формат ответа (JSONP обязателен)
				dataType: "jsonp",

				// Адрес прокси
				url: url,

				// Данные для прокси
				data: data,

				// Успешный ответ от прокси
				success: function(response, textStatus) {

					// Если на API была ошибка, вызываем обработчик ошибки
					if(response.error) {

						// Если существует обработчик ошибки, вызываем его
						if(errorCallback) {

							errorCallback(response);

						} else {

							// Обработчик не указан, поэтому вызываем дефолтный обработчик
							_this.defaultFailureCallback(response);

						}

					} else {

						// Ошибки не было

						// Если существует обработчик успешного результата, вызываем его
						if(successCallback) {

							successCallback(response);

						} else {

							// Обработчик не указан, поэтому вызываем дефолтный обработчик
							_this.defaultSuccessCallback(response);

						}

					}

				},

				// Ошибка прокси
				error: function(xhr, textStatus, errorThrown) {

					// Если есть обработчик таких ошибок, обрабатываем
					if(httpErrorCallback) {

						httpErrorCallback(xhr, textStatus, errorThrown);

					} else {

						// Сообщаем, что ошибка соединения
						console.log('API: temporary connection error');

					}

				}

			});

		},

		/**
		 * Дефолтный обработчик ошибки API (не прокси)
		 * @param response:object JSON-объект, пришедший от API
		 */
		defaultFailureCallback: function (response) {

			// Сообщаем об ошибке
			alert(response.error);

		},


		/**
		 * Дефолтный обработчик успешного ответа API (не прокси)
		 * @param response:object JSON-объект, пришедший от API
		 */
		defaultSuccessCallback: function (response) {

			// Ничего не делаем

		}

	};

}(jQuery);
