var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var digitsInUSAreaCode = 3;
var digitsInUSPhoneFirst = 3;
var digitsInUSPhoneLast = 4;
var phoneNumberDelimiters = "()-. ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var ZIPCodeDelimiters = "-";
var validZIPCodeChars = digits + ZIPCodeDelimiters
var CAPostalCodeDelimiters = " ";
var validCAPostalCodeChars = digits + uppercaseLetters + CAPostalCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var charsInCAPostalCode = 7
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var phonePrefix = "You did not enter a valid phone number into the "
var phoneSuffix = " field."
var iZIPCode = "Zip Code must be a 5 or 9 digit U.S. ZIP Code (like 94043). Please reenter it now."
var iEmail = "You must give a valid email address (like foo@bar.com). Please reenter it now."
var iDay = "This field must be a day number between 1 and 31.  Please reenter it now."
var iMonth = "This field must be a month number between 1 and 12.  Please reenter it now."
var iYear = "This field must be a 4 digit year number (like 2001).  Please reenter it now."
var iDatePrefix = "The Day, Month, and Year for "
var iDateSuffix = " do not form a valid date.  Please reenter them now."
var defaultEmptyOK = false

var daysInMonth = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
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;
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}
function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function stripCharsInNumber(bag)
{   
    var returnString = "";
    returnString = stripCharsInBag(bag,",");
    returnString = stripCharsInBag(returnString,"$");
    // could also strip initial whitespace
    return returnString;
}

function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}

function trim (s)
{
	return stripLastWhitespace(stripInitialWhitespace(s))
}
function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}
function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
     return s.substring (i, s.length);
}
function stripLastWhitespace (s)
{   var i = s.length;
    while ((i >0 ) && charInString (s.charAt(--i), whitespace));
       
     return s.substring (0,i+1);
}
function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.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];
        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}
function isPositiveInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    // The next line is a bit byzantine.  What it means is:
    // a) s must be a signed integer, AND
    // b) one of the following must be true:
    //    i)  s is empty and we are supposed to return true for
    //        empty strings
    //    ii) this is a positive, not negative, number
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}
function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    // The next line is a bit byzantine.  What it means is:
    // a) s must be a signed integer, AND
    // b) one of the following must be true:
    //    i)  s is empty and we are supposed to return true for
    //        empty strings
    //    ii) this is a number >= 0
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isNegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];
    // The next line is a bit byzantine.  What it means is:
    // a) s must be a signed integer, AND
    // b) one of the following must be true:
    //    i)  s is empty and we are supposed to return true for
    //        empty strings
    //    ii) this is a negative, not positive, number
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}
function isNonpositiveInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];
    // The next line is a bit byzantine.  What it means is:
    // a) s must be a signed integer, AND
    // b) one of the following must be true:
    //    i)  s is empty and we are supposed to return true for
    //        empty strings
    //    ii) this is a number <= 0
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 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++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }
    return true;
}
function isSignedFloat (s)
{   if (isEmpty(s)) 
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedFloat.arguments.length > 1)
            secondArg = isSignedFloat.arguments[1];
        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isFloat(s.substring(startPos, s.length), secondArg))
    }
}
function isAlphabetic (s)
{   var i;
    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    // Search through string's characters one by one
    // until we find a non-alphabetic character.
    // When we do, return false; if we don't, return true.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }
    // All characters are letters.
    return true;
}
function isAlphanumeric (s)
{   var i;
    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }
    return true;
}
function isUSPhoneNumber (s)
{   if (isEmpty(s)){
		return false;
	 }
    //substr is not supported in older browsers
    s1 = s.substr(0, 3);
    s2 = s.substr(3, 3);
    s3 = s.substr(6, 4);
    if (isUSPhoneAreaCode(s1) && isUSPhoneFirst(s2) && isUSPhoneLast(s3)){
		return true;
	}
    else {
	return false;
    }
}
function assembleUSPhoneNumber (s1, s2, s3, includeDashes)
{
    if (includeDashes) return s1 + '-' + s2 + '-' + s3;
    else return s1 + s2 + s3;
}

