<!--
// In alphabetical order by function name

// Go through all check boxes, return array (with position numbers) of all the ones
// that are selected. If no boxes checked, returned array is empty (zero-length)
function getSelectedCheckbox(p_buttonGroup)
{
	var i;
	var lastElement = 0;
	var retArr = new Array();
	if (p_buttonGroup[0])
	{ // The button group is an array (one check box is not an array)
		for (i = 0; i < p_buttonGroup.length; i++)
		{
			if (p_buttonGroup[i].checked)
			{
				retArr.length = lastElement;
				retArr[lastElement] = i;
				lastElement++;
			}
		}
	}
	else
	{ // Only one check box (it's not an array)
		if (p_buttonGroup.checked)
		{
			retArr.length = lastElement;
			retArr[lastElement] = 0; // zero as array value
		}
	}
	return retArr;
}

// Return array of values selected in the check box group.
// If no boxes checked, returned array is empty (zero-length)
function getSelectedCheckboxValue(p_buttonGroup)
{
	var i;
	var retArr = new Array();
	var selectedItems = getSelectedCheckbox(p_buttonGroup);
	if (selectedItems.length != 0)
	{
		retArr.length = selectedItems.length;
		for (i = 0; i < selectedItems.length; i++)
		{
			if (p_buttonGroup[selectedItems[i]]) // It is an array
				retArr[i] = p_buttonGroup[selectedItems[i]].value;
			else // It is not an array (there is just one check box and it is selected)
				retArr[i] = p_buttonGroup.value;
		}
	}
	return retArr;
}

// Returns array number of selected radio button, or -1 if no button selected
function getSelectedRadio(p_buttonGroup)
{
	var i;
	if (p_buttonGroup[0])
	{ // Button group is an array (one button is not an array)
		for (i = 0; i < p_buttonGroup.length; i++)
		{
			if (p_buttonGroup[i].checked)
				return i;
		}
	}
	else
	{ // Only one button (it's not an array)
		if (p_buttonGroup.checked)
			return 0;
	}
	return -1;
}

// Return value of selected radio button, or '' if no button selected
function getSelectedRadioValue(p_buttonGroup)
{
	var m_idx = getSelectedRadio(p_buttonGroup);
	if (m_idx == -1)
	{
		return '';
	}
	else
	{
		if (p_buttonGroup[m_idx]) // Button group is an array (one button is not an array)
			return p_buttonGroup[m_idx].value;
		else // Only one button (it is not an array)
			return p_buttonGroup.value;
	}
}

function isAlphabet(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isLetter(c)))
			return false;
	}
	return true;
}

function isAlphanumeric(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isDigit(c) || isLetter(c)))
			return false;
	}
	return true;
}

function isAmpersand(c)
{
	return (c == '&');
}

function isApostrophe(c)
{
	return (c == '\'');
}

function isBackSlash(c)
{
	return (c == '\\');
}

// non-existing/zero-length strings and a string containing white space
function isBlank(s)
{
	if (isEmpty(s))
		return true;
	var blanks = " \t\r\n"; // white space
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (blanks.indexOf(c) == -1)
			return false;
	}
	return true;
}

function isCarriageReturn(c)
{
	return (c == '\r');
}

function isColon(c)
{
	return (c == ':');
}

function isComma(c)
{
	return (c == ',');
}

function isDigit(c)
{
	return (c >= '0' && c <= '9');
}

// ASCII decimal 128
function isDollarSymbol(c)
{
	return (c == '$');
}

function isDot(c)
{
	return (c == '.');
}

function isDoubleQuote(c)
{
	return (c == '"');
}

function isEmpty(s)
{
	return (s == null || s.length == 0);
}

// ASCII decimal 192 to 255
function isEuropeanChar(c)
{
	return (c >= 'À' && c <= 'ÿ');
}

// ASCII decimal 128
function isEuroSymbol(c)
{
	return (c == '€');
}

function isForwardSlash(c)
{
	return (c == '/');
}

function isHash(c)
{
	return (c == '#');
}

function isHyphen(c)
{
	return (c == '-');
}

function isLetter(c)
{
	return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
}

function isLineFeed(c)
{
	return (c == '\n');
}

function isNonbreakingSpace(c)
{
	return (c == '\xA0');
}

function isPlusMinusSign(c)
{
	return (c == '+' || c == '-');
}

