var current_step = 0;

// New inline register
function inlineRegister()
{
	var loader = new Element('div', {
			'id': 'registerLoader',
			'styles': {
				'position': 'absolute',
				'top': '50%',
				'left': '45%',
				'z-index': URBAN.page.toolbox.getNextHighestZindex()
			}
	}).set('html', '<h2 style="text-align: center; color: #fff"><img src="'+staticsHost+'/img/loading_grey.gif" alt="loading" /> '+ _("Loading, please wait...") +'</h2>');
	$E('body').adopt(loader);

	var url = "/player/inline_register.php";

	var options = {
		'url': url,
		'data': 'xhr=true',
		'onComplete': function(datas) {
			$E('body').injectHTML(datas);
			showRegister();
			}
		};

	var ajaxCall = new Request(options);
	ajaxCall.send();

	return;
}

function slide_next(element)
{
	if( !URBAN.page.toolbox.isDisabled( element ) )
	{
		slide_to( current_step +1 );
	}
}

function slide_previous(element)
{
	if( !URBAN.page.toolbox.isDisabled( element ) )
	{
		slide_to( current_step - 1 );
	}
}

function slide_to(step)
{
	var slides = $('slider').getElements('form.step');

	if( $chk( $(step) ) )
	{
		step = slides.indexOf( $(step) );
	}

	slides[current_step].getElements( formElements.join(',') ).forEach(function(element, i){
		if( formElements.indexOf( element.nodeName.toLowerCase() ) >= 0 )
		{
			element.hideTooltip();
		}
	});

	document.getElements('.next').hideTooltip();

	step = (step > (slides.length - 1)) ? 0 : step;
	current_step = step;


	var currentSlide = slides[step];

	currentSlide.setStyle('visibility', 'visible');

	var newLeft = 0 - ( parseInt($('slidingArea').getStyle('width')) * step);

	var slide = new Fx.Tween( $('slider'), {
		'onComplete': function(){
			if( $chk(slides[step-1]) )
			{
				slides[step-1].setStyle('visibility', 'hidden');
			}
			window.fireEvent('slideDone');
		}
	})
	slide.start('left', newLeft);

/*
	var scroll = new Fx.Scroll( $('slidingArea'), {
		'transition': Fx.Transitions.Back.easeOut,
		'onComplete': function(){
			if( $chk(slides[step-1]) )
			{
				slides[step-1].setStyle('visibility', 'hidden');
			}
			window.fireEvent('slideDone');
		}
	});
	scroll.toElement( slides[step] );
/**/

}

function focus_to(field)
{
	var form = field;
	while($(form).getParent().get('tag') != 'form')
	{
		form = $(form).getParent();
	}
	slide_to($(form).getParent().getProperty('id'));
	window.removeEvents('slideDone').addEvent('slideDone', function(){
		switch( $(field).get('tag') )
		{
			case 'select':
				$(field).focus();
				break;
			case 'input':
				switch( $(field).getProperty('type') )
				{
					case 'radio':
					case 'checkbox':
						$(field).focus();
						break;
					default:
						$(field).select();
						break;
				}
				break;
		}
		window.removeEvents('slideDone');
	});
}

