/**
 * register.js - account registration support
 *
 * @author      Thomas M. Edwards <tmedwards@motoslave.net>
 * @copyright   Copyright (c) 2008-2009 Thomas Michael Edwards
 * @version     1.05, 2009-12-15
 */

/******************************************************************************/

/**
 * handle start-up events
 */
$(document).ready
(
	function()
	{
		// execute initial automatic timezone selection
		var utcOffset = getUtcOffset();
		var tzSelect  = $('#timezone');
		if (tzSelect.val() == '0' && utcOffset != '0')
		{
			tzSelect.val(utcOffset);
		}

		// add the automatic timezone selection control
		$('#timezone').after('<img id="selecttimezone" src="/gcarepo/styles/images/time.png" width="16" height="16" title="Automatically select timezone" alt="Automatically select timezone" onclick="selectTimezone()" />');

		// setup timezone auto-selector hover animation event handler
		$('#selecttimezone').hover
		(
			function()
			{
				this.src = '/gcarepo/styles/images/time_go.png';
			},
			function()
			{
				this.src = '/gcarepo/styles/images/time.png';
			}
		);

		// setup form validation
		$('#accounteditform').validate
		({
			ignoreTitle: true,
			errorClass: 'invalid',
			rules:
			{
				newpass:
				{
					required: true,
					minlength: 8,
					maxlength: 32,
					equalTo: '#newpassconfirm'
				},
				newpassconfirm:
				{
					equalTo: '#newpass'
				},
				email:
				{
					required: true,
					email: true,
					equalTo: '#emailconfirm'
				},
				emailconfirm:
				{
					equalTo: '#email'
				},
				username:
				{
					required: true,
					minlength: 3,
					maxlength: 32
				},
				website:
				{
					url: true
				},
				rulesagree:
				{
					required: true
				}
			},
			messages:
			{
				newpass:
				{
					required: 'New password is required',
					minlength: 'New password is too short (min: 8 chars)',
					maxlength: 'New password is too long (max: 32 chars)',
					equalTo: 'New passwords do not match'
				},
				newpassconfirm:
				{
					equalTo: 'New passwords do not match'
				},
				email:
				{
					required: 'E-Mail address is required',
					email: 'E-Mail address is invalid',
					equalTo: 'E-Mail addresses do not match'
				},
				emailconfirm:
				{
					equalTo: 'E-Mail addresses do not match'
				},
				username:
				{
					required: 'Username is required',
					minlength: 'Username is too short (min: 3 chars)',
					maxlength: 'Username is too long (max: 32 chars)'
				},
				website:
				{
					url: 'Website URL is invalid'
				},
				rulesagree:
				{
					required: 'You must agree to abide by the GCA Repository rules'
				}
			},
			errorPlacement: function(error, element)
			{
				if (element.attr('name') == 'rulesagree')
				{
					$('label[for="rulesagree"]').after(error).after('<br />');
				}
				else
				{
					error.insertAfter(element);
				}
			},
			showErrors: function(errorMap, errorList)
			{
				if (this.numberOfInvalids() != 0)
				{
					if ($('span[generated="true"].invalid').size() == 0)
					{
						$('input[type="submit"]').after('<span generated="true" class="invalid">Your form contains errors, please correct them</span>');
					}
				}
				else
				{
					$('span[generated="true"].invalid').remove();
				}
				this.defaultShowErrors();
			}
		});
	}
);

/******************************************************************************/

/**
 * attempt to automatically select the user's timezone
 */
function	selectTimezone()
{
	var utcOffset = getUtcOffset();
	var tzSelect  = $('#timezone');
	if (tzSelect.val() != utcOffset)
	{
		tzSelect.val(utcOffset);
	}
}

