var choice;
var scrNameSuggestion = new Array();
var suggestionHeaderContent = "<strong>Here are some suggestions...</strong><br />";
var suggestionList = "";
var signup_install_choice = 0; 
var reinstall_choice = 0;
var emailValidated = false;
var invalidFNameFlag = false;
var invalidLNameFlag = false;
var batch = 1;
var resetCounterFlag = false;
var validateEMailResult = 0;
var v321MeetFlag = false;
var isProcessing = false;

$(document).ready(function(){
	//clear the passwords
	$("#txtPassword").val("");
	$("#txtPassword2").val("");
	
	//hide all instances of validator span
	$(".span-validator").addClass('hidden-settings');

	$("#rdo-signup-install").click(function(){	
		choice = "SIGNUP-INSTALL";

		$("#div-signup-install").show("clip", "", 500);
		signup_install_choice = 1;
		
		if(reinstall_choice == 1)
		{
			$("#div-reinstall-settings").hide("clip", "", 500);
			reinstall_choice = 0;
		}
	});
	
	$("#rdo-reinstall").click(function(){
		choice = "REINSTALL";
	
		if(signup_install_choice == 1)
		{
		 	$("#div-signup-install").hide("clip", "", 500);
			signup_install_choice = 0;
		}
		
	    $("#div-reinstall-settings").show("clip", "", 500);		
		reinstall_choice = 1;
	});
	
	//SCREEN NAME SUGGESTION FOCUS-IN EVENT	
	$("#txtFName").blur(function(){
		validateNames($("#txtFName").val(),"FName");
	});
	/*
	$("#txtLName").blur(function(){
		validateNames($("#txtLName").val(),"LName");
	});
	*/
	$("#txtEmail").blur(function(){
	
		if($("#hdn-regType").val() == 0) //if normal registration
		{
			validateForms($("#txtEmail").attr("field"));
		}
	})
	
	$("#txtEmail2").blur(function(){
		validateForms($("#txtEmail2").attr("field"));
	})
	
	$("#txtScreenName").focus(function(){
	
		if($("#hdn-regType").val() == 0) //if normal registration
		{
		
			//if(!v321MeetFlag)
			//{
				//if(validateNames($("#txtFName").val(),"FName") && validateNames($("#txtLName").val(),"LName") && (validateEMailResult != 2))
				if(validateNames($("#txtFName").val(),"FName") && (validateEMailResult != 2))
				{
					suggestDisplayName();
				}
			//}
		}
		else if($("#hdn-regType").val() == 1) //if own3d reg mode
		{
		
			//bypass the validation variables; suggestions.js ->suggestDisplayName()
			emailValidated = true;
			invalidFNameFlag = false;
			invalidLNameFlag = false;
			
			suggestDisplayName();
		}
	});
	
	//LINK SUGGESTION
	$(".link_suggestion").livequery("click", function(e){
		e.preventDefault();
		$("#txtScreenName").val($(this).text());
		
		//perform another validation on username
		if(validateForms($("#txtScreenName").attr("field"), $("#txtScreenName").val()))
		{
			$("#validate-div").removeClass("visible-settings");
			$("#validate-div").addClass("hidden-settings");
			$("#txtPassword").focus();
		}
	});
	
	//LINK MORE CLICKED
	$("#lnk-more").livequery("click", function(e){
		batch++;
		generateSuggestionList();
	});
	
	//CLOSE BUTTON FOR SUGGESTION CLICKED
	$("#suggestionClose").livequery("click", function(e){
		e.preventDefault();
		$("#validate-div").removeClass('visible-settings').addClass('hidden-settings');
	})
	
	
	$("#txtFName").focus(function(){
		hideVisibleSuggestionDiv();
	});
	/*
	$("#txtLName").focus(function(){
		hideVisibleSuggestionDiv();
	});
	*/
	$("#txtEmail").focus(function(){
		hideVisibleSuggestionDiv();
	});
	
	$("#txtPassword").focus(function(){
		hideVisibleSuggestionDiv();
	});
	
	$("#txtPassword2").focus(function(){
		hideVisibleSuggestionDiv();
	});
	
	$("#txtPassword2").blur(function(){
		if($("#txtPassword").val() != "" && $("#txtPassword2").val() != "") //only validate if password & retype password has values
		{
			validatePasswords();
		}		
	});
	
	$("#btn-register").click(function(){
		if ( !isProcessing ) {
			if ( validateForms( "all_forms", "" ) ) {
				if( $("#hdn-regType").val() == 'own3d' ) {
					validateOwn3dAccount();
				} else if ( $("#hdn-regType").val() == 'justintv' ) {
					validateJustinTVAccount();
				} else if ( $("#hdn-regType").val() == 'normal' ) {
					registerAccount();
				}
			}
		}
	});
	
	validateEmailAddress();
});

function initPage() {
	//remove the js notification and add action on forms
	$("#form-registration").attr("action", "registrationSuccessful.php");
	$("#tbl_login").css("display", "inline");
}

