var user = new UserObj();
function UserObj(){	
	importJS('FormValidator.js'); 
	this.post_url = root_url;
	this.root = this;
	this.trucks_id = 'trucks';
	this.friend_request_holder_selector = '#friendRequestHolder';
	this.debug = true;
	
	jQuery(document).ready(function(){
		try{
			var url = window.location.href;
			var truck_id = jQuery.jqURL.get('truck_id', url);
			if(truck_id){
				var truck_holder = jQuery('#truck_'+truck_id);
				if(truck_holder.length > 0){
					setTimeout(function(){
						jQuery.scrollTo(truck_holder[0], 1500);	
					}, 1000);
				}
			}
		}catch(ex){}
		
	});
	this.showFriendName = function(target_caller){
		var parent = utilities.findParentBySelector('.form', target_caller);
		if(parent){
			var field = jQuery('.input', parent)[1];
			jQuery(field).show(50);
		}
	}
	this.sendTip = function(form){
		try{
			var validator = new FormValidator();
			var haystack_ClassesToReplaceWithError = new Array("input", "select", "legal");
			var haystack_ErrorClasses = new Array("validationError", "validationErrorSelect", "validationErrorCheckBox");
			var valid = validator.valid(form, null, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
				
			jQuery('.input', form).show(50);
			var field = jQuery('[name=name]', form);
			if(field.length > 0){
				field = field[0];
				if(utilities.isDefaultValue(field))
					validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);	
			}
			
			if(valid){
				var data = jQuery(form).serializeArray();		
				jQuery.post(this.post_url+send_tip_url, data, function (data){
					try{
						var xml = jQuery.textToXML(data);
						var message = '';
						var messages = jQuery("message", xml);
						var successful = jQuery('status', xml).attr('successful');					
						for(var i=0; i<messages.length; i++){
							var err = messages[i].firstChild.data;
							var name = jQuery(messages[i]).attr('name');
							message += err;
							if(i < messages.length) message += "<br />";
						}
						jQuery('.message', form).fadeIn(200);
						jQuery('.message', form).empty();
						jQuery('.message', form).append('<strong>'+message+'</strong>');					
						form.reset();			
						setTimeout(function(){										
							jQuery('.message', form).fadeOut(200);
						}, 2000);
					}catch(ex){
						if(this.debug) alert("Fel: "+ex);	
					}
				});	
			}else{
				validator.showErrors(false);
				var message = '';
				if(user_id != 1) message = 'E-postadressen är ogiltlig.';
				else message = 'Kontrollera att du har fyllt i alla fält.';	
				
				jQuery('.message', form).fadeIn(200);
				jQuery('.message', form).empty();
				jQuery('.message', form).append('<strong>'+message+'</strong>');					
				form.reset();			
				setTimeout(function(){										
					jQuery('.message', form).fadeOut(200);
				}, 2500);
			}
		}catch(ex){
			if(this.debug) alert("Fel: "+ex);	
		}
	}
	this.showAddNewTruck = function(target, fields_selector, btn_selector){
		try{
			jQuery(fields_selector, target.parentNode).show();
			jQuery(btn_selector, target.parentNode).show(10, function(){		
				jQuery.scrollTo(this, 600);
				jQuery("[type=text]", jQuery(fields_selector)[0])[0].focus();
			});
			jQuery(target).hide();
		}catch(ex){
			if(this.debug) alert("Fel: "+ex);	
		}
	}
	this.updateTruck = function(form){
		var scope = this;
		var validator = new FormValidator();
		var haystack_ClassesToReplaceWithError = new Array("input_text_holder", "select", "legal");
		var haystack_ErrorClasses = new Array("validationError", "validationErrorSelect", "validationErrorCheckBox");
		
		var data = jQuery(form).serializeArray();
		var button = jQuery('[name=submit]', form);
		if(button.length){
			jQuery(button[0]).addClass('sending');	
		}
		jQuery.post(this.post_url+update_truck_url, data, function (data){
			try{		
				if(button.length){
					jQuery(button[0]).removeClass('sending');	
				}
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
				for(var i=0; i<messages.length; i++){
					var err = messages[i].firstChild.data;
					var name = jQuery(messages[i]).attr('name');
					message += err;
					if(i < messages.length) message += "<br />";
					var field = jQuery('[name^=pf_'+name+']', form);
					if(field.length){
						field = field[0];							
						validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
						validator.setErrorLabel(field, 'exchange', err);
					}
				}
				if(successful === 'true'){					
					var url = scope.post_url+truck_regenerate_url;
					refresher.refresh(url, "#"+scope.trucks_id);
				}
			}catch(ex){
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
	this.deleteTruck = function(truck_id, truck_name){
		if(confirm('Är du säker på att du vill ta bort '+truck_name+', detta går ej att ångra?')){
			var scope = this;
			
			var data = new Object();
			data.truck_id = truck_id;
			
			jQuery.post(this.post_url+delete_truck_url, data, function (data){
				try{
					var xml = jQuery.textToXML(data);
					var message = '';
					var messages = jQuery("message", xml);
					var successful = jQuery('status', xml).attr('successful');					
					for(var i=0; i<messages.length; i++){
						var err = messages[i].firstChild.data;
						var name = jQuery(messages[i]).attr('name');
						message += err;
						if(i < messages.length) message += "<br />";
					}
					if(successful === 'true'){
						var url = scope.post_url+truck_regenerate_url;
						refresher.refresh(url, "#"+scope.trucks_id);
						/*
						jQuery('#truck_'+truck_id+'.innerDiv').animate({
							height: 0.1
							}, 300, function(){
								//var url = scope.post_url+truck_regenerate_url;
								//refresher.refresh(url, "#"+scope.trucks_id);
							}
						);
						*/
					}
				}catch(ex){
					if(this.debug) alert("Fel: "+ex);	
				}
			});																							  
		}
	}
	this.addTruck = function(form){
		var scope = this;
		var validator = new FormValidator();
		var haystack_ClassesToReplaceWithError = new Array("input_text_holder", "select", "legal");
		var haystack_ErrorClasses = new Array("validationError", "validationErrorSelect", "validationErrorCheckBox");
		
		var data = jQuery(form).serializeArray();
		var button = jQuery('[name=submit]', form);
		if(button.length){
			jQuery(button[0]).addClass('sending');	
		}
		jQuery.post(this.post_url+add_truck_url, data, function (data){
			try{		
				if(button.length){
					jQuery(button[0]).removeClass('sending');	
				}
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
				for(var i=0; i<messages.length; i++){
					var err = messages[i].firstChild.data;
					var name = jQuery(messages[i]).attr('name');
					message += err;
					if(i < messages.length) message += "<br />";
					var field = jQuery('[name^=pf_'+name+']', form);
					if(field.length){
						field = field[0];							
						validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
						validator.setErrorLabel(field, 'exchange', err);
					}
				}
				if(successful === 'true'){					
					var url = scope.post_url+truck_regenerate_url;
					refresher.refresh(url, "#"+scope.trucks_id, function(){					
						jQuery.scrollTo(jQuery('.btnAdd')[0], 700);
					});
				}
			}catch(ex){					
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
	this.addFriend = function(friend_id, callback){
		if(friend_id != user_id){
			var data = new Object();
			data.friend_id = friend_id;
			jQuery.get(this.post_url+add_friend_file, data, function (data){
				try{
					var xml = jQuery.textToXML(data);
					var message = '';
					var messages = jQuery("message", xml);
					var successful = jQuery('status', xml).attr('successful');					
					for(var i=0; i<messages.length; i++){
						var err = messages[i].firstChild.data;
						message += err;
						if(i < messages.length) message += "<br />";
					}						
					var f_div = jQuery('#addToFriends:first')[0];
					jQuery(f_div).empty();
					jQuery(f_div).append('<p><strong>'+message+'</strong></p>');
					
				}catch(err){											
					var f_div = jQuery('#addToFriends:first')[0];
					jQuery(f_div).empty();
					jQuery(f_div).append('<p>Fel:'+err+'</p>');
				}
			});
		}else{
			// Own profile
		}
	}
	this.removeFriend = function(friend_id){
		var scope = this;
		var data = new Object();
		data.friend_id = friend_id;
		jQuery.get(this.post_url+remove_friend_file, data, function (data){
			try{
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
				for(var i=0; i<messages.length; i++){
					var err = messages[i].firstChild.data;
					message += err;
					if(i < messages.length) message += "<br />";
				}						
				var f_div = jQuery('#addToFriends:first')[0];
				jQuery(f_div).empty();
				jQuery(f_div).append('<p><strong>'+message+'</strong></p>');
				
			}catch(ex){						
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
	
	this.disApproveFriend = function(friend_id, target_caller){
		var scope = this;
		var data = new Object();
		data.friend_id = friend_id;
		jQuery.get(this.post_url+remove_friend_file, data, function (data){
			try{
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
					
				if(successful === 'true'){
					var parent = utilities.findParentBySelector('.newFriend_details', target_caller);
					if(parent){
						$(parent).animate({ 
							opacity: 0.1
						}, 300);
						var url = scope.post_url+refresh_friend_requests_url;
						refresher.refresh(url, scope.friend_request_holder_selector);
					}
				}
				
			}catch(ex){						
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
	this.approveFriend = function(friend_id, target_caller){
		var scope = this;
		var data = new Object();
		data.friend_id = friend_id;
		jQuery.get(this.post_url+add_friend_file, data, function (data){
			try{
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
					
				if(successful === 'true'){
					var parent = utilities.findParentBySelector('.newFriend_details', target_caller);
					if(parent){
						$(parent).animate({ 
							opacity: 0.1
						}, 300);
						var url = scope.post_url+refresh_friend_requests_url;
						refresher.refresh(url, scope.friend_request_holder_selector);
					}
				}
				
			}catch(ex){						
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
	this.updateProfile = function(form){
		var scope = this;
		var validator = new FormValidator();
		var haystack_ClassesToReplaceWithError = new Array("input_text_holder", "select", "legal");
		var haystack_ErrorClasses = new Array("validationError", "validationErrorSelect", "validationErrorCheckBox");
		
		var data = jQuery(form).serializeArray();
		var button = jQuery('[name=submit]', form);
		if(button.length){
			jQuery(button[0]).addClass('sending');	
		}
		jQuery.post(this.post_url+update_profile_url, data, function (data){
			try{		
				if(button.length){
					jQuery(button[0]).removeClass('sending');	
				}
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');					
				for(var i=0; i<messages.length; i++){
					var err = messages[i].firstChild.data;
					var name = jQuery(messages[i]).attr('name');
					message += err;
					if(i < messages.length) message += "<br />";
					var field = jQuery('[name^=pf_'+name+']', form);
					if(field.length){
						field = field[0];							
						validator.addClass(field, haystack_ClassesToReplaceWithError, haystack_ErrorClasses);
						validator.setErrorLabel(field, 'exchange', err);
					}
				}
				if(successful === 'true'){
					var url = scope.post_url+update_profile_regenerate_url;
					jQuery.get(url, null, function(responseText, textStatus, XMLHttpRequest){
						if(textStatus.toLowerCase() == 'success'){
							jQuery("div", form).remove();
							form.innerHTML = responseText+form.innerHTML;
						}
					});
				}
			}catch(ex){
				if(this.debug) alert("Fel: "+ex);	
			}
		});
	}
}