if (typeof Manodo == 'undefined' || !Manodo)
	Manodo = {};
	
if (typeof Manodo.Server == 'undefined' || !Manodo.Server)
	Manodo.Server = {};
	
if (typeof Manodo.Server.Portal == 'undefined' || !Manodo.Server.Portal)
	Manodo.Server.Portal = {};
	
if (typeof Manodo.Server.Portal.Login == 'undefined' || !Manodo.Server.Portal.Login)
	Manodo.Server.Portal.Login = {};

Manodo.Server.Portal.Login.ChangePassword = function(txtOldPasswordId, txtNewPasswordId, txtConfirmNewPasswordId, pnlMessageId) {
	var _me = this;
	var _messageKey;
	var _message;
	var _txtOldPasswordId = txtOldPasswordId;
	var _txtNewPasswordId = txtNewPasswordId;
	var _txtConfirmNewPasswordId = txtConfirmNewPasswordId;
	var _pnlMessageId = pnlMessageId;
	var _pnlChangePassword;
	var _dialogResult = 'NONE';
	
	function _clear(keepOld) {
	
		var txtOldPassword = document.getElementById(_txtOldPasswordId);
		var txtNewPassword = document.getElementById(_txtNewPasswordId);
		var txtConfirmNewPassword = document.getElementById(_txtConfirmNewPasswordId);
		
		if(!keepOld)
			txtOldPassword.value = '';
		txtNewPassword.value = '';
		txtConfirmNewPassword.value = '';
	};

	// The 'changePasswordClosedEvent' event occurs when the change password dialog is closed.
	// One of the following values is passed as result argument to subscribers:
	//	'OK' - Change password succeeded
	//	'CANCEL' - The change password operation was cancelled
	this.changePasswordClosedEvent = new YAHOO.util.CustomEvent('changePasswordClosedEvent');
	
	this.init = function() {
		_pnlChangePassword = new YAHOO.widget.Panel("divChangePassword", {
			width:"400px", 
			fixedcenter: true, 
			constraintoviewport: true, 
			underlay:"shadow", 
			close:true, 
			visible:false, 
			draggable:true,
			modal:true } );

		document.getElementById('divChangePassword').style.display = 'block';
		_pnlChangePassword.render();
		
		_pnlChangePassword.showEvent.subscribe(_me.onShow, _me, true);
		_pnlChangePassword.hideEvent.subscribe(_me.onHide, _me, true);
	};
	
	this.show = function(messageKey, message) {
		if (messageKey)
			_messageKey = messageKey;
		else
			_messageKey = '';
			
		_message = message;
		
		var txtOldPassword = document.getElementById(_txtOldPasswordId);
		var txtNewPassword = document.getElementById(_txtNewPasswordId);
		var txtConfirmNewPassword = document.getElementById(_txtConfirmNewPasswordId);
		
		txtOldPassword.value = Login.get_Password();
		txtNewPassword.value = '';
		txtConfirmNewPassword.value = '';
		
		_me.setMessage('<img src="Images/loading.gif" />');
		_pnlChangePassword.show();
		
		if (_messageKey != '') {
			Manodo.Server.Portal.Login.ScriptService.LoginService.GetTranslatedString(
				'Manodo.Server.Portal.Login',
				_messageKey,
				_me.onGetTranslatedStringComplete,
				_me.onGetTranslatedStringError);
		}
		else
			_me.setMessage(_message);
	};
	
	// Callback for the GetTranslatedString script service method.
	this.onGetTranslatedStringComplete = function(arg) {
		if (arg) {	
			if (_message && _message != '')
				_message = arg + _message;
			else
				_message = arg;
		}
		
		_me.setMessage(_message);
	};
	
	// Error callback for the GetTranslatedString script service method.
	this.onGetTranslatedStringError = function(error) {
		_me.setMessage('[Error]');
	};
	
	this.onShow = function() {
		_set_enabled(true);
		var txtNewPassword = document.getElementById(_txtNewPasswordId);
		if (txtNewPassword)
			txtNewPassword.focus();
	};
	
	this.onHide = function() {
		_me.changePasswordClosedEvent.fire(_dialogResult);
	};
	
	this.onKeyDown = function(e, click) {
		if (e.keyCode == 13) { // enter
			if (click) {
				var btnOK = document.getElementById('btnOK_changePwd');
				btnOK.click();
				return false;
			}
			else
				e.keyCode = 9; // tab
		}
		return true;
	};
	
	this.cancel = function() {
		_dialogResult = 'CANCEL';
		_pnlChangePassword.hide();
	};
	
	this.changePassword = function() {
		var customerName = Login.get_customerName();
		var login = Login.get_login();
		
		var txtOldPassword = document.getElementById(_txtOldPasswordId);
		var txtNewPassword = document.getElementById(_txtNewPasswordId);
		var txtConfirmNewPassword = document.getElementById(_txtConfirmNewPasswordId);
		
		if (txtNewPassword.value != txtConfirmNewPassword.value) {
			MessageBox.show('', 'MessageBox.msg_pwdMissmatch');
			txtNewPassword.focus();
			return false;
		}
		
		_set_enabled(false);

		Manodo.Server.Portal.Login.ScriptService.LoginService.ChangePassword(
			customerName,
			login,
			txtOldPassword.value,
			txtNewPassword.value,
			_me.onChangePasswordComplete,
			_me.onChangePasswordError);
			
		return false;
	};
	
	this.onChangePasswordComplete = function(arg) {
		if (arg.Success) {
			var txtNewPassword = document.getElementById(_txtNewPasswordId);
			Login.set_Password(txtNewPassword.value);
			
			var fn = function() {
				MessageBox.messageBoxClosedEvent.unsubscribe(fn);
				_dialogResult = 'OK';
				_pnlChangePassword.hide();
				Login.login(true);
			};
			MessageBox.messageBoxClosedEvent.subscribe(fn);
			MessageBox.show('', 'MessageBox.msg_changePwdSuccess');
		} else {
			var fn = function() {
				MessageBox.messageBoxClosedEvent.unsubscribe(fn);
				_set_enabled(true);
			};
			MessageBox.messageBoxClosedEvent.subscribe(fn);
			MessageBox.show('', 'MessageBox.msg_changePwdFailed', '', arg.Message);
			_clear(true);
		}
	};

	this.onChangePasswordError = function(error) {	
		var fn = function() {
			MessageBox.messageBoxClosedEvent.unsubscribe(fn);
			_set_enabled(true);
		};
		MessageBox.messageBoxClosedEvent.subscribe(fn);
		MessageBox.show('', 'MessageBox.msg_changePwdError');
		_clear(false);
	};
	
	this.setMessage = function(message) {
		var pnlMessage = document.getElementById(_pnlMessageId);
		
		if (pnlMessage) {
			if (message)
				pnlMessage.innerHTML = message;
			else
				pnlMessage.innerHTML = '';
		}
			
		_pnlChangePassword.center();
	};
	
	function _set_enabled(enabled) {
		var txtOldPassword = document.getElementById(_txtOldPasswordId);
		var txtNewPassword = document.getElementById(_txtNewPasswordId);
		var txtConfirmNewPassword = document.getElementById(_txtConfirmNewPasswordId);
		var btnOK = document.getElementById('btnOK_changePwd');
		var btnCancel = document.getElementById('btnCancel_changePwd');
		
		if (txtOldPassword)
			txtOldPassword.disabled = !enabled;
		if (txtNewPassword)
			txtNewPassword.disabled = !enabled;
		if (txtConfirmNewPassword)
			txtConfirmNewPassword.disabled = !enabled;
		if (btnOK)
			btnOK.disabled = !enabled;
		if (btnCancel)
			btnCancel.disabled = !enabled;
	};
};
