Cw = {};
Cw.currentRole = 0;
Cw.stationId = 0;
Cw.CentralPanel = {};
Cw.demo = true;Cw.wrapper = {
	sa : 'sa.php5', 
	cl : 'cl.php5', 
	arm : 'arm.php5', 
	index : 'index.php5', 
	exp : 'export.php5', 
	ajax : 'ajax.php5' 
};
Cw.ajaxreq = {
	sysmsg: 'sysmsg',
	login: 'login',
	stat: 'stat',
	booking : 'booking',
	invoice : 'invoice',
	service : 'service',
	user: 'user',
	brand: 'brand',
	carclass: 'carclass',
	car: 'car',
	report: 'report',
	cash: 'cash',
	post: 'post',
	washer: 'washer',
	station: 'station',
	region: 'region',
	company: 'company',
	address: 'address',
	board: 'board',
	help: 'help',
	homepage: 'homepage',
	picture: 'picture',
	config: 'config',
	log: 'sa_log',
	blacklist: 'blacklist',
	pricelist: 'pricelist'
};
Cw.userStatuses = [["0", "Отключен"], ["1", "Включен"]];
Cw.carnumberMask = /^[0-9A-ZБГДЁЖЗИЙЛПУФЦЧШЩЫЬЪЭЮЯ]|[\b]{1,}$/;
Cw.colorCodes = ["ffffff", "008000", "ffff00", "0000ff", "ff0000", "000000"];
Cw.defaultColorCode = "ffffff";
Cw.topDateFormat = "D, F d, Y";
Cw.roles = [["1", "Суперадмин"], ["2", "Менеджер"], ["3", "Супервизор"], ["4", "Оператор"], ["5","Клиент"]];
Cw.userRoles = ['Nobody', 'Суперадмин', 'Менеджер', 'Супервизор', 'Оператор', 'Клиент'];
Cw.user = { role: {no: 0, sa: 1, ma: 2, su: 3, op: 4, cl: 5} };
Cw.config = {};
try {
Cw.config.rpp = 20;
Cw.config.adminfee = "5";
Cw.config.empfee = "25";
Cw.config.allowbackdate = "1";
Cw.config.editinvoice = "0";
Cw.config.pdv = "20";
Cw.config.videourl = '';
} catch(e) {
	Ext.Msg.alert('Ошибка', 'Ошибка инициализации параметров станции ' + e);
}
Cw.requestRegister = {};
Cw.getAjaxRegkey = function() { return (new Date()).format('U'); }
Ext.BLANK_IMAGE_URL = 'http://cwport.com/extjs/' + 'resources/images/default/s.gif';
Ext.Ajax.defaultHeaders = {'Cw-Ajax-Request' : 'True'};
Ext.Ajax.on('beforerequest', function(conn, options){
	if(!Ext.isEmpty(Cw.loadingDate)) {
		if(Cw.loadingDate.getDate() != (new Date()).getDate()) {
			Ext.Msg.alert('Предупреждение', 'Текущая дата изменилась. Выполняется перезагрузка...');
			setTimeout("location.href = Cw.wrapper.arm", 2000);
			return;
		}
	}
	var regkey = '';
	if(!Ext.isEmpty(options.params.req)) {
		regkey = options.params.req;
	}
	var tm = Cw.getAjaxRegkey();
	options.params.tm = tm;
	regkey = regkey + tm;

	var maskEl = Ext.getBody();
	var maskText = 'Загрузка...';
	if(!Ext.isEmpty(options.options)) {
		if(!Ext.isEmpty(options.options.maskEl)) {
			maskEl = options.options.maskEl;
		}
		if(!Ext.isEmpty(options.options.maskText)) {
			maskText = options.options.maskText;
		}
	}
	Cw.registerRequest(regkey, maskEl, maskText)
});
Ext.Ajax.on('requestcomplete', function(scope, res, req) {
	var regkey = '';
	if(!Ext.isEmpty(req.params.req)) {
		regkey = req.params.req;
	}
	if(!Ext.isEmpty(req.params.tm)) {
		regkey = regkey + req.params.tm;
	}
	Cw.unregisterRequest(regkey);
	if(!Ext.isEmpty(req.options)) {
		if(!Ext.isEmpty(req.options.maskEl)) { req.options.maskEl.unmask(); }
	}
	Cw.processSystemMessage(res.responseXML);
});