function isUSPhoneAreaCode (s)
{   
    return (isInteger(s) && s.length == digitsInUSAreaCode)
}

function isUSPhoneFirst (s)
{   
    return (isInteger(s) && s.length == digitsInUSPhoneFirst)
}

function isUSPhoneLast (s)
{
    return (isInteger(s) && s.length == digitsInUSPhoneLast)
}
function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
   
    if (isWhitespace(s)) return false;

   	var strEmail = s;
	if(strEmail.indexOf("'") != -1) return false;
	if(strEmail.indexOf('"') != -1) return false;
	if(strEmail.indexOf('<') != -1) return false;
	if(strEmail.indexOf('>') != -1) return false;

    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}
function getFullYear()
{
	var d;
	d = new Date();
	
	var year = d.getYear();
	return year < 1000 ? year + 1900 : year;
}
function isYear (s)
{   
	var d;
	d = new Date();
		
	if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 4) && s >= getFullYear() - 2 && s <= getFullYear() + 10);
    //return ((s.length == 4) && s >= d.getFullYear() && s <= d.getFullYear() + 10);
}
function isFiveYearFromNow (s)
{  
	var d;
	d = new Date();

	if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 4) && s >= getFullYear() - 5 && s <= getFullYear()+1);
   // return ((s.length == 4) && s >= d.getFullYear() - 5 && s <= d.getFullYear()+1);
}
function isTenYearFromNow (s)
{  
	var d;
	d = new Date();

	if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 4) && s >= getFullYear() - 10 && s <= getFullYear()+1);
   // return ((s.length == 4) && s >= d.getFullYear() - 10 && s <= d.getFullYear()+1);
}
function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    // Catch non-integer strings to avoid creating a NaN below,
    // which isn't available on JavaScript 1.0 for Windows.
    if (!isInteger(s, false)) return false;
    // Now, explicitly change the type to integer via parseInt
    // so that the comparison code below will work both on 
    // JavaScript 1.2 (which typechecks in equality comparisons)
    // and JavaScript 1.1 and before (which doesn't).
    var num = parseInt (s, 10);
    return ((num >= a) && (num <= b));
}
function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}
function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}
function daysInFebruary (year)
{   // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function isDate (year, month, day)
{   
    if (month.substring(0,1) * 1 == 0) { month = month.substring(1,2); }
    if (day.substring(0,1) * 1 == 0) { day = day.substring(1,2); }
	if (!(isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}
function warnEmpty (theField, s)
{   theField.focus()
    alert(mPrefix + s + mSuffix)
    return false
}
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}
function reformat (s)
{   var arg;
    var sPos = 0;
    var resultString = "";
    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) resultString += arg;
       else {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}
function checkString (theField, s, emptyOK)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
       return warnEmpty (theField, s);
    else return true;
}
function isZIPCode (s)
{  if (isEmpty(s)) 
       if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
       else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}
function isZIPCode (s)
{  if (isEmpty(s)) 
       if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
       else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}
function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}
function checkZIPCode (theField, emptyOK)
{   
	if (checkZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalid (theField, iZIPCode);
      else 
      {  // if you don't want to insert a hyphen, comment next line out
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}
function checkCAZIPCode (theField, emptyOK)
{   if (checkCAZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, CAPostalCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalid (theField, iZIPCode);
      else 
      {  // if you don't want to insert a hyphen, comment next line out
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}

// Sample call: checkRegex(regexp, fieldobj, "First Name", regmsg)
function checkRegEx(exp, theField, s, msg, emptyOK)
{
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	var re = new RegExp(exp);
	if (!theField.value.match(re)) {
		warnInvalid(theField, 'Invalid characters in ' + s + '.  ' + msg);
		return false;
	}
	return true;
}

function checkUSPhone (theField, s, emptyOK)
{	
   if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false)){
			alert(phonePrefix + s + phoneSuffix);
			return false;
		}
       else 
       {  
			return true;
       }
    }
}

function checkUSPhone1st (theField, emptyOK)
{   if (checkUSPhone1st.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone1 = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber1st(normalizedPhone1, false)) 
          return warnInvalid (theField, Phone1st);
       else 
       {  
          return true;
       }
    }
}


