if (window.focus_field)
{
	attachListener(window, 'load',
		function ()
		{
			var form = document.forms[focus_field.form];
			if (form) {
				var field = form.elements[focus_field.field];
				if (field) {
					if (field.focus) field.focus();
					if (field.select) field.select();
				}
			}
		}
	);
}

if (window.ActiveXObject && !window.XMLHttpRequest) {
	window.XMLHttpRequest = function () {
		return new ActiveXObject('Microsoft.XMLHTTP');
	}
}

function attachListener(element, event_type, event_handler)
{
	if (element.addEventListener) {
		element.addEventListener(event_type, event_handler, false);
	} else if (element.attachEvent) {
		element.attachEvent('on' + event_type, event_handler);
	}
}

function $(element)
{
	if (typeof element == 'string') {
		element = document.getElementById(element);
	}
	
	return element;
}

function removeNode()
{
	for (var i = 0; i < arguments.length; i++) {
		arguments[i].parentNode.removeChild(arguments[i]);
	}
}

function toggleDisplay(element)
{
	element.style.display = ((element.style.display == '') ? 'none' : '');
}

function toggleCategoryChildren(category_id)
{
	toggleDisplay($('category-children-' + category_id));
	return false;
}

var FormValidator =
{
	nsPrefix: 'nb',
	paramSeparator: '::',
	
	validators:
	{
		notEmpty: function(element)
		{
			return !element.value.match(/^\s*$/);
		},
		
		integer: function(element, params)
		{
			if (!element.value.match(/^-?\d+$/)) return false;
			return FormValidator.validators.decimal(element, params);
		},
		
		decimal: function(element, params)
		{
			if (typeof params == 'undefined') params = new Array();
			
			var num = element.value;
			if (!num.match(/^-?\d+(\.\d*)?$/)) return false;
			
			num = parseFloat(num);
			if (typeof params[0] != 'undefined' && num < params[0]) return false;
			if (typeof params[1] != 'undefined' && num > params[1]) return false;
			
			return true;
		},
		
		email: function(element)
		{
			return element.value.match(/^\S+@\S+$/);
		},
		
		imageFileOrEmpty: function(element)
		{
			return (element.value == '') || FormValidator.validators.imageFile(element);
		},
		
		imageFile: function(element)
		{
			return element.value.match(/\.(jpg|jpeg|jpe|gif|png)$/i);
		}
	},
	
	fieldError: function(element, message)
	{
		alert(message);
		if (element.select) element.select();
		if (element.focus) element.focus();
	},
	
	validate: function(form)
	{
		for (var i = 0; i < form.elements.length; i++) {
			if (!FormValidator.validateField(form.elements[i])) {
				return false;
			}
		}
		
		return true;
	},
	
	validateField: function(field)
	{
		var valid_params, valid_param;
		var parse_match, validator_name, validator_params;
		
		valid_params = field.getAttribute(FormValidator.nsPrefix + ':validate');
		
		if (valid_params == null) {
			return true;
		}
		
		if (valid_params == '') {
			FormValidator.fieldError(field, 'Website error, please contact the owner (' +
				FormValidator.nsPrefix + ':validate is empty)');
			return false;
		}
		
		valid_params = valid_params.split(FormValidator.paramSeparator);
		message = valid_params[valid_params.length - 1];
		
		if (valid_params.length == 1) {
			FormValidator.fieldError(field, 'Website error, please contact the owner (' +
				FormValidator.nsPrefix + ':validate must have at least one validator and an ' +
				'error message, separated by "' + FormValidator.paramSeparator + '")');
			return false;
		}
		
		for (j = 0; j < valid_params.length - 1; j++)
		{
			valid_param = valid_params[j];
			parse_match = valid_param.match(/^([^(]+)(\((.*)\))?$/);
			
			if (parse_match)
			{
				validator_name = parse_match[1];
				validator_params = (parse_match[3]) ? parse_match[3].split(',') : [];
				
				validator = FormValidator.validators[validator_name];
				
				if (validator)
				{
					// Fixes a weird Safari 1.0 bug where regular expressions don't match on an input.value
					// if the value attribute hasn't been specified in the HTML
					if (field.type.toLowerCase() != 'file') {
						field.value = field.value;
					}
					
					if (!validator(field, validator_params)) {
						FormValidator.fieldError(field, valid_params[valid_params.length - 1]);
						return false;
					}
				}
				else
				{
					FormValidator.fieldError(field, 'Website error, please contact the owner ' +
						'(' + validator_name + ' is not a known validator ' +
						'in field "' + (field.name || '[unknown]') + '")');
					return false;
				}
			}
			else
			{
				FormValidator.fieldError(field, 'Website error, please contact the owner (' +
					'couldn\'t parse "' + valid_param + '")');
				return false;
			}
		}
		
		return true;
	}
}
