/** ** ** ** ** ** ** ** ** ** ** ** **
 * User object
 */
 
var User = {
	
	id				: null,
	is_moderator	: null,
	loggedIn  		: null,
	nickname  		: null,
	usergroup 		: null,
	email	  		: null,
	baseLocationLat : null,
	baseLocationLng : null,
	
	newAccountOpen 	: false,
	
	initialize : function()
	{
		//check login status
		User.loadUserInfo();
	},
	
	initializeUserInfo : function()
	{
		Loader.load('/user/session',false,'User.initializeUserInfoCallback');	
	},
	
	initializeUserInfoCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	User.updateUserInfo(jsonData);
	    	User.loggedIn = true;
	    	Graphics.formatMyUserInfo();
	    }
	    Loader.decreaseCallCount();
	},
	
	loadUserInfo : function()
	{
		Loader.load('/user/session',false,'User.loadUserInfoCallback');	
	},
	
	loadUserInfoCallback : function(jsonData)
	{
		if (jsonData.data.status == 0)
	    {
	    	Graphics.showLogin(false);
	    }
	    
	    else 
	    {
	    	User.updateUserInfo(jsonData);
	    	//Graphics.showUserTools(true);
	    	Graphics.showUserTools(false);
	    	User.loggedIn = true;
            SidebarDialogue.initialize();
	    }
	    
	    Graphics.formatContextMenu();
	    //SidebarDialogue.initialize();
	    Loader.decreaseCallCount();
	},
	
	login : function()
	{
		var errorMessage = '';
		
		var usernameInput = $('#username').val();
		var passwordInput = $('#password').val();
		
		//check if username is present
		if (usernameInput == '')
		{
			errorMessage += 'Käyttäjätunnus puuttuu\n';
		}
		
		//check if password is present
		if (passwordInput == '')
		{
			errorMessage += 'Salasana puuttuu';
		}
		
		//if theres error do nothing
		if (errorMessage != '')
		{
			alert(errorMessage);
			return false;
		}
		
		//try to login
		var loginData = {
			username : usernameInput,
			password : passwordInput
		}
		
		User.processLogin(loginData);
	},
	
	processLogin : function (loginData)
	{
		Loader.load('/user/login',loginData,'User.processLoginCallback');	
	},
	
	processLoginCallback : function(jsonData)
	{
		if (jsonData.data.status == 0)
	    {
	    	alert(jsonData.data.message);
	    }
	    
	    else 
	    {
	    	User.loggedIn = true;
	    	User.updateUserInfo(jsonData);
	    	//Graphics.showUserTools(true);
	    	Graphics.showUserTools(false);

            //console.log(User.loggedIn);
            //update sidebar
	    	
	    	if (typeof(MMap) != 'undefined') 
	    	{
                SidebarDialogue.initialize();
                MMap.updateMarkers();
                Graphics.formatContextMenu();	    		
	    	}
	    }
	    Loader.decreaseCallCount();
	},
	
	updateUserInfo : function(jsonData)
	{
		User.loggedIn  			= true;
		User.id		   			= jsonData.data.user.id;
    	User.is_moderator		= jsonData.data.user.is_moderator;		
    	User.nickname  			= jsonData.data.user.nickname;
    	User.usergroup 			= jsonData.data.user.usergroup;
    	User.email	   			= jsonData.data.user.email;
    	User.baseLocationLat 	= jsonData.data.user.baseLocationLat;
    	User.baseLocationLng 	= jsonData.data.user.baseLocationLng;
    	User.groupSpecificData 	= jsonData.data.user.groupSpecificData;
	},
	
	logout : function(force)
	{
		if (typeof(MMap) != 'undefined' && MMap.controlsDisabled && !force)
		{
			return;
		}
		
		Loader.load('/user/logout',false,'User.logoutCallback');	
	},
	
	logoutCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	User.emptyUserData();
	    	Graphics.showLogin();
	    	if (typeof(MMap) != undefined) {
	    		Graphics.formatContextMenu();
	    		window.location.href="/index";
	    	}
	    }
	    
	    else 
	    {
	    	//logout failed
	    }
	    Loader.decreaseCallCount();
	},
	
	emptyUserData : function()
	{
		User.loggedIn          = false;
        User.is_moderator       = false;
		User.id                = null;
    	User.username          = null;
    	User.usergroup         = null;
    	User.baseLocationLat   = null;
    	User.baseLocationLng   = null;
	},
	/*
	toggleNewAccount : function()
	{
		if (!User.newAccountOpen)
		{
			User.newAccountOpen = true;
			Graphics.showNewAccount();
			MMap.disableControls();
		}
		else
		{
			User.newAccountOpen = false;
			Graphics.hideNewAccount();
			MMap.enableControls();
		}
	},
	*/
	processNewAccount : function()
	{
		
		var readTerms = $('#acceptTerms').is(':checked');
		if (!readTerms)
		{
			alert('Sinun täytyy hyväksyä palveluehdot');
			return;
		}
		
		//fields
		var inputData = 
		{
			firstname 	: $('#nA_firstname').val(),
			lastname 	: $('#nA_lastname').val(),
			email	 	: $('#nA_email').val(),
			nickname 	: $('#nA_nickname').val(),
			password	: $('#nA_password').val()
		}
		
		Loader.load('/user/newaccount',inputData,'User.processNewAccountCallback');
		return;	
		
	},
	
	processNewAccountCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	Graphics.showThankYouForRegistering()
	    }
	    
	    else 
	    {
	    	var errorMsg = '';
	    	
	    	if (jsonData.data.errorCode == 1) //problem with validation
	    	{
		    	if (jsonData.data.messages.firstname) errorMsg += 'Etunimi virheellinen.\n';
		    	if (jsonData.data.messages.lastname) errorMsg += 'Sukunimi virheellinen.\n';
		    	if (jsonData.data.messages.email) errorMsg += 'Sähköpostiosoite virheellinen.\n';
		    	if (jsonData.data.messages.nickname) errorMsg += 'Nimimerkki virheellinen.\n';
		    	if (jsonData.data.messages.password) errorMsg += 'Salasana virheellinen.\n';
	    	}
	    	
	    	else if (jsonData.data.errorCode == 2) //duplicate user or email
	    	{
	    		errorMsg += "Käyttäjätunnus tai sähköpostiosoite on jo käytössä.";
	    	}
	    	
	    	else if (jsonData.data.errorCode == 3) //database error
	    	{
	    		errorMsg += "Tapahtui virhe käyttäjätiliä luodessa. Yritä uudelleen myöhemmin.";
	    	}
	    	
	    	else errorMsg += "Tapahtui virhe käyttäjätiliä luodessa. Yritä uudelleen myöhemmin.";
	    	
	    	if (errorMsg == '') errorMsg = jsonData.data.messages; //"Tapahtui virhe uutta käyttäjätunnusta luodessa."; 
	    	alert(errorMsg);  
	    }
	    Loader.decreaseCallCount();
	},
	
	goToBaseLocation : function()
	{
		if (!MMap.controlsDisabled)
		{
			if (User.baseLocationLat && User.baseLocationLng)
			{
				var point = new GLatLng
	 			(
					parseFloat(User.baseLocationLat),
					parseFloat(User.baseLocationLng)
				);
			
				MMap.map.setCenter(point,MMap.map.getZoom());
			}
			else
			{
				alert('Kotisatamaa ei ole määritetty. Voit määrittää kotisataman hiiren oikealla napilla haluamasi paikan yllä.');
			}
		}
	},
	
	sendLostAccountInfo : function()
	{
		//email address
		var emailAddress = $('#forgetAccountEmail').val();
		if (!Validators.isValidEmail(emailAddress))
		{
			alert('Sähköpostiosoite virheellinen.');
			return false;
		}
		
		var params = {
			'email' : emailAddress
		}
		
		Loader.load('/user/forgetaccount',params,'User.sendLostAccountInfoCallback');
		
		return true;	
	},
	
	sendLostAccountInfoCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	$('#registerForm').html('<div id="column_top"><div><h1>Tunnukset l&auml;hetetty</h1><p>Tunnukset on l&auml;hetetty s&auml;hk&ouml;postiisi.</p></div></div>');
	    }
	    
	    else 
	    {
	    	alert('Tapahtui virhe. Tunnuksia ei pystytty lähettämään antamaasi sähköpostiosoitteeseen.');
	    }
	    Loader.decreaseCallCount();
	},
	
	saveUserInfo : function()
	{
		//email
		var email = $('#muiEmail').val();
		
		//password
		var password = $('#muiPassword').val();
		
		//password confirmation
		var passwordConfirm = $('#muiPasswordConfirm').val();
		
		
		//VALIDATION
		var errorMsg = '';
		
		//email
		if (!Validators.isValidEmail(email)) errorMsg += 'Sähköpostiosoite virheellinen';
		
		//password
		if (password !== passwordConfirm) errorMsg += 'Salasanat eivät täsmää'; 
	},
	
	addNewServiceProvider : function()
	{
		
		var readTerms = $('#acceptTerms').is(':checked');
		if (!readTerms)
		{
			alert('Sinun täytyy hyväksyä palveluehdot');
			return;
		}
		
		//does passwords match?
		if ($('#nSP_password').val() != $('#nSP_passwordConfirm').val()) 
		{
			alert('Salasanan vahvistus ei täsmää.');
			return;
		}
		
		//fields
		var inputData = 
		{
			serviceName				: $('#nSP_serviceName').val(),
			companyName 			: $('#nSP_companyName').val(),
			contactPersonFirstName 	: $('#nSP_contactPersonFirstName').val(),
			contactPersonLastName 	: $('#nSP_contactPersonLastName').val(),
			address					: $('#nSP_address').val(),
			postalCode				: $('#nSP_postalCode').val(),
			location				: $('#nSP_location').val(),
			phoneNumber				: $('#nSP_phoneNumber').val(),
			email					: $('#nSP_email').val(),
			www						: $('#nSP_www').val(),
			nickname				: $('#nSP_nickname').val(),
			password				: $('#nSP_password').val()
		};
		
		Loader.load('/user/newserviceprovideraccount',inputData,'User.addNewServiceProviderCallback');
	},
	
	addNewServiceProviderCallback : function(jsonData)
	{
		if (jsonData.data.status == 1)
	    {
	    	Graphics.showServiceProviderRegisterThanks();
	    }
	    
	    else 
	    {
	    	var errorMsg = '';
	    	if (jsonData.data.messages.serviceName) errorMsg += 'Palvelun nimi virheellinen.\n';
	    	if (jsonData.data.messages.companyName) errorMsg += 'Yrityksen nimi virheellinen.\n';
	    	if (jsonData.data.messages.contactPersonFirstName) errorMsg += 'Yhteyshenkilön etunimi virheellinen.\n';
	    	if (jsonData.data.messages.contactPersonLastName) errorMsg += 'Yhteyshenkilön sukunimi virheellinen.\n';
	    	if (jsonData.data.messages.address) errorMsg += 'Osoite virheellinen.\n';
	    	if (jsonData.data.messages.postalCode) errorMsg += 'Postinumero virheellinen.\n';
	    	if (jsonData.data.messages.location) errorMsg += 'Kaupunki virheellinen.\n';
	    	if (jsonData.data.messages.phoneNumber) errorMsg += 'Puhelinnumero virheellinen.\n';
	    	if (jsonData.data.messages.email) errorMsg += 'Sähköpostiosoite virheellinen.\n';
	    	if (jsonData.data.messages.www) errorMsg += 'Www-osoite virheellinen.\n';
	    	if (jsonData.data.messages.nickname) errorMsg += 'Nimimerkki virheellinen.\n';
	    	if (jsonData.data.messages.password) errorMsg += 'Salasana virheellinen.\n';
	    	
	    	if (jsonData.data.messages.duplicate) errorMsg += 'Antamasi sähköpostiosoite tai käyttäjätunnus on jo käytössä.\n';
	    	
	    	if (errorMsg == '') errorMsg = "Tapahtui virhe uutta käyttäjätunnusta luodessa."; 
	    	alert(errorMsg);  
	    }
	    Loader.decreaseCallCount();
	}
}