function check_pseudo_availability(element)
{
	if(element.value != window.previous_new_pseudo && element.value != '')
	{
		element.removeEvents(element.disappearEvent.toString()).addEvent(element.disappearEvent.toString(), element.hideTooltip);
		element.removeEvents(element.appearEvent.toString()).addEvent(element.appearEvent.toString(), element.showTooltip);

		var options = {
			'url': '/ajax/check_availability.php',
			'data': { 'pseudo': element.value },
			'onRequest': function()
			{
				$('pseudo_loading').setStyle('visibility', 'visible');
			},
			'onComplete': function(responseDatas)
			{
				window.ajaxCall = false;
				$('pseudo_loading').setStyle('visibility', 'hidden');
				responseDatas = JSON.decode(responseDatas);
				if ( responseDatas.error == 'nickname_in_use' )
				{
					element.removeClass('available');
					var msg = _("Sorry, the nickname you want to use is already used by somebody else.");
					if ( responseDatas.suggestions )
					{
						msg += "<br/> " + _("You can use one of thoses availables nicknames: ") + " ";

						for ( var i = 0;  i < responseDatas.suggestions.length; ++i )
						{
							if ( i != 0 )
							{
								msg += ", ";
							}
							msg += '<a href="" class="pseudo_suggest">' + responseDatas.suggestions[i] + '</a>';
						}
					}
					element.updateTooltipContent(msg);

					element
						.removeEvent(element.disappearEvent.toString(), element.hideTooltip)
						.removeEvent(element.appearEvent.toString(), element.showTooltip);

					$ES('.pseudo_suggest', element.tooltip).forEach(function(link, i){
						link.addEvent('click', function(event){
							new Event(event).stop();
							element.value = this.innerHTML;

							element.addClass('available')
									.fireEvent('change')
									.updateTooltipContent( element.value + ' ' + _("is available !") )
									.addEvent(element.disappearEvent.toString(), element.hideTooltip)
									.addEvent(element.appearEvent.toString(), element.showTooltip)
									.focus();
						})
					});
				}
				else if( responseDatas.error )
				{
					if(responseDatas.error == 'invalid_characters')
					{
						element.updateTooltipContent( element.value + ' ' + _("is not a valid nickname !") );
					}
					element.removeClass('available');
				}
				else
				{
					element.addClass('available')
							.updateTooltipContent( element.value + ' ' + _("is available !") );
				}

				$('first').validateForm();
			}
		};
		window.ajaxCall = new Request(options).send();
	}

	if(element.value.length < 1)
	{
		var message = _("Choose your Nickname for the game. You will be able to change it later at will.");
		message += '<br />';
		message += _("14 characters max, letters, numbers, spaces, _ and - are allowed.");
		element.updateTooltipContent( message );
		element.removeClass('available');
		element.validateField();
	}

	window.previous_new_pseudo = element.value;
}

function checkEmail(email)
{
	var regex = /^[a-z0-9][a-z0-9_\.\-\+]+\@([a-z0-9\-]+\.)+([a-z0-9]{2,4})+$/i;
	return regex.test(email);
}

function checkPassword(input)
{
	return ( checkPassRating(input, $('register_pseudo').value) >= 40 );
}

function checkPassRating(input, totallyForbiddenValue)
{
	password = input.value;
	var level = _("Strong security.");

	if ( window.lastCheckedPassword == password )
	{
		return window.lastCheckedPasswordPoints;
	}

	if ( password == '' )
	{
		return 0;
	}

	var points = PWSecurity(password, totallyForbiddenValue);
	if ( points < 20 )
	{
		level = _("Very weak security.");
	}
	else if ( points < 40 )
	{
		level = _("Weak security.");
	}
	else if ( points < 50 )
	{
		level = _("Good security.");
	}

	window.lastCheckedPassword = password;
	window.lastCheckedPasswordPoints = points;
	input.updateTooltipContent(level);

	return points;
}

function checkCaptcha(captcha)
{
	var regex = /^\d{5}$/;
	return regex.test(captcha);
}

function overPack(id)
{
	var target = $( id.replace(/pack_/, 'kate_') );
	if(!$chk(target))
	{
		return;
	}
	if(!target.hasClass('current_kate'))
	{
		if( Browser.Engine.trident4 && target.hasClass('fixpng') ) // Haaaaa IE6, my sweet love
		{
			target.setStyle('visibility', 'visible');
			$E('.current_kate').setStyle('visibility', 'hidden');
		}
		else
		{
			target.kateFx.start(1);
			$E('.current_kate').kateFx.start(0);
		}
	}
}

function outPack(id)
{
	var target = $( id.replace(/pack_/, 'kate_') );
	if(!$chk(target))
	{
		return;
	}
	if( Browser.Engine.trident4 && target.hasClass('fixpng') ) // Die evil agent, die !
	{
		target.setStyle('visibility', 'hidden');
		$E('.current_kate').setStyle('visibility', 'visible');	}
	else
	{
		target.kateFx.start(0);
		$E('.current_kate').kateFx.start(1);
	}
}

