var contentDiv = null;
var contentDivName = 'contentDiv';
Ext.onReady(function(){
	contentDiv = Ext.get(contentDivName);
	Ext.QuickTips.init();
	
	Ext.getBody().on({
		'click': {
			fn: function(e){
				var link = e.getTarget();
				var targEl = Ext.get(link).getAttributeNS('ext', 'targEl');
				if (targEl) {
					e.preventDefault();
					updateContentDiv(link.href);
				}
			},
			delegate: 'a'
		}
	})
});

function updateContentDiv(url){
	contentRequestConfig = {
		params: {},
		success: contentSuccessHandler,
		elScope: contentDiv,
		msg: 'Обновление содержимого.<br>Ждите...'
	}

	if (!url) {
		url = window.location.href;
	}
	
	url = Ext.addParams(url, {
		module: 'content'
	});
	
	contentRequestConfig.url = url;
	contentDiv.request(contentRequestConfig);
}

//Обработчик успешного обращения к серверу при обновлении контента
function contentSuccessHandler(response){
	contentDiv.setOpacity(0);
	contentDiv.update(response.responseText, true);
	contentDiv.fadeIn.defer(100, contentDiv);
}

function addBalance(){
	Ext.Msg.prompt('Пополнение баланса', 'Введите код, указанный на вашей карточке:', function(btn, text){
		 var num = /^[0-9]+$/;
	    if (btn == 'ok' && num.test(text)){
			Ext.Msg.wait('Подождите ваша карточка проверяется');
			Ext.Ajax.request({
				method: 'POST',
				params: {
					code: text
				},
				url: '?module=add_balance&act=add_b',
				success: addBalanceSuccess,
				failure: failureHandler
			});
	    }
	});
}

function addBalanceSuccess(response){
	response = Ext.decode(response.responseText);
	if (response.added == true) {
		Ext.Msg.show({
			title: 'Успешно',
			msg: response.msg,
			buttons: Ext.MessageBox.OK,
			icon: Ext.MessageBox.INFO,
			animEl: 'userBalance',
			fn: function(){
				var userBalance = Ext.get('userBalance');
				userBalance.update(response.newBalance);
				userBalance.frame('FFFF00', 2, {
					callback: function(){
						updateContentDiv()
					}
				});
			}
		});
	}
	else {
		showErrorMsg(response.msg);
	}
}

var checkBalanceTask = {
    run: checkBalance,
    interval: 10000 //1 second
}

function downloading() {
	cancelCheckBalanceTask.delay(300000);
	Ext.TaskMgr.start(checkBalanceTask);
}

function downloaded() {
	Ext.TaskMgr.stop(checkBalanceTask);
	cancelCheckBalanceTask.cancel();
}

var cancelCheckBalanceTask = new Ext.util.DelayedTask(downloaded);

function checkBalance(){
	Ext.Ajax.request({
		method: 'POST',
		params: {},
		url: '?module=add_balance&act=check_b',
		success: checkBalanceSuccess,
		failure: Ext.emptyFn
	});
}

function checkBalanceSuccess(response){
	response = Ext.decode(response.responseText);
	if (response.balance >= 0) {
		var userBalance = Ext.get('userBalance')
		var curBalance = parseFloat(userBalance.dom.innerHTML);
		if (response.balance != curBalance) {
			downloaded();
			userBalance.update(response.balance);
		}
	}
}

//Вывод сообщения с ошибкой
function showErrorMsg(config){
	if (typeof config == 'string') {
		config = {
			msg: config
		}
	}
	
	defConfig = {
		title: 'Ошибка',
		msg: 'Ошибка',
		buttons: Ext.MessageBox.OK,
		icon: Ext.MessageBox.ERROR
	}
	
	config = Ext.applyIf(config, defConfig);
	Ext.Msg.show(config);
}

//Обработчик неудачного обращения к серверу
function failureHandler(){
	showErrorMsg('Не удалось выполнить запрос к серверу');
}
