//<!--

var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var decimalPointDelimiter = ".";
var validCharacters = "/'-"
var emailCharacters = lowercaseLetters + uppercaseLetters + digits + "@_.-";

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

defaultEmptyOK = false;

function isEmpty(pString)
{   
	return ((pString == null) || (pString.length == 0));
}

function isWhitespace (pString)
{   
	var i;
    if (isEmpty(pString)) return true;

    for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    return true;
}

function isPostCode (pString)
{   

var s = "";

if (isEmpty(pString)) return false;

for (var i = 0; i < pString.length; i++)
{   
	if(pString.charAt(i) >= '0' && pString.charAt(i) <= '9')
	{
		s+="N";
	}
	else
	{
		if(pString.charAt(i) != ' ')
			s+="A";
	}
}

if(s == "AANNAA")
	return true;
if(s == "AANANAA")
	return true;
if(s == "ANNAA")
	return true;
if(s == "ANANAA")
	return true;
if(s == "AANNNAA")
	return true;
if(s == "ANNNAA")
	return true;
if(s == "AAANAA")
	return true;
 
return false;
}

function isValidChar(pString)
{
	var i;
    if (isEmpty(pString)) 
		return true;

    for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (validCharacters.indexOf(c) == -1) 
			return false;
    }

    return true;
}

function isEmailChar(pString)
{
	var i;
    if (isEmpty(pString)) 
		return true;

    for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (emailCharacters.indexOf(c) == -1) 
			return false;
    }

    return true;
}

function stripInitialWhitespace(pString)
{   
	var i = 0;
    while ((i < pString.length) && charInString (pString.charAt(i), whitespace))
       i++;
    
    return pString.substring (i, pString.length);
}

function isLetter(c)
{   
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit(c)
{   
	return ((c >= "0") && (c <= "9"))
}

function isHyphen(c)
{   
	return (c == "-")
}

function isLetterOrDigit(c)
{   
	return (isLetter(c) || isDigit(c))
}

function isInteger(pString)
{   
	var i;

    if (isEmpty(pString)) 
       if (isInteger.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isInteger.arguments[1] == true);

    for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (!isDigit(c)) 
			return false;
    }

    return true;
}

function isSignedInteger (s)
{   
	if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isSignedInteger.arguments[1] == true);

    else 
	{
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];

        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}

function isPositiveInteger (pString)
{   
	var secondArg = defaultEmptyOK;

    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];

	return (isSignedInteger(pString, secondArg)
         && ( (isEmpty(pString) && secondArg)  || (parseInt (pString) > 0) ) );
}

function isNonnegativeInteger(pString)
{   
	var secondArg = defaultEmptyOK;

    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];

    return (isSignedInteger(pString, secondArg)
         && ( (isEmpty(pString) && secondArg)  || (parseInt (pString) >= 0) ) );
}

function isNegativeInteger(pString)
{   
	var secondArg = defaultEmptyOK;

    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];

    return (isSignedInteger(pString, secondArg)
         && ((isEmpty(pString) && secondArg) || (parseInt(pString) < 0) ) );
}

function isNonpositiveInteger(pString)
{   var secondArg = defaultEmptyOK;

    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];

    return (isSignedInteger(pString, secondArg)
         && ((isEmpty(pString) && secondArg)  || (parseIn (pString) <= 0) ) );
}

function isFloat (s)
{   
	var i;
    var seenDecimalPoint = false;

    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);

    if (s == decimalPointDelimiter) return false;

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }

    return true;
}

function isAlphabetic (pString)
{   
	var i;

    if (isEmpty(pString)) 
       if (isAlphabetic.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isAlphabetic.arguments[1] == true);

    for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (!isLetter(c))
        return false;
    }

    return true;
}

