/**
 * browse.js - file browsing support
 *
 * @author      Thomas M. Edwards <tmedwards@motoslave.net>
 * @copyright   Copyright (c) 2008-2009 Thomas Michael Edwards
 * @version     1.06, 2009-12-13
 */

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

/**
 * slide doesn't work well in some browsers, so they get plain show/hide
 */
var noSlide = ($.browser.msie && $.browser.version.substr(0,1) < '8');

/**
 * handle start-up events
 */
$(document).ready
(
	function()
	{
		var filterForm = $('#filterform');

		// hide the filter form and add its toggle control
		filterForm.hide();
		$('#filterlegend')
			.wrapInner('<label for="filtertoggle"></label>')
			.prepend('<input type="checkbox" name="filtertoggle" id="filtertoggle" onclick="toggleFilter()" />');

		// setup filter guide help popup event handler
		$('#filterhelp').click
		(
			function()
			{
				window.open(this.href, '_blank', 'width=512,height=384,resizable,status');
				return false;
			}
		);

		// setup clear button event handler
		$('input[type="reset"][name="clear"]').click
		(
			function()
			{
				location.href = filterForm[0].action;
			}
		);

		// setup form validation
		$.validator.addMethod
		(
			'greaterThanOrEqualTo',
			function(value, element, param)
			{
				var target = $(param).unbind('.validate-greaterThanOrEqualTo').bind
				(
					'blur.validate-greaterThanOrEqualTo',
					function()
					{
						$(element).valid();
					}
				);
				return value >= target.val();
			},
			'Please enter a value that is greater than or equal to the other'
		);
		$('#filterform').validate
		({
			ignoreTitle: true,
			errorClass: 'invalid',
			rules:
			{
				minpts:
				{
					number: true
				},
				maxpts:
				{
					number: true,
					greaterThanOrEqualTo: '#minpts'
				}
			},
			messages:
			{
				minpts:
				{
					digits: 'Base points (min) must be numeric'
				},
				maxpts:
				{
					digits: 'Base points (max) must be numeric',
					greaterThanOrEqualTo: 'Base points (max) is less than base points (min)'
				}
			},
			errorPlacement: function(error, element)
			{
				if (element.attr('name') == 'minpts' || element.attr('name') == 'maxpts')
				{
					$('label[for="maxpts"]').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"]').next().after('<span generated="true" class="invalid">Your form contains errors, please correct them</span>');
					}
				}
				else
				{
					$('span[generated="true"].invalid').remove();
				}
				this.defaultShowErrors();
			}
		});
	}
);

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

/**
 * toggle filter element hiding/showing
 */
function	toggleFilter()
{
	if ($('#filtertoggle').is(':checked'))
		if (noSlide)
			$('#filterform').show();
		else
			$('#filterform').slideDown();
	else
		if (noSlide)
			$('#filterform').hide();
		else
			$('#filterform').slideUp();
	return true;
}

