//alert("JavaScript (global.js) successfully loaded.");
function popUpWin(thisUrl,thisName,theseParams) {
  remote = open(thisUrl, thisName, theseParams);
  }
function helpLink(tab,file) {
  window.open("/popup.html?tab="+tab+"&file="+file,"help","width=560,height=600,location=0,menubar=0,resizable=1,scrollbars=1,status=1,toolbar=0");
  }
var remote = null;
function help(f,n,w,h,t) {
  remote = window.open("/helppopup.htm?tab=" +t+ "&file=" +f, n, 'width=' + w + ',height=' + h +',resizable=yes,scrollbars=yes,status=yes');
  if(remote != null) {
    if(remote.opener == null) remote.opener = self;
    window.name = 'store';
    }
  }
function rs(f,n,w,h,t) {
  remote = window.open("/helppopup.htm?tab=" +t+ "&file=" +f, n, 'width=' + w + ',height=' + h +',resizable=yes,scrollbars=yes,status=yes');
  if(remote != null) {
    if(remote.opener == null) remote.opener = self;
    window.name = 'store';
    }
  }
function close_me(){parent.window.close();}
function change_parent(url) {
  parent.opener.location = url;
	close_me();
  }
function changeParent(url) {
	opener.location=url;
	window.close();
  }
function rs2(n,u,w,h,x,no) {
  if(no==1) remote=window.open(u,n,'width='+w+',height='+h+',resizable=no,scrollbars=no,status=0');
  else remote=window.open(u,n,'width='+w+',height='+h+',resizable=yes,scrollbars=yes,status=0');
  if(remote != null) {
    remote.focus();
    if (remote.opener == null ) remote.opener = self;
    }
  if (x==1) return remote;
  }
function forgotPassword(thisUrl,thisName,theseParams) {remote = open(thisUrl, thisName, theseParams);}
var ns6=document.getElementById&&!document.all?1:0
var story="display:''"
var folder=''
function expandit(curobj) {
  folder=ns6?curobj.nextSibling.nextSibling.style:document.all[curobj.sourceIndex+1].style
  if (folder.display=="none") folder.display="block"
  else folder.display="none"
  }

//---------------------------------------
// Basic Validators
//---------------------------------------
function checkBlank(dp, aWhich, aCaption) {
  if (dp.elements[aWhich].value.length == 0) {
    alert(aCaption + ": Fill in all blanks");
    dp.elements[aWhich].focus();
    return false;
  }
  return true;
}

function emptyValue(dp, aWhich) {
  return (dp.elements[aWhich].value.length == 0);
}


//---------------------------------------
// Date Validator
//---------------------------------------
function genDayOpt() {
  today = new Date();
  today = new Date(today.getTime() + (1 * 60 * 60 * 24 * 1000));

  for(i=1;i<32;i++) {
    if (i == today.getDate())
      document.write("<option value='" + i + "' selected>" + i + "</option>");
    else
      document.write("<option value='" + i + "'>" + i + "</option>");
  }
}

function genMonthOpt() {
  mo = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

  today = new Date();
  today = new Date(today.getTime() + (1 * 60 * 60 * 24 * 1000));

  for(i=1;i<13;i++) {
    if (i == (today.getMonth()+1))
      document.write("<option value='" + i + "' selected>" + mo[i-1] + "</option>")
    else
      document.write("<option value='" + i + "'>" + mo[i-1] + "</option>");
  }
}

function test_input_data(day, month, year, aCaption) {
  switch(day) {
    case 29 :
      if(month == 2) {
        if(((year / 4) - Math.floor(year / 4)) == 0) {
          if(((year / 100) - Math.floor(year / 100)) == 0) {
            if(((year / 400) - Math.floor(year / 400)) == 0)
              break;
            else {
              alert(aCaption + ": That\'s not a leap year!");
              return false;
            } // year div by 4 and 100 but not 400 so can't be a leap year
          } else
            break;
        } else { // year not div by 4 so can't be a leap year
          alert(aCaption + ": That\'s not a leap year!");
          return false;
        }
      } else
        break;
    case 30 :
      if (month == 2) {
        alert(aCaption + ": Sorry, that is not a valid date");
        return false;
      } else
        break;
    case 31 :
      if((month == 2)||(month == 4)||(month == 6)||
         (month == 9)||(month == 11)) {
        alert(aCaption + ": Sorry, that is not a valid date");
        return false;
      } else
        break;
  }
}

