//łąśłąśł

/**
 * zachwanie dodajace obiektowi obsługę ajaxa
 * @constructor
 * @abstract
 * @param {object} options
 */
AjaxHelper = function(options) {
	this.__coreOptions = Util.mergeObject({
		repeatDelay : 0
	}, options);

};


/**
 * metoda podobna do JQuery.ajax + dodana obsługa szablonów url
 * @see JQuery.ajax
 * @param {object} ajaxOptions
 * @param {object} options dodatkowe opcje (można nadpisac domyślne wartości podawane w konstruktorze)
 */
AjaxHelper.prototype.ajax = function(ajaxOptions, options){
	var that = this;

	//opcje
	var _options = Util.mergeObject(this.__coreOptions, options);

	//opcje dla JQuery.ajax
	var _ajaxOptions = Util.mergeObject({
		type : 'GET',
		url : '',
		error : _options.repeatDelay ? function() { setTimeout(function(){ that.ajax(ajaxOptions, options); }, _options.repeatDelay ); } : this.errorHandler,
		data : {}
	}, ajaxOptions);

	_ajaxOptions.success = function(data, textStatus, XMLHttpRequest){
		if(typeof(ajaxOptions.success) == 'function'){
			ajaxOptions.success(data, textStatus, XMLHttpRequest);
		}
	};
	return $.ajax(_ajaxOptions);
};

/**
 * obsługa błedów ajaxowych
 */
AjaxHelper.prototype.errorHandler = function(XMLHttpRequest, textStatus, errorThrown){
		if(XMLHttpRequest.status == 503){
			alert('Usługa czasowo niedostępna.');
		} else if(XMLHttpRequest.status == 401){
			alert('Sesja użytkownika wygasła. Zaraz nastąpi przekierowanie na stronę logowania.');
			window.location.reload();
		} else if(XMLHttpRequest.status == 0){
			alert('Nie można nawiązać połaczenia z serwerem. Sprawdź czy masz dostęp do Internetu.');
		} else {
			alert('Wystapił problem podczas połączenia z serwerem.');
		}
};



/**
 * metoda podobna do JQuery.post + dodana obsługa szablonów url
 * @see JQuery.post
 */
AjaxHelper.prototype.ajaxPost = function(url, p1, p2){
	var _ajaxOptions = {
		url : url,
		data : typeof(p1) == 'function' ? {} : p1,
		success : typeof(p1) == 'function' ? p1 : (typeof(p2) == 'function' ? p2 : function(){}),
		type : 'POST'
	};
	return this.ajax(_ajaxOptions);
};

/**
 * metoda podobna do JQuery.get + dodana obsługa szablonów url
 * @see JQuery.post
 */
AjaxHelper.prototype.ajaxGet = function(url, p1, p2){
	var _ajaxOptions = {
		url : url,
		data : typeof(p1) == 'function' ? {} : p1,
		success : typeof(p1) == 'function' ? p1 : (typeof(p2) == 'function' ? p2 : function(){}),
		type : 'GET'
	};
	return this.ajax(_ajaxOptions);
};


/**
 * setter opcji
 * @param {string} key
 * @param {any} value
 * @return this
 */
AjaxHelper.prototype.ajaxSetOption = function(key, value){
	this.__coreOptions[key] = value;
	return this;
};

var MAjax = new AjaxHelper();
