/*** PAGE FUNCTIONS ***/
SV.auth.home.load.push(function()
{
	$('#registerForm #register-email').defaultvalue( 'Enter your email' );
	
	$('#registerForm').validate(
	{
		rules:
		{
			'register-email':
			{
				required: true,
				email: true
			}
		},
		messages:
		{
			'register-email':
			{
				defaultvalue: 'Please enter your email',
				required: 'Please enter your email',
				email: 'Please enter a valid email'
			}
		},
		errorClass: 'validation-error',
		errorPlacement: function(error, element)
		{
			addError( $('#register-errors'), error );
		},
		showErrors: function(errorMap, errorList)
		{
			this.defaultShowErrors();
			showErrorBox( $('#register-errors'), this );
		}
	});   
	
	
	   
});

SV.auth.signup.load.push(function()
{
	autoCompleteLocation( $('#signupLocation') );
	initFacebook();
	
	$('#signupForm #signupFirstName').defaultvalue( 'First name' );
	$('#signupForm #signupLastName').defaultvalue( 'Last name' );
	$('#signupForm #signupEmail').defaultvalue( "it's kept private!" );
	$('#signupForm #signupLocation').defaultvalue( 'City, Region, Country' );
	
	$('#signupForm').validate(
	{
		groups: {
			completeName : 'firstname lastname',
			emails : 'email'
		},
		rules:
		{
			firstname:
			{
				defaultvalue: true,
				required: true
			},
			lastname:
			{
				defaultvalue: true,
				required: true
			},
			email:
			{
				defaultvalue: true,
				required: true,
				email: true
			},
			password:
			{
				required: true
			},
			location:
			{
				defaultvalue: true,
				required: true
			}
		},
		messages:
		{
			email:
			{
				defaultvalue: 'Please enter your email',
				required: 'Please enter your email',
				email: 'Please enter a valid email'
			},
			firstname:
			{
				defaultvalue: 'Please enter your complete name',
				required: 'Please enter your complete name'
			},
			lastname:
			{
				defaultvalue: 'Please enter your complete name',
				required: 'Please enter your complete name'
			},
			password:
			{
				required: 'Please enter your password'
			},
			location:
			{
				defaultvalue: 'Please enter your location',
				required: 'Please enter your location'
			}
		},
		errorClass: 'validation-error',
		errorPlacement: function(error, element)
		{
			var id = element.attr('id');
			if (id == 'signupFirstName' || id == 'signupLastName')
			{
				addError($('#signupName-error'), error);
			}
			else if (id == 'signupEmail') 
			{
				addError($('#signupEmail-error'), error);
			}
			else if (id == 'signupLocation') 
			{
				addError($('#signupLocation-error'), error);
			}
			else if (id == 'signupPassword') 
			{
				addError($('#signupPassword-error'), error);
			}
		},
		showErrors: function(errorMap, errorList)
		{
			this.defaultShowErrors();
			//handle single element validation
			if (this.currentElements.length == 1 && errorList.length == 0 )
			{
				var id = this.currentElements.attr('id');
				if (id == 'signupFirstName' || id == 'signupLastName')
				{
					 $('#signupName-error').fadeOut( 'fast' );
				}
				else if (id == 'signupEmail') 
				{
					$('#signupEmail-error').fadeOut( 'fast' );
				}
				else if (id == 'signupLocation') 
				{
					$('#signupLocation-error').fadeOut( 'fast' );
				}
				else if (id == 'signupPassword') 
				{
					$('#signupPassword-error').fadeOut( 'fast' );
				}
			}
			else
			{
				//handle completement form validation
				$.each(errorMap, function(key, value)
				{
					if (key == 'firstname' || key == 'lastname')
					{
						 $('#signupName-error').fadeIn( 'fast' );
					}
					else if (key == 'email') 
					{
						$('#signupEmail-error').fadeIn( 'fast' );
					}
					else if (key == 'location') 
					{
						$('#signupLocation-error').fadeIn( 'fast' );
					}
					else if (key == 'password') 
					{
						$('#signupPassword-error').fadeIn( 'fast' );
					}
				});
			}
		}
	});
});

SV.auth.signup.enter.push(function()
{
	SV.PARAM = '';
	SV.FROM = '';
	SV.BETA_KEY = '';
	SV.INVITE_KEY = '';
});

SV.auth.signup.defaultFunction.push(function()
{
	$('#signup-message-default').css('display', 'inline');
});

