function Register(userNameInput, emailInput, realNameInput, homeCountrySelector, productInput, avatarIframe, avatarImg, error, buttonOk, buttonCancel) {
	this.m_errorBox = null;
	this.m_userNameInput = 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 (userNameInput, emailInput, realNameInput, homeCountrySelector, productInput, avatarIframe, avatarImg, error, buttonOk, buttonCancel) {
		me.m_userNameInput = userNameInput;
		me.m_emailInput = emailInput;
		me.m_realNameInput = realNameInput;
		me.m_homeCountrySelector = homeCountrySelector;
		me.m_productInput = productInput;
		me.m_avatarIframe = avatarIframe;
		me.m_avatarImg = avatarImg;
		me.m_errorBox = error;
		me.m_buttonOk = buttonOk;
		me.m_buttonCancel = buttonCancel;
		g_avatar = m_avatarImg;

		me.m_avatarIframe.src = g_webPrefix + "uploadAvatar_form.php?sessionID=" + g_strSessionID + "&id=1";
		//me.m_avatarImg.src = g_webPrefix + "design_new/defaultAvatar.png";

		g_Srv.CallFunction("GetCountries", "", 0, me.FillCountriesAndAddObservers, null);
	}

	this.FillCountriesAndAddObservers = function(serverParams) {
		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);
		}
		me.m_buttonOk.observe('click', function(event){ me.Register(); }); 
		me.m_buttonCancel.observe('click', function(event){ me.Cancel(); });
	}

	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", "login");
		QueryString.go();
	}

	this.Register = function() {
		g_Srv.CallFunction("register", "userName=" + me.m_userNameInput.value +
						"&email=" + me.m_emailInput.value +
						"&realName=" + me.m_realNameInput.value +
						"&product=" + me.m_productInput.value +
						"&usedlang=" + g_Babel.GetLang() +
						"&homeCountry=" + me.m_homeCountrySelector[me.m_homeCountrySelector.selectedIndex].appId, 0, me.Registered, null);
	}
	
	this.Registered = function (serverParam) {
		if (serverParam == "") {
			QueryString.set("page", "registered");
			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(userNameInput, emailInput, realNameInput, homeCountrySelector, productInput, avatarIframe, avatarImg, error, buttonOk, buttonCancel);
}