function validateEmailPattern(elementValue) {
    var emailPattern = /^[a-zA-Z0-9+._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
    return emailPattern.test(elementValue);
}

function validateNamePattern(elementValue) {
	namePattern = /[^a-zA-Z0-9\.\-\ ]/;
	return namePattern.test(elementValue); //should return false for valid input
}

function validateEmailAddress() {
	var result = -2;
	var emailaddress = urlencode($("#txtEmail").val());
	if (jQuery.trim($("#txtEmail").val()) != '') { 
		
		//load image
		$("#span-preloader-email").html("<img src='../images/preloader.gif' />");
		
		jQuery.ajax({
			url: "validate.php",
			type: "post",
			async: false,
			data: "form_name=EmailAddress&data="+ emailaddress,
			dataType: "json",
			success: function (data) {	
				$("#span-preloader-email").html("");
			
				if(data.result == 0 ) //email is available
				{
					//$("#span-EmailAddress").css("color", "#0F0");
					//$("#span-EmailAddress").html("* Email address is available");
					$("#span-EmailAddress").addClass('hidden-settings');
					$("#span-EmailAddress").html("");
					
					// enable certain fields and form elements
					setElementAttribute(1);
					emailValidated = true;
					emailResultStatus = 0;
					validateEMailResult = 0;
				}		
				else if (data.result == 1) //email is taken; 
				{
					/*
					$("#span-EmailAddress").css("background-color", "#E5D779");
					$("#span-EmailAddress").css("color", "#000");
					*/
					
					$("#span-EmailAddress").removeClass("hidden-settings");
					//$("#span-EmailAddress").css("color", "#E5D779");
					$("#span-EmailAddress").removeClass("redBG");
					$("#span-EmailAddress").addClass("yellowBG");
					$("#span-EmailAddress").html("* You already have a 321meet<br/>account. Please enter your 312meet password<br/>to enable XSplit Broadcaster.");
					
					
					
					// disable certain fields and form elements
					setElementAttribute(0);
					validateEMailResult = 1;
					emailValidated = true;
					
					checkUser(emailaddress);
				}
				else if (data.result == 2) //email is taken; 
				{
					//$("#span-EmailAddress").css("color", "#E5D779");
					$("#span-EmailAddress").removeClass("hidden-settings");
					$("#span-EmailAddress").addClass("redBG");
					$("#span-EmailAddress").html("* Email address is taken");
					
					// enable certain fields and form elements
					setElementAttribute(1);
					validateEMailResult = 2;
				}
				
				result = data.result;
			}
		});
		
		return result;
		
	}
}

function checkUser(emailaddress)
{
	//get the full name and assign it to the full name field!!!
	
	jQuery.ajax({
		url: "validate.php",
		type: "post",	
		async: false,
		data: "method=checkUser&data="+ emailaddress,
		dataType: 'json',
		success: function(data) {
			//assign the value to fullname field
			$('#txtFName').val(data.FullName);
		}
		
	});
}

// function to enable/disable certain fields and form elements
function setElementAttribute(param)
{ 
	if (param) 
	{
		$('#txtFName').removeAttr("readonly"); 
		//$('#txtLName').removeAttr("readonly"); 
		$("#choosePWText").text("Choose a Password");
		$("#trRetypeEmail").css("display", "");
		$("#trRetypePW").css("display", "");
		
		
		$("#txtFName").css("color", "#000000");
		//$("#txtLName").css("color", "#000000");
		
		v321MeetFlag = false;
	}
	else
	{ 
		$("#txtFName").attr("readonly", true);
		//$("#txtLName").attr("readonly", true);
		$("#choosePWText").text("Enter your password");
		$("#trRetypeEmail").css("display", "none");
		$("#trRetypePW").css("display", "none");
		
		$("#txtFName").css("color", "#8a8a8a");
		//$("#txtLName").css("color", "#8a8a8a");
		
		v321MeetFlag = true;
	}
}

//validation functions start
function validateForms(form_name, data)
{
	//validate_all
	if(form_name == "all_forms")
	{

		var errorCount = 0;
		var errorInEmailField = false;
		
		//remove the visible validator messages because it is not necessary for the moment
		$(".span-validator").addClass('hidden-settings');
		
		if ( $("#hdn-regType").val() == 'own3d' ) { //if own3d reg mode then validate own3d password
			if($("#txtOwn3dUsername").val() == "") {
				$("#span-Own3dUsername").removeClass('hidden-settings');
				$("#span-Own3dUsername").html("* Please type in your Own3d Username.");
				errorCount++;
			}
			
			if(validateOwn3dPassword() == false) { // own3d password
				errorCount++;
			}
		} else if ( $("#hdn-regType").val() == 'justintv' ) {
			if($("#txtJustinTVUsername").val() == "") {
				$("#span-JustinTVUsername").removeClass('hidden-settings');
				$("#span-JustinTVUsername").html("* Please type in your JustinTV Username.");
				errorCount++;
			}
			
			if( validateJustinTVPassword() == false ) { // own3d password
				errorCount++;
			}
		}
		
		if (validateEMailResult != 1)
		{
			//fname
			if($("#txtFName").val() == "")
			{
				$("#span-FName").removeClass("hidden-settings");
				$("#span-FName").html("* Please type in your First Name.");
				//return false;
				errorCount++;
			}
			else if (validateNames($("#txtFName").val(),"FName") == false)
			{
				//return false;
				errorCount++;
			}
			/*
			//lname
			if($("#txtLName").val() == "")
			{
				$("#span-LName").html("* Please type in your Last Name.");
				//return false;
				errorCount++;
			}
			else if (validateNames($("#txtLName").val(),"LName") == false)
			{
				//return false;
				errorCount++;
				errorInEmailField = true;
			}
			*/
			//validate passwords
			if(validatePasswords() == false)
				errorCount++;
				//return false;
		}
		//email
		if($("#txtEmail").val() == "")
		{
			$("#span-EmailAddress").removeClass("hidden-settings");
			$("#span-EmailAddress").addClass("redBG");
			$("#span-EmailAddress").html("* Please type in your Email Address.");
			//return false;
			errorCount++;
			errorInEmailField = true;
		}
		else
		{	
			if(validateEmailPattern($("#txtEmail").val())) //performs testing only if the email format is valid
			{
			
				if($("#hdn-regType").val() != 1) //perform validating of email address if it is only for regular registration
				{				
					if(validateEmailAddress() == -2)
						//return false;
						errorCount++;
						errorInEmailField = true;
				}
			}
			else //email address format not valid
			{
				//return false;
				errorCount++;
				errorInEmailField = true;
			}
			
			if($("#txtEmail").val().indexOf("+") != -1)
			{
				$("#span-EmailAddress").removeClass("hidden-settings");
				$("#span-EmailAddress").addClass("redBG");
				$("#span-EmailAddress").html("* Please type a valid email address format.");
				
				errorCount++;
				errorInEmailField = true;
			}
		}	
		
		if (validateEMailResult != 1)
		{
			//email and retype email address
			if($("#txtEmail2").val() == "")
			{
				$("#span-EmailAddress2").removeClass("hidden-settings");
				$("#span-EmailAddress").addClass("redBG");
				$("#span-EmailAddress2").html("* Please type in your Email Address.");
				//return false;
				errorCount++;
				errorInEmailField = true;
			}
			
			if($("#txtEmail").val() != $("#txtEmail2").val())
			{
				$("#span-EmailAddress").removeClass("hidden-settings");
				$("#span-EmailAddress2").removeClass("hidden-settings");
				$("#span-EmailAddress").addClass("redBG");
				$("#span-EmailAddress2").addClass("redBG");
				$("#span-EmailAddress").html("* Email Address does not match.");
				$("#span-EmailAddress2").html("* Email Address does not match.");
				errorCount++;
			}
		
		}
		
		//username
		if($("#txtScreenName").val().length < 6)
		{
			//$("#span-UserName").css("color", "#E5D779");
			$("#span-UserName").removeClass('hidden-settings');
			$("#span-UserName").html("* Your screen name must be at least six characters long.");
			//return false;
			errorCount++;
		}
		if($("#txtScreenName").val() == "")
		{
			//$("#span-UserName").css("color", "#E5D779");
			$("#span-UserName").removeClass('hidden-settings');
			$("#span-UserName").html("* Please type in your desired screen name / Choose an alternative from the list when it's already taken");
			//return false;
			errorCount++;
		}
		
		
		//perform checking only if the email address is valid
		// if(errorInEmailField == false)
		// {
			if(validateScreenName($("#txtScreenName").val()) == false)
			{
				//return false;
				errorCount++;
			}
			else //returned true
			{
				$("span-UserName").css("color", "#0F0");
				
				resultText = "";
				//$("#span-UserName").html(resultText);
				//$("#span-UserName").removeClass('hidden-settings');
				$("#span-UserName").addClass("yellowBG");
				$("#span-UserName").html(resultText);
			}
		// } 
		
		//for the sake of checking the passwords upon submission of all forms...
		//registerAccount();
		
			
		//country
		if($("#cmbCountry").val() == -1)
		{
			//$("#span-Country").css("color", "#E5D779");
			$("#span-Country").removeClass('hidden-settings');
			$("#span-Country").html("Please select country from the list.");
			errorCount++;
			//return false;
		}
		
		if(errorCount > 0)
			return false
		else
			return true;
	}
	
	//email address is separated because it has checking to the database
	else if(form_name == "EmailAddress")
	{
		if($("#txtEmail").val() != "") //only perform validation if the email field is not empty
		{
			//prevent + characters
			if($("#txtEmail").val().indexOf("+") != -1)
			{
				$("#span-EmailAddress").removeClass("hidden-settings");
				$("#span-EmailAddress").addClass("redBG");
				$("#span-EmailAddress").html("* Please type a valid email address format.");
				
				return false;
			}
			
			emailValidated = validateEmailPattern($("#txtEmail").val());		
			
			if(emailValidated) //performs testing only if the email format is valid
			{
				return validateEmailAddress();
			}
			else //email is format is not valid
			{
				$("#span-EmailAddress").removeClass('hidden-settings');
				$("#span-EmailAddress").addClass("redBG");
				//$("#span-EmailAddress").css("color", "#E5D779");
				$("#span-EmailAddress").html("* Please supply a valid email format on the email address field.");
				return false;
			}
		}	
		
		$("#span-EmailAddress").addClass('hidden-settings');
		
		return true;
	}
	
	//retype email address
	else if(form_name == "EmailAddress2")
	{
		$("#span-EmailAddress2").addClass('hidden-settings');
		
		if($("#txtEmail").val() != "" && $("#txtEmail").val() != $("#txtEmail2").val())
		{
			$("#span-EmailAddress2").removeClass('hidden-settings');
			$("#span-EmailAddress2").addClass("redBG");
			$("#span-EmailAddress2").html("* Email addresses must be the same.");
			return false;
		}
		
		//emailValidated = validateEmailPattern($("#txtEmail2").val());		
		/*
		if(!emailValidated) //performs testing only if the email format is valid
		{
			$("#span-EmailAddress2").removeClass('hidden-settings');
			$("#span-EmailAddress2").addClass("redBG");
			$("#span-EmailAddress2").html("* Please supply a valid email format on the email address field.");
			return false;
		}
		*/
		$("#span-EmailAddress2").addClass('hidden-settings'); //hide if there's no error at all
		
		return true;
	}
		
	else if (form_name == "UserName") //username validation
	{
		//validate the screen name
		//if(validateScreenName($("#txtScreenName").val()) == false)
		//	return false;
		$("#span-" + form_name).addClass('hidden-settings');
		/*
		if($("#txtScreenName").val() == "")
		{
			$("#span-" + form_name).css("color", "#E5D779");
			$("#span-" + form_name).html("* Please type in your desired screen name / Choose an alternative from the list when it's already taken");
			return false;
		}
		*/
		//if the username has spaces 
		if($("#txtScreenName").val().indexOf(" ") != -1)
		{
			$("#span-UserName").removeClass("hidden-settings");
			$("#span-UserName").addClass("redBG");
			$("#span-UserName").html("* Screen name cannot contain spaces.");
			return false;
		}
		
		if($("#txtScreenName").val().length < 6)
		{
			$("#span-UserName").removeClass("hidden-settings");
			$("#span-UserName").addClass("redBG");
			//$("#span-" + form_name).css("color", "#E5D779");
			$("#span-" + form_name).html("* Your screen name must be at least six characters long.");
			return false;
		}
		
		if(validateScreenName($("#txtScreenName").val())  == false)
		{
			//$("#span-UserName").removeClass("hidden-settings");
			//$("#span-UserName").addClass("redBG");
			//$("#span-UserName").css("color", "#E5D779");
			//$("#span-UserName").html("Screen name is taken.");
			return false;
		}
		/*
		else //returned true
		{
			$("#span-" + form_name).css("color", "#0F0");
			resultText = "* Screen name is available";
				
			//$("#span-" + form_name).html(resultText);
			$("#span-" + form_name).html('');
		}
		*/
			
		return true;
	}
	
	else if (form_name == "password")
	{
		return validatePasswords();
	}
}
//validation functions end

//REGISTRATION START
function registerAccount() {
	setSubmitStatus( 0 );
	//var fullName = $("#txtFName").val() + " " + $("#txtLName").val();
	var fullName = $("#txtFName").val();
	var emailaddress = urlencode($("#txtEmail").val());
	
	$.ajax({
		type : 'POST',
		url : 'register/registrationManager.php',
		data : {
		   method: "signup",
		   screenName: $("#txtScreenName").val(),
		   password: $("#txtPassword").val(),
		   fullName: fullName,
		   emailAddress: emailaddress,
		   countryCode: $("#cmbCountry").val()
		},
		success : function( result ) {
			var action;

			//knowing that the values are valid, it will be redirected to another page.
			if ( result > 0 ) {	
				$("#span-UserName").addClass('hidden-settings');
				$("#hdn-id").val(result);
				
				if(v321MeetFlag)
					action = "../registrationSuccessful.php?reg=broadcaster";
				else
					action = "../registrationSuccessful.php";
				
				$("#form-registration").attr("action", action);
				$("#form-registration").trigger("submit");
			} else if ( result.indexOf( 'BULK' ) > -1 ) {
				var tempVal = result.split( ',' );
				$('#xsusername').val( $('#txtEmail').val() );
				$('#xspassword').val( $("#txtPassword").val() );
				
				action = '../buy.php?key=' + tempVal[1];
				
				$("#form-registration").attr("action", action);
				$("#form-registration").trigger("submit");
			} else { 
				$("#span-Password").removeClass('hidden-settings');
				$("#span-Password").text(result);
			}
			
			setSubmitStatus( 1 );
		},
		error: function ( xhr, status, error ) {
			setSubmitStatus( 1 );
			alert( 'The server is currently busy. Please try again later.' );
		}
	});
	
	// $.post("registrationManager.php", {
		   // method: "signup",
		   // screenName: $("#txtScreenName").val(),
		   // password: $("#txtPassword").val(),
		   // fullName: fullName,
		   // emailAddress: emailaddress,
		   // //emailAddress: $("#txtEmail").val(),
		   // countryCode: $("#cmbCountry").val()
		// },
		   
		// function(result)
		// {
			// var action;
			// //knowing that the values are valid, it will be redirected to another page.
			// if(result > 0)
			// {	
				// $("#span-UserName").addClass('hidden-settings');
				// $("#hdn-id").val(result);
				
				// if(v321MeetFlag)
					// action = "../registrationSuccessful.php?reg=broadcaster";
				// else
					// action = "../registrationSuccessful.php";
				
				// $("#form-registration").attr("action", action);
				// $("#form-registration").trigger("submit");
			// }
			// else
			// { 
				// $("#span-Password").removeClass('hidden-settings');
				// $("#span-Password").text(result);
			// }
			
			// setSubmitStatus( 1 );
			/*
			//knowing that the values are valid, it will be redirected to another page.
			if(result > 0)
			{
				$("#hdn-id").val(result);
				if(validateEMailResult == 1)
					$("#form-registration").attr("action", "registrationSuccessful.php?reg=broadcaster");
				$("#form-registration").trigger("submit");
			}
			else
			{ 
				$("#span-Password").text(result);
			}
			*/
		// }
	// );
}

function setSubmitStatus( enable ) { 
	if ( enable ) { 
		$("#registerLoader").hide();
		$("#btn-register").attr("disabled", "");
		isProcessing = false;
	} else {
		$("#registerLoader").show();
		$("#btn-register").attr("disabled", "disabled");
		isProcessing = true;
	}
}

function validateOwn3dAccount() {
	setSubmitStatus( 0 );
	$.post("validateOwn3d.php", {
		   username: $("#txtOwn3dUsername").val(),
		   password: $("#txtOwn3dPassword").val()
		},
		   
		function(result) {
			if ( result == "1" ) { //login successful
				//check for the betasignup table first
				//proceed with registration
				
				//var fullName = $("#txtFName").val() + " " + $("#txtLName").val();
				var fullName = $("#txtFName").val();
				
				var arrNames = $("#txtFName").val().toLowerCase().split(" ");
				
				var fname = arrNames[0];
				
				if(arrNames.length > 1)
					var lname = arrNames[arrNames.length-1];
				else
					var lname = '';
	
				$.post( "register/registrationManager.php", {
					   method: "own3dsignup",
					   fName: fname, 
					   lName: lname,
					   screenName: $("#txtScreenName").val(),
					   password: $("#txtPassword").val(),
					   fullName: fullName,
					   emailAddress: $("#txtEmail").val(),
					   countryCode: $("#cmbCountry").val()
					},
					
					function( result ) {
						// Check if returned result is a valid integer -- Added by MaCa 2011.04.18
						var validResult = parseInt(result);
						if ( validResult > 0 || result == 'BULK' ) { 
							//knowing that the values are valid, it will be redirected to another page.
							if(result != "USERNAME_TAKEN" || result != "EMAIL_ADDRESS_TAKEN")
							{
								window.location='own3dsuccessful.php?name=' + fullName + '&id=' + result;
							}
						} else { 
							alert(result);
							
							return false;
						}
					}
				);
			} else {
				// alert(result);
				// alert("Own3d authentication failed.");
				// login failed
				alert( result );
			}
			
			setSubmitStatus( 1 );
		}
	);
}

function validateJustinTVAccount() {
	setSubmitStatus( 0 );
	
	$.ajax({
		type: 'POST',
		url: 'validateJustinTV.php',
		data: {
				username : $('#txtJustinTVUsername').val(),
				password : $('#txtJustinTVPassword').val()
			},
		success: function( data ) {
			if ( data == '1' ) {
				var fullName = $('#txtFName').val();
				var arrNames = $('#txtFName').val().toLowerCase().split( " " );
				var fname = arrNames[0];
				
				if ( arrNames.length > 1 ) {
					var lname = arrNames[arrNames.length - 1];
				} else {
					var lname = '';
				}
				
				$.ajax({
					type: 'POST',
					url: 'register/registrationManager.php',
					data: {
							method : "justintvsignup",
							fName : fname, 
							lName : lname,
							screenName : $("#txtScreenName").val(),
							password : $("#txtPassword").val(),
							password : $("#txtPassword").val(),
							fullName : fullName,
							emailAddress : $("#txtEmail").val(),
							countryCode : $("#cmbCountry").val()
						},
					success: function( data ) {
						setSubmitStatus( 1 );
						
						var validResult = parseInt( data );
						if ( validResult > 0 ) { 
							if( data != "USERNAME_TAKEN" || data != "EMAIL_ADDRESS_TAKEN" ) {
								window.location='JustinTVSuccessful.php?name=' + fullName + '&id=' + data;
							}
						} else { 
							alert( data );
						}
					},
					error: function ( xhr, status, error ) {
						setSubmitStatus( 1 );
						alert( 'The server is currently busy. Please try again later.' );
					}
				});
			} else {
				setSubmitStatus( 1 );
				alert( 'Invalid Justin TV credentials.' );
			}
		}
	});
	
	// $.post("validateJustinTV.php", {
		   // username: $("#txtJustinTVUsername").val(),
		   // password: $("#txtJustinTVPassword").val()
		// },
		// function( result ) {
			// if ( result == "1" ) {
				// //check for the betasignup table first
				// //proceed with registration
				
				// //var fullName = $("#txtFName").val() + " " + $("#txtLName").val();
				// var fullName = $("#txtFName").val();
				// var arrNames = $("#txtFName").val().toLowerCase().split(" ");
				// var fname = arrNames[0];
				
				// if ( arrNames.length > 1 ) {
					// var lname = arrNames[arrNames.length-1];
				// } else {
					// var lname = '';
				// }
	
				// $.post("registrationManager.php", {
					   // method: "justintvsignup",
					   // fName: fname, 
					   // lName: lname,
					   // screenName: $("#txtScreenName").val(),
					   // password: $("#txtPassword").val(),
					   // password: $("#txtPassword").val(),
					   // fullName: fullName,
					   // emailAddress: $("#txtEmail").val(),
					   // countryCode: $("#cmbCountry").val()
					// },
					
					// function( result ) {
						// // Check if returned result is a valid integer -- Added by MaCa 2011.04.18
						// var validResult = parseInt(result);
						// if ( validResult > 0 ) { 
							// //knowing that the values are valid, it will be redirected to another page.
							// if(result != "USERNAME_TAKEN" || result != "EMAIL_ADDRESS_TAKEN")
							// {
								// window.location='JustinTVSuccessful.php?name=' + fullName + '&id=' + result;
							// }
						// } else { 
							// alert(result);
							
							// return false;
						// }
					// }
				// );
			// } else {
				// alert( result );
			// }
			// setSubmitStatus( 1 );
		// }
	// );
}

//REGISTRATION END

function toggleFlag(form_name, value)
{
	if(form_name == "FName")
		invalidFNameFlag = value;
	/*
	else if (form_name == "LName")
		invalidLNameFlag = value;
	*/
}

function validateNames(elementValue, form_name)
{	
	$("#span-" + form_name).addClass("hidden-settings");
	
	
	var errorMsg = "* Please type in your ";
	
	if(form_name == "FName")
		errorMsg += "First";
	else
		errorMsg += "Last";
	
	errorMsg += " Name.";
	

	//if there is no value of course
	if(elementValue.length<=0)
	{
		//$("#span-" + form_name).css("color", "#E5D779");
		//$("#span-" + form_name).html(errorMsg);
		return false;
	}
	
	/*
	//check if the name is numeric
	if(!isNaN(parseInt(elementValue)))
	{
		//$("#span-" + form_name).css("color", "#E5D779");
		$("#span-" + form_name).removeClass("hidden-settings");
		$("#span-" + form_name).html("* Only letters, spaces and hyphens are allowed. Support for other character sets are in the works.");
		return false;
	}
	*/
	
	if(validateNamePattern(elementValue))
	{
		//$("#span-" + form_name).css("color", "#E5D779");
		$("#span-" + form_name).removeClass("hidden-settings");
		$("#span-" + form_name).html("* Only letters, spaces and hyphens are allowed. Support for other character sets are in the works.");
			
		toggleFlag(form_name, true); //sets the boolean flag value to true
		
		return false;
	}
	else
	{	
		toggleFlag(form_name, false);
		
		//clear the span
		$("#span-" + form_name).html("");
	}
	
	//extended validations; first character should not have a certain character.
	if(elementValue.substr(0,1) == "-" || elementValue.substr(0,1) == ".")
	{
		//$("#span-" + form_name).css("color", "#E5D779");
		$("#span-" + form_name).removeClass("hidden-settings");
		$("#span-" + form_name).html("* Only letters are allowed as the first character in this field.");
		
		toggleFlag(form_name, true);
		return false;
	}
	else
	{
		toggleFlag(form_name, false);
		//clear the span
		$("#span-" + form_name).html("");
	}
	
	if(elementValue.substr(elementValue.length-1,1) == "-" || elementValue.substr(elementValue.length-1,1) == ".")
	{
		$("#span-" + form_name).removeClass("hidden-settings");
		$("#span-" + form_name).html("Only letters allowed as the first character in this field.");
		toggleFlag(form_name, true);
		return false;
	}
	else
	{
		toggleFlag(form_name, false);
		//clear the span
		$("#span-" + form_name).html("");
	}
	
	if(elementValue.substr(elementValue.length-1,1) == "-" || elementValue.substr(elementValue.length-1,1) == ".")
	{
		$("#span-" + form_name).html("Only letters allowed as the first character in this field.");
		toggleFlag(form_name, true);
		return false;
	}
	else
	{
		toggleFlag(form_name, false);
		//clear the span
		$("#span-" + form_name).html("");
	}
	
	
	
	elementValue=elementValue.replace(/^\s+|\s+$/g, '');
	elementValue=elementValue.replace(/\s+/g,' ');
	
	$("#txt" + form_name).val(elementValue);
	
	return true;
}

function validatePasswords()
{
	var errNo = 0;
	
	//validate passwords
	var pass1 = $("#txtPassword").val();
	var pass2 = $("#txtPassword2").val();
	
	$("#span-Password").removeClass('hidden-settings');
	$("#span-RetypePassword").removeClass('hidden-settings');
	
	if(pass1 == "" && pass2 == "")
	{
		$("#span-Password").removeClass('hidden-settings');
		$("#span-Password").html("* Please type in a password");
		$("#span-RetypePassword").html("* Please retype your password here");
		
		errNo++;
	}
	else
	{
		//PASSWORD VALIDATION
		if(pass1 == "")
		{
			$("#span-Password").removeClass('hidden-settings');
			$("#span-Password").html("* Please type in a password");
			errNo++;
		}
		else
		{
			
			$("#span-Password").html("");
			
			//less than 6 characters
			if(pass1.length < 6)
			{
				$("#span-Password").removeClass('hidden-settings');
				$("#span-Password").html("* Your password must be 6-50 characters long.");
				errNo++;
			}
			else
			{
				$("#span-Password").html("");
				
				//invalid password format
				if(validatePasswordEntry(pass1) == false)
				{
					$("#span-Password").removeClass('hidden-settings');
					$("#span-Password").html("* Only letters, spaces and hyphens are allowed. Support for other character sets are in the works.");
					errNo++;
				}
				else
				{					
					if($("#txtFName").val() != "" && matchNamesWithPassword(pass1, "Password") == false)
						errNo++;
					else
					{
						//check the password if it has the 'PASSWORD' value. 
						if(pass1.toLowerCase() == "password" || pass1.toLowerCase() == "xsplit")
						{
							$("#span-Password").removeClass('hidden-settings');
							$("#span-Password").html("* The password supplied is not allowed.");
							errNo++;
						}
						else
						{
							//password is the same as firstname
							if(pass1.toLowerCase() == $("#txtFName").val().toLowerCase())
							{
								$("#span-Password").removeClass('hidden-settings');
								$("#span-Password").html("* First name and password are the same (no matter if different case). Please supply a valid password.");
								errNo++;
							}
							/*
							else
							{
								//password is the same as lastname
								if(pass1.toLowerCase() == $("#txtLName").val().toLowerCase())
								{
									$("#span-Password").html("* Last name and password are the same (no matter if different case). Please supply a valid password.");
									errNo++;
								}
								else
								{
									//password is the same as screen name
									if(pass1.toLowerCase() == $("#txtScreenName").val().toLowerCase())
									{
										$("#span-Password").html("* Display name and password are the same (no matter if different case). Please supply a valid password.");
										errNo++;
									}
								}
							}
							*/
						}
					}
				}
				
			}
		}
		
		//PASSWORD 2 VALIDATION
		if(pass2 == "")
		{
			$("#span-RetypePassword").removeClass("hidden-settings");
			$("#span-RetypePassword").html("* Please retype your password here");
			errNo++;
		}
		else
		{
			$("#span-RetypePassword").html("");
			
			//less than 6 characters
			if(pass2.length < 6)
			{
				$("#span-RetypePassword").removeClass("hidden-settings");
				$("#span-RetypePassword").html("* Your retype password must be 6-50 characters long.");
				errNo++;
			}
			else
			{
				$("#span-RetypePassword").html("");
				
				//invalid passwords
				if(validatePasswordEntry(pass2) == false)
				{
					$("#span-RetypePassword").removeClass("hidden-settings");
					$("#span-RetypePassword").html("* Only letters, spaces and hyphens are allowed. Support for other character sets are in the works.");
					errNo++;
				}
				else
				{
					//check if retype password has subset of fullname
					if($("#txtFName").val() != "" && matchNamesWithPassword(pass2, "RetypePassword") == false)
						errNo++;
					else
					{
						//check the retype password if it has the 'PASSWORD' value. 
						if(pass2.toLowerCase() == "password" || pass2.toLowerCase() == "xsplit" )
						{
							$("#span-RetypePassword").removeClass("hidden-settings");
							$("#span-RetypePassword").html("* The retype password supplied is not allowed.");
							errNo++;
						}
						else
						{
							//password = first name checking
							if(pass2.toLowerCase() == $("#txtFName").val().toLowerCase())
							{
								$("#span-RetypePassword").removeClass("hidden-settings");
								$("#span-RetypePassword").html("* First name and retype password are the same (no matter if different case). Please supply a valid password.");
								errNo++;
							}
							/*
							else
							{
								//password = last name checking
								if(pass2.toLowerCase() == $("#txtLName").val().toLowerCase())
								{
									$("#span-RetypePassword").html("* Last name and retype password are the same (no matter if different case). Please supply a valid password.");
									errNo++;
								}
								else
								{
									if(pass2.toLowerCase() == $("#txtScreenName").val().toLowerCase())
									{
										$("#span-RetypePassword").html("* Display name and retype password are the same (no matter if different case). Please supply a valid password.");
										errNo++;
									}
								}
							}
							*/
						}
					}
				}
			}
		}
		
	}
	
	if(errNo > 0)
		return false;
			
	if (pass1 != pass2)
	{
		$("#span-Password").removeClass("hidden-settings");
		$("#span-RetypePassword").removeClass("hidden-settings");
		$("#span-Password").html("* The supplied passwords did not match");
		$("#span-RetypePassword").html("* The supplied passwords did not match");
		return false;
	}
	
	//if the code comes here then the password string is very clean! hide the passwords
	$("#span-Password").addClass("hidden-settings");
	$("#span-RetypePassword").addClass("hidden-settings");
	
	return true;	
	
}

function validateOwn3dPassword()
{
	var errNo = 0;
	var pass = $("#txtOwn3dPassword").val();
	
	$("#span-Own3dPassword").addClass("hidden-settings");
	
	if(pass == "")
	{
		$("#span-Own3dPassword").removeClass("hidden-settings");
		$("#span-Own3dPassword").html("* Please type your Own3d password here");
		errNo++;
	}
	else
	{
		$("#span-Own3dPassword").html("");
		
		//less than 6 characters
		if(pass.length < 6)
		{
			$("#span-Own3dPassword").removeClass("hidden-settings");
			$("#span-Own3dPassword").html("* Your Own3d password must be 6-50 characters long.");
			errNo++;
		}
	/*	else
		{
			$("#span-Own3dPassword").html("");
			
			//invalid passwords
			if(validatePasswordEntry(pass) == false)
			{
				$("#span-Own3dPassword").html("* Only letters, spaces and hyphens are allowed. Support for other character sets are in the works.");
				errNo++;
			}
			else
			{
				//check if retype password has subset of fullname
				if(matchNamesWithPassword(pass, "Own3dPassword") == false)
					errNo++;
				else
				{
					//check the retype password if it has the 'PASSWORD' value. 
					if(pass.toLowerCase() == "password" || pass.toLowerCase() == "xsplit" )
					{
						$("#span-Own3dPassword").html("* The Own3d password supplied is not allowed.");
						errNo++;
					}
					else
					{
						//password = first name checking
						if(pass.toLowerCase() == $("#txtFName").val().toLowerCase())
						{
							$("#span-Own3dPassword").html("* First name and Own3d password are the same (no matter if different case). Please supply a valid password.");
							errNo++;
						}
						else
						{
							//password = last name checking
							if(pass.toLowerCase() == $("#txtLName").val().toLowerCase())
							{
								$("#span-Own3dPassword").html("* Last name and Own3d password are the same (no matter if different case). Please supply a valid password.");
								errNo++;
							}
							else
							{
								if(pass.toLowerCase() == $("#txtScreenName").val().toLowerCase())
								{
									$("#span-Own3dPassword").html("* Display name and Own3d password are the same (no matter if different case). Please supply a valid password.");
									errNo++;
								}
							}
						}
					}
				}
			}
		} */
	}
	
	if(errNo > 0)
		return false;
		
	$("#span-Own3dPassword").addClass("hidden-settings");
	return true;
}

function validateJustinTVPassword()
{
	var errNo = 0;
	var pass = $("#txtJustinTVPassword").val();
	
	$("#span-JustinTVPassword").addClass("hidden-settings");
	
	if ( pass == "" ) {
		$("#span-JustinTVPassword").removeClass("hidden-settings");
		$("#span-JustinTVPassword").html("* Please type your JustinTV password here");
		errNo++;
	} else {
		$("#span-JustinTVPassword").html( "" );
		
		//less than 6 characters
		if( pass.length < 6 ) {
			$("#span-JustinTVPassword").removeClass("hidden-settings");
			$("#span-JustinTVPassword").html("* Your JustinTV password must be 6-50 characters long.");
			errNo++;
		}
	}
	
	if ( errNo > 0 )
		return false;
		
	$("#span-JustinTVPassword").addClass("hidden-settings");
	return true;
}

function matchNamesWithPassword(passwordValue, form_type)
{
	//form type is either password or retype password
	//check if password has subset of fullname (first name + last name)
	
	var fName = $("#txtFName").val().toLowerCase();
	var vFLName = $("#txtFName").val().toLowerCase();
	var vLFName = $("#txtFName").val().toLowerCase();
	//var lName = $("#txtLName").val().toLowerCase();
	//var vFLName = (fName + lName).toLowerCase();
	//var vLFName = (lName + fName).toLowerCase();
	
	//remove the spaces
	fName = fName.replace(" ", "");
	//lName = lName.replace(" ", "");
	vFLName = vFLName.replace(" ", "");
	vLFName = vLFName.replace(" ", "");
	
	if(passwordValue.toLowerCase().indexOf(vFLName) > -1)
	{
		//remove the matched character
		var vPassword = passwordValue.replace(vFLName, "");
		
		//check the length first if the trimmed value is more than three
		if(vPassword.length > 2)
		{
			//perform another check if a match has been made
			//if(vPassword.toLowerCase().indexOf(fName) > -1 || vPassword.toLowerCase().indexOf(lName) > -1)
			if(vPassword.toLowerCase().indexOf(fName) > -1)
			{
				$("#span-" + form_type).removeClass('hidden-settings');
				$("#span-" + form_type).html("* Password should not contain a subset of user's full name");
				//errNo++;
				return false;
			}
		}
		else
		{
			$("#span-" + form_type).removeClass('hidden-settings');
			//2 characters only excess and fullname was matched; invalid input
			$("#span-" + form_type).html("* Password should not contain a subset of user's full name");
			//errNo++;
			return false;
		}
		
	}
	
	else if(passwordValue.toLowerCase().indexOf(vLFName) > -1)
	{
		//remove the matched character
		var vPassword = passwordValue.replace(vLFName, "");
		
		//check the length first if the trimmed value is more than three
		if(vPassword.length > 2)
		{
			//perform another check if a match has been made
			//if(vPassword.toLowerCase().indexOf(fName) > -1 || vPassword.toLowerCase().indexOf(lName) > -1)
			if(vPassword.toLowerCase().indexOf(fName) > -1)
			{
				$("#span-" + form_type).removeClass('hidden-settings');
				$("#span-" + form_type).html("* Password should not contain a subset of user's full name");
				//errNo++;
				return false;
			}
		}
		else
		{
			//2 characters only excess and fullname was matched; invalid input
			$("#span-" + form_type).removeClass('hidden-settings');
			$("#span-" + form_type).html("* Password should not contain a subset of user's full name");
			return false;
		}
	}
	
	//FIRST NAME VARIANT
	else if(passwordValue.toLowerCase().indexOf(fName) > -1)
	{
		//remove the matched character
		var vPassword = passwordValue.replace(fName, "");
		
		//check the length first if the trimmed value is more than three
		if(vPassword.length > 2)
		{
			//perform another check if a match has been made
			//if(vPassword.toLowerCase().indexOf(fName) > -1 || vPassword.toLowerCase().indexOf(lName) > -1)
			if(vPassword.toLowerCase().indexOf(fName) > -1)
			{
				$("#span-" + form_type).removeClass('hidden-settings');
				$("#span-" + form_type).html("* Password should not contain a subset of user's first name");
				//errNo++;
				return false;
			}
		}
		else
		{
			//2 characters only excess and fullname was matched; invalid input
			$("#span-" + form_type).removeClass('hidden-settings');
			$("#span-" + form_type).html("* Password should not contain a subset of user's first name");
			//errNo++;
			return false;
		}
		
	}
	
	/*
	//LAST NAME VARIANT
	else if(passwordValue.toLowerCase().indexOf(lName) > -1)
	{
		//remove the matched character
		var vPassword = passwordValue.replace(lName, "");
		
		//check the length first if the trimmed value is more than three
		if(vPassword.length > 2)
		{
			//perform another check if a match has been made
			if(vPassword.toLowerCase().indexOf(lName) > -1 || vPassword.toLowerCase().indexOf(lName) > -1 && (lName != ""))
			{
				$("#span-" + form_type).html("* Password should not contain a subset of user's last name");
				//errNo++;
				return false;
			}
		}
		else
		{
			//2 characters only excess and fullname was matched; invalid input
			$("#span-" + form_type).html("* Password should not contain a subset of user's last name");
			return false;
		}
		
	}
	*/
	return true;
}

function validatePasswordEntry(elementValue)
{	
	//var iChars = "!@#$%^&*()+=[]\\\';,/{}|\":<>? ";
	var iChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.-";
	for(var i=0; i<elementValue.length; i++)
	{
		//if(iChars.indexOf(elementValue.charAt(i)) != -1)
		if(iChars.indexOf(elementValue.charAt(i)) == -1)
		{
			return false;
		}
	}
	
	//return if the password is a subset of fullname
	return true;
}

function hideVisibleSuggestionDiv()
{
	if($("#validate-div").attr("class").indexOf("visible-settings") != -1)
	{
		//hide the suggestions div
		$("#validate-div").removeClass("visible-settings");
		$("#validate-div").addClass("hidden-settings");
	}
}

//this encodes specific special characters: equivalent of urlencode function in php
function urlencode (str) {

    var hexStr = function (dec) {

        return '%' + (dec < 16 ? '0' : '') + dec.toString(16).toUpperCase();

    };

    var ret = '',

            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead

    str = (str+'').toString();



    for (var i = 0, dl = str.length; i < dl; i++) {

        var ch = str.charAt(i);

        if (unreserved.test(ch)) {

            ret += ch;

        }

        else {

            var code = str.charCodeAt(i);

            if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters); https://developer.mozilla.org/index.php?title=en/Core_JavaScript_1.5_Reference/Global_Objects/String/charCodeAt

                ret += ((code - 0xD800) * 0x400) + (str.charCodeAt(i+1) - 0xDC00) + 0x10000;

                i++; // skip the next one as we just retrieved it as a low surrogate

            }

            // We never come across a low surrogate because we skip them, unless invalid

            // Reserved assumed to be in UTF-8, as in PHP

            else if (code === 32) {

                ret += '+'; // %20 in rawurlencode

            }

            else if (code < 128) { // 1 byte

                ret += hexStr(code);

            }

            else if (code >= 128 && code < 2048) { // 2 bytes

                ret += hexStr((code >> 6) | 0xC0);

                ret += hexStr((code & 0x3F) | 0x80);

            }

            else if (code >= 2048) { // 3 bytes (code < 65536)

                ret += hexStr((code >> 12) | 0xE0);

                ret += hexStr(((code >> 6) & 0x3F) | 0x80);

                ret += hexStr((code & 0x3F) | 0x80);

            }

        }

    }

    return ret;

}
