$(document).ready(function() {
	
	$('li.link').each(function() {
		var href = $(this).attr('rel');
		var stage = $(this).find('em').text();
		$(this).css('cursor','pointer').click(function() {
			$.get('/register/_update-stage.php', {stage: stage}, function() {
				window.location = href;
			});
		});
		$(this).hover(function() {
			$(this).addClass('current');
		}, function() {
			$(this).removeClass('current');
		});
	});
	
	$('.info').focus(function() {
		var title = $(this).attr('title');
		$(this).attr('title','');
		$(this).after('<div class="input-info new"><div class="info-container"><div><p>'+title+'</p></div></div></div>');
		if ($.browser.msie) {
			$('.input-info.new').show();
			$(this).removeClass('new');
		} else {
			$('.input-info.new').hide().fadeIn('fast',function() {
				$(this).removeClass('new');
			});
		}
		
	});
	
	$('.info').blur(function() {		
		$(this).attr('title',$('.input-info p').text());
		if ($.browser.msie) {
			$('.input-info').remove();
		} else {
			$('.input-info').fadeOut('fast',function() {
				$(this).remove();
			});
		}
		
	});
	
	$('.mask').focus(function() {
		$(this).removeClass('mask');
	});
	
	
	/* error checking */	
	$('.required').focus(function() {
		$(this).removeClass('empty');
		if ($(this).get(0).tagName == 'SELECT') {
			$(this).parents('.skinned-select').removeClass('empty');
		}
	});
	
	$('.validate').focus(function() {
		$(this).removeClass('invalid');
		if ($(this).get(0).tagName == 'SELECT') {
			$(this).parents('.skinned-select').removeClass('invalid');
		}
	});
	
	$('input#email').blur(function() {
		var settings = '';
		if ($(this).hasClass('settings')) {
			settings = true;
		}
		
		var email = $(this);
		$.get('/register/_validemail.php', {email: email.val(), settings: settings}, function(data) {
			if(data != '1') {
				email.addClass('invalid');
			} else {
				email.removeClass('invalid');
			}
		});
	});
	
	$('.required').blur(function() {
		checkFieldForError($(this));
	});
	
	$('.validate').blur(function() {
		checkFieldForValidation($(this));
	});
	
	$('.mask').focus(function() {
		$(this).val('');
	});
	
	$('#form-step-one, #form-step-two, #form_panel form, #billingForm').submit(function() {
		$('.required').each(function() {
			checkFieldForError($(this));
		});
		$('.validate').each(function() {
			checkFieldForValidation($(this));
		});
		return formErrorBox();
	});
		
	/* word count */
	$('.word_count').keyup(function() {
		updateWordCount($(this));
	}).each(function() {
		updateWordCount($(this));
	});
	
	/* updating gender */
	$('#register #gender').change(function() {
		var gender = ($('#gender').val()) ? $('#gender').val() : 'B';
		$('#build').html($('.build-options[rel='+gender+']').html());
	});
	
	$('#register #gender').trigger('change');
	
	/* updating gender */
	$('#register #LF_gender').change(function() {
		var gender = ($('#LF_gender').val()) ? $('#LF_gender').val() : 'B';
		$('#LF_build').html($('.build-options[rel='+gender+']').html());
	});
	
	$('#register #LF_build').trigger('change');
	
	/* sliders */
	$('.slider').slider({step: 1, min: 1, max: 5});
	
	/*
	$('.slider[rel=build]').bind('slidechange', function(event, ui) {
		var value = ui.value;
		$('#build option').attr('selected','');
		$('#build option:eq('+value+')').attr('selected','selected');
	}).slider('option', 'value', 3);
	$('#build option:eq(3)').attr('selected','selected');
	
	$('.slider[rel=LF_build]').bind('slidechange', function(event, ui) {
		var value = ui.value;
		$('#LF_build option').attr('selected','');
		$('#LF_build option:eq('+value+')').attr('selected','selected');
	}).slider('option', 'value', 3);
	$('#LF_build option:eq(3)').attr('selected','selected');
	*/
	
	
	/* checkbox toggles */
	$('.checkbox-field .selection-box').each(function() {
		var _field = $(this);
		$(this).find('label').css('cursor','pointer').click(function() {
			clickInCheckboxField($(this));
		});
		
		if (_field.find('.values').val()) {
			var values = _field.find('.values').val().split('|');
			$.each(values,function(key,val) {
				var _label = _field.find('label:contains("'+val+'")');
				var id = _label.attr('for');
				$('#'+id).attr('checked','checked');
				clickInCheckboxField(_label);
			});
		}
	});
	
	/* dropdown boxes */
	if ($('#register').length) {
		$('.select').each(
			function(i) {

				selectContainer = $(this);
				// Remove the class for non JS browsers
				//selectContainer.removeClass('.select');
				// Add the class for JS Browers
				selectContainer.addClass('skinned-select');
				// Find the select box
				selectContainer.children().before('<div class="select-text"></div>').each(
					function() {
						$(this).prev().text(this.options[this.selectedIndex].innerHTML);
					}
				);
				// Store the parent object
				var parentTextObj = selectContainer.children().prev();
				// As we click on the options
				selectContainer.children().change(function() {
					// Set the value of the html
					parentTextObj.text(this.options[this.selectedIndex].innerHTML);
				});

			}	
		);
	}
		
	/* duplicate dropdowns */
	$('.duplicate').each(function() {
		$(this).change(function() {
			var value = $(this).val();
			var _duplicate = $('LF_'+$(this).attr('id'));
			_duplicate.find('option').attr('selected','');
			_duplicate.find('option[value="'+value+'"]').attr('selected','selected');
			_duplicate.trigger('change');
		});
	});
	
	/* auto tag completion */
	if (jQuery().tagEditor) {
		$("#like_doing").tagEditor({completeOnSeparator: false, separator: "|||"});
		$("#dislike_doing").tagEditor({completeOnSeparator: false, separator: "|||"});
	}	
	
	/* pricing page */
	
	$('#prices li a').click(function() {
		$(this).parents('#prices').find('li.selected').removeClass('selected');
		$(this).parents('li').addClass('selected');
		if (!$('#billingForm').hasClass('visible')) {
			$('#billingForm').slideDown().addClass('visible');
		}

		// update costs
		if (!$('.matchmaker-pay').length) {
			var cost = parseFloat($(this).attr('rel')) + 10.00;
			if ($('#renew').length) {
				if ($('#renew').val() == 1) {
					cost = parseFloat(cost - 10.00);
				};
			}
			var length = $(this).find('span').text();	
			var lengthstr = (length == 1) ? '1 month' : length+' months';
			var text = $(this).text();
		} else {
			var cost = parseFloat($(this).attr('rel'));
			var length = $(this).find('span').text();	
			var membership = $(this).parents('li').find('p.membership-level').text();
			var lengthstr = (length == 'Unlimited') ? 'Unlimited' : length+' months';
			var text = membership+ ' '+$(this).text();
			$('.membership-type').text(membership);
		};
		
		
		$('#cost').val(cost);
		$('#text').val(text);
		$('#months').val(length);
		$('ul.totals strong span').text(parseFloat($(this).attr('rel')));
		$('ul.totals .total strong span').text(cost);
		$('ul.totals .period').text(lengthstr);
		
		
		return false;
	});
	
	
	$('#register .word_count_div textarea').focus(function() {
		if ($.browser.webkit && !$.browser.safari) {
			$(this).css('height','70px');
		} else {
			$(this).animate({'height':'70px'}, 'slow');
		}
		
	});
	
	
	/* location */
	if (!$('body').hasClass('step-four')) {
		if ($('#postcode').length) {
			geocoder = new GClientGeocoder();
		}


		$('#postcode').blur(function() {
			updateLocation();
		});

		if ($('#postcode').val()) {
			updateLocation();
		}
	}
	
	
	if ($('body').hasClass('step-four')) {
		if ($('#cost').val()) {
			var _link = $('a[rel="'+$('#cost').val()+'"]').trigger('click');
		}
	}
	
});