function checkUSPhone2nd (theField, emptyOK)
{   if (checkUSPhone2nd.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone2 = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber2nd(normalizedPhone2, false)) 
          return warnInvalid (theField, Phone2nd);
       else 
       {  
          return true;
       }
    }
}


function checkUSPhone3rd (theField, emptyOK)
{   if (checkUSPhone3rd.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone3 = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber3rd(normalizedPhone3, false)) 
          return warnInvalid (theField, Phone3rd);
       else 
       {  
          return true;
       }
    }
}

function getConvert (packsize)
{
    for (i = 0; i < packsize.length; i++)
    {   
        var c = packsize.charAt(i);
        if ( c == '[' ) {
           for (j = i + 1; j < packsize.length; j++)
		   {
		      var d = packsize.charAt(j);
			  if ( d == ' ')
			  {
				return packsize.substring(i+1, j);
			  }
		   }
    	}
	}
	return 0;
	
}
function checkEmail (theField, emptyOK)
{   
	if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, iEmail);
    else return true;
}
function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false)) 
       return warnInvalid (theField, iYear);
    else return true;
}
function checkMonth (theField, emptyOK)
{   if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false)) 
       return warnInvalid (theField, iMonth);
    else return true;
}
function checkDay (theField, emptyOK)
{   if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isDay(theField.value, false)) 
       return warnInvalid (theField, iDay);
    else return true;
}
function checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)
{  
    if (checkDate.arguments.length == 4) OKtoOmitDay = false;
    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
    if (!isMonth(monthField.value)) return warnInvalid (monthField, iMonth);
    if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
    else if (!isDay(dayField.value)) 
       return warnInvalid (dayField, iDay);
    if (isDate (yearField.value, monthField.value, dayField.value))
       return true;
    alert (iDatePrefix + labelString + iDateSuffix)
    return false
}
function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked) { break }
    }
    return radio[i].value
}
function parseDates(DateString)
{
//-- Pass in "01/01/2000" and it returns true if it is a valid date.
	var intNdx, intLastNdx, bReturn;
	var day, month, year;
	bReturn = true;
	intNdx = DateString.indexOf('/', 0);
	intLastNdx = DateString.indexOf('/', (intNdx + 1));

	//Get Day, Month, and Year
	month = DateString.substr(0, intNdx);
	day= DateString.substr(intNdx + 1, (intLastNdx - intNdx - 1));
	year = DateString.substr(intLastNdx + 1, (DateString.length - intLastNdx));

	bReturn = isDate(year, month, day);
	return bReturn;
}


function fnRoundToTwoDecimal(num)
{
 var lstrNumber= new String(num);
 var Index,linttemp,Decpart,Intpart,lstrtemp;
 
 Index=lstrNumber.indexOf(".")
    
 if (Index!=-1)
 {
	Intpart=lstrNumber.substring(0,Index);

    Decpart=lstrNumber.substring(Index+1,lstrNumber.length);
    
    if (Decpart.length> 2)
     {
		linttemp=parseInt(Decpart.substring(0,2))
		
		if (Decpart.charAt(2)>=5 )
		{
			linttemp=parseInt(linttemp)+1;
			
			linttemp=linttemp.toString()
						
			if(linttemp.length>2)
			{
			 	Intpart=parseInt(Intpart)
				Intpart=Intpart+1
				return  Intpart.toString()+".00"
			}
			else
			{
				return Intpart+"."+ linttemp.toString()
			}
		}
		else
		{
		 return Intpart+"."+linttemp.toString()
		}
	 }
	 else
	 {
		
		if (Decpart.length== 1)
		{
			return lstrNumber+"0"
			
		}
		else
		{
		   return lstrNumber
		}
	 }
     
  } 
  else 
  {
	return lstrNumber +".00"
  }
     
  
 }
 
 
 
 function fnCommaFormat(num)
 {
 
 var lstrNumber= new String(num)
 
 
 var lintIndex= lstrNumber.indexOf(".")
 var lstrIntPart,lstrDecPart
 
 if (lintIndex!=-1)
 {
	lstrIntPart=lstrNumber.substring(0,lintIndex)

	
	lstrDecPart=lstrNumber.substring(lintIndex+1,lstrNumber.length)
	
	
	
	if (lstrIntPart.length>3)
	{
		return lstrIntPart.substring(0,lstrIntPart.length-3)+"," +lstrIntPart.substring(lstrIntPart.length-3,lstrIntPart.length)+"."+lstrDecPart
	}
	else
	{
		
		return lstrNumber 
	}
 }
 
 else
 {
	if (lstrNumber.length>3)
	
	{
		return lstrNumber.substring(0,lstrNumber.length-3)+","+lstrNumber.substring(lstrNumber.length-3,lstrNumber.length)
		
	
	}
	else
	{
		return lstrNumber 
	} 
 }
 }
  