function validDate(dp, aWhich, aOutput, aCaption) {
  var day, month, year;
  day = dp.elements["day." + aWhich].options[dp.elements["day." + aWhich].selectedIndex].value;
  month = dp.elements["month." + aWhich].options[dp.elements["month." + aWhich].selectedIndex].value;
  year = dp.elements["year." + aWhich].options[dp.elements["year." + aWhich].selectedIndex].value;

  if(test_input_data(day * 1, month * 1, year * 1, aCaption) == false) {
    return null;
  } else {
    if (month.length == 1) dateString = "0" + month + "/";
    else dateString = month + "/";
    if (day.length == 1) dateString += "0" + day + "/" + year;
    else dateString += day + "/" + year;

    dp.elements[aOutput].value = dateString;
    vDate = new Date(dateString);
    return vDate;
  }
}


//---------------------------------------
// Dole Delivery Validator
//---------------------------------------
function validDoleDelivery(dp, aDate, aCaption) {
  if (aDate == null)
    return false;
  else {
    vDate = new Date();
    vDaysDiff = (aDate.getTime() - vDate.getTime()) / 1000;
    vDaysDiff = vDaysDiff / (60 * 60 * 24);

    if (vDaysDiff < 1) {
      alert("Delivery must be at least next day!");
      return false;
    }

	  vMonth = aDate.getMonth();
  	vMonth = vMonth + 1;
  	//alert(vMonth);
    vDOM = aDate.getDate();
  	//alert(vDOM);

    if ((vMonth > 9) || ((vMonth == 9) && (vDOM > 28))) {
      alert("Due to current delivery restrictions, flowers cannot be delivered after September 28th.");
      return false;
  	}
    return true;
  }
}


function validFlowersDirectDelivery(dp, aDate, aCaption) {
  if (aDate == null)
    return false;
  else {
    //alert("delivery_flowersdirect_script.spl");
    vDate = new Date();
    vDaysDiff = (aDate.getTime() - vDate.getTime()) / 1000;
    vDaysDiff = vDaysDiff / (60 * 60 * 24);
  	//alert(vDaysDiff);

  	if (vDaysDiff < .58) {
      alert("The cut off time for next day delivery has already passed.\n Please pick the next available shipping date.");
      return false;
  	}

    if (vDaysDiff > 25) {
      alert("Delivery must be at most 25 days in the future!");
      return false;
    }


    vMonth = aDate.getMonth();
    vMonth = vMonth + 1;
    //alert(vMonth);
    vDOM = aDate.getDate();

    if ((vMonth == 7) && ((vDOM == 4) || (vDOM == 5))) {
      alert("Flowers cannot be delivered July 4th or 5th due to the Holiday.");
      return false;
    } else if ((vMonth == 9) && ((vDOM == 3) || (vDOM == 4))) {
      alert("Flowers cannot be delivered Sept 3rd or 4th due to the Labor Day Holiday.");
      return false;
    } else if ((vMonth == 10) && (vDOM == 9)) {
      alert("Flowers cannot be delivered Oct 9th due to the Labor Day Holiday.");
      return false;
    } else if ((vMonth == 11) && ((vDOM == 22) || (vDOM == 23))) {
      alert("Flowers cannot be delivered Nov 22th or 23th due to the Holiday.");
      return false;
    } else if ((vMonth == 12) && ((vDOM == 24) || (vDOM == 25) || (vDOM == 26))) {
      alert("Flowers cannot be delivered Dec 24th-26th due to the Holiday.");
      return false;
    } else if ((vMonth == 1) && ((vDOM == 1) || (vDOM == 2))) {
      alert("Flowers cannot be delivered Jan 1st or 2nd due to the Holiday.");
      return false;
    }

    vDay = aDate.getDay();

	  if ((vDay == 0) || (vDay == 1))  {
      alert("Flowers cannot be delivered on Sunday or Monday.");
      return false;
    }

    if (vDay == 6) {
      alert("There will be a $5 up-charge for Saturday delivery.");
      return true;
    }
    return true;
  }
}

