var member = new MemberObj();
function MemberObj(){
	importJS('FormValidator.js'); 
	this.post_url = root_url+register_file;
	this.form; 

	this.register = function(form, redirect_back_to_register_page){
		var scope = this;
		jQuery('[name=submit_register]').addClass('sending');
		jQuery('.ajax_loader').show();
		
		setTimeout(function(){
			scope.doRegister(form, redirect_back_to_register_page);						
		}, 50);
	}
	
	this.doRegister = function(form, redirect_back_to_register_page){
		if(redirect_back_to_register_page == undefined) redirect_back_to_register_page = false;
		
		this.form = form;
		// important to set this before calling validator
		var date_str = this.getValue('birthdateYear') + "-" + this.getValue("birthdateMonth") + "-" + this.getValue("birthdateDay");
		this.setValue("birthday", date_str);
		
		var validator = new FormValidator();
		var haystack_ClassesToReplaceWithError = new Array("input_text_holder", "select", "legal");
		var haystack_ErrorClasses = new Array("validationError", "validationErrorSelect", "validationErrorCheckBox");
		var valid = validator.valid(form, "dataName", haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
		this.setHiddenMemberShipValue();
		/**
		  * All inputfields
		*/			
		var email = this.getValue('email');
		var email_confirm = this.getValue('email_confirm');
		
		var password = this.getValue('password');
		var password_confirm = this.getValue('password_confirm');
		
		var membership_level = this.getValue('membership_level');
		var pf_typeofmembership = this.getValue('pf_typeofmembership');
		var pf_typeofmembership_gold = this.getValue('pf_typeofmembership_gold');
		var pf_typeofmembership_regular = this.getValue('pf_typeofmembership_regular');
		var pf_reg_number = this.getValue('pf_reg_number');		
		var pf_postalcode = this.getValue('pf_postalcode');
		var username = this.getValue('username');
		var gender = this.getValue('pf_gender');
		
		if(gender == null){
			valid = false;
			var field = jQuery('[name=pf_gender]', this.form)[0];
			
			validator.setErrorLabel(field, 'exchange', 'Vänligen välj kön.');
		}

		if(pf_typeofmembership_gold == '1' && membership_level == 'gold'){				
			var field = jQuery('[name=pf_typeofmembership_gold]', this.form)[0];
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);				
		}else if(pf_typeofmembership_regular == '1' && membership_level == 'regular'){				
			var field = jQuery('[name=pf_typeofmembership_regular]', this.form)[0];
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);				
		}
		
		if(membership_level == 'gold' && pf_reg_number.toLowerCase().indexOf('registre') > -1){
			valid = false;
			var field = jQuery('[name=pf_reg_number]', this.form)[0];			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'goldMemberOptions', 'Kontrollera registreringsnummret.');
			field.select();
		}
		if(username.length < 3){
			valid = false;
			var field = jQuery('[name=username]', this.form)[0];
			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'exchange', 'Användarnamnet m&aring;ste vara minst 3 tecken l&aring;ngt');
			field.select();
		}
		if(pf_postalcode.length < 5){
			valid = false;
			var field = jQuery('[name=pf_postalcode]', this.form)[0];
			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'exchange', 'Postnummret m&aring;ste vara minst 5 tecken l&aring;ngt');
			field.select();
		}
		if(password.length < 6 || password_confirm.length < 6){
			valid = false;
			var field = jQuery('[name=password]', this.form)[0];
			var field_confirm = jQuery('[name=password_confirm]', this.form)[0];
			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.addClass(field_confirm, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'exchange', 'L&ouml;senordet m&aring;ste vara minst 6 tecken l&aring;ngt');
			validator.setErrorLabel(field_confirm, 'exchange', 'L&ouml;senordet m&aring;ste vara minst 6 tecken l&aring;ngt');
			field.select();
		}
		else if(password != password_confirm){
			valid = false;
			var field = jQuery('[name=password]', this.form)[0];
			var field_confirm = jQuery('[name=password_confirm]', this.form)[0];
			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.addClass(field_confirm, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'exchange', 'L&ouml;senorden matchar inte varandra');
			validator.setErrorLabel(field_confirm, 'exchange', 'L&ouml;senorden matchar inte varandra');
			field.select();
			field_confirm.value = "";
		}
		if(email != email_confirm){
			valid = false;
			var field = jQuery('[name=email]', this.form)[0];
			var field_confirm = jQuery('[name=email_confirm]', this.form)[0];
			
			validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.addClass(field_confirm, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
			validator.setErrorLabel(field, 'exchange', 'E-postadresserna matchar inte varandra');
			validator.setErrorLabel(field_confirm, 'exchange', 'E-postadresserna matchar inte varandra');
			field.select();
			field_confirm.value = "";
		}
		
		if(!valid){
			jQuery('[name=submit_register]').removeClass('sending');
			setTimeout(function(){
				jQuery('.ajax_loader').hide();
			}, 150);
			var errors = validator.showErrors(false);
		}
		
		/**
		  * Submit register
		*/
		var scope = this;
		if(valid){			
			var data = jQuery(this.form).serializeArray();
			jQuery.post(this.post_url, data, function (data){
				try{
					jQuery('[name=submit_register]').removeClass('sending');
					jQuery('.ajax_loader').hide();
					var xml = jQuery.textToXML(data);
					
					var message = '';
					var errors = jQuery("error", xml);
					var successful = jQuery('status', xml).attr('successful');		
					for(var i=0; i<errors.length; i++){
						var err = errors[i].firstChild.data;
						message += '* '+err+"\n";
						if(err.indexOf('e-post') > -1){
							var field = jQuery('[name=email]', scope.form)[0];
							validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
						}
						if(err.indexOf('Användarnamnet som du valde används') > -1){
							var field = jQuery('[name=username]', scope.form)[0];
							validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);	
							validator.setErrorLabel(field, 'exchange', 'Anv&auml;ndarnamnet som du valde anv&auml;nds redan, välj ett annat alternativ.' );					
						}
						if(err.indexOf('Kontrollera registreringsnummret') > -1){
							var field = jQuery('[name=pf_reg_number]', scope.form)[0];			
							validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.setErrorLabel(field, 'goldMemberOptions', 'Tyv&auml;rr, vi saknar ditt registreringsnummer, vänligen försök igen.');
							field.select();
						}
						if(err.indexOf('Den angivna e-post') > -1){							
							var field = jQuery('[name=email]', this.form)[0];
							var field_confirm = jQuery('[name=email_confirm]', this.form)[0];
							
							validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.addClass(field_confirm, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.setErrorLabel(field, 'exchange', 'E-postadressen som du valde anv&auml;nds redan av en annan användare.');
							field.select();
							field_confirm.value = "";
						}
						scope.updateCaptchaSecretCode();						
						var captcha_field = jQuery('[name=captcha_code]', scope.form)[0];	
						captcha_field.value = "";
						
						if(err.indexOf('koden') > -1){
							validator.addClass(captcha_field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.setErrorLabel(captcha_field, 'exchange', err);
							captcha_field.select();
						}else{
							validator.addClass(captcha_field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
							validator.setErrorLabel(captcha_field, 'exchange', 'Ange ny bekräftelsekod');
						}
					}
					if(successful !== 'true'){
						//alert(message);	
					}
					else{
						if(redirect_back_to_register_page){
							window.location = root_url+register_done_file + '?back=true';
						}else
							window.location = root_url+register_done_file;
					}
				}catch(err){
					alert(err);	
				}
			});
		}
	}
	this.setValue = function(field, value) {
		try {
			var field = jQuery('[name='+field+']', this.form);
			if (field.length == 1) {
				field = field[0];
				if(field.type.toLowerCase() == "checkbox") {
					throw "input element of type checkbox is not supported";
				}else
					field.value = value;
			}
			else {
				throw "input element not found or supported";
			}
		} catch(err) {
			alert("setValue() - error: " + err);
		}
	}
	this.getValue = function(field){
		var value = null;
		try{
			var field = jQuery('[name='+field+']', this.form);
			if(field.length == 1){
				field = field[0];
				if(field.type.toLowerCase() == "checkbox"){
					if(field.value != "on" && field.value != "") value = field.value;
					else value = field.checked;
				}else
					value = field.value;
			}
			else{
				var value;
				for(var i=0; i<field.length; i++){
					var _f = field[i];
					if(_f.type.toLowerCase() == "radio" && _f.checked){
						if(_f.value != "on" && _f.value != "") value = _f.value;
						else value = _f.checked;
						break;
					}else
						value = null;	
				}
				return value;
			}
				
		}catch(err){ }
		return value;
	}
	this.updateGoldMember = function(sender){
		try{
			var defaultCountry = jQuery('[name=default_country]', this.form)[0].value;
			var radios = jQuery('[name=membership_level]', this.form);
			var reg = jQuery('[name=pf_reg_number]', this.form)[0];
			if (sender.value == defaultCountry) {
				// selected country is default country: enable gold member
				for (var i = 0; i < radios.length; i++) {
					radios[i].disabled = false;
				}
				reg.disabled = false;
			} else {
				// selected country is NOT default country: disable gold member and clear fields			
				for (var i = 0; i < radios.length; i++) {
					if (radios[i].value == "regular") {
						member.initMemeberType(radios[i]);
						radios[i].checked = true;
					}
					radios[i].disabled = true;
					reg.disabled = true;
					reg.value = "Registreringsnr";
				}						
			}
		}catch(ex){
			//alert(ex);
		}
	}
	this.initMemeberType = function(target){
		var value = target.value;
		var checked = target.checked;
		var hidden = jQuery('[name=pf_typeofmembership]', this.form)[0];
		var gold_list = jQuery('[name=pf_typeofmembership_gold]', this.form)[0];
		var regular_list = jQuery('[name=pf_typeofmembership_regular]', this.form)[0];
		if(checked){
			if(value == 'gold')
				regular_list.selectedIndex = 0;
			else if(value == 'regular')
				gold_list.selectedIndex = 0;
			this.setHiddenMemberShipValue();
		}
	}
	this.setHiddenMemberShipValue = function(){
		try{
			var value = this.getValue('membership_level');
			var hidden = jQuery('[name=pf_typeofmembership]', this.form)[0];
			var gold_list_value = this.getValue('pf_typeofmembership_gold');
			var regular_list_value = this.getValue('pf_typeofmembership_regular');
			if(value == 'gold')
				hidden.value = gold_list_value;
			else if(value == 'regular')
				hidden.value = regular_list_value;
		}catch(err){ alert(err); }
	}
	this.updateCaptchaSecretCode = function(sender){
		jQuery(sender).addClass('sending');
		jQuery.post(root_url + captcha_url, null, function (data){
				try{
					var json = jQuery.xml2json(data);
					var src = json.img.src;
					var security_id = json.img.security_id;
					jQuery("[name=captcha_security_id]")[0].value = security_id;
					jQuery("#captcha_img")[0].src = src;
					jQuery(sender).removeClass('sending');					
				}catch(ex){
					alert(ex);	
				}
		});
	}
	
	this.showOrHideWelcomePackageAddress = function(sender){
		try{
			var checkbox = jQuery('[name=welcome_address]')[0];
			if(checkbox.checked){
				jQuery('#welcome_package_address').slideDown(100, function(){	
					jQuery.scrollTo(jQuery('[name=pf_heardaboutus]')[0], 400);
					jQuery('[name=pf_wc_firstname]')[0].focus();
				});
				// Add required validation
				jQuery('[name=pf_wc_firstname]').addClass('required');
				jQuery('[name=pf_wc_surname]').addClass('required');
				jQuery('[name=pf_wc_address]').addClass('required');
				jQuery('[name=pf_wc_postalcode]').addClass('required');
				jQuery('[name=pf_wc_city]').addClass('required');
			}else{
				jQuery('#welcome_package_address').slideUp(100, function(){	
					// Remove required validation
					jQuery('[name=pf_wc_firstname]').removeClass('required');
					jQuery('[name=pf_wc_surname]').removeClass('required');
					jQuery('[name=pf_wc_address]').removeClass('required');
					jQuery('[name=pf_wc_postalcode]').removeClass('required');
					jQuery('[name=pf_wc_city]').removeClass('required');
					
					// Clear fields data
					jQuery('[name=pf_wc_firstname]')[0].value 	= "";
					jQuery('[name=pf_wc_surname]')[0].value 	= "";
					jQuery('[name=pf_wc_address]')[0].value 	= "";
					jQuery('[name=pf_wc_postalcode]')[0].value 	= "";
					jQuery('[name=pf_wc_city]')[0].value 		= "";
				});
			}
		}catch(ex){
			alert(ex);	
		}
	}
	
	this.copyAddressForWelcomePackage = function(sender){
		try{
			// Fields too fill with data			
			jQuery('[name=pf_wc_firstname]')[0].value 	= jQuery('[name=pf_firstname]')[0].value;
			jQuery('[name=pf_wc_surname]')[0].value 	= jQuery('[name=pf_surname]')[0].value;
			jQuery('[name=pf_wc_address]')[0].value 	= jQuery('[name=pf_address]')[0].value;
			jQuery('[name=pf_wc_postalcode]')[0].value 	= jQuery('[name=pf_postalcode]')[0].value;
			jQuery('[name=pf_wc_city]')[0].value 		= jQuery('[name=pf_city]')[0].value;
		}catch(ex){
			alert(ex);	
		}
	}
}