function selectPack(id)
{
	$(id).setProperty('checked','true');

	var target = $( id.replace(/pack_/, 'kate_') );
	if($chk(target))
	{
		$E('.current_kate', 'inlineRegister').removeClass('current_kate');
		target.addClass('current_kate');
	}

	$ES('label.pack', 'inlineRegister').forEach(function(label, index){
		if(label.getProperty('for') != id)
		{
			new Fx.Tween(label, {'link': 'cancel'}).start('opacity', 0.3);
		}
		else
		{
			new Fx.Tween(label, {'link': 'cancel'}).start('opacity', 1);
		}
	})

	if ( $('btn_collection') )
	{
		$('btn_collection').setProperty('src', $('btn_collection').getProperty('src').replace(/_(default|action|danger|cool)/, id.replace(/pack_/, '_')) );
	}
	if ( $('btn_rules') )
	{
		$('btn_rules').setProperty('src', $('btn_rules').getProperty('src').replace(/_(default|action|danger|cool)/, id.replace(/pack_/, '_')) );
	}

	$('first').validateForm();

	URBAN.page.toolbox.registerRollover($('btn_collection'), true);
	URBAN.page.toolbox.registerRollover($('btn_rules'), true);
}

function subscribe(event)
{
	var register_datas = $('first').toQueryString() + '&' + $('second').toQueryString();
	var options = {
		'url': '/ajax/player/register/',
		'data': register_datas,
		'onComplete': function(responseDatas)
		{
			var date = new Date();

			responseDatas = JSON.decode(responseDatas);
			if(responseDatas.errors)
			{
				if(responseDatas.errors.bad_security_code)
				{
					$('register_code').updateTooltipContent( _("The security code has been mistyped.") )
							.removeClass('valid')
							.addClass('invalid');

					$('captcha').setProperty('src', '/sub/captcha/button.php?time='+date.getTime());

					focus_to('register_code');
					return;
				}

				if(responseDatas.errors.cgu_unchecked)
				{
					$('register_cgu').updateTooltipContent( _("You have to read and accept Urban-rivals's terms and conditions") )
							.removeClass('valid')
							.addClass('invalid');

					focus_to('register_cgu');
					return;
				}

				if(responseDatas.errors.mandatories_fields)
				{
					var firstField;
					var fields = responseDatas.errors.mandatories_fields;

					for ( var i in fields )
					{
						if( typeof fields[i] == 'string' )
						{
							if( $(fields[i]) )
							{
								$(fields[i]).updateTooltipContent( _("This field is mandatory") )
										.removeClass('valid')
										.addClass('invalid');
							}

							if ( !$chk(firstField) )
							{
								if ( $(fields[i]) )
								{
									firstField = fields[i];
								}
								else if ( $E('*[name='+fields[i]+']') )
								{
									firstField = $E('*[name='+fields[i]+']');
								}
							}
						}
					}
					focus_to(firstField);
					return;
				}

				for(var n in responseDatas.errors)
				{
					field = false;
					var error = responseDatas.errors[n];
					if( error.code && typeof error.code == 'number' )
					{
						switch(error.code)
						{
							case 1:
								field = 'register_pseudo';
								break;
							case 3:
								field = 'register_pseudo';
								break;
							case 4:
								field = 'register_email';
								break;
							case 2: // IP Banned
							case 5: // UID Taken
							case 6: // DB Error
								$('loading_process').set('html',  '<h4>'+error.label+'</h4>' );
								return;
								break;
						}

						if(field)
						{
							if ( !$chk(firstField) )
							{
								firstField = field;
							}
							$(field).updateTooltipContent( error.label )
									.removeClass('valid')
									.addClass('invalid');
						}
					}
				}
				focus_to(firstField);
			}
			else
			{
				$E('.title', 'inlineRegister').setStyle('visibility', 'hidden');
				slide_to($('finish'));

				$('darkPopup').removeEvents('click').addEvent('click', removeRegisterAndRedirect);

				$('close_button')
					.removeEvents('click')
					.addEvent('click', function(event){
						this.fireEvent(this.disappearEvent);
						removeRegisterAndRedirect(event);
					});

				window.newPlayer = responseDatas.newPlayer;
				injectCodes();
			}
		}
	};
	new Request(options).send();
}

