var defLoadMessage = 'Загрузка';
var defLoadMessageClass = 'loadingIndicator';

//Ext.Updater.defaults.loadScripts = true;

Ext.Element.prototype.request = function(config) {
	var msg = popEl(config, 'msg', defLoadMessage);
	var msgCls = popEl(config, 'msgCls', defLoadMessageClass);
	
	var elScope = config.elScope || this;

	if (typeof config.callback == "function") {
		config.callback = config.callback.createSequence(function() {
			elScope.unmask();
		});
	}
	else {
		config.callback = function() {
			elScope.unmask();
		};
	}
	
	defConfig = {
		method: 'POST',
		params: {},
		scope: elScope
	}

	config = Ext.applyIf(config, defConfig);

	elScope.mask(msg, msgCls);
	Ext.Ajax.request(config);
}

Ext.alertProps = function(obj) {
	var str = ''
	for (a in obj) {
		str += a + ' = ' + obj[a] + '\n'
	}

	Ext.Msg.show({
	   title: 'Свойства объекта',
	   value: str,
	   width: 500,
	   buttons: Ext.MessageBox.OK,
	   prompt: true,
	   multiline: true
	});
}

var scriptReadyLesteners = {};
var readyScripts = [];

Ext.scriptReady = function(scriptName) {
	readyScripts.push(scriptName);
	if (scriptReadyLesteners.scriptName)
		scriptReadyLesteners.scriptName.fire(scriptName);
}

Ext.onScriptReady = function(scriptName, fn) {
	if (!scriptReadyLesteners.scriptName) {
		scriptReadyLesteners.scriptName = new Ext.util.Event();
	}

	if (readyScripts.indexOf(scriptName) != -1) {
		Ext.onReady(fn);
	}
	else {
		scriptReadyLesteners.scriptName.addListener(function() {
			Ext.onReady(fn);
		}, this, {single: true});
	}
}

Ext.addParams = function(url, params) {
	url = url.split('#')[0];
	var urlParts = url.split('?');
	
	var ps = Ext.urlDecode(urlParts[1]);
	Ext.apply(ps, params);
	url = urlParts[0] + '?' + Ext.urlEncode(ps);
	
	return url;
}