var lastCheckedPassword = undefined;
var lastCheckedPasswordPoints = 0;

function updatePassRating(password, totallyForbiddenValue)
{
	if ( lastCheckedPassword == password ) return lastCheckedPasswordPoints;

	$('passStatusImg').setStyle("display", "none");
	$('passval').setStyle("border-color","#EECC00");

	if ( password == '' )
	{
		$('passStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('passStatusImg').setStyle('display','inline');
		$('passval').setStyle('border-color',"#FF0000");
		return 0;
	}

	var points = PWSecurity(password, totallyForbiddenValue);

	if ( points < 20 )
	{
		$('passStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('passStatusImg').setStyle('display','inline');
		$('passval').setStyle('border-color',"#FF0000");

		showSignupPopup.attempt( [ undefined, _("Very weak security.") ], $('passval') );
	}
	else if ( points < 40 )
	{
		$('passStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('passStatusImg').setStyle('display','inline');
		$('passval').setStyle('border-color',"#FF0000");

		showSignupPopup.attempt( [ undefined, _("Weak security.") ], $('passval') );
	}
	else if ( points < 50 )
	{
		$('passStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
		$('passStatusImg').setStyle('display','inline');
		$('passval').setStyle('border-color',"#00DD00");

		showSignupPopup.attempt( [ undefined, _("Good security.") ], $('passval') );
	}
	else
	{
		$('passStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
		$('passStatusImg').setStyle('display','inline');
		$('passval').setStyle('border-color',"#00DD00");

		showSignupPopup.attempt( [ undefined, _("Strong security.") ], $('passval') );
	}

	lastCheckedPassword = password;
	lastCheckedPasswordPoints = points;

	return points;
}

function echeck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }

		 if (str.indexOf(" ")!=-1){
		    return false
		 }

		if ( ldot == (lstr - 1)) return false;

 		 return true
	}


function checkPassword()
{
	return ( updatePassRating($('passval').value, $('subLogin').value) >= 40 );
}

function checkSubscriptionForm()
{
	var subForm = document.forms['subscribeForm'];

	var valuesAreCorrect = true;

 	if ( !checkAvailability() )
	{
		$('subLogin').setStyle("border-color","#FF0000");
		valuesAreCorrect = false;
	}

 	if ( !checkEmail() )
	{
		$('subEmail').setStyle("border-color","#FF0000");
		valuesAreCorrect = false;
	}

 	if ( !checkPassword() )
	{
		$('passval').setStyle("border-color","#FF0000");
		valuesAreCorrect = false;
	}

 	if ( !checkSecurityCode() )
	{
		$('securityCode').setStyle("border-color","#FF0000");
		valuesAreCorrect = false;
	}

 	if ( !checkCGV() )
	{
		$('cgv').setStyle("border-color","#FF0000");
		valuesAreCorrect = false;
	}

	return valuesAreCorrect;
}

function handleSignupFormEvents()
{
	$('countryFlagSelect').addEvent( 'focus', showSignupPopup );
	$('countryFlagSelect').addEvent( 'blur', hideSignupPopup );

	$('subEmail').addEvent( 'focus', showSignupPopup );
	$('subEmail').addEvent( 'blur', hideSignupPopup );

	$('subLogin').addEvent( 'focus', showSignupPopup );
	$('subLogin').addEvent( 'blur', hideSignupPopup );

	$('passval').addEvent( 'focus', showSignupPopup );
	$('passval').addEvent( 'blur', hideSignupPopup );

	$('cgv').addEvent('focus', showSignupPopup );
	$('cgv').addEvent('blur', hideSignupPopup );

	$('securityCode').addEvent('focus', showSignupPopup );
	$('securityCode').addEvent('blur', hideSignupPopup );

	if ( $('newsletterYes') )
	{
		$('newsletterYes').addEvent( 'focus', showSignupPopup );
		$('newsletterYes').addEvent( 'blur', hideSignupPopup );
	}
	if ( $('newsletterNo') )
	{
		$('newsletterNo').addEvent('focus', showSignupPopup );
		$('newsletterNo').addEvent( 'blur', hideSignupPopup );
	}
	if ( $('subSponsor') )
	{
		$('subSponsor').addEvent('focus', showSignupPopup );
		$('subSponsor').addEvent( 'blur', hideSignupPopup );
	}
	if ( $('subPromo') )
	{
		$('subPromo').addEvent('focus', showSignupPopup );
		$('subPromo').addEvent( 'blur', hideSignupPopup );
	}

	$('subLogin').addEvent( 'keyup', checkAvailability );
	$('passval').addEvent( 'keyup', callUpdatePassRating  );
	$('subEmail').addEvent( 'keyup', checkEmail  );
	$('subEmail').addEvent( 'blur', checkEmail  );
	$('securityCode').addEvent( 'keyup', checkSecurityCode  );

	$('cgv').addEvent( 'click', function() { checkCGV(); } );
	$('countryFlagSelect').addEvent('change', updateCountryFlag );

	$('countryFlagSelect').focus();

	// Check availability immediatly if coming back to the page
	if ( $('subLogin').value != '' )
	{
		$('cgv').checked = true;
		checkEmail();
		checkCGV();
		checkPassword();
		checkSecurityCode();
		checkAvailability.delay(250);
	}
}

function checkEmail()
{
	$('subEmail').setStyle("border-color","#EECC00");
	$('emailStatusImg').setStyle('display','none');

	if ( $('subEmail').value == '' )
	{
		$('emailStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('emailStatusImg').setStyle( 'display', 'inline' );
		$('subEmail').setStyle('border-color',"#FF0000");
		return false;
	}

	if ( echeck( $('subEmail').value) )
	{
		$('emailStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
		$('emailStatusImg').setStyle('display','inline');
		$('subEmail').setStyle('border-color',"#00DD00");
		return true;
	}
	else
	{
		$('emailStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('emailStatusImg').setStyle('display','inline');
		$('subEmail').setStyle('border-color',"#FF0000");
		return false;
	}
}

function checkSecurityCode()
{
	$('securityCode').setStyle("border-color","#EECC00");
	$('securityCodeStatusImg').setStyle('display','none');

	if ( $('securityCode').value == '' )
	{
		$('securityCodeStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('securityCodeStatusImg').setStyle('display','inline');
		$('securityCode').setStyle('border-color',"#FF0000");
		return false;
	}

	if ( $('securityCode').value.length == 5 )
	{
		$('securityCodeStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
		$('securityCodeStatusImg').setStyle('display','inline');
		$('securityCode').setStyle('border-color',"#00DD00");

		return true;
	}
	else
	{
		$('securityCodeStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('securityCodeStatusImg').setStyle('display','inline');
		$('securityCode').setStyle('border-color',"#FF0000");

		return false;
	}
}

function checkCGV()
{
	$('cgvStatusImg').setStyle('display','inline');
	if ( $('cgv').checked )
	{
		$('cgvStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
		return true;
	}
	else
	{
		$('cgvStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		return false;
	}
}

function showSignupPopup( event, forcedPopupContent, forcedFormElement )
{
	if ( !$('signupPopup') )
	{
		var tmpDiv = new Element('div', {
			'styles': {
				'position': 'absolute',
				'border': '2px solid #444444',
				'width': '230px',
				'z-index': 1000,
				'background-color': '#000000',

				'color': '#ffffff',
				'text-align': 'left',
				'padding': '2px'
				},
			'id': 'signupPopup'
			});
		$('pageBody').adopt( tmpDiv );
	}

	var signupPopupContent = undefined;
	var signupPopupExtraLeft = 0;
	if ( $chk(forcedPopupContent) )
	{
		signupPopupContent = forcedPopupContent;
	}
	else if ( this.id == 'subLogin' )
	{
		signupPopupContent = _("Choose your Nickname for the game. You will be able to change it later at will.") + '<br/>' + _("14 characters max, letters, numbers, spaces, _ and - are allowed.");
	}
	else if ( this.id == 'passval' )
	{
		signupPopupContent = _("Choose a password for your account. It's important to keep it secret!") + '<br/>' + _("Do not use something too easy to guess, mix letters and numbers until you've got the green light.");
	}
	else if ( this.id == 'subEmail' )
	{
		signupPopupContent = _("Enter a valid email address. Don't worry, you'll be able to play right away, no email confirmation is required.");
	}
	else if ( this.id == 'countryFlagSelect' )
	{
		signupPopupContent = _("Select your country in the list, it will be next to your Nickname everywhere: profile, rankings, tournaments...") + '<br/>' + _("Help your country become number one on Urban Rivals!");
	}
	else if ( this.id == 'newsletterYes' || this.id == 'newsletterNo' )
	{
		signupPopupContent = _("Click yes if you want to stay in touch with Urban-Rivals by email, we'll send you 1 email every 2 weeks.") + '<br/>' + _("You can change always your mind later. Obviously, your email address will never be shared with anyone, we HATE spam as much as you do.");
		signupPopupExtraLeft = 50;
	}
	else if ( this.id == 'subSponsor' )
	{
		signupPopupContent = _("If a friend has sent you to Urban-Rivals, you can type-in his/her nickname or player-id in this field.") + '<br/>' + _("If you have discovered the game by yourself (well done!), just leave the field empty.");
	}
	else if ( this.id == 'subPromo' )
	{
		signupPopupContent = _("If you have a promotion code for extra credits, type it in this field, you'll receive your credits immediatly on registration.") + '<br/>' + _("Otherwise, just leave the field empty.");
	}
	else if ( this.id == 'securityCode' )
	{
		signupPopupContent = _("We need to make sure that you are a human beeing.") + '<br/>' + _("Please enter in this field the 5 digits number on the right, that would be good enough for us. You will be playing in less than a minute!");
		signupPopupExtraLeft = 135;
	}

	if ( $chk(signupPopupContent) )
	{
		if ( $chk(hideSignupPopupDelay) ) $clear(hideSignupPopupDelay);
		
		var top = this.getTop();
		var left = this.getLeft();
		
		if ( top < 0 ) top = 230;
		
		$('signupPopup').set('html',  signupPopupContent );
		$('signupPopup').setStyle('display', 'block');
		$('signupPopup').setStyle('top', (top - ($('signupPopup').getCoordinates().height - this.getCoordinates().height) / 2) + 'px' );
		$('signupPopup').setStyle('left', (left + this.getCoordinates().width + 30) + signupPopupExtraLeft + 'px');
	}
	else
	{
		$('signupPopup').setStyle('display','none');
	}

}

var hideSignupPopupDelay = undefined;
function hideSignupPopup()
{
	if ( $chk(hideSignupPopupDelay) ) $clear(hideSignupPopupDelay);
	hideSignupPopupDelay = showSignupPopup.pass( [undefined, ''] ).delay(250);
}


var checkLoginTimer = undefined;
var lastCheckedPseudo = undefined;
var lastCheckedPseudoResult = false;

function checkAvailability()
{
	if ( $chk(checkLoginTimer) ) $clear(checkLoginTimer);

	if ( lastCheckedPseudo == $('subLogin').value ) return lastCheckedPseudoResult;

	if ( $('pseudoStatusImg').getStyle('display') != 'inline' || $('pseudoStatusImg').getProperty('src') != (staticsHost + '/img/loading.gif') )
	{
		$('pseudoStatusImg').setProperty('src', staticsHost + '/img/loading.gif');
		$('pseudoStatusImg').setStyle('display','inline');
		//$('subLogin').setStyle("border-color","#EECC00");
	}

	if ( $('subLogin').value == '' )
	{
		$('pseudoStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
		$('pseudoStatusImg').setStyle('display','inline');
		$('subLogin').setStyle('border-color',"#FF0000");
		lastCheckedPseudo = undefined;
		lastCheckedPseudoResult = false;
		return false;
	}
	else
	{
		var url = '/ajax/check_availability.php';

		var myAjax = new Request({
			'url': url,
			'data': { pseudo: $('subLogin').value },
			'onComplete': function(responseText) {

				var pseudoCheckResponse = JSON.decode(responseText);

				if ( pseudoCheckResponse.error )
				{
					$('pseudoStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/cross.gif');
					$('pseudoStatusImg').setStyle('display','inline');
					$('subLogin').setStyle('border-color',"#FF0000");

					if ( pseudoCheckResponse.error == 'nickname_in_use' )
					{
						var msg = _("Sorry, the nickname you want to use is already used by somebody else.");
						if ( pseudoCheckResponse.suggestions )
						{
							msg += "<br/> " + _("You can use one of thoses availables nicknames: ") + " ";

							for ( var i = 0;  i < pseudoCheckResponse.suggestions.length; ++i )
							{
								if ( i != 0 ) msg += ", ";
								msg += '<a href="javascript:suggestNickname(\'' + pseudoCheckResponse.suggestions[i] + '\');">' + pseudoCheckResponse.suggestions[i] + '</a>';
							}
						}

						showSignupPopup.attempt( [ undefined, msg ], $('subLogin') );

					}
					else showSignupPopup.attempt( [ undefined, _("Sorry, you can use only letters, numbers, spaces, _ and - in your Nickname. Accents are not authorised.") ], $('subLogin') );

					lastCheckedPseudoResult = false;
				}
				else
				{
					$('pseudoStatusImg').setProperty('src', staticsHost + '/img/v2/icons/12x11/check.gif');
					$('pseudoStatusImg').setStyle('display','inline');
					$('subLogin').setStyle("border-color","#00DD00");
					lastCheckedPseudoResult = true;

					showSignupPopup.attempt( [ undefined, pseudoCheckResponse.pseudo + " " + _("is available !") ], $('subLogin') );
				}

				lastCheckedPseudo = pseudoCheckResponse.pseudo;
			}
		});


		checkLoginTimer = function() { myAjax.send(); checkLoginTimer = undefined; }.delay(500);
	}
}

function callUpdatePassRating()
{
	updatePassRating( $('passval').value, $('subLogin').value );
}

function submitSubscribeForm()
{
	if ( checkSubscriptionForm() )
	{
		var div = new Element('div',
			{
				styles: { 'text-align': 'center', 'font-weight': 'bold'}
		});
		div.set('html', "<img src=/img/loading.gif align=absmiddle /> " + _("Sending.."));
		div.replaces( $('signupLinkDiv') );

		var subFunc = function()
		{
			$('subscribeForm').submit();
		};

		subFunc.delay(250);
	}
}

function updateCountryFlag()
{
	getFlagSprite($('countryFlagSelect').value, 24, false, false, 'signupFlagImg').replaces( $('signupFlagImg') );
}

function suggestNickname(nick)
{
	$('subLogin').value = nick;
	lastCheckedPseudo = undefined;
	lastCheckedResult = false;
	checkAvailability();
}

/* Previously using behaviour */
document.addEvent('domready', function(){
	$('signupTable').getElements('input').addEvents({
		'focus': function() {
			if ( this.getProperty('type') == 'button' || this.getProperty('type') == 'submit' ) return;
			var parentId = this.getParent().getParent().id;
			this.myColorFx = new Fx.Tween(parentId, {"property": "background-color", duration: 500, "link": "cancel"});
			this.myColorFx.start('#FFFFDD', '#FFEB08'); //fade from black to red
		},
		'blur': function() {
			if ( this.getProperty('type') == 'button' || this.getProperty('type') == 'submit' ) return;
			this.myColorFx.cancel();
			this.getParent().getParent().setStyle('background-color', 'transparent');
		}
	});

	$('signupTable').getElements('select').addEvents({
		'focus': function() {
			var parentId = this.getParent().getParent().id;
			this.myColorFx = new Fx.Tween(parentId, {"property": "background-color", duration: 500, "link": "cancel"});
			this.myColorFx.start('#FFFFDD', '#FFEB08'); //fade from black to red
		},
		'blur': function() {
			if( this.myColorFx )
			{
				this.myColorFx.cancel();
			}
			this.getParent().getParent().setStyle('background-color', 'transparent');
		}
	});
});
