/*
 * Author: Arnolds Verins, MRM Starsky
 * Date: 2009-06-08
 */
var signup = new SignUp();
function SignUp(){
	this.validator;
	this.init = function(validator){
		try{
			this.validator = validator;
			this._initInterests();
			this._initCountries();
			this._initTypeOfUser();
			this._initFeedControl();
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.onsubmit = function(caller){
		try{ 
			var scope = this;
			this._addExtraHiddenFields();
			this._clearExtraHiddenFieldsFeedInputs();
			jQuery('.feedContainer:not(.cloneable)').each(function(i) {
				var feedContainer = jQuery(this);
				var fieldname = jQuery('input', feedContainer).eq(0).attr("name");
				var prefix = fieldname.replace(/^(meta_feed_\d+_).*/, "$1");			
				scope._addExtraHiddenFieldsFeed(prefix, feedContainer);
			});
			jQuery('#unknown_error').fadeOut();
			jQuery('#interests_error').remove();
			jQuery('#termsandconditions_error').remove();
			
			var scope = this;
			var valid = jQuery(caller).valid();
			
			// Check that atleast one interest is selected and that country in interests is selected 
			if(!jQuery('#signupform [name=meta_interests[]]:checked').length){
				jQuery('#interests').append('<div id="interests_error"><br />Please choose atleast one interest.</div>');
				valid = false;
			};
			if(jQuery('#signupform [name=meta_interests_country]').attr('value') < 0){
				if(jQuery('#interests_error').length)
					jQuery('#interests_error').append('<br />Please choose a country.');
				else
					jQuery('#interests').append('<div id="interests_error"><br />Please choose a country.</div>');
				valid = false;
			};
			if(!jQuery('#signupform [name=accepted_conditions]:checked').length){
				jQuery('#termsandconditions').append('<div id="termsandconditions_error"><br />You have to accept the Terms of Service.</div>');
				valid = false;
			};			 
			// ---
			
			if(valid){	
				is_working(true);
				jQuery.post(caller.action, jQuery(caller).serializeArray(), function(data, textStatus){	
					is_working(false);
					var xotree = new XML.ObjTree()
					var json = xotree.parseXML(data).Root;
					if(json.status['@successful'] != 'true'){
						var validator_errors = new Object();
						if(json.errors.error.length == undefined)
							json.errors.error = new Array(json.errors.error);
							
						for(var i=0; i<json.errors.error.length; i++){
							var error = json.errors.error[i];
							if(error['@name'] == 'unknown_error'){
								jQuery('#unknown_error div').empty().append(error['#text']);
								jQuery('#unknown_error').fadeIn();
							}else
								validator_errors[error['@name']] = error["#text"];
						}
						scope.validator.showErrors(validator_errors);
						jQuery.scrollTo(0, 1500, {easing:'easeOutQuint'});
					}else{
						// DONE
						window.location.href = '/registered';
					}
				}, "html");
			}else{
				// NOT VALID
				jQuery.scrollTo(0, 1500, {easing:'easeOutQuint'});
			}
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.onFileUploaded = function(filelink, filename){
		try{
			jQuery('#signupform [name=meta_my_story_files[]]').remove();
			var html = '<li class="hide"><a href="#" title="' + filename + '"><img src="' + filelink + '" alt="" /></a></li>';
			jQuery('#uploaded_images').empty().append(html);
			jQuery('#uploaded_images li:last').fadeIn();
			
			var input_html = '<input type="hidden" name="meta_my_story_files[]" value="' + filename + '" />';
			jQuery("#signupform").append(input_html);
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._addExtraHiddenFields = function(){
		try{
			var form = jQuery("#signupform");
			jQuery('[name=meta_country_label], [name=meta_interests_country_label], [name=meta_interests_labels[]]').remove();
			var html = '';
			html += '<input type="hidden" name="meta_country_label" value="' + jQuery('[name=meta_country] option:selected', form).text()  + '" />';
			if(jQuery('[name=meta_interests_country] option:selected', form).attr("value") > -1)
				html += '<input type="hidden" name="meta_interests_country_label" value="' + jQuery('[name=meta_interests_country] option:selected', form).text()  + '" />';
			var stickers = jQuery('#interests .sticker');
			for(var i=0; i<stickers.length; i++){
				var sticker = stickers[i];
				if(jQuery('a.selected', sticker).length){
					html += '<input type="hidden" name="meta_interests_labels[]" value="' + jQuery('.label', sticker).text()  + '" />';
				}
			}
			form.append(html);
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._clearExtraHiddenFieldsFeedInputs = function() {
		var holder = jQuery("#signupform #extra_inputs");
		holder.empty();
	}
	this._addExtraHiddenFieldsFeed = function(prefix, feedContainerNode){
		try{
			var holder = jQuery("#signupform #extra_inputs");
			var html = holder.html();
			var provideBlogInput = jQuery('[name=provide_me_with_a_blog]');
			var categoryInput = jQuery('[name=' + prefix + 'category]', feedContainerNode);			
			var langInput = jQuery('.feed [name=' + prefix + 'language]', feedContainerNode);
			var countryInput = jQuery('.feed [name=' + prefix + 'country]', feedContainerNode);
			var countrySelect = jQuery('select[name=' + prefix + 'country]');
			var countryLabel = countrySelect.find("option:selected").text();
			
			html += '<input type="hidden" name="' + prefix + 'country_label" value="' + 
				countryLabel  + '" />';
			
			html += '<input type="hidden" name="' + prefix + 'language_label" value="' + 
			langInput.parent().find("span.label").text()  + '" />';
			
			html += '<input type="hidden" name="' + prefix + 'category_label" value="' + 
			categoryInput.parent().find("span.label").text()  + '" />';			
			if (jQuery('[name=' + prefix + 'provide_blog]', feedContainerNode)) {
				html += '<input type="hidden" name="provide_me_with_a_blog" value="true" />';
			}
			
			var stickers = jQuery('.editfeed .stickers .sticker', feedContainerNode);
			for(var i=0; i<stickers.length; i++){
				var sticker = stickers[i];
				if(jQuery('a.selected', sticker).length){
					html += '<input type="hidden" name="' + prefix + 'stickers_labels[]" value="' + jQuery('.label', sticker).text()  + '" />';
				}
			}
			holder.html(html);
		}catch(ex){ if(debug) alert(ex); }	
	};	
	this._initTypeOfUser = function(){
		try{
			var scope = this;
			jQuery('#type-of-user input').focus(function(){
				if(this.checked){
					switch(this.value){
						case 'person':
							scope._showPerson();
							break;
						case 'organisation':
							scope._showOrganisation();
							break;
					}
				}
			});
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._showPerson = function(){
		try{
			jQuery('.visible_for_person').show();
			jQuery('.visible_for_organisation').hide();
			
			var meta_last_name = jQuery('[name=meta_last_name]')[0];
			jQuery(meta_last_name).removeClass('ignore');		
			jQuery(meta_last_name).closest('.sticker').slideDown(300);
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._showOrganisation = function(){
		try{
			jQuery('.visible_for_person').hide();
			jQuery('.visible_for_organisation').show();
			
			var meta_last_name = jQuery('[name=meta_last_name]')[0];
			jQuery(meta_last_name).addClass('ignore');
			jQuery(meta_last_name).closest('.sticker').slideUp(300);
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._initCountries = function(){
		try{
			var scope = this;
			var _select = jQuery('[name=meta_country]');
			var _select_meta_interests_country = jQuery('[name=meta_interests_country]');
			var url = jsBaseUrl + '/api/search.php?type=country&output=json&json_wrapper=?';
			jQuery.get(url, null, function(data){
				var html = '<option value="-1">Country</option>';
				for(var i=0; i<data.matches.match.length; i++){
					var id = data.matches.match[i]['@attributes'].id;
					var text = data.matches.match[i]['@attributes'].text;
					html += '<option value="' + id + '">' + text + '</option>';
				}
				jQuery(_select).empty().append(html);
				_select_meta_interests_country.empty().append(html);
				stickerfields.initDropDown(_select);
				stickerfields.initDropDown(_select_meta_interests_country);
			}, 'json');
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._initInterests = function(){
		try{
			var scope = this;
			var holder = jQuery('#interests');
			if(holder.length){
				var url = jsBaseUrl + '/api/search.php?type=topics&output=json&json_wrapper=?';
				jQuery.get(url, null, function(data){
					if(data.matches.match.length == undefined) 
						data.matches.match = new Array(data.matches.match);
					for(var i=0; i<data.matches.match.length; i++){
						var id = data.matches.match[i]['@attributes'].id;
						var text = data.matches.match[i]['@attributes'].text;
						var color = data.matches.match[i]['@attributes'].color;
						
						var clone = jQuery('#sticker_clone', holder).clone().removeAttr('id').addClass('s_' + color);
						jQuery('.label', clone).empty().append(text);
						jQuery('input', clone)[0].value = id;
						jQuery(holder).append(clone);
						clone.show();
						stickerfields.initSticker(clone);
					}					
					jQuery('#sticker_clone', holder).remove();
				}, 'json');
			}
		}catch(ex){
			if(debug) alert(ex);	
		}
	};
	this._initFeedControl = function() {
		feedcontrol.integrateOntology = false;
		jQuery('#add_feed_button').click(function(caller, event) {
			if (jQuery(".feedContainer:not(.cloneable)").length > 0) {
				jQuery("#addedfeedsheader").removeClass("hide");
			} 
		});
	}
}