function validatePassword(pstrString)
{
  var password = pstrString;

  var validcharacters = /[^\w!@#$~_?]/;
  var uppercasechars = /[^A-Z]/;
  var lowercasechars = /[^a-z]/;
  var specialchars  = /[^!@#$~_?]/;
  var numbers = /[^\d]/;

	var uppercasepresent = false;
	var lowercasepresent = false;
	var specialcharspresent = false;
	var numberspresent = false;

	//first validate if only the valid characters are present in the password
	var isValid = !(validcharacters.test(password));

	//if the user has typed in a character that is not valid , then to exit with error
	if( !isValid )
	{
		alert('Invalid character in password!');
		return -1;
	}

	//Check password length
	isValid = (password.length >= 8) && (password.length <= 20);

	if( !isValid )
	{
		alert('The length of the password must be between 8 and 20 characters');
		return -2;
	}
 
	//Check for uppercase letter
  var nCount=0;

  for( var i = 0;i<password.length;i++)
  {
	var oneChar = password.charAt(i);

    if(!uppercasepresent)
    {  
  		uppercasepresent = !(uppercasechars.test(oneChar));
		
		if( uppercasepresent )
		{
			nCount++;
		}
    }	
    if(!lowercasepresent)
    {  
  		lowercasepresent = !(lowercasechars.test(oneChar));
	        
		if( lowercasepresent )
		{
			nCount++;
		}
    }	
    if(!specialcharspresent)
    {  
  		specialcharspresent = !(specialchars.test(oneChar));
	        
		if( specialcharspresent )
		{
			nCount++;
		}
    }	
    if(!numberspresent)
    {  
  		numberspresent = !(numbers.test(oneChar));
	        
		if( numberspresent )
		{
			nCount++;
		}
    }
  }

  //if the number of conditions met is less than 3 , then to exit with error
  if( nCount < 3 )
  {
        alert('Password does not contain at least 3 of the following: uppercase letter, lowercase letter, number, or special character');
		return -3;
  }

  return 1;

}

function validateUsername(pstrString)
{
  var password = pstrString;

  var validcharacters = /[^\w!@#$~_?]/;
  var uppercasechars = /[^A-Z]/;
  var lowercasechars = /[^a-z]/;
  var specialchars  = /[^!@#$*_+-]/;
  var numbers = /[^\d]/;

  var uppercasepresent = false;
  var lowercasepresent = false;
  var specialcharspresent = false;
  var numberspresent = false;

  //first validate if only the valid characters are present in the password
  var isValid = !(validcharacters.test(password));

  //if the user has typed in a character that is not valid , then to exit with error
  if( !isValid )
  {
	    alert('Invalid character in username!');
		return -1;
  }

  if (isValid)
  {
		isValid = (password.length >= 8) && (password.length <= 20);

		if( !isValid )
		{
			alert('The length of the username is less than 8 or greater than 20 characters');
			return -2;
		}
  }

  return 1;

}