/**
 * Javascript for application login page
 * @author funker
 */
Ext.onReady(function() {
	Ext.QuickTips.init();
	Cw.loginCount = 0;

	var infoPanel = new Ext.Panel({
		hidden: !(Cw.demo),
		style: 'color:#666666',
		html: 'В демо-режиме используйте имена <i>demoman, demoop, demo</i> для доступа без пароля'
	});
    Cw.LoginForm = new Ext.form.FormPanel({
        baseCls: 'x-plain',
        labelWidth: 55,
        defaultType: 'textfield',
		defaults: {labelSeparator: ''},
        items: [{
			fieldLabel: 'Логин',
			id: 'username',
            name: 'username',
			autoCreate: {tag: "input", type: "text", size: "20", autocomplete: "on"},
			tabIndex: 1,
            anchor:'100%'  // anchor width by percentage
        },{
            fieldLabel: 'Пароль',
			id: 'userpwd',
            name: 'userpwd',
			inputType: 'password',
			tabIndex: 2,
            anchor: '100%'  // anchor width by percentage
        }, infoPanel],
		buttons: [{
            id: 'btnLogin',
			text: 'Войти',
			type: 'submit',
			scope: this,
			handler: function(btn, e) {
				submitForm(btn);
			}
        }]
    });

    function submitForm(btn) {
		var login = Ext.get('username');
		var pwd = Ext.get('userpwd');
		if (login != null) { 
			doLogin(login.getValue(),pwd.getValue());
		}
		//disable submit button
		btn.setDisabled(true);
    };
    

    var keyMap = new Ext.KeyMap(Ext.getDoc(), {
	    key: Ext.EventObject.ENTER,
	    fn: function(e){
	    	submitForm(Ext.getCmp('btnLogin'));
	    }   	
    });
	
	function doLogin_onSuccess(res, req) {
		var msg = "";
		var action = "";
		var url = "";
		var textData = res.responseText;
		var xmlDoc = res.responseXML;
		
		var msgNode = Ext.DomQuery.selectNode('message', xmlDoc);
		if(msgNode != null) {
			msg = Cw.getNodeText(msgNode); // msgNode.textContent; // don't work in IE
			
			action = msgNode.getAttribute("action");
			url = msgNode.getAttribute("url");
			if(action == "redirect") {
				window.location = url;
			}
		}
		resetForm();	
	};

	function doLogin_onFailure(res, req) {
		showMessage('Ошибка работы сервера. Попробуйте еще раз.', false);
		resetForm();
	};

	function showMessage(txt, showCount) {
		if(showCount) { txt += ' (' + Cw.loginCount + ')'; }
		Cw.LoginWindow.setTitle(txt);	
	};
	
	function resetForm() {
		var fldUsername = Cw.LoginForm.findById('username');
		fldUsername.setValue('');
		Cw.LoginForm.findById('userpwd').setValue('');
		fldUsername.focus();
		Cw.LoginForm.buttons[0].setDisabled(false);
	};
	function doLogin(login, pwd) {
		Cw.loginCount++;
		Ext.Ajax.request({
			url: Cw.wrapper.ajax, 
			options: { maskText: "Получение доступа...", maskEl: Ext.getBody() },
			params:	{req : Cw.ajaxreq.login, username : login, userpwd : pwd},
			success: doLogin_onSuccess,
			failure: doLogin_onFailure
		});
	};

    Cw.LoginWindow = new Ext.Panel({
        title: 'Вход в систему',
        width: 300,
        height:160,
        minWidth: 300,
        minHeight: 160,
        layout: 'fit',
		frame: true,
		border: true,
        bodyStyle:'padding:5px;',
        buttonAlign:'center',
		applyTo: 'lForm',
        items: [ Cw.LoginForm ]
	});
	
	
	Ext.get('loading').remove();
	Ext.get('loading-mask').fadeOut({remove:true});

	// a trick to set focus. Just try to set focus in a while after form created. 
	if (Cw.LoginForm.findById('username') != null) {
		setTimeout(function(){Cw.LoginForm.findById('username').focus();}, 10);
	}

});