function validFloristDelivery(dp, aDate, aCaption) {
  if (aDate == null)
    return false;
  else {
    vDate = new Date();
  	// new code
	  vMonth = aDate.getMonth();
  	vMonth = vMonth + 1;
    vDOM = aDate.getDate();
	  vHours = vDate.getHours();
  	vMinutes = vDate.getMinutes();

    vDaysDiff = (aDate.getTime() - vDate.getTime()) / 1000;
    vDaysDiff = vDaysDiff / (60 * 60 * 24);

    if ((vMonth == 10) && (vDOM == 8)) {
      alert("Flowers cannot be delivered October 8th due to the Holiday.");
      return false;
  	} else if ((vMonth == 11) && (vDOM == 22)) {
      alert("Flowers cannot be delivered Nov 22th due to the Holiday.");
      return false;
	  } else if ((vMonth == 12) && (vDOM == 25)) {
      alert("Flowers cannot be delivered Dec 25th due to the Holiday.");
      return false;
	  }

	  vDay = aDate.getDay();

	  if (vDay == 0) {
      alert("Flowers cannot be delivered on Sunday.");
      return false;
    }

    if (vDay == 6) {
  	  if (vDaysDiff < -.333) {
        alert("The cut off time for same day delivery has already passed.\n Please pick the next available shipping date.");
        return false;
  		}
    }

    if (vDay != 6) {
  	  if (vDaysDiff < -.412) {
        alert("The cut off time for same day delivery has already passed.\n Please pick the next available shipping date.");
        return false;
    	}
	  }
    return true;
  }
}

function validBasicDelivery(dp, aDate, aCaption) {
  if (aDate == null)
    return false;
  else {
    vDate = new Date();
    vDaysDiff = (aDate.getTime() - vDate.getTime()) / 1000;
    vDaysDiff = vDaysDiff / (60 * 60 * 24);

    if (vDaysDiff < 1.58) {
      alert("Delivery must be at least 2 days in the future!");
      return false;
    }

    if (vDaysDiff > 25) {
      alert("Delivery must be at most 25 days in the future!");
      return false;
    }

    return true;
  }
}

function validEMail(dp, aWhich, aCaption) {
  if (dp.elements[aWhich].value.indexOf("@") == -1) {
    alert(aCaption + ": Invalid email address");
    dp.elements[aWhich].focus();
    return false;
  }
  return true;
}

function validPhone(dp, aWhich, aOutput, aCaption) {
  var areacode, prefix, phone;

  areacode = dp.elements["Phone.1." + aWhich].value;
  prefix = dp.elements["Phone.2." + aWhich].value;
  phone = dp.elements["Phone.3." + aWhich].value;

  if ((areacode * 1 != areacode) || (areacode.length < 3)) {
    alert(aCaption + ": Invalid area code");
    dp.elements["Phone.1." + aWhich].focus();
    return false;
  }

  if ((prefix * 1 != prefix) || (prefix.length < 3)) {
    alert(aCaption + ": Invalid phone prefix");
    dp.elements["Phone.2." + aWhich].focus();
    return false;
  }

  if ((phone * 1 != phone) || (phone.length < 4)) {
    alert(aCaption + ": Invalid last four digits of phone number");
    dp.elements["Phone.3." + aWhich].focus();
    return false;
  }

  dp.elements[aOutput].value = areacode + "-" + prefix + "-" + phone;
  return true;
}