function isAlphaNumeric(pString)
{   
	var i;

    if (isEmpty(pString)) 
       if (isAlphaNumeric.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isAlphaNumeric.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}

function isNumeric(pString)
{   
	var i;

    if (isEmpty(pString)) 
       if (isNumeric.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isAlphaNumeric.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (!isDigit(c))
        return false;
    }

    return true;
}

function isAlphaSpaceHyphen(pString)
{   
	var i;

    if (isEmpty(pString)) 
       if (isAlphaSpaceHyphen.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isAlphaSpaceHyphen.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
    {   
        var c = pString.charAt(i);

        if (! (isLetter(c) || (isHyphen(c) && !(i ==0 || i == pString.length -1)) || (isWhitespace(c) && !(i ==0 || i == pString.length-1))))
        return false;
    }

    return true;
}

function isAlphaNumSpace(pString)
{
	var i;
	if (isEmpty(pString))
		if (isAlphaNumSpace.arguments.length == 1) 
			return defaultEmptyOK;
		else 
			return (isAlphaNumSpace.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
	{   
		var c = pString.charAt(i);

		if (! (isLetter(c) || isDigit(c) || isWhitespace(c)) )
			return false;
	}
	return true;
}

function isAlphaNumSpaceChar(pString)
{
	var i;
	if (isEmpty(pString))
		if (isAlphaNumSpaceChar.arguments.length == 1) 
			return defaultEmptyOK;
		else 
			return (isAlphaNumSpaceChar.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
	{   
		var c = pString.charAt(i);

		if (! (isLetter(c) || isDigit(c) || isWhitespace(c) || isValidChar(c) ))
			return false;
	}
	return true;
}

function isAlphaSpace(pString)
{
	var i;
	if (isEmpty(pString))
		if (isAlphaSpace.arguments.length == 1) 
			return defaultEmptyOK;
		else 
			return (isAlphaSpace.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
	{   
		var c = pString.charAt(i);

		if (! (isLetter(c) || (isWhitespace(c) && !(i ==0 || i == pString.length -1))) )
			return false;
	}
	return true;
}

function isNumberSpace(pString)
{
	var i;
	if (isEmpty(pString))
		if (isNumberSpace.arguments.length == 1) 
			return defaultEmptyOK;
		else 
			return (isAlphaNumeric.arguments[1] == true);

	for (i = 0; i < pString.length; i++)
	{   
		var c = pString.charAt(i);

		if (!(isDigit(c) || isWhitespace(c)))
			return false;
	}
	return true;
}

function isIntegerInRange (s, a, b)
{   
	if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isIntegerInRange.arguments[1] == true);

    if (!isInteger(s, false)) 
		return false;

    var num = parseInt(s, 10);
    return ((num >= a) && (num <= b));
}

function isEmail (pString)
{   
	if(isEmpty(pString))
		return false;

	if (isWhitespace(pString)) 
		return false;

	if (isEmailChar(pString) == false)
		return false;

	var i = 1;
	var nLength = pString.length;

	// look for @
	while ((i < nLength) && (pString.charAt(i) != "@"))
	{ 
		i++
	}

	if ((i >= nLength) || (pString.charAt(i) != "@")) 
		return false;
	else 
		i += 2;

	// look for .
	while ((i < nLength) && (pString.charAt(i) != "."))
	{ 
		i++
	}

	// there must be at least one character after the .
	if ((i >= nLength - 1) || (pString.charAt(i) != ".")) 
		return false;
	else 
		return true;
}

function isYear(pString)
{   
	if (isEmpty(pString)) 
       if (isYear.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(pString)) 
		return false;
    return (pString.length == 4);
}

function isMonth(pString)
{   
	if (isEmpty(pString)) 
       if (isMonth.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isMonth.arguments[1] == true);
    return isIntegerInRange (pString, 1, 12);
}

function isDay(pString)
{   if (isEmpty(pString)) 
       if (isDay.arguments.length == 1) 
			return defaultEmptyOK;
       else 
			return (isDay.arguments[1] == true);   
    return isIntegerInRange (pString, 1, 31);
}

function daysInFebruary(nYear)
{   
    return (((nYear % 4 == 0) && ((!(nYear % 100 == 0)) || (nYear % 400 == 0))) ? 29 : 28 );
}

function isDate (year, month, day)
{   
	// catch invalid years (not 4-digit) and invalid months and days.
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) 
	{
		return false;
	}

    // Explicitly change type to integer to make code work in both
    // JavaScript 1.1 and JavaScript 1.2.
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);

    // catch invalid days, except for February
    if (intDay > daysInMonth[intMonth]) return false; 

    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

    return true;
}

function setDefaultField(nFieldValue)
{
	document.forms[0].elements[parseInt(nFieldValue)].focus();
}


function roundup(number, X)
{
	alert(number);
	// rounds number to X decimal places, defaults to 2
	X = (!X ? 2 : X);
	return Math.round(number*Math.pow(10, X))/Math.pow(10, X);
}

//
// Add commas to a number.
//
function Comma(pElement, number) 
{
	// Strip off commas. this is done to avoid two commas
	// being placed beside each other
	text = "";
	for (i = 0; i <= number.length; i++)
	{
		if (number.substring(i, i+1) != ",")
		{
			text = text + number.substring(i, i+1);	
		}
	}

	number = '' + text;

	if (number.length > 3)
	{
		var mod = number.length % 3;
		var output = (mod > 0 ? (number.substring(0,mod)) : '');

	for (i=0 ; i < Math.floor(number.length / 3); i++) {
		if ((mod == 0) && (i == 0))
			output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
		else
			output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
		}
		pElement.value = output;
		return (output);
	}
	else 
		return number;
}

//
// Strip off commas from an input
//
function StripComma(pElement, str)
{
	text = "";
	for (i = 0; i <= str.length; i++)
	{
		if (str.substring(i, i+1) != ",")
		{
			text = text + str.substring(i, i+1);	
		}
	}
	pElement.value = text;	
}


//
// Strip outwhitespace
//
function removewhitespace(str)
{
	text = "";
	for (i = 0; i <= str.length; i++)
	{
		if (str.substring(i, i+1) != " ")
		{
			text = text + str.substring(i, i+1);	
		}
	}
	return(text);	
}


//
/// Validate an National Insurance Number.
//
function isNINumber(pString)
{   

	var s = "";

	if (isEmpty(pString)) return false;

	for (var i = 0; i < pString.length; i++)
	{   
		if(pString.charAt(i) >= '0' && pString.charAt(i) <= '9')
		{
			s+="N";
		}
		else
		{
			if(pString.charAt(i) != ' ')
				s+="A";
		}
	}

	if(s == "AANNNNNNA")
		return true;

	return false;
}


function split(form, pElementOrig, pElementTarg) 
{
	text = "";
	str = pElementOrig.value;
	
	i = 0;
	while (str.substring(i, i+1) != " ")
	{
		text = text + str.substring(i, i+1);
		
		i++;
		
		if (i > str.length)
		{
			break;
		}
	}
	pElementTarg.value = text;
}


//-->