// ASCII decimal 163
function isPoundSymbol(c)
{
	return (c == '£');
}

function isPrice(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isDot(c) || isDigit(c)))
			return false;
	}
	return true;
}

function isRoundBrackets(c)
{
	return (c == '(' || c == ')');
}

function isSemicolon(c)
{
	return (c == ';');
}

function isSingleQuote(c)
{
	return (c == '\'');
}

function isSpace(c)
{
	return (c == ' ');
}

function isTab(c)
{
	return (c == '\t');
}

function isTilde(c)
{
	return (c == '~');
}

function isUnderscore(c)
{
	return (c == '_');
}

function isValidAddress(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isAmpersand(c) || isCarriageReturn(c) || isComma(c) || isDot(c) || isEuropeanChar(c) || isForwardSlash(c) || isHash(c) || isHyphen(c) || isLineFeed(c) || isRoundBrackets(c) || isSingleQuote(c) || isSpace(c) || isUnderscore(c)))
			return false;
	}
	return true;
}

function isValidAddressLine(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isAmpersand(c) || isApostrophe(c) || isComma(c) || isDot(c) || isDoubleQuote(c) || isEuropeanChar(c) || isForwardSlash(c) || isHash(c) || isHyphen(c) || isRoundBrackets(c) || isSingleQuote(c) || isSpace(c) || isUnderscore(c)))
			return false;
	}
	return true;
}

function isValidCompanyName(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isAmpersand(c) || isApostrophe(c) || isColon(c) || isComma(c) || isDot(c) || isDoubleQuote(c) || isEuropeanChar(c) || isPlusMinusSign(c) || isRoundBrackets(c) || isSpace(c) || isUnderscore(c)))
			return false;
	}
	return true;
}

function isValidEmailAddress(s)
{
	if (isBlank(s))
		return false;
	var m_pattern_invalid = /(@.*@)|(\.\.)|(\.@)|(@\.)|(^\.)|(\.$)/;
	var m_pattern_valid = /^[\w-\.]+@\[?[a-z\.\d-]*[a-z\d-]{2,}\.([a-z]{2,6}|\d{1,3}\])$/i;
	return (!(m_pattern_invalid.test(s)) && (m_pattern_valid.test(s)));
}

function isValidLoginName(s)
{
	if (isBlank(s) || s.length > 31)
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isHyphen(c)))
			return false;
	}
	return true;
}

function isValidMetatagKeywords(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isAmpersand(c) || isCarriageReturn(c) || isComma(c) || isDollarSymbol(c) || isDot(c) || isEuroSymbol(c) || isForwardSlash(c) || isHyphen(c) || isLineFeed(c) || isPoundSymbol(c) || isSingleQuote(c) || isSpace(c) || isTab(c) || isUnderscore(c)))
			return false;
	}
	return true;
}

function isValidName(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isComma(c) || isDot(c) || isEuropeanChar(c) || isHyphen(c) || isSingleQuote(c) || isSpace(c)))
			return false;
	}
	return true;
}

function isValidPhoneNumber(s)
{
	if (isBlank(s) || s.length < 6 || s.length > 31)
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isDigit(c) || isDot(c) || isForwardSlash(c) || isHash(c) || isPlusMinusSign(c) || isRoundBrackets(c) || isSpace(c)))
			return false;
	}
	return true;
}

function isValidPostcode(s)
{
	if (isBlank(s))
		return false;
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (!(isAlphanumeric(c) || isSpace(c)))
			return false;
	}
	return true;
}

// p_type is
//    either 'partial' for first part search e.g. LE1
//    or 'full' (it can be anything for the moment) for full post code search.
function isValidUKPostcodePatternMatch(p_postcode, p_type)
{
	var m_result = false;
	if (p_type == 'partial')
	{
		var m_re_regexp = /^[A-Za-z]{1,2}\d{1,2}/;
		m_result = p_postcode.match(m_re_regexp);
	}
	else // full search, i.e. p_type == 'full'
	{
		var m_re_regexp = /^[A-Za-z]{1,2}\d{1,2}[A-Za-z]? \d[A-Za-z]{2}$/;
		m_result = p_postcode.match(m_re_regexp);
	}
	return m_result != null;
}

// Copyright (c) 2000-2008 Atolis Ltd
// -->