function injectCodes(promo)
{
	if(!promo)
	{
		var promo = $('register_promo').get('value');
	}

	if ( promo == 'adverstream' )
	{
		// Mariam tracking
		new Element('script')
				.setProperty('src', 'http://ad.advertstream.com/track_conversion.php?campaignid=3617&montant=1&param1=0&param2=0')
				.injectInside( $('finish') );
		var noscript_code = new Element('noscript')
				.injectInside( $('finish') );
		new Element('img')
				.setProperty('src', 'http://ad.advertstream.com/track_conversion.php?adsy=1&campaignid=3617&montant=1&param1=0&param2=0')
				.injectInside( noscript_code );
	}
	else if ( promo == 'adon' )
	{
		var img_code_url = 'http://roitrack.adtrgt.com/conversion.jsp?vid=561583'; // Nick tracking
	}
	else if  ( promo.search(/cpmstar/) != -1 )
	{
		var img_code_url = 'http://server.cpmstar.com/action.aspx?advertiserid=136&gif=1'; // Nick tracking
	}
	else if ( promo == 'ad2gamesge' )
	{
		var img_code_url = 'http://ad2games.com/slave.php?t=285'; // Ad2Games tracking
	}
	else if ( promo.search(/fox/) != -1 )
	{
		var img_code_url = 'http://ad.directaclick.com/pixel?id=112955&t=2';
	}
	else if ( promo == 'ad4gameuk' )
	{
		var img_code_url = 'http://ads.ad4game.com/servlet/ajrotator/track?page=424323&zone=ad4game&type=simple';
	}
	else if ( promo == 'superclix' )
	{
		var img_code_url = 'http://clix.superclix.de/cgi-bin/code.cgi?pp=13789&goods=' + escape( $('register_pseudo').get('value') );
	}
	else if  ( promo.search(/updated/) != -1 )
	{
		var img_code_url = 'http://ad.adserverplus.com/pixel?id=278583&t=2';
	}

	if( img_code_url )
	{
		new Element('img')
				.setProperties({
						'border': 0,
						'vspace': 0,
						'hspace': 0,
						'width': 1,
						'height': 1,
						'src': img_code_url
					})
				.injectInside( $('finish') );
	}

	var code = ( $('trackingcode') ? $('trackingcode').get('value') : '' );
	if (window.newPlayer && window.newPlayer.name)
	{
		newPlayer = window.newPlayer;
	}
	else
	{
		newPlayer = new Object();
		newPlayer.name = $('register_pseudo').get('value');
		newPlayer.id = false;
	}
	var date = new Date();
	code = unescape(code).replace('{LOGIN}', escape( newPlayer.name ) );
	code = code.replace('{USERID}', newPlayer.id );
	code = code.replace('{TIME}', date.getTime() );

	if( URBAN.page.toolbox.hasEnv('extra_vars') )
	{
		var pattern = /\{(.+?)\}/gi;
		var extras = JSON.decode( URBAN.page.toolbox.getEnv('extra_vars') );

		while( match = pattern.exec(code) )
		{
			var reg = new RegExp( match[0] );
			var replace = extras[match[1]] ? extras[match[1]] : '';
			code = code.replace( reg, replace );
		}
		URBAN.page.toolbox.clearEnv('extra_vars')
	}

	if ( Browser.Engine.trident )
	{

		if(code.search(/<script/i) != -1)
		{
			code.match(/src="(\S*)"/gi);
			src = RegExp.$1;

			var head = document.getElement('head');
			var script = document.createElement("script");
			script.setAttribute("src", src);
			script.setAttribute("type", "text/javascript");
			head.insertBefore(script, head.firstChild);
		}
		else
		{
			new Element('div').set('html', code);
		}
	}
	else
	{
		if ( $('tracking') ) $('tracking').empty().injectHTML(code);
	}

	var google_conversion_id	= 1061992570;
    var google_conversion_label	= 'oRFkCNimYRD68LL6Aw';
	new Element('img')
			.setProperties({
					'border': 0,
					'vspace': 0,
					'hspace': 0,
					'width': 1,
					'height': 1,
					'src': 'http://www.googleadservices.com/pagead/conversion/'+google_conversion_id+'/?label='+google_conversion_label+'&script=0'
				})
			.injectTop( $('finish') );

}