SV.auth.signup.betaSignup = new Array();
SV.auth.signup.betaSignup.push (function()
{
	params = SV.NEW_PAGE;
	var size = params.length;

	if( size > 4 && params[2] == 'betaSignup')
	{
		SV.BETA_KEY = params[3];
		$('#signupEmail').val(html_decode(params[4]));
		
		$('#signup-message-default').css('display', 'inline');
	}
});



SV.auth.signup.invite = new Array();
SV.auth.signup.invite.push (function()
{
	params = SV.NEW_PAGE;
	var size = params.length;

	if( size > 2 && params[2] == 'invite')
	{
		SV.FROM = params[2];
		SV.PARAM = params[3];
		SV.INVITE_KEY = params[3];
		
		getCustomMessage();
	}
});

SV.auth.signup.from = new Array();
SV.auth.signup.from.push (function()
{
	params = SV.NEW_PAGE;
	var size = params.length;

	if( size > 3 && params[2] == 'from')
	{
		SV.FROM = params[3];
		SV.PARAM = params[4];
	}
});

SV.auth.signup.redirect = new Array();
SV.auth.signup.redirect.push(function()
{
	
	params = SV.NEW_PAGE;
	var size = params.length;

	$('#signup-message-default').css('display', 'inline');
	
	if( size > 3 && params[2] == 'redirect')
	{
		SV.redirectOverride = params.slice(3).join('/');
	}
	
});

SV.auth.logout.load.push(function()
{
	initFacebook();
	logoutFacebook();
});

SV.auth.recover_password.load.push(function()
{
	$('#recoverForm #recoverEmail').defaultvalue( 'Enter your email' );
	
	$('#recoverForm').validate(
	{
		rules:
		{
			recoverEmail:
			{
				defaultvalue: true,
				required: true,
				email: true
			}
		},
		messages:
		{
			recoverEmail:
			{
				defaultvalue: 'Please enter your email',
				required: 'Please enter your email',
				email: 'Please enter a valid email'
			}
		},
		errorClass: 'validation-error',
		errorPlacement: function(error, element)
		{
			addError( $('#recover-errors'), error );
		},
		showErrors: function(errorMap, errorList)
		{
			this.defaultShowErrors();
			showErrorBox( $('#recover-errors'), this );
		}
	});
});

SV.auth.login.load.push(function()	
{
	$('#login-email').defaultvalue( 'Enter your email' );
	$('#login-passclear').defaultvalue( 'Enter your password' );
	
	$('#login-passclear').focus(function()
	{
		$(this).parent().hide();
		$('#login-pass').parent().show();
		$('#login-pass').focus();
	});
	$('#login-pass').blur(function()
	{
		if( isEmpty($(this).val()) )
		{
			$(this).parent().hide();
			$('#login-passclear').parent().show();
		}
	});		
	
	$('#fullLoginForm').validate(
	{
		groups :
		{
			login: "login-email login-pass"
		},
		rules:
		{
			'login-email':
			{
				defaultvalue: true,
				required: true,
				email: true
			},
			'login-pass':
			{
				required: true
			}
		},
		messages:
		{
			'login-email':
			{
				defaultvalue: 'Your email or password is invalid, try again.',
				required: 'Your email or password is invalid, try again.',
				email: 'Your email or password is invalid, try again.'
			},
			'login-pass':
			{
				required: 'Your email or password is invalid, try again.'
			}
		},
		errorClass: 'validation-error',
		errorPlacement: function(error, element)
		{
			addError( $('#login-errors'), error );
		},
		showErrors: function(errorMap, errorList)
		{
			clearErrors($('#login-errors'));
			this.defaultShowErrors();
			showErrorBox( $('#login-errors'), this );
		}
	});
	
});

SV.auth.login.error = new Array();
SV.auth.login.error.push(function()
{
	$('#login-errors').show();
});

SV.auth.login.redirect = new Array();
SV.auth.login.redirect.push(function()
{
	
	params = SV.NEW_PAGE;
	var size = params.length;

	if( size > 3 && params[2] == 'redirect')
	{
		SV.redirectOverride = params.slice(3).join('/');
	}
	
});

function registerToBeta()
{
	if ($('#registerForm').valid())
	{
		var data = 'email=' + $('#register-email').val();
		
		$.ajax(
		{
			type: 'POST',
			url: 'ajax/business/registerToBeta.php',
			data: data,
			success: function(result)
			{
				$('#register-email').val('');
				$('#register-email').blur();
				result = handleValidConfirm( result, $('#register-errors'), $('#register-confirm') );
			}
		});
	}
}

