/*
 * Author: Arnolds Verins, MRM Starsky
 * Date: 2009-06-14
 */
var myprofile = new MyProfile();
function MyProfile(){
	this.validator;
	this.init = function(validator){
		try{
			var scope = this;
			this.validator = validator;
			this._initCountries();
			this._initInterests();
			jQuery('input[type=text]:not([name*=meta_feed]), input[type=password]').blur(function(){
				scope.updatefield(this);			
			});
			
			jQuery('select').focus(function(){
				scope.updatefield(this);
			});
			
			jQuery('input[type=checkbox]').focus(function(){
				var jqThis = jQuery(this);
/*				if ((jQuery('[name=provide_me_with_a_blog]')[0] != this) && 
					(jqThis.attr("name").replace(/^meta_feed_.*_language$/, '') != "")) {*/					
				if ((jQuery('[name=provide_me_with_a_blog]')[0] != this)) {					
					scope.updatefield(this);
				}
			});
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.updatefield = function(caller){
		try{
			var fieldname = caller.name;
			var fieldvalue = caller.value;
			fieldvalue = (caller.type == 'checkbox' && !caller.checked) ? '' : fieldvalue;
			if(this.validator.element(caller)){
				switch(caller.type){
					case 'select-one':
						var feedPrefix = fieldname.replace(/^(meta_feed_\d+_).*/, "$1");
						feedPrefix = (feedPrefix.length == fieldname.length) ? null : feedPrefix;
						if(fieldname == 'meta_country'){
							var data = new Object();						
							data['meta_country'] = jQuery('[name=meta_country]')[0].value;
							data['meta_country_label'] = jQuery('option:selected', jQuery('[name=meta_country]')).text();	
							
							this._post_field_update(new Array('meta_country', 'meta_country_label'), data, caller);						
						}
						else if(fieldname == 'meta_interests_country'){
							var data = new Object();
							data['meta_interests_country'] = fieldvalue;
							data['meta_interests_country_label'] = jQuery('option:selected', caller).text();						
							this._post_field_update(new Array('meta_interests_country', 'meta_interests_country_label'), data, caller);		
						}
						else if (feedPrefix != null) {
							// check for feed specific drop downs
							if (fieldname.indexOf("_country") >= 0) {
								var data = new Object();
								data[feedPrefix + 'country'] = fieldvalue;
								data[feedPrefix + 'country_label'] = jQuery('option:selected', caller).text();						
								this._post_field_update(new Array(feedPrefix + 'country', feedPrefix + 'country_label'), data, caller);		
							} 
							else if (fieldname.indexOf("_category") >= 0) {
								var data = new Object();
								data[feedPrefix + 'category'] = fieldvalue;
								data[feedPrefix + 'category_label'] = jQuery('option:selected', caller).text();						
								this._post_field_update(new Array(feedPrefix + 'category', feedPrefix + 'category_label'), data, caller);		
							}	
						}					
						break;
					case 'password':
						if(fieldname == 'user_password'){
							var user_confirmpassword = jQuery('[name=user_confirmpassword]');
							var _link = jQuery('a:first', user_confirmpassword.closest('.row'));
							if(_link.css("position") == "relative")
								_link.click();
								
							user_confirmpassword.closest('.row').show();
							user_confirmpassword.focus();
							jQuery('#repeat_password').remove();
							user_confirmpassword.closest('.row').append('<div class="error" id="repeat_password">Please enter the same password again.</div>');	
							jQuery('#repeat_password').hide().fadeIn();
							
							setTimeout(function(){
								jQuery('#repeat_password').fadeOut(function(){
									jQuery(this).remove();							
								});						
							}, 3000);
						}else if(fieldname == 'user_confirmpassword' && fieldvalue == jQuery('[name=user_password]')[0].value){
							var data = new Object();
							data['user_password'] = fieldvalue;					
							this._post_field_update('user_password', data, jQuery('[name=user_password]'));		
							jQuery(caller).closest('.row').slideUp();
						}
						break;
					default:
						if(fieldname == 'meta_interests[]'){
							this._addExtraHiddenFields();
							jQuery('#interests_error').remove();
							
							// Check that atleast one interest is selected
							if(!jQuery('#myprofileform [name=meta_interests[]]:checked').length){
								jQuery('#interests').append('<div id="interests_error"><br />Please choose at least one topic</div>');
							}else if(jQuery('form[name=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>');
							}else{
								// ---
								var data = new Object();
								
								jQuery('[name=meta_interests[]]:checked').each(function(position, element){
									data['meta_interests[' + position + ']'] = element.value;
									data['meta_interests_labels[' + position + ']'] = jQuery('.label', jQuery(element).closest('.sticker')).text();
								});
							}
							this._post_field_update(new Array('meta_interests_labels', 'meta_interests'), data, caller);
						} else if (fieldname.search(/^meta_feed_\d+_/) >= 0) {
							var feedContainer = jQuery(caller).closest(".feedContainer")[0];
							var feedPrefix = fieldname.replace(/^(meta_feed_\d+_).*/, "$1");
							if (fieldname.indexOf("_stickers") >= 0) {							
								this._addExtraHiddenFieldsFeed(feedPrefix, feedContainer);
								jQuery('.feed_error').remove();
								// Check that atleast one interest is selected
								if(!jQuery('#myprofileform [name=' + feedPrefix + 'stickers[]]:checked').length){
									jQuery(feedContainer).append('<div id="feed_error" class="error">Please choose at least one topic</div><br />');
								} else{
									// ---
									var data = new Object();
									
									jQuery('[name=' + feedPrefix + 'stickers[]]:checked').each(function(position, element){
										data[feedPrefix + 'stickers[' + position + ']'] = element.value;
										data[feedPrefix + 'stickers_labels[' + position + ']'] = 
											jQuery('.label', jQuery(element).closest('.sticker')).text();
									});
									this._post_field_update(new Array(feedPrefix + 'stickers_labels', feedPrefix + 'stickers'), data, caller);
								}							
							} else if (fieldname.indexOf("_language") >= 0) {
								var data = new Object();
								var languageLabel = jQuery(caller).closest(".sticker").find("span.label").text();
								var langValue = jQuery(caller).closest(".sticker").find("input").attr("value");
								data[feedPrefix + 'language'] = langValue;
								data[feedPrefix + 'language_label'] = languageLabel;
								this._post_field_update(new Array(feedPrefix + 'language', feedPrefix + 'language_label'), data, caller);									
							} else {								
								var data = new Object();
								data[fieldname] = fieldvalue;
								this._post_field_update(fieldname, data, caller);																
							}
						} else if (fieldname == 'meta_addnewfeed[]') {
							this._addExtraHiddenFields();
							jQuery('#interests_error').remove();
							
							// Check that atleast one interest is selected
							if(!jQuery('#myprofileform [name=meta_addnewfeed[]]:checked').length){
								jQuery('#interests').append('<div id="interests_error"><br />Please choose at least one topic</div>');
							}else if(jQuery('form[name=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>');
							}else{
								// ---
								var data = new Object();
								
								jQuery('[name=meta_addnewfeed[]]:checked').each(function(position, element){
									data['meta_addnewfeed[' + position + ']'] = element.value;
									data['meta_addnewfeed_labels[' + position + ']'] = jQuery('.label', jQuery(element).closest('.sticker')).text();
								});
							}
							this._post_field_update(new Array('meta_interests_labels', 'meta_interests'), data, caller);													
						} else {
							var data = new Object();
							data[fieldname] = fieldvalue;
							this._post_field_update(fieldname, data, caller);
						}
						break;
				}
			}
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.submitRSS = function(){
		try{
			var scope = this;
			var data = new Object();
			var fields_to_update = new Array();
			
			jQuery('#thigstoshare input').not('#provide_me_with_a_blog').each(function(){
				var fieldname = this.name;
				var fieldvalue = this.value;
				var data = new Object();
				data[fieldname] = fieldvalue;
				if(scope.validator.element(this) || fieldname == 'meta_share_blog'){
					if(fieldname == 'meta_share_blog'){ 
						var data = new Object();			
						var caller = jQuery('[name=provide_me_with_a_blog]')[0];
						if(caller.checked){
							data['provide_me_with_a_blog'] = jQuery('[name=provide_me_with_a_blog]')[0].value;
							data['meta_share_blog'] = '';
						}else{
							data['provide_me_with_a_blog'] = 'false';
							data['meta_share_blog'] = jQuery('[name=meta_share_blog]')[0].value;
						}
						scope._post_field_update(new Array('provide_me_with_a_blog'), data, caller);		
					}else
						scope._post_field_update(fieldname, data, this);
				}
			});
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.submitMyStory = function(){
		try{
			var textarea = jQuery('[name=meta_description]')[0];
			var fieldname = textarea.name;
			var fieldvalue = textarea.value;
			var data = new Object();
			data[fieldname] = fieldvalue;
			if(this.validator.element(textarea)){
				this._post_field_update(fieldname, data, textarea);
			}
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._post_field_update = function(fieldname, data, caller){
		try{
			jQuery('#unknown_error').fadeOut();
			jQuery('#interests_error').remove();
			
			var scope = this;
			var row = jQuery(caller).closest('.row');
			if(jQuery(caller).closest('.inp_medium').length){
				var label_holder = 	jQuery(caller).closest('.inp_medium');
			}else
				var label_holder = row;
				
			if(typeof(fieldname) != 'string' && fieldname.length != undefined){
				for(var i=0; i<fieldname.length; i++)
					data['fields_to_update[' + i + ']'] = fieldname[i];	
			}else
				data['fields_to_update[]'] = fieldname;
				
			jQuery('.ajax_loader1', label_holder).remove();
			jQuery('label:first', label_holder).after('<div class="ajax_loader1"></div>');
		
			is_working(true);
			jQuery.post(jQuery(caller).closest("form")[0].action, data, function(data, textStatus){
				try{
					data = jQuery.trim(data);
					is_working(false);
					jQuery('.ajax_loader1', label_holder).remove();
					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);
					}else{
						// Show saved				
						jQuery('label:first', label_holder).fadeOut(200, function(){
							var me = this;
							if(this.defaultText == undefined) 
								this.defaultText = jQuery(me).text();
								
							jQuery(me).empty().append("Saved!").addClass("green").fadeIn(200);
							setTimeout(function(){
								jQuery(me).fadeOut(200, function(){	
									jQuery(me).removeClass("green").empty().append(me.defaultText).fadeIn(200);	
								});
							}, 500);
						});
						// ---
					}
				}catch(ex){
					jQuery('#unknown_error div').empty().append("Something went wrong. " + data);
					jQuery('#unknown_error').fadeIn();
				}
			}, "html");	
		}catch(ex){ if(debug) alert(ex); }	
	};
	this.onFileUploaded = function(filelink, filename){
		try{
			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 data = new Object();
			data['meta_my_story_files[]'] = filename;
			myprofile._post_field_update('meta_my_story_files[]', data, jQuery('#uploaded_images'));
		}catch(ex){ if(debug) alert(ex); }	
	};
	this._addExtraHiddenFields = function(){
		try{
			var form = jQuery("#myprofileform");
			var html = '';
			html += '<input type="hidden" name="meta_country_label" value="' + jQuery('[name=meta_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._addExtraHiddenFieldsFeed = function(prefix, feedContainerNode){
		try{
			var form = jQuery("#myprofileform");
			var html = '';
			html += '<input type="hidden" name="' + prefix + 'country_label" value="' + 
				jQuery('[name=' + prefix + 'country] option:selected', feedContainerNode).text()  + '" />';
			html += '<input type="hidden" name="' + prefix + 'language_label" value="' + 
			jQuery('[name=' + prefix + 'language] option:selected', feedContainerNode).text()  + '" />';
			
			var stickers = jQuery('.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()  + '" />';
				}
			}
			form.append(html);
		}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 selected_value = _select[0].value;
				var meta_interests_country_selected_value = _select_meta_interests_country[0].value;
				var html = '<option value="-1">Country</option>';
				var meta_interests_country_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;
					if(id == selected_value)
						html += '<option value="' + id + '" selected="selected">' + text + '</option>';				
					else
						html += '<option value="' + id + '">' + text + '</option>';
					// Interests country
					if(id == meta_interests_country_selected_value)
						meta_interests_country_html += '<option value="' + id + '" selected="selected">' + text + '</option>';				
					else
						meta_interests_country_html += '<option value="' + id + '">' + text + '</option>';
				}
				jQuery(_select).empty().append(html);
				_select_meta_interests_country.empty().append(meta_interests_country_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;
						
						if(jQuery('[type=hidden][value=' + id + ']', holder).length){
							jQuery('a', clone).addClass('selected');	
							jQuery('input', clone)[0].checked = true;	
						}
						
						jQuery(holder).append(clone);
						clone.show();
						stickerfields.initSticker(clone);
					}
					jQuery('[name=meta_interests[]][type=hidden]', holder).remove();
					jQuery('#sticker_clone', holder).remove();
					
					jQuery('input[type=checkbox]', holder).focus(function(){
						scope.updatefield(this);
					});
				}, 'json');
			}
		}catch(ex){
			if(debug) alert(ex);	
		}
	};
}