var geocoder = null;

var updateLocation = function() {

	if ($('#postcode').val()) {
		var address = $('#postcode').val()+', UK';
		geocoder.getLatLng(address, function(point) {
			if (point) {
				$('#lat').val(point.lat());
				$('#lng').val(point.lng());
			} else {
				$('#lat').val('');
				$('#lng').val('');
				$('#postcode').addClass('empty');
			}			
		});
	} else {
		$('#lat').val('');
		$('#lng').val('');
	}

};



var updateWordCount = function(_field) {
	var words = 101 - _field.val().split(' ').length;
	if (words < 0) {
		var text = _field.val().slice(0,-1);
		_field.val(text);
	} else {
		_field.parent().find('.word_count_total span').text(words);
	}
};

var checkFieldForError = function(_field) {	
	if (!_field.val() || _field.hasClass('mask')) {
		_field.addClass('empty');
		if (_field.get(0).tagName == 'SELECT') {
			_field.parents('.skinned-select').addClass('empty');
		}
	}
};

var checkFieldForValidation = function(_field) {
	
	var id = _field.attr('id');
	var val = _field.val();
	
	if (id == 'LF_age_min') {
		if (val < 18) {
			markAsInvalid(_field);
		}
	}
	
	if (id == 'LF_age_max') {
		if ((val < 18) || (val < $('#LF_age_min').val())) {
			markAsInvalid(_field);
		}
	}
	
	if (id == 'dob_day' || id == 'dob_month' || id == 'dob_year') {
		
		var value = _field.val();
		if (isNaN(Number(value))) {
			_field.addClass('empty');
		} else {
			$('#dob_day,#dob_month,#dob_year').removeClass('invalid');
			if ($('#dob_day').val() && $('#dob_month').val() && $('#dob_year').val()) {
				var date = $('#dob_year').val()+'-'+$('#dob_month').val()+'-'+$('#dob_day').val();
				$.get('_checkdate.php',{date: date},function(data) {
					if (data == 'no') {
						markAsInvalid($('#dob_day'));
						markAsInvalid($('#dob_month'));
						markAsInvalid($('#dob_year'));
					}
				});
			}
		}
	}
	
	if (id == 'confirm_password') {
		if ($('#password').val() && ($('#password').val() != $('#confirm_password').val())) {
			markAsInvalid($('#confirm_password'));
		}
	}
	
};