function getCustomMessage()
{
	var data =  'type='+ SV.FROM +
	'&param=' + SV.PARAM;
	$.ajax(
	{
		type: 'POST',
		url: 'ajax/controller/get_signup_custom_message.php',
		data: data,
		success: function(result)
		{
			result = json_decode(result);
			if (result.code == 'ok')
			{
				$('#signup-message').html(result.content);
			}
			else 
			{
				//should never happen
			}
		}
	});
}

function doCustomTreatement()
{
	var data =  'customType='+ SV.FROM +
	'&param=' + SV.PARAM;
	$.ajax(
	{
		type: 'POST',
		url: 'ajax/business/doCustomTreatement.php',
		data: data,
		success: function(result)
		{
			result = json_decode(result);
			if (result.code == 'ok')
			{
				processLink( result.redirect );
			}
			else 
			{
				//should never happen
			}
		}
	});
}

function removeErrors($errorBox)
{
	$errorBox.find('label').remove();
}

/*** SIGNUP ***/
function signup()
{
	if ($('#signupForm').valid())
	{
		showPageLoading();
		
		var data = 'firstName=' + $('#signupFirstName').val();
		data += '&lastName=' + $('#signupLastName').val();
		data += '&email=' + $('#signupEmail').val();
		data += '&location=' + $('#signupLocation').val();
		data += '&password=' + $('#signupPassword').val();
		data += '&type=' + $('#signupType').val();
		data += '&betaKey=' + SV.BETA_KEY;
		data += '&inviteKey=' + SV.INVITE_KEY;
		
		$.ajax(
		{
			type: 'POST',
			url: 'ajax/controller/signup.php',
			data: data,
			success: function(result)
			{
				result = json_decode(result);
				if (result.code == 'ok')
				{
					if (SV.FROM != '')
					{
						doCustomTreatement();
					}
					else
					{
						redirectIfOverride(result.redirect);
					}
				}
				else
				{
					var errors = result.content;
					
					$.each(errors, function(index, value)
					{
						var $error = $('<label>'+value+'</label>').addClass('validation-error')
																 .attr('generated', 'true');
						if (index == 'firstname' || index == 'lastname' )
						{
							$error.attr('for','completeName' );
							removeErrors($('#signupName-error'));
							addError($('#signupName-error'), $error);
							$('#signupName-error').fadeIn( 'fast' );
						}
						else if (index == 'email')
						{
							$error.attr('for','emails' );
							removeErrors($('#signupEmail-error'));
							addError($('#signupEmail-error'), $error);
							$('#signupEmail-error').fadeIn( 'fast' );
						}
						else if (index == 'location')
						{
							$error.attr('for','signupLocation' );
							removeErrors($('#signupLocation-error'));
							addError($('#signupLocation-error'), $error);
							$('#signupLocation-error').fadeIn( 'fast' );
						}
						else if (index == 'password')
						{
							$error.attr('for','signupPassword' );
							removeErrors($('#signupPassword-error'));
							addError($('#signupPassword-error'), $error);
							$('#signupPassword-error').fadeIn( 'fast' );
						}
						else if (index == 'facebook' || index == 'twitter')
						{
							$error.attr('for','signupSocial' );
							removeErrors($('#signupSocial-error'));
							addError($('#signupSocial-error'), $error);
							$('#signupSocial-error').fadeIn( 'fast' );
						}
						else
						{
							$error.attr('for','generic-error' );
							removeErrors($('#generic-error'));
							addError($('#generic-error'), $error);
							$('#generic-error').fadeIn( 'fast' );
						}
					});
					hidePageLoading();
				}
			}
		});
	}
}

function prepareFacebookSignup()
{
	FB.getLoginStatus(function (response)
	{
		if (response.session) 
		{
			signupFacebook();
		}
		else
		{
			consoleLog('Need to get a Session');
			FB.login(function (response) 
			{
				
				if (response.session) 
				{
					signupFacebook();
				}
				else
				{
				}
			}, {perms:'publish_stream,email,user_location'});
		}
	});
}

