$(function() {

	// Login form validation and redirection
	$('#login-form').submit(function(ev) {
		var $form = $(this);
		var site_address = $('#site_address').val();
		var username = $('#username_field').val();
		
		// Alert no username
		if (username.length < 1) {
			alert('Please enter a username');
			ev.preventDefault();
		} else if (site_address.length < 4) { 
			alert('Please enter a valid site address');
			ev.preventDefault();
		}

		site_address = site_address.replace(/https?:\/\//, '').replace(/\.tactilecrm\.com.*/,'');
		
		var action = 'https://' + site_address + '.tactilecrm.com/login/';
		$form.attr('action', action);
	});
	
	// Flags
	$('ul#top-nav li.flags').hover(function(){
		$(this).find('a.switch').css({visibility: 'visible'});
		$(this).find('a.switch:first').animate({right: '30px'}, 500);
		$(this).find('a.switch:eq(1)').animate({right: '56px'}, 500);
		$(this).find('a.switch:last').animate({right: '82px'}, 500);
	}, function(){
		$(this).find('a.switch').css({visibility: 'hidden', right: '0'});
	});
	
	// Site Address checker
	var sa_to;
	$('#signup-form input#site_address').keyup(function(){
		var keypress_time = new Date();
		var $input = $(this);
		var val = $.trim($input.val());
		var old_val = $input.data('old_val') || '';
		if (old_val === val) {
			return;
		}
		var $status = $input.parent().find('span.status').length ? $input.parent().find('span.status') :
			$('<span class="status" />').appendTo($input.parent());
		if (val === '') {
			$status.attr('class', 'status has_error').text('Required');
			return;
		} else {
			$status.attr('class', 'status checking').text('Checking...');
		}
		
		$input.val(val).data("latest_keypress_time", keypress_time);
		clearTimeout(sa_to);
		sa_to = setTimeout(function(){
			$.ajax({
				dataType: 'json',
				url: '/signup/check_site_address',
				data: {site_address: val},
				success: function(json) {
					if (keypress_time < $input.data('latest_keypress_time')) {
						return;
					}
					$input.data('old_val', val);
					$status.removeClass('checking').text('');
					if (json.status) {
						if (json.status == 'failure') {
							$status.attr('class', 'status has_error').text(json.errors[0]);
						} else {
							$status.attr('class', 'status is_okay').text('OK');
						}
					} else {
						$status.attr('class', 'status is_okay').text('Error');
					}
				}
			});
		}, 400);
	});
	
	// Signup Form Validation
	$('form#signup-form input[type=text], form#signup-form input[type=password]').blur(function(){
		var $input = $(this);
		var val = $.trim($input.val());
		$input.val(val);
		
		var has_errors = true;
		var msg = 'Required';
		if ($input.is('.required')) {
			if ($input.val() !== '') {

				if ($input.is('#email')) {
					msg = 'Must be a valid address';
					if (val.match(/\S+@\S+\.\S+/)) {
						has_errors = false;
					}

				} else if ($input.is('#password_confirm')) {
					msg = 'Passwords must match';
					if (val === $('#password').val()) {
						has_errors = false;
					}
				
				} else if ($input.is('#site_address')) {
					$input.keyup();

				} else {
					has_errors = false;
				}
			}
		} else if ($input.is('#company')) {
			if ($input.val() !== '' && $('#site_address').val() === '') {
				$('#site_address').val(val.replace(/[^0-9a-zA-Z]/g,'').toLowerCase()).blur();
			}
			has_errors = false;
			
		} else {
			has_errors = false;
		}
		
		var $status = $('<span class="status" />');
		if (!$input.is('#site_address')) {
			$input.parent().find('span.status').remove();
			$status.text(has_errors ? msg : 'OK').addClass(has_errors ? 'has_error' : 'is_okay');
			$input.parent().append($status);
		} else {
			if (val === '') {
				$input.parent().find('span.status').remove();
				$input.parent().append($status.addClass('has_error').text('Required'));	
			}
		}
	});
	
	// Helpboxes
	$('input.pointer').focus(function(){
		var $input = $(this);
		if ($input.attr('title')) {
			$('#pointer').remove();
			var $pointer = $('<div id="pointer"><div class="inner">'+$input.attr('title')+'</div></div>');
			$input.attr('title', '');
			$('body').append($pointer.hide());
			var new_bottom = $(window).height() - $input.offset().top;
			$pointer.css({left: $input.offset().left, bottom: new_bottom}).show();
		}
	}).blur(function(){
		if ($('#pointer').length) {
			$(this).attr('title', $('#pointer .inner').text());
			$('#pointer').remove();
		}
	});

	// Give first field focus
	$('form#signup-form input[type=text]:first').focus();
	
	// Validate form on submission
	$('form#signup-form').submit(function(ev){
		$(this).find('input').blur();
		if ($(this).find('span.has_error').length) {
			ev.preventDefault();
			alert('Some fields weren\'t filled out correctly. Please check for errors and try again.');
		} else if(!$('input#agree_terms').is(':checked')) {
			ev.preventDefault();
			alert('You must agree to our Terms before continuing. Please tick the checkbox and try again.');
		}
	});
	
	// Make nice button
	$('#signup_submit').hide().next().show().click(function(ev){
		ev.preventDefault();
		$('form#signup-form').submit();
	});

	// This makes plans clickable
	$('li.signup-plan').click(function(ev){
		if (!$(ev.target).is('a')) {
			window.location = $(this).find('a.signup-button').attr('href');
		}
	});
});