function removeRegister()
{
	$ES('.bubble').forEach(function(tooltip, index){
		tooltip.dispose();
	});
	$('inlineRegister').destroy();
	undarkenPopup();
	$('darkPopup').removeEvents();

	// Restart homepage image rotator
	setImageRotatorBlocked(false);
}

function removeRegisterAndRedirect(e)
{
	e.stop();
	removeRegister();
	document.location.href = '/';
}

function showRegister()
{
	// Stop homepage image rotator
	setImageRotatorBlocked(true);

	current_step = 0;

	new Element('input')
			.setProperty('type', 'hidden')
			.setProperty('id', 'register_timezone')
			.setProperty('name', 'register_timezone')
			.setProperty('value', (new Date().getTimezoneOffset() / 60))
			.injectInside( $('second') );

	$ES('.btn', 'inlineRegister').forEach(function(el, i){
		URBAN.page.toolbox.registerRollover(el, true, true);
	});

	URBAN.page.toolbox.registerRollover($('play'), true);

	// Pack selectors FX
	$ES('.kate', 'inlineRegister').forEach(function(item, index){
		if(!item.hasClass('current_kate'))
		{
			item.setStyle('opacity', 0);
		}
		item.kateFx = new Fx.Tween(item, {'link': 'cancel', 'property': 'opacity'});
	});

	$ES('.pack_selector', 'inlineRegister').forEach(function(el, i){
		URBAN.page.toolbox.registerRadiobutton(el, el.getParent());

		var btn_label = $E('label[for='+el.getProperty('id')+']', 'inlineRegister');
		var btn_image = $E('img', btn_label);
		var reg = /btn_(\w+)_/i;
		reg.exec( btn_image.getProperty('src').toString() );

		var target = 'kate_' + RegExp.$1;
		btn_label.addEvent('mouseover', function(){
			overPack(el.getProperty('id'))
		}).addEvent('mouseout', function(){
			outPack(el.getProperty('id'))
		}).addEvent('click', function(){
			selectPack(el.getProperty('id'));
		});

	});

	URBAN.page.toolbox.fixChildLabelEvents();

	// Update captcha
	var date = new Date();
	$('captcha').setProperty('src', '/sub/captcha/button.php?time='+ date.getTime());

	// $('darkPopup').addEvent('click', removeRegister);

	$('close_button')
		.addEvent('click', function(event){
			this.fireEvent(this.disappearEvent);
			removeRegister();
		})
		.attachTooltip({tooltip: 'bubble', forceTooltipWidth: true, tooltipPadding: 20});

	URBAN.page.toolbox.registerRollover($('close_button'), false);

	$('inlineRegister')
		.setStyles({
			'visibility': 'hidden',
			'display': 'block',
			'z-index': URBAN.page.toolbox.getNextHighestZindex()
		});

	var newX = Math.round( (window.getScrollWidth() / 2) - ($('inlineRegister').getSize().x / 2) );
	var newY = Math.round( (window.getSize().y / 2) - ($('inlineRegister').getSize().y / 2) );

	var stepsWidth = 0;
	$ES('.step', 'inlineRegister').forEach(function(form, i){
		form.setStyle('left', stepsWidth);
		stepsWidth += form.getSize().x;
		if(i != current_step)
		{
			form.setStyle('visibility', 'hidden');
		}

		/* Auto attach tooltip to each element having a title attribute */
		var elements = $ES('*[title]', form);
		if(elements)
		{
			elements.forEach(function(element, index){
				element.attachTooltip({'tooltip': 'bubble', 'padding': 20, 'extraClass': 'bubble_dark'});
			});
		}

		form
			.autoValidate()
			.addEvent('valid', function(){
				$ES('.next', form).removeTooltip();
				URBAN.page.toolbox.enable($ES('.next', form).getProperty('id').toString());
			})
			.addEvent('invalid', function(){
				URBAN.page.toolbox.disable($ES('.next', form).getProperty('id').toString());
			})
			.addEvent('submit', function(event){
				new Event(event).stop();
				this.validateForm();
			});
	});

	$ES('.next', 'inlineRegister').forEach(function(element, index){
		element.addEvent('click', function(){

			if( element == $('play'))
			{
				return;
			}

			if( element == $('register_submit') )
			{
				window.removeEvents('slideDone').addEvent('slideDone', function(event) {
					window.removeEvents('slideDone');
					subscribe();
				});
			}
			slide_next( $(this) );

		});
	});

	$('register_previous', 'inlineRegister').addEvent('click', function(){
		slide_previous(this);
	})

	$('register_cgu').addEvent('click', function(){
		this.validateField(true);
	});

	$('inlineRegister')
		.setStyles({
			'top': newY,
			'left': newX,
			'visibility': 'visible'
		});

	$('register_pseudo').addEvent('keyup', function(event){
			if ( window.ajaxCall || window.timer )
			{
				if ( window.ajaxCall ) window.ajaxCall.cancel();
				if ( window.timer ) $clear(window.timer);
			}
			window.timer = check_pseudo_availability.delay(500, this, $('register_pseudo'));
	});

	// Auto select faction
	var autoSelect = URBAN.page.toolbox.getParam('selectPack');
	if(autoSelect && autoSelect != '')
	{
		overPack('pack_'+autoSelect);
		selectPack('pack_'+autoSelect);
	}

	//TO REMOVE
	/*
	$('slidingArea').addEvent('dblclick', function(){
		slide_next(this);
	});
	/**/

	if(Browser.Engine.trident4)
	{
		$('register_email').addEvent('tooltipwillshow', function(){
			$('register_country').setStyle('visibility', 'hidden');
		}).addEvent('tooltipwillhide', function(){
			$('register_country').setStyle('visibility', 'visible');
		});

		$('register_code').addEvent('tooltipwillshow', function(){
			$('register_country').setStyle('visibility', 'hidden');
		}).addEvent('tooltiphashide', function(){
			$('register_country').setStyle('visibility', 'visible');
		});

		$('register_invite').addEvent('tooltipwillshow', function(){
			$('register_country').setStyle('visibility', 'hidden');
		}).addEvent('tooltiphashide', function(){
			$('register_country').setStyle('visibility', 'visible');
		});
	}

	// Embed VideoPlayer
	if ( $('video_player') )
	{
		window.video_id = $('video_player').getProperty('rel');

		new Swiff("http://www.dailymotion.com/swf/"+video_id+"&enablejsapi=1&colors=background:000000;glow:000000;foreground:FFFFFF;", {
			id: "dmplayer",
			width: 305,
			height: 220,
			container: $("video_player"),
			params: {
				bgcolor: "#333333",
				allowScriptAccess: "always",
				allowFullScreen: 'true',
				allowNetworking: 'internal'
			}
		});
	}

	$('registerLoader').dispose();

	(function(){
		if ( $chk( $('register_pseudo') ) ) $('register_pseudo').focus();
		}).delay(3000);

}

window.addEvent('domready', function(){

	// Handle signup clicks
	document.getElements('a[href$=signup.php]').addEvent('click', function(e){
		new Event(e).stop();
		darkenPopup(inlineRegister, false, 0.75, '#262424');
	});

	// Show signup automatically
	var autoSignup = URBAN.page.toolbox.getParam('autoSignup');
	autoSignup = false; // Disabled
	if(autoSignup && autoSignup != '')
	{
		darkenPopup(inlineRegister, false, 0.75, '#262424');
	}

	var toPreload = [
		staticsHost + '/img/v2/ui/prospect/register/kate_action.gif',
		staticsHost + '/img/v2/ui/prospect/register/kate_danger.gif',
		staticsHost + '/img/v2/ui/prospect/register/kate_cool.gif',
		staticsHost + '/img/v2/ui/prospect/register/register_bg.gif',
		staticsHost + '/img/v2/ui/prospect/register/kate_normal.gif',
		staticsHost + '/img/v2/ui/prospect/register/btn_action_off.gif',
		staticsHost + '/img/v2/ui/prospect/register/btn_danger_off.gif',
		staticsHost + '/img/v2/ui/prospect/register/btn_cool_off.gif'
	];
	// Preload kate images
	new Asset.images(toPreload);

});