function signupFacebook()
{	
	showPageLoading();
	$.ajax(
	{
		type: 'POST',
		url: 'ajax/controller/signupFacebook.php',
		success: function(result)
		{
		
			result = json_decode( result );
			if (result.code == 'ok')
			{
				$('#signupType').val(result.type);
				$('#signupPassword').val(result.password);	
				$('#signupFirstName').val(result.firstName);
				$('#signupLastName').val(result.lastName);
				$('#signupEmail').val(result.email);
				$('#signupLocation').val(result.location);
				
				signup();
			}
			else if (result.code == 'info')
			{
				$('#signupSocial').hide();
				$('#or-separator').hide();
				$('#signupType').val(result.type);
				$('#information-text').text(result.text).show();

				//password is always given a random string juste to insure that the validation will work
				$('#divPassword').hide();
				//autocomplete everything
				$('#signupPassword').val(result.password);	
				
				$('#signupFirstName').focus();
				$('#signupFirstName').val(result.firstName);
				
				$('#signupLastName').focus();
				$('#signupLastName').val(result.lastName);
				
				$('#signupEmail').focus();
				$('#signupEmail').val(result.email);
				
				$('#signupLocation').focus();
				$('#signupLocation').val(result.location);
				
				
		
				if (!isEmpty(result.firstName) && !isEmpty(result.lastName))
				{
					$('#divName').hide();
				}
				
				if (!isEmpty(result.email) )
				{
					$('#divEmail').hide();
				}
				
				if (!isEmpty(result.location) )
				{
					$('#divLocation').hide();
				}
				hidePageLoading();
			}
			else if (result.code == 'error')
			{
				var errors = result.content;

				$.each(errors, function(index, value)
				{
					var $error = $('<label>'+value+'</label>').addClass('validation-error')
															 .attr('generated', 'true');
					if (index == 'facebook')
					{
						$error.attr('for','signupSocial' );
						removeErrors($('#signupSocial-error'));
						addError($('#signupSocial-error'), $error);
						$('#signupSocial-error').fadeIn( 'fast' );
					}
				});
				
				hidePageLoading();
			}
			
		}
	});
}

function signupTwitter()
{
	showPageLoading();
	$.ajax(
	{
		type: 'POST',
		url: 'ajax/controller/signupTwitter.php',
		success: function(result)
		{
			//there is no $('#social-signup-confirm') box, since if its sucessfull, we simply redirect/alter the page.
			result = handleValidConfirm( result, $('#social-signup-errors'), $('#social-signup-confirm') );
			if (result.code == 'ok')
			{
				//unreacheable code ^^
				processLink(result.redirect);
			}
			else 
			{

				if (result.code == 'info')
				{
					$('#signupSocial').hide();
					$('#or-separator').hide();
					$('#signupType').val(result.type);
					$('#information-text').text(result.text).show();

					//password is always given a random string juste to insure that the validation will work
					$('#divPassword').hide();
					//autocomplete everything
					$('#signupPassword').val(result.password);
										
					$('#signupEmail').focus();
					$('#signupEmail').val(result.email);
					
					$('#signupLocation').focus();					
					$('#signupLocation').val(result.location);

					$('#signupLastName').focus ();
					$('#signupLastName').val(result.lastName);
					
					$('#signupFirstName').focus();
					$('#signupFirstName').val(result.firstName);
					
					
					if (!isEmpty(result.email) )
					{
						$('#divEmail').hide();
					}
					
					if (!isEmpty(result.location) )
					{
						$('#divLocation').hide();
					}
				}
				else if (result.code == 'error')
				{
					var errors = result.content;

					$.each(errors, function(index, value)
					{
						var $error = $('<label>'+value+'</label>').addClass('validation-error')
																 .attr('generated', 'true');
						if (index == 'twitter')
						{
							$error.attr('for','signupSocial' );
							removeErrors($('#signupSocial-error'));
							addError($('#signupSocial-error'), $error);
							$('#signupSocial-error').fadeIn( 'fast' );
						}
					});
				}
				hidePageLoading();
			}	
		}
	});
}

/** Logout Fonction **/
function logoutFacebook()
{
	if ( isEmpty(FB) )
	{
		consoleLog('Facebook not ready');
		setTimeout(function(){logoutFacebook();}, 50);
	}
	else
	{	
		// Open channel with Facebook
		// We logout, and Facebook "refreshes" the page
		FB.getLoginStatus(function(response) 
		{
			if (response.session) 
			{
				FB.logout(function(response) {
					// user is now logged out
				});
			} 
		});
		
		processLink('auth/home');
	}
}