Ext.Ajax.on('requestexception', function(scope, res, req) {
	var regkey = '';
	if(!Ext.isEmpty(req.params.req)) {
		regkey = req.params.req;
	}
	if(!Ext.isEmpty(req.params.tm)) {
		regkey = regkey + req.params.tm;
	}
	if(!Ext.isEmpty(req.options)) {
		if(!Ext.isEmpty(req.options.maskEl)) { req.options.maskEl.unmask(); }
	}
	Cw.unregisterRequest(regkey);
	var msgTitle = 'Ошибка выполнения запроса';
	var msgBody = (Ext.isOpera ? 'Смотри полное описание ошибки в FireFox или IE' : res.responseText);
	if(!Ext.isEmpty(res.statusText)) {
		if(res.statusText.toLowerCase().indexOf("communication") > -1 || res.statusText.toLowerCase().indexOf("aborted") > -1) {
			msgTitle = 'Ошибка соединения';
			msgBody = 'Возможно связь с сетью Интернет потеряна.';
		} else {
			msgTitle = res.statusText;
		}
	}
	Ext.Msg.show({
		title: msgTitle,
		minWidth: 300,
		msg: msgBody, 
		buttons: Ext.Msg.OK,
		icon: Ext.MessageBox.ERROR
	});
});

Cw.hasErrorMessage = function(xml) {
	if(!Ext.isEmpty(xml)) {
		var msgNode = Ext.DomQuery.selectNode('message', xml);
		if(!Ext.isEmpty(msgNode)) {
			var type = msgNode.getAttribute("type");
			if(type == 'error') { return true; }			
		}
	}
	return false;	
};
Cw.processSystemMessage = function(xml) {
	if(!Ext.isEmpty(xml)) {
		var msgNode = Ext.DomQuery.selectNode('message', xml);
		var msgIcon = Ext.MessageBox.INFO;
		if(!Ext.isEmpty(msgNode)) {
			msgText = Cw.getNodeText(msgNode); // msgNode.textContent; // doesn't work in IE
			
			if(msgText == '') return; // ignore empty messages
			
			var action = msgNode.getAttribute("action");
			var url = msgNode.getAttribute("url");
			var type = msgNode.getAttribute("type");
			if(type == 'error') { msgIcon = Ext.MessageBox.ERROR;}			
			if(action == 'alert') {
				// just a standard ExtJS alert 
				Ext.Msg.show({ title: 'Ответ системы', msg: msgText, icon: msgIcon, buttons: Ext.Msg.OK });
			}
			if(action == 'run') {
				// show Ext message box and after click 
				// run jsavascript code from URL attribute 
				Ext.Msg.show({ title: 'Ответ системы', msg: msgText, icon: msgIcon, buttons: Ext.Msg.OK });
				// TODO: implement "run url" functionality on "OK" button click
				// TODO: use customized Ext message box
			}
			if(action == 'redirect') {
				// show Ext message box and after click on  
				// Ext.Msg.show({ title: 'Ответ системы', msg: msgText, icon: msgIcon, buttons: Ext.Msg.OK });
				window.location = url;
			}
		}
	}	
	return;
}
Cw.registerRequest = function(regKey, maskEl, maskText) {
	if(Ext.isEmpty(maskEl)) {
		maskEl = Ext.getBody();
	}
	Cw.requestRegister[regKey] = maskEl;
	maskEl.mask(maskText, "x-mask-loader");
}
Cw.unregisterRequest = function(regKey) {
	var el = Cw.requestRegister[regKey];
	if(!Ext.isEmpty(el)) { el.unmask(); }
	Cw.requestRegister[regKey] = null;	
}
Cw.getNodeText = function (node) {
    return node.text || node.textContent || (function(node){
        var _result = "";
        if (node == null) {
            return _result;
        }
        var childrens = node.childNodes;
        var i = 0;
        while (i < childrens.length) {
            var child = childrens.item(i);
            switch (child.nodeType) {
                case 1: // ELEMENT_NODE
                case 5: // ENTITY_REFERENCE_NODE
                    _result += arguments.callee(child);
                    break;
                case 3: // TEXT_NODE
                case 2: // ATTRIBUTE_NODE
                case 4: // CDATA_SECTION_NODE
                    _result += child.nodeValue;
                    break;
                case 6: // ENTITY_NODE
                case 7: // PROCESSING_INSTRUCTION_NODE
                case 8: // COMMENT_NODE
                case 9: // DOCUMENT_NODE
                case 10: // DOCUMENT_TYPE_NODE
                case 11: // DOCUMENT_FRAGMENT_NODE
                case 12: // NOTATION_NODE
                // skip
                break;
            }
            i++;
        }
        return _result;
    }(node));
}
Cw.priceRenderer =  function(v){
            v = (Math.round((v-0)*100))/100;
            v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
            v = String(v);
            var ps = v.split('.');
            var whole = ps[0];
            var sub = ps[1] ? '.'+ ps[1] : '.00';
           
//			var r = /(\d+)(\d{3})/;
//            while (r.test(whole)) {
//                whole = whole.replace(r, '1' + ',' + '2');
//            }
			
            v = whole + sub;
            if(v.charAt(0) == '-'){
                return '-' + v.substr(1);
            }
            return v;
}