function validateFloatRange(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRange = new floatRange();
                for (x in oRange) {
                    var field = form[oRange[x][0]];

                    if ((field.type == 'text' ||
                         field.type == 'textarea') &&
                        (field.value.length > 0)) {

                        var fMin = parseFloat(oRange[x][2]("min"));
                        var fMax = parseFloat(oRange[x][2]("max"));
                        var fValue = parseFloat(field.value);
                        if (!(fValue >= fMin && fValue <= fMax)) {
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oRange[x][1];
                            isValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
                return isValid;
            }
function validateByte(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oByte = new ByteValidations();
                for (x in oByte) {
                	var field = form[oByte[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
						field.type == 'radio') {

						var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
							if (si >= 0) {
								value = field.options[si].value;
							}
						} else {
							value = field.value;
						}

                        if (value.length > 0) {
                            if (!isAllDigits(value)) {
                                bValid = false;
                                if (i == 0) {
                                    focusField = field;
                                }
                                fields[i++] = oByte[x][1];

                            } else {

	                            var iValue = parseInt(value);
	                            if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
	                                if (i == 0) {
	                                    focusField = field;
	                                }
	                                fields[i++] = oByte[x][1];
	                                bValid = false;
	                            }
                            }
						}

                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }
function validateMaxLength(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oMaxLength = new maxlength();
                for (x in oMaxLength) {
                    var field = form[oMaxLength[x][0]];

                    if (field.type == 'text' ||
			field.type == 'password' ||
                        field.type == 'textarea') {

                        var iMax = parseInt(oMaxLength[x][2]("maxlength"));
                        if (field.value.length > iMax) {
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oMaxLength[x][1];
                            isValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return isValid;
            }
function validateRequired(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRequired = new required();
                for (x in oRequired) {
                	var field = form[oRequired[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'file' ||
                        field.type == 'select-one' ||
                        field.type == 'radio' ||
                        field.type == 'password') {

                        var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
							if (si >= 0) {
								value = field.options[si].value;
							}
						} else {
							value = field.value;
						}

                        if (trim(value).length == 0) {

	                        if (i == 0) {
	                            focusField = field;
	                        }
	                        fields[i++] = oRequired[x][1];
	                        isValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return isValid;
            }

            // Trim whitespace from left and right sides of s.
            function trim(s) {
                return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
            }
function validateInteger(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oInteger = new IntegerValidations();
                for (x in oInteger) {
                	var field = form[oInteger[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio') {

                        var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
						    if (si >= 0) {
							    value = field.options[si].value;
						    }
						} else {
							value = field.value;
						}

                        if (value.length > 0) {

                            if (!isAllDigits(value)) {
                                bValid = false;
                                if (i == 0) {
	                                focusField = field;
	                            }
						        fields[i++] = oInteger[x][1];

                            } else {
	                            var iValue = parseInt(value);
	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
	                                if (i == 0) {
	                                    focusField = field;
	                                }
	                                fields[i++] = oInteger[x][1];
	                                bValid = false;
	                           }
                           }
                       }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }

            function isAllDigits(argvalue) {
                argvalue = argvalue.toString();
                var validChars = "0123456789";
                var startFrom = 0;
                if (argvalue.substring(0, 2) == "0x") {
                   validChars = "0123456789abcdefABCDEF";
                   startFrom = 2;
                } else if (argvalue.charAt(0) == "0") {
                   validChars = "01234567";
                   startFrom = 1;
                } else if (argvalue.charAt(0) == "-") {
                    startFrom = 1;
                }

                for (var n = startFrom; n < argvalue.length; n++) {
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
                }
                return true;
            }
function validateRange(form) {
                return validateIntRange(form);
            }
function validateCreditCard(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oCreditCard = new creditCard();
                for (x in oCreditCard) {
                    if ((form[oCreditCard[x][0]].type == 'text' ||
                         form[oCreditCard[x][0]].type == 'password' ||
                         form[oCreditCard[x][0]].type == 'textarea') &&
                        (form[oCreditCard[x][0]].value.length > 0)) {
                        if (!luhnCheck(form[oCreditCard[x][0]].value)) {
                            if (i == 0) {
                                focusField = form[oCreditCard[x][0]];
                            }
                            fields[i++] = oCreditCard[x][1];
                            bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
                return bValid;
            }

            /**
             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
             */
            function luhnCheck(cardNumber) {
                if (isLuhnNum(cardNumber)) {
                    var no_digit = cardNumber.length;
                    var oddoeven = no_digit & 1;
                    var sum = 0;
                    for (var count = 0; count < no_digit; count++) {
                        var digit = parseInt(cardNumber.charAt(count));
                        if (!((count & 1) ^ oddoeven)) {
                            digit *= 2;
                            if (digit > 9) digit -= 9;
                        };
                        sum += digit;
                    };
                    if (sum == 0) return false;
                    if (sum % 10 == 0) return true;
                };
                return false;
            }

            function isLuhnNum(argvalue) {
                argvalue = argvalue.toString();
                if (argvalue.length == 0) {
                    return false;
                }
                for (var n = 0; n < argvalue.length; n++) {
                    if ((argvalue.substring(n, n+1) < "0") ||
                        (argvalue.substring(n,n+1) > "9")) {
                        return false;
                    }
                }
                return true;
            }
function validateDate(form) {
               var bValid = true;
               var focusField = null;
               var i = 0;
               var fields = new Array();
               oDate = new DateValidations();
               for (x in oDate) {
                   var value = form[oDate[x][0]].value;
                   var datePattern = oDate[x][2]("datePatternStrict");
                   if ((form[oDate[x][0]].type == 'text' ||
                        form[oDate[x][0]].type == 'textarea') &&
                       (value.length > 0) &&
                       (datePattern.length > 0)) {
                     var MONTH = "MM";
                     var DAY = "dd";
                     var YEAR = "yyyy";
                     var orderMonth = datePattern.indexOf(MONTH);
                     var orderDay = datePattern.indexOf(DAY);
                     var orderYear = datePattern.indexOf(YEAR);
                     if ((orderDay < orderYear && orderDay > orderMonth)) {
                         var iDelim1 = orderMonth + MONTH.length;
                         var iDelim2 = orderDay + DAY.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderDay && iDelim2 == orderYear) {
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                         } else if (iDelim1 == orderDay) {
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                         } else if (iDelim2 == orderYear) {
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                         } else {
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                            if (!isValidDate(matched[2], matched[1], matched[3])) {
                               if (i == 0) {
                                   focusField = form[oDate[x][0]];
                               }
                               fields[i++] = oDate[x][1];
                               bValid =  false;
                            }
                         } else {
                            if (i == 0) {
                                focusField = form[oDate[x][0]];
                            }
                            fields[i++] = oDate[x][1];
                            bValid =  false;
                         }
                     } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                         var iDelim1 = orderDay + DAY.length;
                         var iDelim2 = orderMonth + MONTH.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                         } else if (iDelim1 == orderMonth) {
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                         } else if (iDelim2 == orderYear) {
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                         } else {
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                             if (!isValidDate(matched[1], matched[2], matched[3])) {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                 }
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                              }
                         } else {
                             if (i == 0) {
                                 focusField = form[oDate[x][0]];
                             }
                             fields[i++] = oDate[x][1];
                             bValid =  false;
                         }
                     } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                         var iDelim1 = orderYear + YEAR.length;
                         var iDelim2 = orderMonth + MONTH.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                         } else if (iDelim1 == orderMonth) {
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                         } else if (iDelim2 == orderDay) {
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                         } else {
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                             if (!isValidDate(matched[3], matched[2], matched[1])) {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                  }
                                  fields[i++] = oDate[x][1];
                                  bValid =  false;
                              }
                          } else {
                              if (i == 0) {
                                  focusField = form[oDate[x][0]];
                              }
                              fields[i++] = oDate[x][1];
                              bValid =  false;
                          }
                     } else {
                         if (i == 0) {
                             focusField = form[oDate[x][0]];
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                     }
                  }
               }
               if (fields.length > 0) {
                  focusField.focus();
                  alert(fields.join('\n'));
               }
               return bValid;
            }

	    function isValidDate(day, month, year) {
	        if (month < 1 || month > 12) {
                    return false;
                }
                if (day < 1 || day > 31) {
                    return false;
                }
                if ((month == 4 || month == 6 || month == 9 || month == 11) &&
                    (day == 31)) {
                    return false;
                }
                if (month == 2) {
                    var leap = (year % 4 == 0 &&
                               (year % 100 != 0 || year % 400 == 0));
                    if (day>29 || (day == 29 && !leap)) {
                        return false;
                    }
                }
                return true;
            }
function validateIntRange(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRange = new intRange();
                for (x in oRange) {
                    var field = form[oRange[x][0]];

                    if ((field.type == 'text' ||
                         field.type == 'textarea') &&
                        (field.value.length > 0)) {

                        var iMin = parseInt(oRange[x][2]("min"));
                        var iMax = parseInt(oRange[x][2]("max"));
                        var iValue = parseInt(field.value);
                        if (!(iValue >= iMin && iValue <= iMax)) {
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oRange[x][1];
                            isValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
                return isValid;
            }
function validateShort(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oShort = new ShortValidations();
                for (x in oShort) {
                	var field = form[oShort[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio') {

                        var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
							if (si >= 0) {
								value = field.options[si].value;
							}
						} else {
							value = field.value;
						}

                        if (value.length > 0) {
                            if (!isAllDigits(value)) {
                                bValid = false;
                                if (i == 0) {
                                    focusField = field;
                                }
                                fields[i++] = oShort[x][1];

                            } else {

	                            var iValue = parseInt(value);
	                            if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
	                                if (i == 0) {
	                                    focusField = field;
	                                }
	                                fields[i++] = oShort[x][1];
	                                bValid = false;
	                            }
	                       }
                       }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }
function validateFloat(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oFloat = new FloatValidations();
                for (x in oFloat) {
                	var field = form[oFloat[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio') {

                    	var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
							if (si >= 0) {
							    value = field.options[si].value;
							}
						} else {
							value = field.value;
						}

                        if (value.length > 0) {
                            // remove '.' before checking digits
                            var tempArray = value.split('.');
                            var joinedString= tempArray.join('');

                            if (!isAllDigits(joinedString)) {
                                bValid = false;
                                if (i == 0) {
                                    focusField = field;
                                }
                                fields[i++] = oFloat[x][1];

                            } else {
	                            var iValue = parseFloat(value);
	                            if (isNaN(iValue)) {
	                                if (i == 0) {
	                                    focusField = field;
	                                }
	                                fields[i++] = oFloat[x][1];
	                                bValid = false;
	                            }
                            }
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }
function validateEmail(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oEmail = new email();
                for (x in oEmail) {
                    if ((form[oEmail[x][0]].type == 'text' ||
                         form[oEmail[x][0]].type == 'textarea') &&
                        (form[oEmail[x][0]].value.length > 0)) {
                        if (!checkEmail(form[oEmail[x][0]].value)) {
                            if (i == 0) {
                                focusField = form[oEmail[x][0]];
                            }
                            fields[i++] = oEmail[x][1];
                            bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
                return bValid;
            }

            /**
             * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
             * http://javascript.internet.com
             */
            function checkEmail(emailStr) {
               if (emailStr.length == 0) {
                   return true;
               }
               var emailPat=/^(.+)@(.+)$/;
               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
               var validChars="\[^\\s" + specialChars + "\]";
               var quotedUser="(\"[^\"]*\")";
               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
               var atom=validChars + '+';
               var word="(" + atom + "|" + quotedUser + ")";
               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
               var matchArray=emailStr.match(emailPat);
               if (matchArray == null) {
                   return false;
               }
               var user=matchArray[1];
               var domain=matchArray[2];
               if (user.match(userPat) == null) {
                   return false;
               }
               var IPArray = domain.match(ipDomainPat);
               if (IPArray != null) {
                   for (var i = 1; i <= 4; i++) {
                      if (IPArray[i] > 255) {
                         return false;
                      }
                   }
                   return true;
               }
               var domainArray=domain.match(domainPat);
               if (domainArray == null) {
                   return false;
               }
               var atomPat=new RegExp(atom,"g");
               var domArr=domain.match(atomPat);
               var len=domArr.length;
               if ((domArr[domArr.length-1].length < 2) ||
                   (domArr[domArr.length-1].length > 4)) {
                   return false;
               }
               if (len < 2) {
                   return false;
               }
               return true;
            }
function validateMask(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oMasked = new mask();
                for (x in oMasked) {
                    var field = form[oMasked[x][0]];

                    if ((field.type == 'text' ||
			 field.type == 'password' ||
                         field.type == 'textarea') &&
                         (field.value.length > 0)) {

                        if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oMasked[x][1];
                            isValid = false;
                        }
                    }
                }

                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return isValid;
            }

            function matchPattern(value, mask) {
               return mask.exec(value);
            }
function validateMinLength(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oMinLength = new minlength();
                for (x in oMinLength) {
                    var field = form[oMinLength[x][0]];

                    if (field.type == 'text' ||
			field.type == 'password' ||
                        field.type == 'textarea') {

                        var iMin = parseInt(oMinLength[x][2]("minlength"));
                        if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oMinLength[x][1];
                            isValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return isValid;
            }

