var whitespace = " \t\n\r";
var defaultEmptyOK = false
function makeArray(n)
{
	for(var i = 1; i <= n; i++)
		this[i] = 0;
	this.length = n;
return this;
}

var daysInMonth = new makeArray(12);
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;

var this_month = new makeArray(12);
this_month[1] = "JAN";
this_month[2] = "FEB";
this_month[3] = "MAR";
this_month[4] = "APR";
this_month[5] = "MAY";
this_month[6] = "JUN";
this_month[7] = "JUL";
this_month[8] = "AUG";
this_month[9] = "SEP";
this_month[10] = "OCT";
this_month[11] = "NOV";
this_month[12] = "DEC";

var USStateCodeDelimiter = "|";
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"
var digits = "0123456789";

// non-digit characters which are allowed in ZIP Codes
var ZIPCodeDelimiters = "-";

// our preferred delimiter for reformatting ZIP Codes
var ZIPCodeDelimeter = "-"

// characters which are allowed in Social Security Numbers
var validZIPCodeChars = digits + ZIPCodeDelimiters

// U.S. ZIP codes have 5 or 9 digits.
// They are formatted as 12345 or 12345-6789.
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9


/**
 * DHTML phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;


function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

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++)
    {
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

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

function isAlphanumeric(s)
{
    if (isEmpty(s)) return true;

    var i;
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (!(isDigit(c) || ((c >= "A") && (c <= "Z")) || ((c >= "a") && (c <= "z")))){
            return false;
        }
    }
    return true;
}

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];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}

function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}

function isDecimal(real,numReal,numDecimal) {
    if (isWhitespace(real)) {
         return false;
    }
	if (real.indexOf(".") == 0) {
		real = "0"+real;
	}
    arrReal = real.split(".");
    if (arrReal.length==1) {
         return ( isSignedInteger(arrReal[0]) && arrReal[0].length <= (numReal-numDecimal));
   } else if (arrReal.length == 2) {
          return ( isSignedInteger(arrReal[0]) && arrReal[0].length <= (numReal-numDecimal) && isInteger(arrReal[1]) && arrReal[1].length <= numDecimal);
   }
   return false;
}

function toDecimal(aReal,numDecimal) {
	var real = aReal.toString();
    if (isWhitespace(real)) {
         return real;
    }
	if (real.indexOf(".") == 0) {
		real = "0"+real;
	}
    arrReal = real.split(".");
    if (arrReal.length==1) {
         real = arrReal[0];
    } else if (arrReal[1].length > 1) {
		 var a = arrReal[0].toString();
		 var b = arrReal[1].toString();
		 var d = parseFloat(b.substr(0, numDecimal)+"."+b.substr(numDecimal));
		 var c = Math.round(d);
         real = a+"."+c;
    }
    return real;
}

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 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 mmmReformat (mmm)
{   if (!isEmpty(mmm))
       if (mmm.toUpperCase() == "JAN") return "01";
       else if (mmm.toUpperCase() == "FEB") return "02";
       else if (mmm.toUpperCase() == "MAR") return "03";
       else if (mmm.toUpperCase() == "APR") return "04";
       else if (mmm.toUpperCase() == "MAY") return "05";
       else if (mmm.toUpperCase() == "JUN") return "06";
       else if (mmm.toUpperCase() == "JUL") return "07";
       else if (mmm.toUpperCase() == "AUG") return "08";
       else if (mmm.toUpperCase() == "SEP") return "09";
       else if (mmm.toUpperCase() == "OCT") return "10";
       else if (mmm.toUpperCase() == "NOV") return "11";
       else if (mmm.toUpperCase() == "DEC") return "12";
       else return "13";  // set to invalid month if not null or one of the above mmm
    else return mmm;  //return null field
    return (month);
}

function isYear (s)
{   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);
}

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;
    while((s.charAt(0)=='0')&&(s.length>1))
    {
	s = s.substring(1,s.length);
    }
    var num = parseInt (s);
    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)
{    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate (day, mmm, year){
    var month = mmmReformat(mmm);
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    while((month.charAt(0)=='0')&&(month.length>1))
    {
	month = month.substring(1,month.length);
    }
    var intMonth = parseInt(month);
    while((day.charAt(0)=='0')&&(day.length>1))
    {
	day = day.substring(1,day.length);
    }
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false;
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

    // check agains a min date
    if (intYear < 1998) return false;
    return true;
}

function warnInvalid (theField, s)
{
	if (theField.length) {
		if (theField[0].focus) {
			theField[0].focus();
		}
	} else {
		if (theField.focus) {
			theField.focus();
		}
    	if (theField.select){
        	theField.select();
    	}
	}
    alert(s);
    return false;
}

function warnBadYear (theField, s)
{
    var confirmYear = confirm(s);
    if (confirmYear == false){
	theField.focus();
    if (theField.type.substring(0,6) != "select"){
        theField.select();
    }

	return false;
    }
    else return true;
}

function decimal(anynum) {
        //returns the decimal portion of anynum with integer truncated.
        return parseFloat(anynum)-parseInt(anynum)
}

function integer(anynum) {
        //returns just the integer portion of anynum.
        return parseInt(anynum)
}

function CheckDate(aDateField)
{
  dd =  aDateField.value.substring(0,2)
  mmm =  aDateField.value.substring(2,5)
  yy =  aDateField.value.substring(5,9)

  mm = mmmReformat(mmm);
  // check if date is valid
  if(!isDate(dd,mmm,yy)){
    return warnInvalid(aDateField,"Invalid Date: " + dd + mmm + yy + "\r" + "Please Enter DDMMMYYYY. YYYY Must be greater than 1997");
  }
  return true;
}

//Should be used in conjunction with Check date.
//This will check the date entered and set it to today if it is
//in the future but WILL NOT check the date for validity!!!!
function CheckForFutureDate(aDateField)
{
  dd =  aDateField.value.substring(0,2)
  mmm =  aDateField.value.substring(2,5)
  yy =  aDateField.value.substring(5,9)

  mm = mmmReformat(mmm);
  dateEntered = new Date(yy,(mm - 1),dd)
  today = new Date()
  // set date to today if it is in the future
  if(dateEntered.getTime() > today.getTime()){
    var displayMonth = today.getMonth() + 1
    var displayDate
    //format date
    if(today.getDate() < 10){
       displayDate = "0" + today.getDate()
    }else{
       displayDate = today.getDate()
    }
    aDateField.value = displayDate + this_month[displayMonth] + today.getFullYear()
  }
}

function isStateCode(s)
{   if (isEmpty(s))
       if (isStateCode.arguments.length == 1) return defaultEmptyOK;
       else return (isStateCode.arguments[1] == true);
    return ( (USStateCodes.indexOf(s) != -1) &&
             (s.indexOf(USStateCodeDelimiter) == -1) )
}

function isZIPCodeOrEmpty (s)
{  if (isEmpty(s))
      return 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)))
}

// Changes date from DDMMMYYYY format to YYYYMMDD format
// Good for comparing Dates
function RearrangeDate(dateString)
{
	var day = "";
	var year = "";
	var date = "";
	var month = "";

	month = mmmReformat(dateString.substring(2,5));

	day = dateString.substring(0,2);
	year = dateString.substring(5,9);

	date = year + month + day;

	return(parseInt(date));
}

function validateEmail(s)
{
	var email = s;
	var result = null;

	noAt = email.indexOf("@", 0);
	noDot = email.indexOf(".", 0);

	if ((noAt == -1) || (noDot == -1))
		return false;
	else return true;
}

function selectFirstField(theForm)
{
    for (i=0; i<theForm.elements.length; i++){

        if (theForm.elements[i].type == "text" || theForm.elements[i].type == "textarea"){
            if (theForm.elements[i].select){
                theForm.elements[i].select();
            }
            theForm.elements[i].focus();
            break;
        }
    }
}

function strippingDoubleQuotes(theField) {
	var doStrip = false;
	var s = theField.value;
	if (s.indexOf('"') >= 0) {
		theField.value = s.replace(/"/g,"");
		warnInvalid(theField,'The double quotes (") have been removed from this field.  Please press the save button again to save your data.');
		boo = true;
	}
	return doStrip;
}

function QueryString() {
	this.arrParam = new Array()
	this.arrName = new Array();
	this.arrValue = new Array();
	this.query = window.location.search; //getting QueryString
	this.query = this.query.substr(1); 	 //removing '?'
	if ( this.query.length>0 ) {
		this.arrParam = this.query.split("&");	 //just splitting QueryString on '&', assuming "value&value" not "name=value&name=value"
		this.arrName = new Array(this.arrParam.length);
		this.arrValue = new Array(this.arrParam.length);
		for (x=0; x<this.arrParam.length; x++) { //assigning the QueryString values inorder to the form elements
			if (this.arrParam[x]) {
   				var arrTemp = this.arrParam[x].split("=");
				this.arrName[x] = arrTemp[0];
				if (arrTemp.length>1) {
					this.arrValue[x] = arrTemp[1];
				}
			}
			//alert("arrParam["+x+"]="+this.arrParam[x]+"  arrName["+x+"]="+this.arrName[x]+"  arrValue["+x+"]="+this.arrValue[x]);
		}
	}

	this.getParameter = _getParam;
}

function _getParam(key)
{
	for (x=0; x<this.arrName.length; x++) {
	    k = key.toUpperCase();
		n = this.arrName[x].toUpperCase();
		if (k == n) {
			return this.arrValue[x];
		}
	}
	return "";
}

function getEncodedLength(inString){


	if (inString == null || inString.length == 0 || inString.indexOf("'") == -1){
		return inString.length;
	}

	outString = "";
	for (i=0; i<inString.length; i++){
		if (inString.charAt(i) == "'"){
			outString += inString.charAt(i); //Need to add an extra tick mark for DB2 to handle the single quote.
		}

		outString += inString.charAt(i);
	}

    fieldLength = outString.length;
    if (navigator.appName == "Microsoft Internet Explorer"){
        for(i=0; i<outString.length; i++){
            if (outString.charAt(i) == "\n"){
                fieldLength++;
            }
        }
    }
	return fieldLength;

}

// Function to see if there's any checkboxes checked
// Includes single and multiple checkbox situations
function isAnythingChecked(checkboxes) {
	var isChecked = false;
	if (checkboxes) {
		if (checkboxes.length) {
			for (i=0; i<checkboxes.length; i++) {
				if (checkboxes[i].checked) {
					isChecked = true;
					break;
				}
			}
		} else {
			isChecked = checkboxes.checked;
		}
	}
	return isChecked;
}

function checkRadio(radioObject, value)
{
	if (radioObject.length) {
		var i=0;
		for (; i<radioObject.length; i++){
			if (radioObject[i].value == value){
				radioObject[i].checked = true;
				break;
			}
		}
	} else {
		radioObject.checked = true;
	}
}

function getRadioValue(radioObject)
{
	var value = null;
	if (radioObject.length) {
		var i=0;
		for (; i<radioObject.length; i++){
			if (radioObject[i].checked){
				value = radioObject[i].value;
				break;
			}
		}
	} else {
		if (radioObject.checked) value = radioObject.value;
	}
	return value;
}

function setCheckboxes(outForm, namePrefix, isChecked) {
	var prefixLength = namePrefix.length;
  	for (var i = 0; i < outForm.elements.length; i++){
		var element = outForm.elements[i];
		var name = element.name;
    	if (element.type == "checkbox" && name.length >= prefixLength && name.substring(0,prefixLength) == namePrefix) {
			element.checked = isChecked;
		}
  	}
}

// clearAllFormElements accepts a form and clears out the selected values for each element in the form
// Added: 5/2/2001 - RLW
function clearAllFormElements(theForm) {
	var theElements = theForm.elements;
	for (i = 0; i < theElements.length; i++) {
		switch (theElements[i].type) {
			case ("checkbox"):
			case ("radio"):				theElements[i].checked = false;
										break;
			case ("text"):
			case ("textarea"):
			case ("password"):			theElements[i].value = "";
										break;
			case ("select-one"):
			case ("select-multiple"):	var options = theElements[i].options;
										for (j = 0; j < options.length; j++) {
											options[j].selected = false;
										}
										break;
			case ("button"):
			case ("reset"):
			case ("submit"):
			case ("hidden"):
			default:					break;			// do nothing
		}
	}
}

function clearSelect(mySelect) {
	for (var i=mySelect.options.length-1; i>=0; i--) {
		mySelect.options[i].selected=false;
	}
}

function isTooBig(text, maxsize) {
	if(text.length > maxsize)
		return true;
	else return false;
}
function checkOnSelect(checkbox, Select){
	if(Select.selectedIndex > 0){
		checkbox.checked = true;
	}

}

function isValidName(text) {
	if (text != null) {
		var len = text.length;
		for (var i = 0; i < len; i++) {
			var c = text.charAt(i);
			if (isDigit(c)) return false;
		}
		return true;
	} else return false;
}
