fn.account.user = '';
fn.account.statusTimer = '';

fn.account.save = function() {
	if ( '' === fn.account.user ) 
	{
		return;
	};

	// framework for our data
	var data = {
		projects : {
			data : {},
			states : {}
		}
	};

	// get schedule projects
//	for ( var record in fn.projects.scheduled ) 
//	{
//		// Check if it's NOT a function
//		if ( !(fn.projects.scheduled[record] instanceof Function) ) 
//		{
//			var project = fn.projects.scheduled[record];
//			data.projects.data[project.id] = project;
//		};
//	};

	// build project data
	$('#projectsList .project').each(function() {
		var project = fn.project.toObject.call(this);

		data.projects.data[project.id] = project;
	});

	// build project states
	$('#projectsStatesList a:not(.all, .scheduled)').each(function() {
		var state = {
			id : $(this).attr('id'),
			label : $(this).text(),
			color : $(this).css('backgroundColor')
		};

		data.projects.states[state.id] = state;
	});

	data = encodeURIComponent(JSON.stringify(data));
	
	// shani's bug
	if ( data == '' )
	{
		fn.account.statusTimer = setTimeout(function(){
			fn.account.status('bad');	
		}, 500);
		
		var obj = {
			classname: 'bad',
			content: 'Sorry, we couldn\'t save your data.'
		};
		
		fn.global.notify(obj);
	};

	fn.account.status('loading');
	
	$.ajax( {
		url : '/user/save/' + fn.account.user + '?random='
				+ fn.functions.uniqId(),
		type : 'post',
		data : 'data=' + data,
		dataType : 'json',
		success : function(json) {
			fn.account.statusTimer = setTimeout(function(){
				fn.account.status('good');	
			}, 500);
		},
		error : function()
		{
			fn.account.statusTimer = setTimeout(function(){
				fn.account.status('bad');	
			}, 500);
			
			var obj = {
				classname: 'bad',
				content: 'Sorry, we couldn\'t save your data.'
			};
			
			fn.global.notify(obj);
		}
	});

	fn.global.refreshReset();
};

fn.account.load = function() {
	if ( '' === fn.account.user ) 
	{
		return;
	};
	
	$.ajax( {
		url : '/user/load/' + fn.account.user + '?random='
				+ fn.functions.uniqId(),
		dataType : 'json',
		success : function(data) {
			// populate user data
			if ( undefined !== data['projects'] )
			{
				// states goes first, so projects can select them
				var states = data['projects']['states'];
				for ( var i in states) {
					var state = states[i];
					fn.states.populate(state);
				};
	
				var projects = data['projects']['data'];
				for ( var i in projects) 
				{
					var project = projects[i];
					
					fn.project.populate(project);
				};
			};

			fn.account.loggedin();
		},
		error : function() {
			fn.account.user = '';
		}
	});
};

fn.account.active = function()
{
	$('#welcome').fadeOut('fast', function(){
		fn.projects.empty();
		$('#main').removeClass('hidden');
	});
};

fn.account.loggedin = function()
{
	// show lists, hide welcome
	$('#accountList li').toggleClass('hidden');
};

fn.account.add = function() {
	var form = $('#newUserForm');

	var data = form.serialize();
	var path = form.attr('action');

	$.ajax( {
		type : 'POST',
		url : path,
		data : data,
		dataType : 'html',
		success : function(data, textStatus) {
			form.replaceWith(data);

			// no form = success
			if (0 == $('#newUserForm').length) 
			{
				// set user data
				var user = $('#user').val();
				
				fn.account.user = user;

				// save account
				fn.account.save();
				
				// redirect to account page
				window.location.replace('/' + user);
			}; // if
		} // success
	}); // ajax
};

fn.account.recover = function() {
	var form = $('#recoverUserForm');

	var data = form.serialize();
	var path = form.attr('action');

	$.ajax( {
		type : 'POST',
		url : path,
		data : data,
		dataType : 'html',
		success : function(data, textStatus) {
			form.replaceWith(data);
		} // success
	}); // ajax
};

fn.account.status = function (status)
{
		$('#accountList .status').remove();

		switch (status) {
			case 'good':
				var message = 'Account saved.';
			break;
			case 'bad':
				var message = 'Account NOT saved.';
			break;
			default:
				var message = '';
			break;
		} // end switch
		
		var element = $('<li class="status ' + status + '"><span>' + message + '</span></li>'); // <a href="">Undo your last changes?</a>
		element.appendTo('#accountList');
		
		// if loading, dont add actions, background movement
		if ( 'loading' == status ) 
		{
			return;
		};
		
		element
		.mouseenter(function(){
			$(this).addClass('mo');
		})
		.mouseleave(function(){
			$(this).removeClass('mo');
		});
		
		fn.account.statusTimer = setTimeout(function(){
			$('#accountList .status').css({
				backgroundPosition: 'bottom right'
			});
		}, 2000);
};