var markAsInvalid = function(_field) {
	_field.addClass('invalid');
	if (_field.get(0).tagName == 'SELECT') {
		_field.parents('.skinned-select').addClass('invalid');
	}
};



var updateCheckboxField = function(_field) {
	if (_field.find('.active').length == 10) {
		_field.addClass('max');
		_field.animate({opacity:.3},'fast');
		_field.find('label').unbind('click').css('cursor','default');
	} else {
		if (_field.hasClass('max')) {
			_field.removeClass('max');
			_field.animate({opacity:1},'fast');
			_field.find('label').css('cursor','pointer').click(function() {
				clickInCheckboxField($(this));
			});
		}
	}
};

var clickInCheckboxField = function(_label) {
	var _field = _label.parents('.checkbox-field').find('.selection-box');
	var identifier = _label.attr('for');
	var _active = _label.clone().attr('rel',identifier);
	_label.parents('.checkbox-field').find('.selected-box').append(_active);
	_active.click(function() {
		var relationship = $(this).attr('rel');
		$(this).parents('.checkbox-field').find('.selection-box label[for='+relationship+']').removeClass('active').show();
		$(this).remove();
		updateCheckboxField(_field);
	});
	_label.addClass('active');
	_label.hide();
	updateCheckboxField(_field);
};

var formErrorBox = function() {
	
	var message = '';
	
	if ($('.empty').length) {
		message = 'You must fill out all of the fields - missing fields have been highlighted below.';
	}

	if ($('#password').length && ($('#password').val() != $('#confirm_password').val()) && !message) {
		message = 'Your passwords do not match - please try again.';
	}
	
	if ($('.invalid').length && !message) {
		message = 'You have entered some invalid values - please double check the highlighted fields.';
	}
	
	if ($('#form-step-one').length) {
		
		if (!$('.avatar').length && !message) {
			message = 'You must upload at least one image';
		}
		
		
		if (!$('#terms:checked').length && !message) {
			message = 'You must agree to our Terms and Conditions';
		}
	}
	
	if (message) {
		$('.error').remove();
		message = '<p class="error">'+message+'</p>';
		if ($('#existing-members-info').length) {
			$('#existing-members-info').after(message);
		} else if ($('.mainBody').length) {
			$('.mainBody').prepend(message);
		} else {
			$('fieldset.submission:first').after(message);
		}
		$.scrollTo('.error','slow');
		return false;
	}
	
	return true;
};