﻿// Настраивает jQuery AJAX для использования в проектах ITC
// Должен подключаться после jQuery и jquery.jsonp

if (!window.itcConfiguration)
	itcConfiguration = {};

itcConfiguration.ajaxRequestFailedToReachServerMessage =
	"Не удалось отправить запрос на сервер. Возможно, проблемы с подключением к Интернет. Попробуйте еще раз.";

itcConfiguration.onAjaxRequestFailedToReachServer = function () {
	alert(itcConfiguration.ajaxRequestFailedToReachServerMessage);
};

itcConfiguration.buildErrorPageUrl = function (httpCode, errorGuid) {
	return "/error/" + httpCode + "/" + errorGuid;
};

jQuery.ajaxSetup({
	error: function (request, status, error) {
		if (request) {
			var errorUrl = request.getResponseHeader("Location");
			if (errorUrl) {
				location.href = errorUrl;
				return;
			}
		}

		jQuery.proxy(itcConfiguration.onAjaxRequestFailedToReachServer, this)(request, status, error);
	}
});

if (jQuery.jsonp) {
	jQuery.jsonp.setup({
		callbackParameter: "jsonpCallback",
		error: function (options, status) {
			jQuery.proxy(itcConfiguration.onAjaxRequestFailedToReachServer, this)(null, status, null);
		}
	});

	jQuery.itcJsonp = function (options) {
		var internalOptions = {};
		jQuery.extend(internalOptions, options);
		internalOptions.success = function (json, status) {
			if (json.IsError === true) {
				var errorUrl = itcConfiguration.buildErrorPageUrl(json.HttpStatusCode, json.ErrorId);
				if (errorUrl) {
					location.href = errorUrl;
					return;
				}

				jQuery.proxy(itcConfiguration.onAjaxRequestFailedToReachServer, this)(null, "error", null);
			}
			else {
				if (options.success)
					jQuery.proxy(options.success, this)(json, status);
			}
		};
		return jQuery.jsonp(internalOptions);
	};
}
