﻿function getPar(ji, str) {
	if (typeof (str) != "undefined") {
		hu = str
	} else {
		hu = window.location.search.substring(1);
	}
	gy = hu.split("&");
	for (i = 0; i < gy.length; i++) {
		ft = gy[i].split("=");
		if (ft[0] == ji) { return ft[1]; }
	}
}

function getCookie(c_name, c_par) {
	var c_value = "";
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length

			c_value = decodeURIComponent(document.cookie.substring(c_start, c_end));
			if (typeof (c_par) != "undefined") {
				return getPar(c_par, c_value);
			}
		}
	}
	return c_value;
}

Ext.BLANK_IMAGE_URL = '/common/images/s.gif';

Ext.onReady(function () {

	var loginSettings = { cookieName: 'login', title: 'Login', modal: true, defaultDomainReadOnly: false, defaultDomain: '', disableRememberMe: false, noPwdRequired: false, supLogin: false };
	if (typeof (loginTitle) != "undefined") { loginSettings.title = loginTitle; }
	if (typeof (cookieName) != "undefined") { loginSettings.cookieName = cookieName; }
	if (typeof (useModal) != "undefined") { loginSettings.modal = useModal; }
	if (typeof (defaultDomainReadOnly) != "undefined") { loginSettings.defaultDomainReadOnly = defaultDomainReadOnly; }
	if (typeof (defaultDomain) != "undefined") { loginSettings.defaultDomain = defaultDomain; }
	if (typeof (disableRememberMe) != "undefined") { loginSettings.disableRememberMe = disableRememberMe; }
	if (typeof (noPwdRequired) != "undefined") { loginSettings.noPwdRequired = noPwdRequired; }
	if (typeof (supLogin) != "undefined") { loginSettings.supLogin = supLogin; }
	
	preFC = false;
	preUsername = getCookie(loginSettings.cookieName, 'username')
	if (preUsername == '') {
		preUsername = getPar('u');
		preDomain = getPar('d');
		prePassword = '';
	} else {
		prePassword = '$c$' + getCookie(loginSettings.cookieName, 'password')
		preDomain = getCookie(loginSettings.cookieName, 'domain')
		preFC = true;
	}

	/* ************************************************************************ *
	Login form and related function                              
	* ************************************************************************ */

	function submitLoginForm() {
		login.getForm().submit({
			method: 'POST',
			waitTitle: 'Validere login',
			waitMsg: 'Sender data...',
			params: {
				prefix: loginSettings.cookieName
			},
			success: function (form, action) {
				obj = Ext.util.JSON.decode(action.response.responseText);
				window.location = obj.url;
			},
			failure: function (form, action) {
				if (action.failureType == 'server') {
					obj = Ext.util.JSON.decode(action.response.responseText);
					Ext.Msg.alert('Login fejlede...', obj.errors.reason);
				} else {
					Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText);
				}
			}
		});
	}

	var btnListener = {
		specialkey: function (f, e) {
			if (e.getKey() == e.ENTER) {
				submitLoginForm();
			}
		}
	}

	var login = new Ext.FormPanel({
		id: 'id_login',
		url: '/common/csx/ux/csxLogin/xhrLogin.asp?cmd=login',
		frame: true,
		layout: 'form',
		title: loginSettings.title,
		monitorValid: true,
		buttonAlign: 'right',
		items: [{
			xtype: 'textfield',
			id: 'id_username',
			fieldLabel: 'Brugernavn',
			name: 'username',
			allowBlank: false,
			anchor: '99%',
			value: preUsername,
			listeners: btnListener
		}, {
			xtype: 'textfield',
			id: 'id_password',
			fieldLabel: 'Adgangskode',
			name: 'password',
			inputType: 'password',
			allowBlank: false,
			anchor: '99%',
			listeners: btnListener,
			hideLabel: loginSettings.noPwdRequired,
			hidden: loginSettings.noPwdRequired,
			disabled: loginSettings.noPwdRequired
		}, {
			xtype: 'textfield',
			fieldLabel: 'Domæne',
			id: 'id_domain',
			name: 'domain',
			allowBlank: false,
			anchor: '99%',
			listeners: btnListener,
			value: loginSettings.defaultDomain != '' ? loginSettings.defaultDomain : preDomain,
			readOnly: ((loginSettings.defaultDomainReadOnly && loginSettings.defaultDomain != '') || loginSettings.noPwdRequired) && !loginSettings.supLogin
		}, {
			xtype: 'checkbox',
			fieldLabel: '',
			labelSeparator: '',
			name: 'rememberme',
			checked: preFC,
			boxLabel: 'Husk mig',
			listeners: btnListener,
			hidden: loginSettings.disableRememberMe,
			disabled: loginSettings.disableRememberMe
		}],
		listeners: {
			'clientvalidation': function (form, valid) {
				Ext.getCmp('btnLogin').setDisabled(!valid);
			}
		}
	});

	/* ************************************************************************ *
	Forgot password and related functions                        
	* ************************************************************************ */

	function submitForgotPwdForm() {
		forgotPwd.getForm().submit({
			method: 'POST',
			waitTitle: 'Afsender email',
			waitMsg: 'Sender data...',
			success: function () {
				Ext.getCmp('btnSend').hide();
				Ext.getCmp('btnCancel').hide();
				Ext.getCmp('btnLogin').show();
				Ext.getCmp('btnForgot').show();

				Ext.Msg.alert('done', 'Dine login informationer er afsendt.')
				Ext.getCmp('id_domain').setValue(Ext.getCmp('id_fdomain').getValue());
				Ext.getCmp('id_card').layout.setActiveItem(0);
				Ext.get('id_login').slideIn('l', { stopFx: true, duration: .2 });
			},
			failure: function (form, action) {
				if (action.failureType == 'server') {
					obj = Ext.util.JSON.decode(action.response.responseText);
					Ext.Msg.alert('Afsendelse fejlede...', obj.errors.reason);
				} else {
					Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText);
				}
			}
		});
	}

	var forgotPwd = new Ext.FormPanel({
		id: 'id_forgotPwd',
		url: '/common/csx/ux/csxLogin/forgotPwdForm.asp',
		frame: true,
		layout: 'form',
		title: 'Glemt adgangskode',
		monitorValid: true,
		buttonAlign: 'right',
		labelAlign: 'top',
		items: [{
			xtype: 'textfield',
			id: 'id_email',
			vtype: 'email',
			fieldLabel: 'Indtast din e-mail adresse',
			name: 'email',
			allowBlank: false,
			anchor: '99%',
			listeners: {
				specialkey: function (f, e) {
					if (e.getKey() == e.ENTER) {
						submitForgotPwdForm();
					}
				}
			}
		}, {
			xtype: 'textfield',
			id: 'id_fdomain',
			fieldLabel: 'Angiv domæne',
			name: 'domain',
			allowBlank: false,
			value: preDomain,
			anchor: '99%',
			listeners: {
				specialkey: function (f, e) {
					if (e.getKey() == e.ENTER) {
						submitForgotPwdForm();
					}
				}
			}
		}],
		listeners: {
			'clientvalidation': function (form, valid) {
				Ext.getCmp('btnSend').setDisabled(!valid);
			}
		}
	});

	/* ************************************************************************ *
	Main window                                                  
	* ************************************************************************ */

	if (prePassword != '') {
		Ext.getCmp('id_password').setValue(prePassword);
	}

	var win = new Ext.Window({
		layout: 'card',
		id: 'id_card',
		width: 300,
		height: 185,
		closable: false,
		resizable: false,
		modal: loginSettings.modal,
		plain: true,
		border: false,
		activeItem: 0,
		items: [login, forgotPwd],
		buttons: [{
			id: 'btnLogin',
			text: 'Login',
			handler: function () {
				submitLoginForm();
			}
		}, {
			id: 'btnForgot',
			text: 'Glemt adgangskode?',
			hidden: loginSettings.noPwdRequired,
			handler: function () {
				Ext.getCmp('id_card').layout.setActiveItem(1);
				Ext.get('id_forgotPwd').slideIn('l', { stopFx: true, duration: .2 });

				Ext.getCmp('btnLogin').hide();
				Ext.getCmp('btnForgot').hide();
				Ext.getCmp('btnSend').show();
				Ext.getCmp('btnCancel').show();
			}
		}, {
			id: 'btnSend',
			text: 'Afsend e-mail',
			formBind: true,
			hidden: true,
			handler: function () {
				submitForgotPwdForm();
			}
		}, {
			id: 'btnCancel',
			text: 'Annuller',
			hidden: true,
			handler: function () {
				Ext.getCmp('id_card').layout.setActiveItem(0);
				Ext.get('id_login').slideIn('l', { stopFx: true, duration: .2 });

				Ext.getCmp('btnLogin').show();
				Ext.getCmp('btnForgot').show();
				Ext.getCmp('btnSend').hide();
				Ext.getCmp('btnCancel').hide();
			}
		}]
	});

	win.show();
});

