function ChangeProfile(serverParams, handlerParams) {
	this.m_userName = null;
	this.m_errorBox = null;
	this.m_passwordInput = null;
	this.m_passwordAgainInput = null;
	this.m_emailInput = null;
	this.m_realNameInput = null;
	this.m_homeCountrySelector = null;
	this.m_productInput = null;
	this.m_avatarIframe = null;
	this.m_avatarImg = null;
	this.m_errorBox = null;
	this.m_buttonOk = null;
	this.m_buttonCancel = null;
	var me = this;
	
	this.Init = function (serverParams, handlerParams) {
		me.m_userName = handlerParams.userName;
		me.m_passwordInput = handlerParams.passwordInput;
		me.m_passwordAgainInput = handlerParams.passwordAgainInput;
		me.m_emailInput = handlerParams.emailInput;
		me.m_realNameInput = handlerParams.realNameInput;
		me.m_homeCountrySelector = handlerParams.homeCountrySelector;
		me.m_productInput = handlerParams.productInput;
		me.m_avatarIframe = handlerParams.avatarIframe;
		me.m_avatarImg = handlerParams.avatarImg;
		g_avatar = me.m_avatarImg;
		me.m_errorBox = handlerParams.error;
		me.m_buttonOk = handlerParams.buttonOk;
		me.m_buttonCancel = handlerParams.buttonCancel;

		me.m_userName.update(handlerParams.userData.m_userName);
		me.m_emailInput.value = handlerParams.userData.m_email;
		me.m_realNameInput.value = handlerParams.userData.m_fullName;

		var arrCountries = me.OrderList(serverParams); 
		for (var i = 0; i < arrCountries.length; i++) {
			var option = new Element("option", {value: i}).update(g_Babel.GetWord(arrCountries[i].babelId));
			option.appId = arrCountries[i].appId;
			option.babelId = arrCountries[i].babelId;
			me.m_homeCountrySelector.insert(option);
		}

		for (var i = 0; i < me.m_homeCountrySelector.options.length; i++) {
			if (me.m_homeCountrySelector.options[i].appId == handlerParams.userData.m_home) {
				me.m_homeCountrySelector.selectedIndex = i;
				break;
			}
		}
		me.m_productInput.value = handlerParams.userData.m_product;

		me.m_avatarIframe.src = g_webPrefix + "uploadAvatar_form.php?sessionID=" + g_strSessionID + "&id=1";
		me.m_avatarImg.src = g_webPrefix + "handler.ashx?sessionID=" + g_strSessionID + "&Command=GetAvatar&id=" + handlerParams.userData.m_userID; 

		me.m_buttonOk.observe('click', function(event){ me.Change(); }); 
		me.m_buttonCancel.observe('click', function(event){ me.Cancel(); });
	}

	this.FillCountriesAndAddObservers = function(serverParams) {
	}

	this.OrderList = function(arrCountries) {
		for (var i = 0; i < arrCountries.length; i++) {
			for (var j = 0; j <  arrCountries.length - i - 1; j++) {
				if (g_Babel.GetWord(arrCountries[j].babelId) > g_Babel.GetWord(arrCountries[j + 1].babelId)) {
					var dummy = new Object();
					dummy.value = arrCountries[j].value;
					dummy.appId = arrCountries[j].appId;
					dummy.babelId = arrCountries[j].babelId;
					arrCountries[j].value = arrCountries[j + 1].value;
					arrCountries[j].appId = arrCountries[j + 1].appId;
					arrCountries[j].babelId = arrCountries[j + 1].babelId;
					arrCountries[j + 1].value = dummy.value;
					arrCountries[j + 1].appId = dummy.appId;
					arrCountries[j + 1].babelId = dummy.babelId;
				}
			}
		}
		return arrCountries;
	}

	this.Cancel = function() {
		QueryString.set("page", "map");
		QueryString.go();
	}

	this.Change = function() {
		g_Srv.CallFunction("changeprofile", "password1=" + me.m_passwordInput.value +
						"&password2=" + me.m_passwordAgainInput.value +
						"&email=" + me.m_emailInput.value +
						"&realName=" + me.m_realNameInput.value +
						"&product=" + me.m_productInput.value +
						"&homeCountry=" + me.m_homeCountrySelector.options[me.m_homeCountrySelector.selectedIndex].appId, 0, me.Changed, null);

	}
	
	this.Changed = function (serverParam) {
		if (serverParam == "") {
			QueryString.set("page", "profilechanged");
			QueryString.go();
		}
		else {
			me.m_errorBox.style.display = "";
			me.m_errors = serverParam.split("|");
			
			me.m_errorBox.update("");
			for (var i = 0; i < me.m_errors.length; i++) {
				me.m_errorBox.insert("- " + g_Babel.GetWord(me.m_errors[i]) + "<br />");
			}
		}
	}
	
	me.Init(serverParams, handlerParams);
}
